我正在尝试设置快捷键来输入常见的变音符号。我可以让 xdotool 在终端或 icewm 命令栏(甚至 gmrun)中输入变音符号:
xdotool key Aacute
但是以下键映射(在 icewm 键文件中)不起作用:
key "Ctrl+Alt+a" xdotool key Aacute
key "Ctrl+Alt+a" xdotool --delay 1000 key Aacute
相反,当我输入快捷键时(如果在终端或文本编辑器中),我只看到光标闪烁一次,但没有其他事情发生。以下确实显示了一个弹出窗口,因此键代码本身是正确的:
key "Ctrl+Alt+a" zenity --info --text="shortcut works"
是否有人有办法注册键绑定,以便在活动应用程序中实际输入变音符号?
答案1
使用setxkbmap
或xmodmap
似乎是正确的做法,但 FWIW 和 FTR 我发现在遇到这个问题后,以下方法对我有用。我希望这对其他想要使用 的人有所帮助xdotool
。
由于我的键盘上没有这些键,因此我让 xdotool 模拟这些键。请注意使用&
在后台运行命令,以便 IceWM 可以从处理热键中返回并避免干扰 xdotool。
200 毫秒是我能使用的最短延迟,并且仍能使其可靠地工作。我不确定是否--clearmodifiers
适合您的用例。
key "Ctrl+Up" xdotool sleep 0.2 key --clearmodifiers Page_Up &
key "Ctrl+Down" xdotool sleep 0.2 key --clearmodifiers Page_Down &
key "Ctrl+Shift+Up" xdotool sleep 0.2 key --clearmodifiers Home &
key "Ctrl+Shift+Down" xdotool sleep 0.2 key --clearmodifiers End &
还请注意,按住这些键不会导致预期的重复行为(因为 IceWM 热键不是最佳选择)但这对我的目的来说没问题。
答案2
我无法使原来的解决方案发挥作用,因此我改变了键盘映射。默认的美国键盘映射没有我需要的变音符号,但国际版有。尝试一下:
setxkbmap -layout 'us(intl)'
但是国际版默认对某些键使用 Compose。例如,' 字符不再立即响应。因此,我选择基于美国键盘创建自己的键盘映射。
我创建了一个新文件:/usr/share/X11/xkb/symbols/erik
partial default alphanumeric_keys
xkb_symbols "basic" {
include "us"
include "eurosign(5)"
key <AC01> { [ a, A, aacute, Aacute ] };
key <AD03> { [ e, E, eacute, Eacute ] };
key <AD08> { [ i, I, iacute, Iacute ] };
key <AD09> { [ o, O, oacute, Oacute ] };
key <AD07> { [ u, U, uacute, Uacute ] };
key <RALT> { type[Group1]="TWO_LEVEL", [ ISO_Level3_Shift, Multi_key ] };
modifier_map Mod5 { <RALT> };
};
让 xkb 接受更改:
sudo dpkg-reconfigure xkb-data
尝试键盘映射:
setxkbmap -layout erik
现在 alt_gr + [aeiou] 应该输入 [áéíóú]。
我在启动时使用 icewm 启动文件调用上述命令使更改永久生效。我认为应该可以使用发行版键盘切换器选择布局,但我尚未测试过。您可以随意将文件命名为其他名称,除非您想让我以我的名字命名您的键盘映射。请务必避免使用 2 个字母的代码,因为所有默认国家/地区映射都如此命名。
注意:
您可以查看符号目录中的其他映射文件作为示例。
可以在此处找到一些用于理解文件格式的资源:
https://www.x.org/wiki/XKB/