我正在Debian 20.0.4
运行XFCE4
运行。我想设置左侧“Win”键(IE, LWIN
) 在我的键盘上是一个死键,它可以用来输出带有尖音符的元音,也可以用来输出带有波浪号的字母“n”。例如:
LWIN + a => á
LWIN + n => ñ
... etc. ...
根据互联网搜索和与其他人的几次交谈,我最终尝试了setxkbmap
和~/.XCompose
设置的组合,如下所示:
/usr/bin/setxkbmap -option compose:lwin
并且在~/.XCompose
……
include "%L"
<Multi_key> <a> : "á"
<Multi_key> <A> : "Á"
<Multi_key> <e> : "é"
<Multi_key> <E> : "É"
<Multi_key> <i> : "í"
<Multi_key> <I> : "Í"
<Multi_key> <o> : "ó"
<Multi_key> <O> : "Ó"
<Multi_key> <u> : "ú"
<Multi_key> <U> : "Ú"
<Multi_key> <n> : "ñ"
<Multi_key> <N> : "Ñ"
然而,似乎发生的一切是我必须执行以下 3 次按键组合才能获得我想要的结果(例如)...
LWIN + ' + a => á
LWIN + ~ + n => ñ
... etc. ...
似乎要么~/.XCompose
设置被忽略,只有xsetxkbmap
被尊重,或者也许我正在做的事情根本就是不正确的......???
我不想输入任何 3 次按键序列来获取这些特殊字符(实际上,在“n”上输入波浪符号需要 4 次按键,因为我还需要按下该Shift
键才能输入波浪符号)。
我正在寻找一种两次击键的方法来输入每一个特殊字符。
另外,我不想将撇号 ( '
) 设置为死键,因为这样我就需要指定两次按键组合才能输入正常的撇号,而我不想这样做。这就是为什么我希望将一个我通常不使用的键(例如LWIN
)设置为死键,以便用于两次按键组合。
有什么方法可以实现这个目的吗?
提前感谢您的任何想法和建议。
更新:我尝试用这个来/usr/bin/xmodmap -e "keysym Super_L = Multi_key"
代替setxkbmap
命令,但效果并没有好转。
我也尝试用CapsLock
而不是 键执行相同的操作LWIN
,但这些CapsLock
版本也不起作用。
进一步更新:对于那些不知道我所说的“死密钥”是什么意思的人,下面解释了该术语的含义:https://en.wikipedia.org/wiki/Dead_key。
答案1
我明白了!首先,必须阅读并理解全部以下超级用户文章: 使用 setxkbmap 或 xmodmap 为某些键设置 Hyper 和 Super 修饰键
我希望能够输入西班牙语字符,因此我希望能够在“a”、“e”、“i”、“o”和“u”上添加重音符号,在“n”上添加波浪符号,让“u”有变音符号(对于像 这样的词vergüenza
),并且能够使用颠倒的“!”和“?”。
除此之外Left-Win
,我还决定将Right-Win
、CapsLock
和Menu
键全部设置为Mode_switch
键(IE,所有这四个键的工作方式应与Shift
键或Ctrl
键相同;在键入另一个字符时按住它们,然后该字符会被修改)。
以下是我实现这一目标的方法...
事实证明我setxkbmap
根本不需要~/.XCompose
。
在我的XFCE4
系统上,该文件在启动~/.Xmodmap
时会自动读取和处理,因此该文章中提到的所有内容都需要在我的系统上完成。X
~/.xmodmap
~/.Xmodmap
按照该文章中的逻辑,我创建了一个默认~/.Xmodmap
方式/usr/bin/xmodmap -pke >~/.Xmodmap
,然后将该文件备份到~/.Xmodmap.backup
。
然后我用来/usr/bin/xev
获取我想要处理的所有字符的键代码,并在~/.Xmodmap
...中更改了以下键定义。
keycode 66 = Mode_switch
keycode 133 = Mode_switch
keycode 134 = Mode_switch
keycode 135 = Mode_switch
keycode 38 = a A aacute Aacute aacute Aacute aacute Aacute aacute Aacute
keycode 26 = e E eacute Eacute eacute Eacute eacute Eacute eacute Eacute
keycode 31 = i I iacute Iacute iacute Iacute iacute Iacute iacute Iacute
keycode 32 = o O oacute Oacute oacute Oacute oacute Oacute oacute Oacute
keycode 30 = u U uacute Uacute uacute Uacute uacute Uacute uacute Uacute
keycode 47 = semicolon colon udiaeresis Udiaeresis udiaeresis Udiaeresis udiaeresis Udiaeresis udiaeresis Udiaeresis
keycode 57 = n N ntilde Ntilde ntilde Ntilde ntilde Ntilde ntilde Ntilde
keycode 10 = 1 exclam exclamdown exclamdown exclamdown exclamdown exclamdown exclamdown exclamdown exclamdown
keycode 61 = slash question questiondown questiondown questiondown questiondown questiondown questiondown questiondown questiondown
(请注意,我决定使用Mode_switch
+;
来表示u-umlaut
,包括小写和大写)。
我保留所有其他关键定义及其~/.Xmodmap
默认值。
然后,运行后/usr/bin/xmodmap ~/.Xmodmap
,我可以在输入指定的字符之前按住上述任意Mode_switch
键,并且字符修改可以正常工作。
重启后,这些关键的翻译机制仍然有效。