Keys tips : fluxbox キーボード操作のコツ


                                                  Last update 2007/10/10
---------------------------------------------------------------------------------------
目次

    fluxbox キーボード操作の特徴
    これ は何をしようとしている?
    キーコマンド詳解
        ウィンドウマネージャ コマンド
        カレントウィンドウ用コ マンド
            リ サイズ関連
            移動関連
            状態の変更
            タブグループ関連
        ワー クスペース/デスクトップコマ ンド
            移動関連
            フォーカス関連
            配置関連
            メニュー関連
        特殊 コマンド

    キーマップの変更
        キーマップの調査
        キーコード/キー シンボルの調査
        ユーザー設定ファイル (~/.Xmodmap)
        設定ファ イルの反映
        キーマップ 変更の確認

--------------------------------------------------------------------------------------

fluxbox キーボード操作の特徴

ウィンドウシステムの操作といえば、マウス操作が一般的です が、UNIX 系の各
種ウインドウマネージャでは、それぞれにキーボード操作にも 工夫がなされてい
て、併用すればより快適な操作が行えるようになっています。
fluxbox は、とりわけこの方面に力が注がれているようです。

fluxbox キーボード操作の特徴としては、
    emacs 風キーチェィンをサポート。
        ^X ^S 等の 2ストローク以上のキーバインドが使用可能です。
    複数の "キーバインド定義空間" をサポート。
        普段使うキーバインド群とは別のキーバインド(群)が定義可能です。
        普段使うキーバインドの一時的な無効化にも応用可能です。
    各種内部、外部コマンドにキーバインドが可能。
        メニュー表示、再起動、終了等の fluxbox 内部コマンドを、キーボー
        ドのみで実行できま
す。
        又、アプリケーション等の外部コマンドも、アイコンやメニューをクリ
        ックせずに呼び出すことが出来ます。
    メニュー内インクリメンタルサーチをサポート。
        メニュー表示中にキー入力を行うと、入力に応じた項目へポインタを移
        せ、Enter で実行できます。特に英語メニューの時有効です。
    マウスのボタンクリックとホイール回転もキー同等にバインド可能。
        通常マウスで操作するアクションを再定義する事も可能です。
    マクロコマンドにより、一つのキーバインドで複数のコマンドを実行可
    能。
        二つ以上の fluxbox 内部コマンドやシェルコマンドを、ワンストローク
        で実行可能です。
等が上げられます。

デスクトップアイコンを持たないウィンドウマネージャとして fluxbox を単独で
使うような場合、キーボード操作で外部コマンド(アプリケーション)を呼び出せ
るのは特に便利です。
勿論それらはマウスを使いメニューからも呼び出せますが、よく使うアプリケー
ションをショートカットにしておけば、より速やかな操作が可能です。
例えば、
    control+shift+m → メーラー : sylpheed 等
    control+shift+b → ブラウザ : firefox 等
    control+shift+t → ターミナルエミュレータ : xterm 等
と、同一修飾キーとアプリケーションのカテゴリや名称の頭文字の組み合わせな
どに設定して置くのがお薦めです。
おぼえやすく、慣れれば(おそらく二、三日で)勝手に指が動くようになるでしょ
う。

   
fluxbox では、キーボードオペレーション(ショートカット、アクセラレーション
キー)の設定は ~/.fluxbox/keys ファイルで行います。設定ファイルは変更可能
ですが、ここでは触れません。


目次へ


-------------------------------------------------------------------------------------

これは何をしようとしている?

fluxbox ならではの、ちょっと面白い設定例です。
実用的なものも、そうでないものも有ります。
そうでないものも、応用次第で実用的な設定のヒントになる、かもしれません。

Mod1 i :MacroCmd {SetResourceValue session.screen0.toolbar.visible true} {Reconfigure}
Mod1 o :MacroCmd {SetResourceValue session.screen0.toolbar.visible false} {Reconfigure}
! Alt+i、Alt+o で、ツールバー "表示"、"非表示" を切替えようとしています。

Control Mouse1 Control Mouse1 :fullscreen
! 一回目の Ctrl+ダブルクリックで、ウィンドウをフルスクリーン表示、
! 二回目の Ctrl+ダブルクリックで、ウィンドウを通常表示、しようとしています。

Control Mouse4 :NextTab
Control Mouse5 :PrevTab
! Ctrl+マウスホイールの回転で、(画面のどこででも)タブグループを巡回できるよ
! うにしようとしています。

Mod1 3 :TakeToWorkspace 3
! Alt+3 で、カレントウィンドウをワークスペース 3 に移動し、同時にワーク
! ス ペースも 3 に変更しようとしています。

Mod1 t :ToggleCmd {Exec xterm -e top} {MaximizeVertical} {Close}
! 一回目の Alt+t で、xterm を開き top コマンドを実行、
! 二回目の Alt+t で、その xterm のウインドウを垂直方向に最大化、
! 三回目の Alt+t で、xterm ウィンドウを終了、させようとしています。

Control Mod1 g :KeyMode KMode2
KMode2: Control Mod1 g :KeyMode default
! 一回目の Ctrl+Alt+G で、fluxbox の標準キーバインドを全て無効に、
! 二回目の Ctrl+Alt+G で、fluxbox の標準キーバインドを復帰、させよう
! と しています。

OnDesktop Control Mouse3 :CustomMenu ~/.fluxbox/menu_c
! デスクトップでの Ctrl+右クリックで、(標準メニューでは無く)別途用意した
! menu_c という英 語メニューを表示させようとしています。


目次へ

--------------------------------------------------------------------------------------

キーコマンド詳解

fluxbox のキーボードオペレーション(ショートカットキー)は ~/.fluxbox/keys
ファイル内で定義します。

keys ファイル書式:    [] 内はコマンドにより不要な場合有り。

    [namespace:] [mod] key [[mod] key] :command [option [option [...]]]

       namespace    : キーバインド定義空間の名前。※デフォルトでは省略
       mod          : 修飾キー。Control、Mod1(=Alt)、Shift 等。
       key          : ファンクションキーを含む一般のキー。
                      ('A'、'B'、'1'、'F10、'End' 等)
       : (コロン)   : キーバインドとコマンドの区切り文字。
       command      : キーコマンド。
       option       : コマンドの引数(オプション/パラメータ)

注釈行は ! 又は # で始めます。


実際の定義例: (赤字)は書式との対応。実際には書きません。

    Control(mod) A(key)  :Restart(command) fluxbox(option)   

上の例では、Control と 'A' を同時に押すことで、fluxbox を再起動するよう
定義しています。

   
装飾キーについて
一般的に Shift、Control、Mod1(Alt)は通常のキー設定で使えるようです。
その他に、Mod2、Mod3、Mod4 等も ~/.Xmodmap で設定すれば、使 用可能に
なります。以下の三行を ~/.Xmodmap に書き加える事で、
Mod4 に [無
変換]キー
割り当てる事ができます。

keycode 131 = Muhenkan
clear mod4
add mod4 = Muhenkan

※キーコード(上の場合 131)とキー名(Muhenkan)は xev コマンド等で予め
確認しておいてください。



以下のキーコマンドの説明では、上の書式の command option の部分のみを例
示します。
※実際に keys ファイルに書き込む場合は、割り当てるキーバインドをコマンド
の前に書き加えてください。

    説明の書式、色分けは以下の通りです。コメントは使用例の説明です(必要と
    思われる場合のみ、記述します)。

        Command option (command の別名)
            説明
                記述例
                    コメント


目次へ

--------------------------------------------------------------------------------------

ウィンドウマネージャコマンド

    Restart [argument]
        ウインドウマネージャを再起動。
        argument はウインドウマネージャのコマンド名。
        引数無しの場合は、fluxbox を再起動。
            Restart gnome-session
            Restart wmaker

    Quit
        fluxbox セッションを終了。
            Quit

    Reconfigure(Reconfig)
        設定ファイルを再読み込み。
            Reconfigure

    SetStyle argument
        argument に指定したスタイルに変更。
        argument は、full path で指定。
            SetStyle /usr/share/fluxbox/styles/VineStyleIII-3
            SetStyle /home/hoge/.fluxbox/styles/my_style

    ExecCommand (ExecuteExec command)
        引数にはコマンド(含、スクリプト)名を指定。
            ExecCommand sylpheed

    CommandDialog
        fluxbox 内部コマンド実行用ダイアログを表示。
        このダイアログにより、このページの各コマンドを実行可能。
        例えば、rootmenu と入力すれば、ルートメニューが表示される。
            CommandDialog

目次へ

--------------------------------------------------------------------------------------

カレントウィンドウ用コマンド

   リ サイズ関連

   
Minimize (MinimizeWindowIconify)
        最小化
            Minimize

    Maximize (MaximizeWindow)
        最大化 (実行毎にトグル(最大化/元 サイズを交互に実行))
            Maximizs

    Fullscreen
        クライアント領域(ウィンド ウ枠の内側)をフルスクリーン表示。(実行
        毎にトグル)
            Fullscreen

   
MaximizeVertical
        垂直方向最大化 (実行毎にトグル)
            MaximizeVertical

    MaximizeHorizontal
        水平方向最大化 (実行毎にトグル)
            MaximizeHorizontal

    ResizeTo width height
        幅(width) x 高さ(height) にリサイズ。
            ResizeTo 800 600

    Resize delta-width delta-height
         幅(delta-width)、高さ(delta-height) 分リサイズ。負数可
             Resize 20 -10

    ResizeHorizontal delta-width
        水平方向に delta-width 分リサイズ。
            ResizeHorizontal 10 10

    ResizeVertical delta-height
        垂直方向に delta-height 分リサイズ。
            ResizeVertical 10 10

目次へ

--------------------------------------------------------------------------------------

    移動関連

    MoveTo x y [corner]
        corner より、x y ピクセル分の位置に移動。
        corner には、
           UpperLeft, Upper, UpperRight
           Left,                  Right
           LowerLeft, Lower, LowerRight
        を指定(無指定の場合は UpperLeft)
        '*' は現在の値を適用
            MoveTo 10 * Right
                    縦位置は現在値のままで、画面右端より 10 ピクセルの位置に
                    移動

    Move delta-x delta-y
        水平方向に delta-x、垂直方向に delta-y 分移動。
            Move -2 -1

    MoveRight delta-x
        右へ delta-x 分移動
            MoveRight 10

    MoveLeft delta-x
        左へ delta-x 分移動
            MoveLeft -10

    MoveUp delta-y
        上へ delta-y 分移動
            MoveUp 5

    MoveDown delta-y
        下へ delta-y 分移動
            MoveDown -5

    Raise
        (フォーカスの有るウィンドウを)最前面へ
            Raise

    Lower
        (フォーカスの有るウィンドウを)最背面へ
            Lower

目次へ

--------------------------------------------------------------------------------------

    状態の変更

    Close
        ウィンドウを閉じる
            Close

    Shade (ShadeWindow)
        ウィンドウのシェード化(タイトルバーに格納)
            Shade

    Stick (StickWindow)
        ウィンドウの固着化(全てのワークスペースで表示)
            Stick

    ToggleDecor
        ウィンドウ装飾を取り除く(クライアント領域のみを表示)。実行毎に
        トグル。
            ToggleDecor

    SetAlpha [[+|-]value [[+|-]value]]
        アクティブなウィンドウの透明度(アルファ値)を設定(絶対値で、0 -
        255 の範囲)。
        ・引数(value)無しの時 - フォーカスの有るウィンドウのアルファ値を
          デフォルト(init での定義値)に戻す。
        ・引数が一つの時 - フォーカス/非フォーカスウィンドウのアルファ値
          に対し、同じ値を適用する。
        ・引数が二つの時 - 一つ目の値はフォーカスの有るウインドウの、二
          つ目の値は非フォーカスウィンドウのアルファ値の処理に当てられ
          る。
        ※値の頭に +/- を付けた場合は増減値、付けない場合は絶対値の指定。
            SetAlpha 127 +5
                    フォーカスの有るウインドウのアルファ値を "127" に、
                    非フォー
カスウィンドウのアルファ値を "現在値 + 5" に
                    設定する。


    SendToWorkspace number
        ワークスペース number(ワークスペース番号)にウィンドウを移動
            SendToWorkspace 4

    TakeToWorkspace number
        ウィンドウごと、ワークスペース number(ワークスペース番号)に移動
            TakeToWorkspace 2

    KillWindow
        ウィンドウを強制終了する。
            KillWindow

    CloseAllWindows
        全てのウィンドウを閉じる。
            CloseAllWindows

目次へ

--------------------------------------------------------------------------------------

    タブグループ関連

    Tab [-]number
        グループ内の number 番目のタブに移動。
        number が負数の場合は、うしろから number 番目のタブに移動。
            Tab -2

    NextTab
        グループ内の次のタブ(のクライアント) を前面に(巡回)
            NextTab

    PrevTab
        グループ内の前のタブを前面に(巡回)
            PrevTab

    MoveTabLeft
        グループ内の左へ現在のタブを移動(左端の時は変化無し)
            MoveTabLeft

    MoveTabRight
        グループ内の右へ現在のタブを移動(右端の時は変化無し)
            MoveTabRight

    DetachClient
        グループ内の現在のタブをグループから取り外す
            DetachClient

目次へ

--------------------------------------------------------------------------------------


ワー クスペース/デスクトップコマ ンド
--------------------------------------------------------------------------------------

    移動関連

    NextWorkspace
        次のワークスペースへ
            NextWorkspace

    PrevWorkspace
        前のワークスペースへ
            PrevWorkspace

    RightWorkspace by-number
        by-number 個右(先)のワークスペースへ
            RightWorkspace by-number

    LeftWorkspace by-number
        by-number 個左(前)のワークスペースへ
            LeftWorkspace by-number

    Workspace number
        ワークスペース number へ
            Workspace number

目次へ

--------------------------------------------------------------------------------------

    フォーカス関連

   
NextWindow by-number
        次のウィンドウへ
            NextWindow 1    ※オプションについては次項参照

    PrevWindow by-number
        前のウィンドウへ
            PrevWindow

        Prev/NextWindow のパラメーター(by_number)に以下の整数値を設定す
        る事により、スキップする(巡回から外す)ウィンドウ/タブを指定出来
        ます。

        0 又は無指定 = スキップ無し
        1 = アクティブでないタブをスキップ
        2 = 固着化(全てのワークスペースで表示)中のウィンドウをスキップ
        3 =     1 + 2 をスキップ
        4 = シェード化(タイトルバーに格納)されたウィンドウをスキップ
        5 =     1 + 4 をスキップ
        6 =     2 + 4 をスキップ
        7 =     1 + 2 + 4 をスキップ


    NextGroup by-number
        by-number 個右(先)のグループへ
            NextGroup 2

    PrevGroup by-number
        by-number 個右(先)のグループへ
            PrevGroup 1

目次へ

--------------------------------------------------------------------------------------

    配置関連

    ArrangeWindows
        表示中のウィンドウを全画面にタイル状に並べる。
            ArrangeWindows

    ShowDesktop
        全てのウィンドウを最小化。
            ShowDesktop

目次へ

--------------------------------------------------------------------------------------

    メニュー関連

    RootMenu
        ルートメニューを表示
            RootMenu

    WorkspaceMenu
        ワークスペースメニューを表示
            WorkspaceMenu

    WindowMenu
        ウィンドウメニューを表示
            WindowMenu

    HideMenus
        表示されているメニューを隠す。
            HideMenus

    CustomMenu /path/to/menufile
        カスタムメニュー "/path/to/menufile" を(一時的に)メニューとして
        表示。
            CustomMenu ~/.fluxbox/menu_2

    WorkspaceNameDialog - edit workspaces name dialog (old SetWorkspaceName)
        ※作動未確認
            WorkspaceNameDialog

    SetWorkspaceName name
        現在のワークスペース名を name に変更
            SetWorkspaceName name

目次へ

--------------------------------------------------------------------------------------


特殊 コマンド


    MacroCmd {command1} {command2} ...
        複数のコマンドを実行
            MacroCmd { maximize } { Execute xterm } { Execute rox }
                カレントウィンドウの最大化、xterm と rox の起動を同時に
                実行。

    ToggleCmd {command1} {command2} ...
        command1、command2、... を実行毎に、ひとつずつトグル実行。
            ToggleCmd {Exec xterm -e top} {MaximizeVertical} {Close}

    ReloadStyle
        現在のスタイルファイルを再読み込み
            ReloadStyle
                ※現在のスタイルファイルへの修正を反映させる、など。

    SetResourceValue resourcename resource-value
        設定ファイルのリソースの値を書き換える。
            SetResourceValue session.screen0.toolbar.autoHide true
                init ファイルの toolbar.autoHide を true に設定する
                (ツールバーを自動的に隠す設定にする)。

        ※このコマンド単独では、init を書き換えるのみなので、実際に設定を
        反映するには、設定再読み込みや再起動が必要。
        以下の例のように MacroCmd を利用すれば、設定を即座に反映させる事
        は可能。
        MacroCmd {SetResourceValue session.screen0.toolbar.autoHide true} {Reconfigure}

    BindKey key_string : command
        keys ファイルに "key_string :command" を書き込みます。
        ※このコマンド自体はメニューの "fluxbox内部コマンド" ダイアログ
        で使用します。keys ファイル内では使用しません。
            BindKey Mod1 R :RootMenu

    KeyMode keyNameSpace
        キーモード(キーバインド定義空間)を keyNameSpace に変更。
            KeyMode KMode2

        ※KeyMode 設定例:

定義               
  名前空間
          
Mod1 Tab :NextWindow
Control v :NextWorkspace
Mod1 G :KeyMode KMode2
  default

KMode2: Control Mod1 Tab :NextWindow
KMode2: Control Mod1 v :NextWorkspace
KMode2: Mod1 G :KeyMode default
  KMode2

        keys ファイルに上のように設定されている場合、
        通常キーモード(名前空間 = 'default' (省略可能))では Alt+Tab で
        「次のウィンドウへ」、Ctrl+v で「次のワークスペースへ」が実行さ
        れます。(1、2行目)。

        最初の Alt+g 押下で 'KMode2' キーモードに移行します。(3行目)
          
この時、"KMode2:" で始まるキーバインド以外は無効になります。

Mod1 Tab と Ctrl v は、"KMode2" では定義されていない為、
fluxbox にではなく、アクティブなアプリケーションに渡されま
す。
例えば Control v は、emacs では「ページスクロール」、gedit
では「貼り付け」等、アプリケーションのキーコマンドとして実行
されることになります

        'KMode2' キーモードでは、頭に"KMode2:"を付けて定義された、
            Ctrl+Alt+Tab →「次のウィンドウへ」
            Ctrl+Alt+v →「次のワークスペースに移動」
        が、有効になります。(4、5行目)

        再度 Alt+g を押せば、KeyMode default が実行され、名前空間は、通
        常のキーモード 'default' に戻ります。(6行目)
          
※名前空間 "default" は特別な名前空間で、通常は省略されますが、
"default:" と明記してもかまいません。つまり、
     Control r :RootMenu
     default:
Control r :RootMenu
上の二行は全く同じ意味を持ちます。

        たとえて言えば、
            A国(default)、B国(Kmode2)では、それぞれ違った言葉(キーバイン
            ド)しか通じない。国境を越える際には通関手続き(KeyModeの実行)を
            行
要が有る。
        という感じです。



目次へ

--------------------------------------------------------------------------------------


キーマップの変更

ここでは、keys ファイルでのキーバインドの自由度を上げる為に、修飾キー
Mod1 - Mod4 を設定する事を重点に、X のキーマップの設定法を述べます。

--------------------------------------------------------------------------------------

キーマップの調査

X Window System でのキーマップ(キーボードとキーコードの対応)を調べるには、
xmodmap コマンドを使います。
    xmodmap -h
で、xmodmap の簡単な使い方が表示されます。
    man xmodmap
で、xmodmap の manpage が表示され、詳しい使い方を調べる事が出来ます。
英語が苦手な方は、こちらの サイトが参考になると思われます。
ここでは -pm(print modifier)オプションで、修飾キーの設定を調べます。

下はシステムデフォルトの装飾(modifier)キー関連のキーマップの一例です。
   
$ xmodmap -pm
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x6d)
mod1        Alt_L (0x40),  Alt_L (0x7d),  Meta_L (0x9c)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_L (0x7f),  Hyper_L (0x80)
mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x7c)

目次へ

--------------------------------------------------------------------------------------

キーコード/キーシンボルの調査

実際に繋がれているキーボードに即したキーコード(keycode)キー名(keysym)は、
Xターミナルから xev コマンドを実行して調べます。
実行中にキーボードやマウスを操作すると、以下のような表示がされます。
   
KeyPress event, serial 32, synthetic NO, window 0x1c00001,
    root 0x139, subw 0x0, time 1088226, (84,79), root:(354,314),
    state 0x0, keycode 131 (keysym 0xff22, Muhenkan), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
上の例は"無変換"キーを押した時の表示で、このキーの keycode131keysym
Muhenkan で有る事を示しています。

目次へ

--------------------------------------------------------------------------------------

ユーザー設定ファイル(~/.Xmodmap)

システムのキーマップに変更/追加を加えるには、xev の出力と xmodmap の
manpage の EXPRESSION GRAMMAR(表現文法)の項を参考に~/.Xmodmap に定義しま
す。下は ~/.Xmodmap の一例です。
   
! my settings for xmodmap
keycode 113 = Alt_R
add mod1 = Alt_R

keycode 131 = Muhenkan
clear mod2
add mod2 = Muhenkan

keycode 129 = Henkan_Mode
clear mod3
add mod3 = Henkan_Mode

keycode 115 = F13
clear mod4
add mod4 = F13
註釈行は、先頭に '!' を
Alt_R も Mod1 に ※Mod1 には Alt_L も
 定義されているので clear しない



"無変換" を Mod2 に




"変換" を Mod3 に



"Win" を Mod4 に


目次へ

--------------------------------------------------------------------------------------

設定ファイルの反映

~/.Xmodmap を実際にシステムのキーマップに反映させてみます。
   
$ xmodmap ~/.Xmodmap
※X の再起動後は ~/.Xmodmap は自動的に読み込まれますので、上のコマンドの実 行
は不要です。


目次へ

--------------------------------------------------------------------------------------

キーマップ変更の確認

上記を実行後に、もう一度装飾(modifier)キー関連のキーマップを調べます。
   
$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x6d)
mod1        Alt_L (0x40),  Alt_L (0x7d),  Meta_L (0x9c),  Alt_R (0x71)
mod2        Muhenkan (0x83)
mod3        Henkan_Mode (0x81)
mod4        F13 (0x73),  F13 (0x74)
mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x7c)
Mod1-Mod4 が変更されているのが確認できます。

※上の設定の場合 "無変換"、"変換"、"Win" を使用していますが、支障が有る場合
(IM のファンクションとの衝突など)は、他の未使用キーを割り当てます。
又、IM の設定でこれらのキーは定義されているが、実際には使わない場合は、IM
の設定からこれらのキーを取り除いてから、上の設定を行ってください。


目次へ