「Herbstluftwm」の版間の差分
(en:Herbstluftwmへの転送ページ) |
|||
1行目: | 1行目: | ||
+ | [[Category:タイル型ウィンドウマネージャ]] |
||
− | #redirect[[en:Herbstluftwm]] |
||
+ | [[en:Herbstluftwm]] |
||
+ | [http://herbstluftwm.org Herbstluftwm] は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。 |
||
+ | |||
+ | ==インストール== |
||
+ | Herbstluftwm は {{Pkg|herbstluftwm}} パッケージや {{AUR|herbstluftwm-git}} パッケージで[[インストール]]できます。 |
||
+ | |||
+ | ==はじめに== |
||
+ | |||
+ | お気に入りのターミナルエミュレータでオンラインで herbstluftwm や herbstclient の man ページをよく読んでください ([http://herbstluftwm.org/herbstluftwm.html herbstluftwm], [http://herbstluftwm.org/herbstclient.html herbstclient])。レイアウトが保存されるバイナリツリーの説明から、設定ファイルのオプションと設定値まで、様々な情報が載っているので、時間をとってドキュメントを全て一読することを推奨します。 |
||
+ | |||
+ | ==設定== |
||
+ | |||
+ | {{ic|/etc/xdg/herbstluftwm/autostart}} ファイルを {{ic|$HOME/.config/herbstluftwm/autostart}} にコピーしてください。コピーしたファイルは必要に応じて編集できます。autostart ファイルには実行可能属性を付与してください。そうしないとキーバインドが機能しません。 |
||
+ | |||
+ | herbstluftwm の設定は {{ic|herbstclient reload}} を実行するか、reload コマンドに対応するキーバインドを使うことで即座に反映されます (コマンドセクションを参照)。リロードされるたびに Autostart が呼び出されるので、まず autostart の中にある既存の設定を解除するようにするのが普通です。 |
||
+ | |||
+ | ===マルチモニターのサポート=== |
||
+ | |||
+ | Herbstluftwm はマルチモニターを仮想概念でサポートしています。herbstluftwm におけるモニターは xrandr で確認できる実際のモニターの構成とは一致しません。柔軟にモニターを配置を制御することができるようになっています。{{ic|herbstclient detect_monitors}} を使うことで自動的に物理的なセットアップに適応できます。モニターを追加・削除・リサイズする方法は man ページを見てください。マルチモニターのタグはモニターによって"占有"されることがありません。既に他のモニターで使われているタグを別のモニターで使用すると、モニターはそれぞれのタグを交換します。 |
||
+ | |||
+ | ==コマンド== |
||
+ | |||
+ | Herbstclient はコマンドラインからウィンドウマネージャを完全に制御することができる強力なツールです。 |
||
+ | |||
+ | herbstclient のパラメータはタブ補完が効きます。{{ic|herbstclient list_commands}} で全てのパラメータを確認してください |
||
+ | |||
+ | 間違ったパラメータをコマンドで使ってもエラーメッセージは表示されません。代わりにゼロ以外の返り値がきます。($SHELL プロンプトの設定で) コマンドの返り値を表示しないようにしている場合、{{ic|echo $?}} で最後に実行したコマンドの返り値を確認できます。 |
||
+ | |||
+ | ==スクリプトとフック== |
||
+ | |||
+ | herbstluftwm を制御するときは herbstclient のコマンドを使うのがメインになりますが、herbstclient はどんなスクリプトからも呼び出せるので、スクリプトを使うことで柔軟に herbstluftwm を制御することが可能です。さらに、ウィンドウ管理のイベントに反応して制御を行うこともできます。 |
||
+ | |||
+ | ===次の empty タグに切り替えるスクリプト=== |
||
+ | |||
+ | 以下の Ruby スクリプトを使うことで (次あるいは前の full または empty) タグを切り替えることができます。(+1 または -1) と (full または empty) の引数を付けて実行してください。例えば、スクリプトを {{ic|herbst-move.rb}} と保存した場合、次のコマンドを実行することで次の full タグに移動します: |
||
+ | $ ruby herbst-move.rb +1 full |
||
+ | キーバインドでスクリプトを呼び出すこともできます: |
||
+ | |||
+ | hc keybind $Mod-Left spawn ruby /home/carl/Ruby/herbst-move.rb -1 empty |
||
+ | hc keybind $Mod-Right spawn ruby /home/carl/herbst-move.rb +1 empty |
||
+ | hc keybind $Mod-Up spawn ruby /home/carl/Ruby/herbst-move.rb -1 full |
||
+ | hc keybind $Mod-Down spawn ruby /home/carl/Ruby/herbst-move.rb +1 full |
||
+ | |||
+ | 以下がそのスクリプトです: |
||
+ | {{bc|<nowiki> |
||
+ | #!/usr/local/bin/ruby |
||
+ | |||
+ | incr, type = ARGV |
||
+ | |||
+ | d = incr.to_i |
||
+ | if type == 'full' |
||
+ | ch = '.' |
||
+ | else |
||
+ | ch = ':' |
||
+ | end |
||
+ | |||
+ | array = `herbstclient tag_status 0`.scan(/[:\.\#][^\t]*/) |
||
+ | len = array.length |
||
+ | orig = array.find_index{|e| e[0] == '#'} |
||
+ | |||
+ | i = (orig+d) % len |
||
+ | while |
||
+ | array[i][0] == ch |
||
+ | i = (i+d) % len |
||
+ | end |
||
+ | |||
+ | if i != orig |
||
+ | system "herbstclient use_index #{i}" |
||
+ | end |
||
+ | </nowiki>}} |
||
+ | |||
+ | ===内側の余白 (などの設定) を変更するスクリプト=== |
||
+ | |||
+ | 以下は内側の余白を切り替える Ruby スクリプトです。他の設定を変更するように作り変えることもできます。{{ic|/tmp}} にダミーファイルを作ることで現在のレイアウトを確認しています。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | #!/usr/bin/ruby |
||
+ | |||
+ | file1 = "/tmp/herbst-padding-1" |
||
+ | file2 = "/tmp/herbst-padding-2" |
||
+ | |||
+ | pad1 = 'pad 0 0 0 0 0' |
||
+ | pad2 = 'pad 0 0 20 0 200' |
||
+ | pad3 = 'pad 0 0 0 0 150' |
||
+ | |||
+ | files = [file1, file2].map{|f| File.exist? File.expand_path(f)} |
||
+ | |||
+ | if files == [false, false] # 0 files |
||
+ | system "herbstclient #{pad2}" |
||
+ | system "touch #{file1}" |
||
+ | elsif files == [true, false] # 1 file |
||
+ | system "herbstclient #{pad1}" |
||
+ | system "touch #{file2}" |
||
+ | else # 2 files |
||
+ | system "herbstclient #{pad3}" |
||
+ | system "rm #{file1} #{file2}" |
||
+ | end |
||
+ | </nowiki>}} |
||
+ | |||
+ | ===タグごとに装飾を変更するスクリプト=== |
||
+ | |||
+ | 以下の Perl スクリプトではフックを使うことでウィンドウ管理のイベントに反応します。(バックグラウンドで) 自動実行することが可能です。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | #!/usr/bin/perl |
||
+ | # This script watches for tag changes and gives visual feedback |
||
+ | |||
+ | ## Configuration (fill with your tag names) |
||
+ | my %colors = ( |
||
+ | main => '#DD0000', |
||
+ | devel => '#13B8E0', |
||
+ | write => '#96E013', |
||
+ | admin => '#C713E0' |
||
+ | ); |
||
+ | |||
+ | ## Apply tag color |
||
+ | # Right now we change the active window's border color to the tag's color. |
||
+ | sub redecorate |
||
+ | { |
||
+ | my ($foo, $activity) = @_; |
||
+ | system("herbstclient", "set", "window_border_active_color", |
||
+ | "$colors{$activity}"); |
||
+ | } |
||
+ | |||
+ | ## main routine |
||
+ | use v5.20; |
||
+ | |||
+ | # set up a pipe for reading hooks |
||
+ | open HOOKS, "herbstclient -i '(tag_changed|reload)'|" |
||
+ | or die "can't fork: $!"; |
||
+ | # process incoming messages |
||
+ | OUTER: |
||
+ | while (<HOOKS>) { |
||
+ | chomp; |
||
+ | for ($_) { |
||
+ | redecorate(split(/\t/)) when /^tag_changed/; |
||
+ | last OUTER when /^reload/; # quit on reload |
||
+ | } |
||
+ | } |
||
+ | close HOOKS or die "unfinished love story: $! $?"; # happens on hlwm crash |
||
+ | </nowiki>}} |
||
+ | |||
+ | ==参照== |
||
+ | * [http://herbstluftwm.org herbstluftwm ホームページ] |
||
+ | * [https://bbs.archlinux.org/viewtopic.php?id=128646 herbstluftwm スレッド] |
||
+ | * {{ic|/usr/share/doc/herbstluftwm/examples/}} - 様々なスクリプト |
||
+ | * {{ic|/usr/share/doc/herbstluftwm/BUGS}} - バグ |
||
+ | * [http://crunchbang.org/forums/viewtopic.php?pid=204358%23p204358#p204358k ACrunchBang フォーラムの herbstluftwm スレッド] |
||
+ | * '''スクリーンショットと設定ファイル:''' [https://bbs.archlinux.org/viewtopic.php?id=133557 ArchLinux フォーラム], [http://dotshare.it/category/wms/herbstluft/ DotShare.it]。 |
||
+ | * {{ic|#herbstluftwm}} - IRC チャンネル at the irc.freenode.net |
||
+ | * [https://github.com/ypnos/hlwm User git repository #1] with autostart written in Perl and a few custom scripts |
||
+ | * [https://github.com/ylixir/hlwm-config User git repository #2] with autostart and panel written in Python |
2016年1月16日 (土) 12:57時点における版
Herbstluftwm は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。
目次
インストール
Herbstluftwm は herbstluftwm パッケージや herbstluftwm-gitAUR パッケージでインストールできます。
はじめに
お気に入りのターミナルエミュレータでオンラインで herbstluftwm や herbstclient の man ページをよく読んでください (herbstluftwm, herbstclient)。レイアウトが保存されるバイナリツリーの説明から、設定ファイルのオプションと設定値まで、様々な情報が載っているので、時間をとってドキュメントを全て一読することを推奨します。
設定
/etc/xdg/herbstluftwm/autostart
ファイルを $HOME/.config/herbstluftwm/autostart
にコピーしてください。コピーしたファイルは必要に応じて編集できます。autostart ファイルには実行可能属性を付与してください。そうしないとキーバインドが機能しません。
herbstluftwm の設定は herbstclient reload
を実行するか、reload コマンドに対応するキーバインドを使うことで即座に反映されます (コマンドセクションを参照)。リロードされるたびに Autostart が呼び出されるので、まず autostart の中にある既存の設定を解除するようにするのが普通です。
マルチモニターのサポート
Herbstluftwm はマルチモニターを仮想概念でサポートしています。herbstluftwm におけるモニターは xrandr で確認できる実際のモニターの構成とは一致しません。柔軟にモニターを配置を制御することができるようになっています。herbstclient detect_monitors
を使うことで自動的に物理的なセットアップに適応できます。モニターを追加・削除・リサイズする方法は man ページを見てください。マルチモニターのタグはモニターによって"占有"されることがありません。既に他のモニターで使われているタグを別のモニターで使用すると、モニターはそれぞれのタグを交換します。
コマンド
Herbstclient はコマンドラインからウィンドウマネージャを完全に制御することができる強力なツールです。
herbstclient のパラメータはタブ補完が効きます。herbstclient list_commands
で全てのパラメータを確認してください
間違ったパラメータをコマンドで使ってもエラーメッセージは表示されません。代わりにゼロ以外の返り値がきます。($SHELL プロンプトの設定で) コマンドの返り値を表示しないようにしている場合、echo $?
で最後に実行したコマンドの返り値を確認できます。
スクリプトとフック
herbstluftwm を制御するときは herbstclient のコマンドを使うのがメインになりますが、herbstclient はどんなスクリプトからも呼び出せるので、スクリプトを使うことで柔軟に herbstluftwm を制御することが可能です。さらに、ウィンドウ管理のイベントに反応して制御を行うこともできます。
次の empty タグに切り替えるスクリプト
以下の Ruby スクリプトを使うことで (次あるいは前の full または empty) タグを切り替えることができます。(+1 または -1) と (full または empty) の引数を付けて実行してください。例えば、スクリプトを herbst-move.rb
と保存した場合、次のコマンドを実行することで次の full タグに移動します:
$ ruby herbst-move.rb +1 full
キーバインドでスクリプトを呼び出すこともできます:
hc keybind $Mod-Left spawn ruby /home/carl/Ruby/herbst-move.rb -1 empty hc keybind $Mod-Right spawn ruby /home/carl/herbst-move.rb +1 empty hc keybind $Mod-Up spawn ruby /home/carl/Ruby/herbst-move.rb -1 full hc keybind $Mod-Down spawn ruby /home/carl/Ruby/herbst-move.rb +1 full
以下がそのスクリプトです:
#!/usr/local/bin/ruby incr, type = ARGV d = incr.to_i if type == 'full' ch = '.' else ch = ':' end array = `herbstclient tag_status 0`.scan(/[:\.\#][^\t]*/) len = array.length orig = array.find_index{|e| e[0] == '#'} i = (orig+d) % len while array[i][0] == ch i = (i+d) % len end if i != orig system "herbstclient use_index #{i}" end
内側の余白 (などの設定) を変更するスクリプト
以下は内側の余白を切り替える Ruby スクリプトです。他の設定を変更するように作り変えることもできます。/tmp
にダミーファイルを作ることで現在のレイアウトを確認しています。
#!/usr/bin/ruby file1 = "/tmp/herbst-padding-1" file2 = "/tmp/herbst-padding-2" pad1 = 'pad 0 0 0 0 0' pad2 = 'pad 0 0 20 0 200' pad3 = 'pad 0 0 0 0 150' files = [file1, file2].map{|f| File.exist? File.expand_path(f)} if files == [false, false] # 0 files system "herbstclient #{pad2}" system "touch #{file1}" elsif files == [true, false] # 1 file system "herbstclient #{pad1}" system "touch #{file2}" else # 2 files system "herbstclient #{pad3}" system "rm #{file1} #{file2}" end
タグごとに装飾を変更するスクリプト
以下の Perl スクリプトではフックを使うことでウィンドウ管理のイベントに反応します。(バックグラウンドで) 自動実行することが可能です。
#!/usr/bin/perl # This script watches for tag changes and gives visual feedback ## Configuration (fill with your tag names) my %colors = ( main => '#DD0000', devel => '#13B8E0', write => '#96E013', admin => '#C713E0' ); ## Apply tag color # Right now we change the active window's border color to the tag's color. sub redecorate { my ($foo, $activity) = @_; system("herbstclient", "set", "window_border_active_color", "$colors{$activity}"); } ## main routine use v5.20; # set up a pipe for reading hooks open HOOKS, "herbstclient -i '(tag_changed|reload)'|" or die "can't fork: $!"; # process incoming messages OUTER: while (<HOOKS>) { chomp; for ($_) { redecorate(split(/\t/)) when /^tag_changed/; last OUTER when /^reload/; # quit on reload } } close HOOKS or die "unfinished love story: $! $?"; # happens on hlwm crash
参照
- herbstluftwm ホームページ
- herbstluftwm スレッド
/usr/share/doc/herbstluftwm/examples/
- 様々なスクリプト/usr/share/doc/herbstluftwm/BUGS
- バグ- ACrunchBang フォーラムの herbstluftwm スレッド
- スクリーンショットと設定ファイル: ArchLinux フォーラム, DotShare.it。
#herbstluftwm
- IRC チャンネル at the irc.freenode.net- User git repository #1 with autostart written in Perl and a few custom scripts
- User git repository #2 with autostart and panel written in Python