web-dev-qa-db-ja.com

dvorakとqwertyを切り替えます

最近、dvorakキーボードレイアウトを学び始めましたが、それでもqwertyを使用する必要がある場合があります。

2つのキーボードレイアウトを切り替えるスクリプトを探しています。

また、このscriptを、どこでも機能するホットキーを使用して呼び出したいと思います(DE およびコンソールで)。 この投稿

3
Stefan

これは、Xと、気になるあらゆる種類のテキストコンソールに対して個別に行う必要があります。

任意のキーマップを切り替えたい場合は、通常はコンソールがそれを行わないため、状態を維持する必要があります。これが、GnomeやKDEなどのレイアウトスイッチャーが行うことです。ただし、いくつかのよく知られたキーマップのみを切り替えたい場合は、コンソールにクエリを実行し(この機能がコンソールタイプで使用可能であると想定)、キーによって送信された現在のコードを取得し、それに基づいて何に切り替えるかを決定できます。ここにいくつかの可能性があります:

  • キーコード24(数はコンソールタイプによって異なります)が現在qを送信している場合、現在のキーマップはqwertyのように見えるため、dvorakに切り替えます。それ以外の場合は、qwertyに切り替えます。
  • 場合 Q そして W 隣接するキーコードがあります。おそらくqwertyレイアウトです。
  • キーマップに偽のキーを追加し、そのバインディングを調べます。

これは、XとLinuxの実装です。 W=Q+1テスト。注意してください、私はそれをテストしていません。スクリプトは通常、テキストモードのリモートログインでは使用できないことに注意してください。

if [ -n "$DISPLAY" ]; then
  if xmodmap -pke | awk '$3=="=" && $4=="q" {q=$2}
                         $3=="=" && $4=="w" {w=$2}
                         END {exit w-q==1}'; then
    setxkbmap us
  else
    setxkbmap dvorak
  fi
Elif [ "$TERM" = "linux" ]; then
  if dumpkeys | awk '$3=="=" && $4=="q" {q=$2}
                     $3=="=" && $4=="w" {w=$2}
                     END {exit w-q==1}'; then
    loadkeys us
  else
    loadkeys dvorak
  fi
fi

X Windowで、これをキーにバインドするのに最適な場所は、デスクトップ環境またはウィンドウマネージャーのキーバインド機能を使用することです。キーにX固有の部分のみを実行させることができます。もちろん、DE/WMにレイアウト切り替え機能がある場合は、それを使用することをお勧めします。

Linuxコンソールでは、キーバインディングの可能性は非常に限られています。キーをKeyboardSignalシンボルにバインドできます。 SysVinitを使用している場合は、kb::kbrequest:/path/to/script in /etc/inittabシグナルが押されたときにスクリプトを(rootとして!)実行します。 Upstartでこのキーのアクションを構成する方法がわかりません。

SetxkbmapはXの外部では機能しませんか?

setxkbmap \
  -model pc105 \
  -layout 'us(dvorak-intl),us(alt-intl)' \
  -option \
  -option grp:alt_shift_toggle \
  -option compose:rwin

Xと端末で使用しています。テキスト「-optiongrp:alt_shift_toggle」は、Alt + Shiftを押したときにレイアウトを切り替えるようにsetxkbmapに指示します。オンザフライでレイアウトを切り替えるためのその他のトグル/スイッチオプションについては、/ usr/share/X11/xkb/rules/base.lst(Debian Squeeze ... ymmv)を参照してください。

3
iokevins

スクリプトを作成します。

#!/bin/bash
if [[ -e ~/.my.kb.not.dvorak ]] ; then
    setxkbmap dvorak
    touch ~/.my.kb.is.dvorak 
    rm ~/.my.kb.not.dvorak
fi 
if [[ -e ~/.my.kb.is.dvorak ]] ; then
    setxkbmap <YOURLAYOUT>
    touch ~/.my.kb.not.dvorak 
    rm ~/.my.kb.is.dvorak
fi 

<YOURLAYOUT>を関連データに置き換えます。次に、このスクリプトを実行するためにxbindkeysホットキーコンボを設定します。

1
Zsolt Botykai

キーボードレイアウトは入力デバイスのプロパティであるため、xinputを介して設定できます。 xbindkeysを使用して、任意のXホットキーを定義します。

0
tante