macOSの解像度をコマンドラインツールで変更する displayplacer の対応解像度一覧表示を改修する
先日、macOSの解像度をコマンドラインツールで変更する displayplacer の記事を投稿しましたが、このツールの微妙な欠点は、対応解像度を一覧表示する形式と、実際に解像度を指定する際の形式が似ているようで違っていて、本当に微妙なところで使いづらい点だと思います。
そこで、一覧表示の形式にパッチを当てることにしました。displayplacer.c の下記の2箇所を修正するだけです。
--- displayplacer.c.orig 2020-07-24 16:517.000000000 +0900 +++ displayplacer.c 2020-07-24 17:23:29.000000000 +0900 @@ -283,9 +283,10 @@ printf("Resolutions for rotation %i:\n", (int) CGDisplayRotation(curScreen)); for (int i = 0; i < modeCount; i++) { + printf("id:%i ", curScreen); modes_D4 mode = modes[i]; - printf(" mode %i: res:%dx%d", i, mode.derived.width, mode.derived.height); + printf(" mode:%i res:%dx%d", i, mode.derived.width, mode.derived.height); if (mode.derived.freq) { printf(" hz:%i", mode.derived.freq);
そして改修したバージョンのdisplayplacerを使って解像増度設定を対話的に行うラッパースクリプトは次のようになります。
#!/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.new list | awk '$0 ~ /^id:/ { print }' | $interactive_helper ) displayplacerparam=$( echo $displayresolutionselect | /usr/bin/awk '{ print $1" "$2 }' ) displayplacer "${displayplacerparam}" echo "change to \"${displayresolutionselect}\""
昨日、こちらの記事に投稿したスクリプトに比べて、さほど実装量は減りませんでした。 pslabo.hatenablog.com
ただし awk の文字列処理部分はシンプルになったので、これでよいのではと思っています。awk の処理が2箇所残っているのは、1箇所は displayplacer list の出力結果から解像度一覧だけを取得するための処理ですし、もう1箇所は id と mode だけを抽出するための処理です。その他の部分は peco や percol の検出などの処理なのでこれ以上削ることはできません。