ドボラックとクォーティの切り替え

ドボラックとクォーティの切り替え

最近勉強を始めました。ドヴォルザークキーボードレイアウトがありますが、まだ使用する必要があります。フルキーボード時々。

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

その上、私はこう呼びたい。スクリプトどこでも動作するショートカットが提供されます(私のDEで)。そして私のコンソールから。 ) は電源ボタンを押すのと同じです。この投稿

答え1

Xと関心のある各タイプのテキストコンソールに対して別々にこれを行う必要があります。

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

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

Wこれは= Q+1でテストされたXおよびLinuxの実装です。まだテストしたことはありませんので参考にしてください。このスクリプトは通常、テキストモードのリモートログインでは使用できません。

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を使用している場合は、信号を押したときにスクリプトをrootとして実行してくださいkb::kbrequest:/path/to/script/etc/inittabUpstartを使用してこのキーの動作を設定する方法がわかりません。

答え2

setxkbmapはXの外で動作しませんか?

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

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

答え3

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

#!/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

答え4

コンソールでは、loadkeys dvorak~/.bashrc でこれを設定して、スクリプトを実行した後も新しく生成された端末を含めることができます。

関連情報