iTerm2 をやめて Alacritty デビュー
話さないこと
- Alacritty について
- Hammerspoon について
- Alacritty と iTerm2 の比較
Alacritty に興味があった。
一年前にこんな記事を書いていた。
が、僕は以前 iTerm2 を使っていた。
理由は以下の、iTerm2 で僕が気に入って使っていた機能が備わっていないから。
- control key のダブルタップによる表示の切り替えができない
- アクティブなスクリーンで開くことができない
- cmd + U で背景透過の切り替えができない
一年経った今思うのは、そんな理由で辞めるのはダサいなあ。と。
Hammerspoon でゴリゴリやる
Hammerspoon で全てを解決していこうと思う。
1. Control key のダブルタップでの表示切り替え
Google で hammerspoon duble tap と検索すると gist なり何なりが出るので、それをコピった
今回はこちらをいただく。
ここの module.action
という箇所を修正して、Alacritty を呼び出していく
module.action = function()
local appName = "alacritty"
local app = hs.application.find(appName)
if app:isFrontmost() then
app:hide()
else
hs.application.launchOrFocus(appName)
end
end
これで OK
が、ここで問題である。
アクティブなスクリーンで開かずに、初回に Alacritty を開いた箇所で再度開いてしまう。
つまり Ctrl のダブルタップで、強制的に Alacritty のあるスクリーンをアクティブにしてしまうのだ。
これはよくない。
なぜなら、僕がターミナルを透けさせている理由は、
今見てるものを見える状態でターミナルを開きたい!
だから。
2. アクティブなスクリーンで表示する
そのためにまず
spaces というモジュールを使っていく。
公式の通りに、Repository の root にある spaces-v0.x.tar.gz
をダウンロード
cd ~/.hammerspoon
tar -xzf ~/Downloads/spaces-v0.x.tar.gz
すると ~/.hammerspoon/hs
というディレクトリが出来上がるので、
それを呼び出し以下のような Function を作成する。
local spaces = require("hs.spaces")
function MoveActiveScreen(app)
local window = app:focusedWindow()
local focused = spaces.focusedSpace()
spaces.moveWindowToSpace(window:id(), focused)
window:focus()
end
これは、そのままで、
Application をみつけ、
アクティブなスクリーンに移動させ、
Application にフォーカスしている。
これを action
で呼び出す。
module.action = function()
local appName = "alacritty"
local app = hs.application.find(appName)
if app == nil then
hs.application.launchOrFocus(appName)
elseif app:isFrontmost() then
app:hide()
else
MoveActiveScreen(app)
end
end
Application を見つけにいき、
なければ起動
一番前にいれば非表示
それ以外ならアクティブなスクリーンで開く
これで僕の望んだ動きはできた。
3. 透明度を切り替える
hammerspoon だけでは限界があるので、
Shell Script を書く。
これもいい記事があった。
Tutorial: Key-binding to toggle Alacritty background opacity
若干 Alacritty の config の key が古いので、修正
#!/usr/bin/env bash
## If alacritty.yml does not exist, raise an alert
[[ ! -f ~/.config/alacritty/alacritty.yml ]] && \
notify-send "alacritty.yml does not exist" && exit 0
## Fetch opacity from alacritty.yml
opacity=$(awk '$1 == "opacity:" {print $2; exit}' \
~/.config/alacritty/alacritty.yml)
## Assign toggle opacity value
case $opacity in
1)
toggle_opacity=0.85 # ここはお好み
;;
*)
toggle_opacity=1
;;
esac
## Replace opacity value in alacritty.yml
sed -i -- "s/opacity: $opacity/opacity: $toggle_opacity/" \
~/.config/alacritty/alacritty.yml
ただ、僕は Symbolic link でやっていて
なんか sed コマンドがうまく行かなかったので、
以下のようになった。
#!/usr/bin/env bash
## If alacritty.yml does not exist, raise an alert
[[ ! -f $DOTDIR/.config/alacritty/alacritty.yml ]] && \
notify-send "alacritty.yml does not exist" && exit 0
## Fetch opacity from alacritty.yml
opacity=$(awk '$1 == "opacity:" {print $2; exit}' \
$DOTDIR/.config/alacritty/alacritty.yml)
## Assign toggle opacity value
case $opacity in
1)
toggle_opacity=.85
;;
*)
toggle_opacity=1
;;
esac
## Replace opacity value in alacritty.yml
sed -i "" "s/opacity: $opacity/opacity: $toggle_opacity/g" \
$DOTDIR/.config/alacritty/alacritty.yml
$DOTDIR は dotfile の directory です。
この shell ファイルを
dotfiles の .config/alacritty/bin/toggle_opacity
に配置し
chmod +x .config/alacritty/bin/toggle_opacity
で実行可能に
さらにこの実行ファイルに PATH を通していく
export PATH=$PATH:$DOTDIR/.config/alacritty/bin
そしてこれを Hammerspoon を使って、実行コマンドを hotkey に登録する。
-- toggle Alacritty opacity
hs.hotkey.bind({ "cmd" }, "u", function()
hs.execute("toggle_opacity", true)
end)
これで OK
Goodbye iTerm2 👋
brew uninstall --cask iterm2
これで iTerm2 に備わっていて、気に入って使っていた機能を
Alacritty でも使えるようになった。
わかったことは、この一年でぐぐり力が上がったということである。
Alacritty x Tmux x Neovim という何ともモダンな開発環境を手に入れて、
非常に気分が良い。
皆さんもぜひ、パクれそうな箇所があればパクって、
俺かっけーな開発環境を作ってください。
Discussion