tmuxをご存じでしょうか。
有名なterminalツールですよね。
通常のterminalでは、1画面1操作しか受け付けられないようになっていますが、このtmuxを使えばterminal画面を何分割もできます。
ただし、目的の画面を作成するまで、自分で何種類ものコマンドを手で打ち込む必要があるわけです。
このめんどくさい操作をGo言語を使って自動化しようというのが、今回の記事の目的になります。
<目次>
前提事項
Linux(cent0S) or Macで動作確認をしています。
事前準備
任意の場所に次のフォルダとファイルを作成しましょう。
1 2 |
mkdir tmux touch tmux/tmux.go |
実装
コードは、次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package main import ( "fmt" "os" "os/exec" "os/signal" "syscall" "time" ) func main() { // tmux を新規セッション(selfnote)で作成 cmd := exec.Command("/bin/sh", "-c", "tmux new -s selfnote;") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr go func(c *exec.Cmd) { err := c.Run() if err != nil { fmt.Println(err) } }(cmd) /* tmux設定 split-window - 画面分割 -v - 横分割 -h - 立て分割 -p 割合(何%か) tmux selectp -t - パネル移動 Ctrl + b -> 0 or 1 or 2 */ tmuxSetup := ` tmux send-keys -t selfnote.0 "tmux split-window -v -p 5" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 0" ENTER; tmux send-keys -t selfnote.0 "tmux split-window -v -p 95" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 1" ENTER; tmux send-keys -t selfnote.0 "tmux split-window -h -p 85" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 2" ENTER; tmux send-keys -t selfnote.0 "tmux split-window -v -p 70" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 2" ENTER; tmux send-keys -t selfnote.0 "tmux split-window -h -p 33" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 2" ENTER; tmux send-keys -t selfnote.0 "tmux split-window -h -p 50" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 0" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 1" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 3" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 4" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 5" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; tmux send-keys -t selfnote.0 "tmux selectp -t 6" ENTER; tmux send-keys -t selfnote.0 "clear" ENTER; ` // 1秒待つ <-time.After(1 * time.Second) cmd2 := exec.Command("/bin/sh", "-c", tmuxSetup) err := cmd2.Run() if err != nil { fmt.Println(err) } // シグナル設定(Ctrl + c などのコマンドを押下したときのシグナルを受け取る) c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGTSTP, syscall.SIGQUIT) for { <-c fmt.Println("killing program") break } } |
記述が完了したら、terminal上で、以下のコマンドを実行してください。
1 |
go run tmux/tmux.go |
何も問題がなければ、画面分割されたtmuxが立ち上がるはずです。

画面間の移動には、「tmux selectp -t number(0など)」を打つと移動できます。
割り振られた番号を確認したい場合は、「Ctrl + b, q」を押下してください。
※Ctrl + bは、tmuxの初期のPREFIXです。
落ち葉拾い
画面間移動が少し手間ですよね。
「Ctrl + b, q」を押下したときに、各画面に割り振られている番号を確認することができます。
この数字が表示されている間に、移動したい画面の数字を入力すると画面移動ができます。
補足)
デフォルトだと数字が消えるスピードが速すぎるので、以下の設定を追加することで表示時間を長くすることが可能みたいです。
1 2 3 4 5 6 7 |
vi ~/.tmux.conf # 以下の文字を入れて保存 set display-panes-time 10000 source ~/.tmux.conf |
まとめ
tmuxを使うと、複数のterminalを立ち上げる必要がなくなるため、かなり便利です。
便利な機能はガンガン活用していきましょう!
コメントを残す
コメントを投稿するにはログインしてください。