- 寒くて体調がクソ悪い
- 環境変数完全に理解した
- Linuxの場合
systemctl --user get-environment
でほぼ素に近い環境変数取れるので、そこに/etc/profile
の結果を足したら大体なんとかなる- envコマンドを使うと変数を消した上で新しい物を適用できて便利
- tmuxのグローバル変数は
tmux show-environment -g
で取れてtmux set-environment -gu
で消せてtmux set-environment -g
で足せる- のでこれらを組み合わせると全部入れ替えられる
if [[ -z "${__env__}" ]]; then exec env -i $(systemctl --user show-environment) __env__=1 $(command -v bash) $(realpath $0) fi unset __env__ source /etc/profile tmux show-environment -g | while read var; do tmux set-environment -gu "${var%%=*}" done env | while read var; do tmux set-environment -g "${var%%=*}" "${var#*=}" done
- bashの置換が意味不明すぎてここ参考にした
=
が複数ある中で先頭だけ除去したいので最短と最長でごにょった
- bashの置換が意味不明すぎてここ参考にした
- のでこれらを組み合わせると全部入れ替えられる
- なんでこれをやりたいのかというと、home-managerのセッション変数を消したい
- うちの環境だとhome-managerの支配下のfishをログインシェルにしているので根本に生えてる
- Linuxの場合
- direnvのキャッシュについて完全に理解した
direnv_layout_dir() { echo /tmp/direnv/$(pwd | base64) }
- Pythonのptyモジュールを使って端末で動くキーリマッパーみたいなものを作った
- 突貫工事クオリティだけどこんなやつ
- やってることはTrie構築してstdin入力にしてそれ辿ってるだけなんだけど、エスケープシーケンスの扱いだとかptyの内部の動きだとか考えることが多かった
- ターミナルは特定のエスケープシーケンスへの応答をstdin経由で送ってくることがある
- readした物の先頭が0x1b(=Esc)だったら処理せず素通しするようにしてる
- ptyについてはreadできないタイミングでreadするとブロッキングして死ぬとか空の値を返すとstdin閉じた判定されて固まるとそのへん
- マッピングの途中で入力途切れるケースをどう処理するのかが悩ましかった
- ターミナルは特定のエスケープシーケンスへの応答をstdin経由で送ってくることがある
- Trieについてはバイト列を入力にしてるのをいいことにかなり雑に実装してある
root = [None] * 257
とやって各値へのバケツと結果を指す部分である256番目の要素を固定で用意している
- どうやってI/O捌いてるんだと思ってptyモジュールの中身を読んでたけど、selectとかepollってここで出てくるのかあってなった
- SIGWINCHというシグナルをハンドリングしてmaster側のfdにリサイズ叩き込むとウィンドウリサイズを伝播できる
pty.spawn()
だとfdもらえないのでHackyなことをしている- 最初の描画時にfdメモってついでにリサイズ
- 補完でスニペットをスニペットエンジンに投げるためのソースを書いた
- LSP互換を謳うスニペットエンジンが複数あるので差し替え可能で便利
Created
March 20, 2025 15:48
-
-
Save kuuote/950f29b621c9d67ff8a701e50a8408bf to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment