Help us understand the problem. What is going on with this article?

UbuntuでSandSをxcape+xmodmapで実現する

More than 5 years have passed since last update.

概要

UbuntuでSandS(SpaceキーをShiftキーとして使う技)を実現します.xcapeというツールとxmodmapの合わせ技で利用できることがわかりました.alols/xcapeからxcapeをインストールし,次のようなコマンドを打ちます.

  $ xmodmap -e 'keycode 255=space'; xmodmap -e 'keycode 65=Shift_L'; ~/opt/xcape/xcape -e '#65=space'

以下,詳細です.

はじめに

SandSを実現する方法としてSandS を linux に導入できる At Home Modifier が大変便利である件 - どせいけいさんき。を見つけました.しかしながら,At home modifier - Home - Open wiki - Gitoriousを見ると,At Home Modifierの作者さんはxcape(alols/xcape)に移行することを薦めておられます.ただ,xcape単体ではSandSを実現することはできなさそうでしたので,その方法を調べてみることにしました.

xcapeとは?

READMEによるとxcapeとは

xcape allows you to use a modifier key as another key when pressed and released on its own. 

だそうです.つまり,ShiftキーやControlキーを他のキーに変換するツールです.起動すると常駐し,デフォルトではControlキーをただ押して離すとEscapeキーに変換してくれます.VimでEscapeキーを多用するような場合に便利そうですね.

SandS実現の手がかり

xmodmapとの組み合わせ

ところが,今実現したいことはSandSですから,Spaceキーを押している間に他のキーを押すと「Shift+他のキー」にしてくれるという機能です.これは,xcapeの機能ではできなさそうです.では,どうしたらよいのでしょう?そのヒントはxcapeのREADMEの下の方にありました.

If your s key has the code 42 and your l key 43 and you have set both to AltGr (a.k.a. ISO_Level3_Shift) with xmodmap, then this will generate the ordinary letters when pressed and released on their own.

で,この文中の「this」というのは

xcape -e '#42=s;#43=l'

というコマンドです.つまり,まず,xmodmapで予めキーボードの「S」と「L」にShiftキーを割り当て,その上で,SとLが単体で押された場合はもともとの文字をxcapeに出力させればよい,ということです.

xmodmapと組み合わせる場合の注意点

さて,READMEにはxmodmapとxcapeを組み合わせる場合の注意点が書いてあります.

The key you wish to send must have a defined keycode. So for example, with the default mapping Control_L=Escape, you still need an escape key defined in your xmodmap mapping. (I get around this by using 255, which my keyboard cannot send).

つまり,もともとのキーコードを示すシンボルは,keycode=255として保存しておいてね,ということだそうです.

SandSの実現

xcapeのインストール

原理はわかりましたので,xmodmap+xcapeによりSandSを実現しましょう. まずは,インストールです.xcapeコマンドは~/opt/xcapeにおくことにしました.

  $ mkdir -p ~/opt/xcape
  $ cd ~/opt/xcape
  $ git clone https://github.com/alols/xcape.git .
  $ make

key codeを調べる

xcapeをデバッグモードで起動します.

  $ ~/opt/xcape/xcape -d

そして,Spaceキーを押すとkey codeが出力されますので確認します.私の場合,65でした.

設定する

以下のone linerを打ちます.

  $ xmodmap -e 'keycode 255=space'; xmodmap -e 'keycode 65=Shift_L'; ~/opt/xcape/xcape -e '#65=space'

上のコマンドはワンライナーとして一気呵成に入力しないと,2番目のxmodmapコマンド実行後,Spaceキーが入力できなくなるので気をつけましょう.shellスクリプトにしておくのが良さそうです.

おわりに

xcapeのREADMEの読解に少々苦労しましたが,わかってみたらわりと簡単にSandSができました.ただ,今までxmodmapを使ったことのない方は少々戸惑われるかもしれません.また,READMEにある通り,「S」や「L」キーをシフトにするのも面白そうです(私はDvorakユーザですので,「O」と「N」ですかね).

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした