入力時にoeをöに変更するにはどうすればよいですか?

入力時にoeをöに変更するにはどうすればよいですか?

私はドイツ語のレイアウトが気に入らないので、主に私のデバイスでUSレイアウトを使用しますが、Composeを押してä、ö、ü、ßなどを入力する必要があるのは面倒です。 Windowsには、入力時にoeをöなどに置き換えるAutoHotKeyスクリプトがあります。私のキーボードにあります。「ホットストリング」オプション。 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

編集するA:しかし、質問は方法を尋ねます。いいえCompose(例:Multi_key)を使用してください。 Composeフレームワークはすべてのキーストロークを処理するため、問題の特定の要件に合わせて調整してoとeを直接再処理してöを形成することもできます。

<o> <e>                     : "ö"   odiaeresis # LATIN SMALL LETTER O WITH DIARESIS

答え2

いいですね。これが最善の解決策ではありませんが、うまくいきます。

node.jsと依存関係のインストールhttps://github.com/kwhat/libuiohooknpm i @nut-tree/nut-js uiohook-napiノードでこのファイルを実行してから実行します。

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

私はアメリカの国際キーボードを使用しています。したがって、ドイツ語の特殊文字は、キーボードレイアウトの3番目と4番目のレベルにあります。

> 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

関連情報