입력할 때 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

편집하다: 하지만 질문은 방법을 묻습니다.아니요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노드에서 이 파일을 실행한 다음 실행합니다.

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

관련 정보