惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
U
Unit 42
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Martin Fowler
Martin Fowler
L
LangChain Blog
博客园_首页
博客园 - 【当耐特】
Vercel News
Vercel News
I
InfoQ
GbyAI
GbyAI
爱范儿
爱范儿
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
美团技术团队
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Help Net Security
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
小众软件
小众软件
J
Java Code Geeks
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
Recorded Future
Recorded Future
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
快速隐藏和呼出终端
2023-12-05 · via mephisto.cc

下拉式终端(drop-down terminal emulator)有好几个,常见的有 Yakuake、Guake、Tilda 等,有一个很明显的好处,在用时可以热键(多数默认是按 F12)呼出窗口,不需要时可将窗口隐藏。

如果是初次接触,估计内心还会有点震惊,仿佛终端界的一股清流。其实这里的核心就是招之能来,来之能战,战完归营,我党就是这么指挥军队的,平时喝酒划水吃饭问题不大,大场面来的时候,要光速铁锤出击。

查找网上的资料,这种快速呼出界面的灵感来自 QUAKE 游戏,打游戏时按热键弹出配置界面,所以很多时候又名为 quake-style、quake-mode、quake-like,quake 没玩过,cs 等游戏应该玩过,我想差不多就是那个意思。

题外话说了很多,如今使用 alacrity 终端,想要在 labwc 窗口环境下,或者说在 Wayland 合成器(compositor),该如何实现类似功能呢?

下面就是我的折腾之路:

1. 快捷隐藏

大部门窗口管理器都是可以隐藏/最小化窗口的,比如 Gnome 的 Super+H,因为以前使用 Gnome 环境偏多,我在 labwc 窗口管理器下也是同样的设置(按键盘上面的 Win 键 + h)。

1<keybind key="W-h">
2    <action name="Iconify" />
3</keybind>

labwc -r 重新读取配置后,便可以随时隐藏活动窗口,自然终端软件也不例外。

2. 快速呼出

快速呼出,功效上相当于下拉出来,反正就是弹出界面给人用。可能下拉的方式更加亮眼,逼格略高一丢丢。作为一个实用主义者,并不是很在乎。

快速呼出对窗口管理器来说,就是重新前台聚焦。在 wayland 环境下,找到了一个命令行工具 wlrctl,它实现了 wlr-foreign-toplevel-management 协议,还挺有意思是的。

  • 能调用软键盘打字
1➜  ~ wlrctl keyboard type 'Hello, world!'
2➜  ~ Hello, world!
  • 控制光标移动

例如连续控制光标向右 50、向上 70 像素移动

1➜  ~ wlrctl pointer move 50 -70
2➜  ~ wlrctl pointer move 50 -70
3➜  ~ wlrctl pointer move 50 -70
4➜  ~
  • 聚焦软件

这个才是我们本次重点关心的,且看 labwc 配置:

1<keybind key="W-Return">
2<action>
3    <name>Execute</name>
4    <command>sh -c 'wlrctl window focus Alacritty || alacritty'</command>
5</action>
6</keybind>

关键点是这个 wlrctl window focus Alacritty || alacritty,意思是 Alcaritty 在运行的话,直接 focus 切换到前台(聚焦),如果没有在运行,直接启动。

这样不论 Alacritty 是否在运行,都可以通过 Win + Return 快捷键呼出终端。

有读者可能会有疑问,为什么 Alacritty 一会首字母是大写,一会又是小写。

这个要看 wlrctl 的 manual:

focus [matches...]

Instruct the compositor to focus matching windows.

A match is a colon separated attribute/value pair. e.g. To match a firefox window, a suitable match value is app_id:firefox. You may give any number of match specifiers, and a window must match all of them to be considered. If the app_id or title keys are specified more than once, a window may match any of the given values. Otherwise later key value pairs override previous ones. A match without a key is assumed to be an app_id, so just firefox works in the example above.

Currently supported attributes are: app_id, title, and state.

因为终端在运行的时候 app_id 被识别为 Alacritty

 1➜  ~ ps -ef |grep -i alacritty
 2mephisto   35359       1  0 11:32 ?        00:00:00 sh -c wlrctl window focus Alacritty || alacritty
 3mephisto   35361   35359  0 11:32 ?        00:00:50 alacritty
 4mephisto   58501   23717  0 15:20 pts/7    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox -i alacritty
 5➜  ~ wlrctl window focus Alacritty
 6➜  ~ echo $?
 70
 8➜  ~ wlrctl window focus alacritty
 9➜  ~ echo $?
101
11➜  ~

首字母大写的时候才能匹配到,返回 0,如果真实终端程序未运行,|| 前面返回假,直接运行 alacritty 启动终端。

这样一番操作后,即可以快速隐藏/呼出终端(分别对应win + h/win + return),如下面动图所示:

quake-like alacritty

录屏制作 gif 的工具不给力,图片有点模糊,原谅下,但能看清在不断切换。

可能有读者习惯于用一个按键 F12 来隐藏/呼出,那得自己想办法用一个中间变量把状态保存起来,每次按键触发一次反转,布尔值切换。

个人认为没必要,win + h可隐藏任意窗口,约定俗成,差不多肌肉记忆了。

win + return 呼出是窗口管理器 labwc 的默认行为。

要用时呼出,不用时隐藏,收缩到状态栏,更改下匹配软件,理论上可以自由切换任意软件,终端属于高频软件,这样配置我很满意 😄。