zsh: JavaScripを使って「Terminal.appのカラムや行」を設定する
zsh: To sett columns and raws of Terminal.app by using JavaScript
経緯
JavaScriptを練習するのに、スクリプト・エディタを使っています。さらにTerminalに於いてjscを使っています。
- /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
- OS: Yosemite 10.10.5 (14F1808)
これを基にして、"Script Editr"の”Window nenu -> Library”からTerminal.appを見ながら、完全設定をしようと思いましたが、なんと肝心んな16色のカラー設定やフォントの文字間隔、行 間隔の設定の項目が無くて、頓挫しました。
次の総括的な解説中の「コマンド・ライン引数の使用」を参考して、zshのスクリプト(txy)を作りました。
このスクリプトは、terminal作業の処理を次々にスクリーン・ショットに保存していくときに、意外と便利なので紹介します。
動作例
図1はターミナルが呼ばれた直後です。最後の設定(幅77x行10)となっています。
Figure 1 Just opened Terminal which preserve precious columns & raws. |
そこで「% txy 80↩️」とすると幅だけが80に変わり、図2のように(幅80x行10)となります。
Figure 2. "txy 80" re-sized only columns to 80. |
さらに 「% txy 82 22↩️」とすると幅と行が同時に変わり、図3のように(幅82x行22)となります。
Figure 3. "txy 82 22" re-sized columns & raws to (82x22) |
最後に「% txy↩️」とすると規定値(幅80x行40)となります、図4.
Figure 4. "txy" re-sized to dafaut value (80x40). |
スクリプト: txy
#!/bin/zsh # txy: default terminal resized to x*y # X: Number of columns for default Terminal.app # Y: Number of rows for default Terminal.app # USAGE: # txy↩ -----> (80*40) : defaut ----------------------> Fig. 4 # txy X↩ --> (X*Y0) : Y0='previous value' ---------> Fig. 2 # txy X Y↩ -> (X*Y) : set both of columns*raws ----> Fig. 3. # terminal opens with previous columns*raws: ------------- > Fig. 1 # 2016-05-07(土) 12:36:43 by mNeji # 2016-05-12(木) 11:55:07 set_JS, get_JS ############################################################################### set_JS() { # Execute $JS as Javascript. Throw unwanted output away to /dev/null osascript -l JavaScript -e "$1" > /dev/null } ############################################################################### get_JS() { # Execute $JS as Javascript. The output is printed on standard output(screen) osascript -l JavaScript -e "$1" } ########################### main ############################################## # Reading current setting (X0•Y0) & display: td="Application('Terminal').defaultSettings" X0=$(get_JS "$td.numberOfColumns()") Y0=$(get_JS "$td.numberOfRows()") echo -n "terminal current: (${X0}x$Y0) -->" # Setting: (X, Y) case $# in 0) X=80; Y=40;; 1) X=$1; Y=$Y0;; 2) X=$1; Y=$2;; *) X=$1; Y=$2;; esac # Prepare JavaScript block for default Terminal Setting: ($X, $Y) XYdataBlock=" trmd = Application('Terminal').defaultSettings trmd.numberOfColumns = $X trmd.numberOfRows = $Y " set_JS "$XYdataBlock" echo " resized: (${X}x${Y})\a"
zshで「osascript -l JavaScript -e JavaScript-commands」を使えば、JavaScript-commandsが実行できます。問題は、JavaScript- commandsは設定値を常時標準出力に出すことです。このような場合には「set_JS」関数を呼び出して、不要な出力を/dev/nullに捨てて います。
- 例1)
- set_JS "$XYdataBlock"
逆に、設定を読み取りたいコマンドの場合は、「get_JS」関数により出力させて、それを変数に代入させています。
- 例2)
- X0=$(get_JS "$td.numberOfColumns()")
感想
自力でアプリケーションのPreferencesを操れてうれしい。JavaScriptをshellの一つとして「#!/bin/javascript」とか「#!/bin/jsc」とか出来ないか? それとも「#!/bin/swift」の方が早かったり?
この記事の履歴
- 開始 2016-05-30(月) 23:18:39