我通常在我的设备上使用美国布局,因为我不喜欢德国布局,但必须按 Compose 来输入 ä、ö、ü、ß 等,这很烦人。在 Windows 上,我有一个 AutoHotKey 脚本,当我键入时,它会用 ö 等替换 oe它在我的键盘上“热弦”选项。有什么程序/黑客可以用来在 Linux 上获得这个吗?
这是我在 Windows 上使用 AutoHotKey 的脚本:
:*?:ue::ü
:*?:ae::ä
:*?:oe::ö
:*?:sss::ß
这是打字时的样子:
编辑:澄清一下,我希望它能够在 X11 服务器上全局运行。如果我可以在不需要重新启动的情况下打开/关闭它,那就太好了(我只在输入德语文本时需要它)。我使用的i3wm没有完整的桌面环境,但如果需要的话我可以安装一个DE程序。另外,我正在搞乱力比奥钩子atm 并可能会一起破解一些东西来做到这一点,当它起作用时我会在这里更新它:)
答案1
X 识别 Multi_key 键(或 Compose),桌面环境(例如 Gnome)可能使用键盘上的 Windows 键等键作为 Compose 键(可以在 Gnome 键盘设置中进行配置)。
默认情况下,Compose-o-e
生成 –。
X 已经通过双引号提供了 ö,即Compose-"-o
生成 ö(并Compose-"-a
生成 ä 等)。
如果您想覆盖它,您可以在~/.XCompose
例如中创建自定义设置
# This file defines custom Compose sequences for Unicode characters
# Import default rules from the system:
include "%L"
<Multi_key> <o> <e> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIARESIS
更多文档在man XCompose
.
该方法与xmodmap有关,参见。https://wiki.debian.org/XCompose
编辑:但是问题要求一种方法不是使用 Compose(即 Multi_key)。 Compose 框架处理所有击键,因此也可以根据问题的具体要求进行调整,直接重新处理 o 和 e 形成 ö:
<o> <e> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIARESIS
答案2
好吧,这不是最好的解决方案,但它有效:
安装node.js和依赖项https://github.com/kwhat/libuiohook,运行npm i @nut-tree/nut-js uiohook-napi
然后在 Node 中运行这个文件:
let binds = [
["ae", "ä"],
["oe", "ö"],
["ue", "ü"],
["sss", "ß"],
]
let sleep = ms => new Promise(r=>setTimeout(r,ms))
let {keyboard, Key, clipboard} = require("@nut-tree/nut-js");
let {uIOhook: io, UiohookKey: K} = require('uiohook-napi')
let maxlen = Math.max(...binds.map(e=>e[0].length))
binds=binds.map(e=>({len: e[0].length, keys: e[0].split('').map(f=>K[f.toUpperCase()])+'', out: e[1]}))
let last=Array(maxlen).fill(-1)
io.on("keydown", async e=>{
last.push(e.keycode)
last.shift()
let cur = last+''
let find = binds.find(e=>cur.endsWith(e.keys))
if (find) {
for (let i=0;i<find.len;i++) { await keyboard.type(Key.Backspace) }
let cb = await clipboard.paste()
await clipboard.copy(e.shiftKey ? find.out.toUpperCase() : find.out)
await sleep(10)
await keyboard.type(Key.LeftControl, Key.V)
await sleep(10)
await clipboard.copy(cb)
}
})
io.start()
如果您发现比这更好的东西,请告诉我,因为这个解决方案非常老套,哈哈
答案3
我使用美国国际键盘。所以德语特殊字符位于键盘布局的第三层和第四层
> cat .Xkbmap
-layout us
-variant altgr-intl
! if gnome-settings-daemon is installed execute :
! gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+altgr-intl')]"
! gsettings set org.gnome.desktop.input-sources xkb-options "['lv3:caps_switch', 'terminate:ctrl_alt_bksp']"
-option lv3:caps_switch
-option terminate:ctrl_alt_bksp