macOSで解像度変更をコマンドで実行できるdisplayplacerを対話的に利用するスクリプトを書く
先日、次の記事でmacOSの画面解像度をコマンドラインで変更できるツールを紹介したのですが、利用可能な解像度を探して手入力するのが面倒に感じたので、対話的に選んで実行できるラッパースクリプトを書きました。
実行すると利用可能な解像度一覧が表示されます。一覧はインクリメンタルサーチで候補を絞り込めます。この操作のために peco or percol を使用します。
このような機能を次の実装で実現しています。
displayplacer list
を実行して display id と mode をリスト化する- リストを peco or percol で選択できるようにする
- 選択されたリストから
id:xxx mode:nnn
を取得して displayplacer を実行して解像度を変える
displayplacer list のリスト表示自体がそのままパラメータとして再利用できる形式であれば、displayplacer $( displayplacer list | peco )
のように実行すれば済むのですが、惜しいことにそのまま渡せない形式だったため、こういう実装でカバーしました。
スクリプト自体は bash の書き出しで始まっていますが、主要な文字列処理は awk です。スクリプトを changeres.sh とかの名前で保存してご利用ください。
#!/bin/bash which -s percol if [ $? -eq 0 ]; then interactive_helper="percol" fi which -s peco if [ $? -eq "0" ]; then interactive_helper="peco" fi if [ ${interactive_helper} == "" ]; then echo "abort: peco or percol requires to run" exit 1 fi displayresolutionselect=$( displayplacer list | /usr/bin/awk ' $1 == "Contextual" { id=$4 } $1 == "mode" { printf "id:%s%s\n", id, $0 }' | $interactive_helper ) displayplacerparam=$( echo $displayresolutionselect | /usr/bin/awk ' BEGIN { FS="[ :\t]+" } { printf "%s:%s %s:%s\n", $1,$2,$3,$4 }' ) if [ "${displayplacerparam}" == ": :" ]; then echo "$0: cancelled" exit 1 fi displayplacer "${displayplacerparam}" echo "change to \"${displayresolutionselect}\""