Blog

xremap を使い始めた

前回 linux desktop 環境を構築したときには、xkeysnail を linux 用のキーリマッパとして利用していたのだが、いつのまにか xremap が rust で書き直されていたので xremap に移行することにした。 yaml で設定できるのも良い。

基本方針として、Mac のような 2 つのモディファイアをを駆使したキーマッピングにしたい。 つまり、ctrl+n, ctrl+f などの emacs binding と、Cmd+w, Cmd+f などのメニュー操作の両立ができるという Mac みたいな入力スタイルを実現したい。 Mac でこれになれてしまったので、このスタイルが楽なのである。

幸い、Ultimate hacking keyboard を使っているのでかなり自由にキーマッピングを変更可能なので、Ultimate hacking keyboard 側のマッピングをいじりつつ xremap でもマッピングしていい感じに変更していく。

とはいえやっていることはシンプルで、Mac でいう cmd の位置を alt にして、a のとなりは ctrl とするというだけ。

あとは、terminal 上以外では Emacs like なキーバインディングを設定するというのと、chrome は win/linux と mac でキーバインディングに差異があるので、mac のキーバインディングで操作できるように調整する。最後に Alt+〇〇 を Ctrl+〇〇にリマップすれば完成。割とシンプルな構成で実現できた。xremap 便利。

# Mac でいう Cmd の位置に alt key をアサインしている。
# ctrl キーは小指の位置。
keymap:
  - name: Emacs
    application:
      not: wezterm
    remap:
      C-b: { with_mark: left }
      C-f: { with_mark: right }
      C-p: { with_mark: up }
      C-n: { with_mark: down }

      C-a: { with_mark: home }
      C-e: { with_mark: end }

      C-h: { with_mark: backspace }

      C-m: enter
      C-j: enter

      C-d: [delete, { set_mark: false }]

      C-k: [Shift-end, C-x, { set_mark: false }]
      C-leftbrace: esc


  # Chrome tab switching
  - name: Chrome
    application:
      only: Google-chrome
    remap:
      Shift-Alt-rightbrace: C-tab
      Shift-Alt-leftbrace: Shift-C-tab
      Alt-leftbrace: Alt-Left

  # remap alt-key to control
  - name: Cmd key mapping
    remap:
      Alt-a: C-a
      Alt-b: C-b
      Alt-c: C-c
      Alt-d: C-d
      Alt-e: C-e
      Alt-f: C-f
      Alt-g: C-g
      Alt-h: C-h
      Alt-i: C-i
      Alt-j: C-j
      Alt-k: C-k
      Alt-l: C-l
      Alt-m: C-m
      Alt-n: C-n
      Alt-o: C-o
      Alt-p: C-p
      Alt-q: C-q
      Alt-r: C-r
      Alt-s: C-s
      Alt-t: C-t
      Alt-u: C-u
      Alt-v: C-v
      Alt-w: C-w
      Alt-x: C-x
      Alt-y: C-y
      Alt-z: C-z

  # find the app name by `wmctrl -x -l` on X