前提条件
- macOS 11.4
- bash 4.4.12
- fzf 0.17.1
ターミナルから(一般的な方法)
Macでターミナル(端末エミュレータ)を使い込んでいくとGUIアプリをコマンドラインで起動したいと考えないだろうか。
(GUIアプリを起動したしても、その操作はマウスを使わなければならない。すくなくともターミナルで引きこもりたい人間からすれば相当気持ち良いはずである。)
MacのGUIアプリは以下のコマンドで起動できる。
> open -a <アプリの名前>
システム環境設定の場合、以下のようになる。
> open -a "System Preferences"
.bashrc
に以下の記述しエイリアスを作成し、
alias syspref='open -a "System Preferences"'
タイプ数を短くしてもよい。
> syspref
上記方法はタイプ数も多く、エイリアスを張ったとしてもあまりスマートでない。とはいえ、アプリ起動するのに専用のランチャーアプリの導入をするのには躊躇いがある。
選択的インターフェイス
ターミナルを使っている方には選択的インターフェイスを提供する(easy finder)というジャンルのソフトを利用している方もいるのではないだろうか。ディレクトリパスを移動したり特定のファイルを書き換えたり、なにかと便利である。
以下のスクリプトを.bashrc
に加えると簡単に選択的インターフェイスを使ったランチャーが実現できる。
# app - osx appluncher
app() {
app_path=$(find /Applications -maxdepth 3 -type d | grep '\.app$' | sed 's/\/Applications\///' | sed 's/\.app$//' | fzf --query="$1" --prompt="App > " --exit-0)
if [ -n "$app_path" ]; then
open -a "/Applications/$app_path.app/"
fi
}
最近の macOS ではフォルダの構成が変わっているため以下のほうが使いやすいかもしれない
app() {
sapp_list=$(find /System/Applications -maxdepth 3 -type d |
grep '\.app$' |
sed 's/\/System\/Applications\///' |
sed 's/\.app$//' |
sed 's/^/S::/')
aapp_list=$(find /Applications -maxdepth 3 -type d |
grep '\.app$' |
sed 's/\/Applications\///' |
sed 's/\.app$//' |
sed 's/^/A::/')
uapp_dest="/Users/$(whoami)/Applications"
uapp_dest_sed="s/\/Users\/$(whoami)\/Applications\///"
# echo $uapp_dest_sed
uapp_list=$(find $uapp_dest -maxdepth 3 -type d |
grep '\.app$' |
sed $uapp_dest_sed |
sed 's/\.app$//' |
sed 's/^/U::/')
# echo -e $uapp_list
app_path=$(echo -e "$sapp_list\n$aapp_list\n$uapp_list" | fzf --query="$1" --prompt="App > " --exit-0)
if [ -n "$app_path" ]; then
open_path_u="s/U::/\/Users\/$(whoami)\/Applications\//"
open_path=$(echo "$app_path" |
sed 's/S::/\/System\/Applications\//' |
sed 's/A::/\/Applications\//' |
sed $open_path_u)
# echo $open_path
open -a "$open_path.app"
# preventing open command returns not 0
:
fi
}
上記設定を行うと、
> app
と入力すれば以下のようなインターフェイスで、アプリが起動できる。
補足
fzf以外の選択的インターフェイスを実現する方法でも同様のことが実現できる。