Ubuntu 22.04 GNOME(X11)下绑定Super+Ins快捷键调用dmenu代码片段选择功能失败的问题排查
嘿,我来帮你捋清楚这个问题的根源和解决办法:
你遇到的核心问题是命令解析时机错误加上不必要的终端包裹操作——当你在GNOME快捷键对话框里用gnome-terminal -e包裹带$(...)的命令时,系统并不会像在终端里那样自动解析命令替换,反而把$(grep...)当成普通字符串直接传给了新打开的终端,所以才会输出那串奇怪的字符。
更关键的是,你的需求是向当前聚焦的应用(比如你正在用的终端)输入选中的代码片段,xdotool type本身就是直接作用于当前窗口的,根本不需要额外打开新终端!
给你一个直接能用的解决方案:
- 打开「设置」→「键盘快捷键」,点击右下角的"+"添加新快捷键。
- 在「命令」输入框里,直接填入下面这行命令:
bash -c 'xdotool type "$(grep -v "^#" ~/snippets | dmenu -i -l 50 | cut -d" " -f1)"' - 把快捷键设置为
Super+Ins,点击「添加」就搞定了。
我给你拆解下这段命令的逻辑:
- 用
bash -c明确指定用bash来执行整个命令序列,确保里面的管道、命令替换都能正常工作(GNOME快捷键默认的执行环境可能不会完整解析这些语法)。 - 内部的
"$(...)"用双引号包裹,能防止你选中的代码片段里有空格时被错误拆分(如果你的snippets里有带空格的命令,这个双引号至关重要)。 - 去掉了多余的
gnome-terminal -e,这样xdotool会直接向你当前正在用的窗口输入内容,完全符合你的预期。
另外提一句,gnome-terminal -e其实是已经被废弃的选项了,现在官方推荐用gnome-terminal --command,但在这个场景里我们完全不需要它,所以直接跳过就好。
备注:内容来源于stack exchange,提问作者jophuh
相关产品推荐
相关产品推荐

