setxkbmap 和 ~/.XCompose - 无法设置有效的死键......?

setxkbmap 和 ~/.XCompose - 无法设置有效的死键......?

我正在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-WinCapsLockMenu键全部设置为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键,并且字符修改可以正常工作。

重启后,这些关键的翻译机制仍然有效。

相关内容