Skip to content

Instantly share code, notes, and snippets.

@kuuote
Created February 12, 2025 18:20
Show Gist options
  • Save kuuote/73aba2a4ad0f5eba166741df146ef967 to your computer and use it in GitHub Desktop.
Save kuuote/73aba2a4ad0f5eba166741df146ef967 to your computer and use it in GitHub Desktop.

日報

  • natsukiumさんから nix repl でソースファイルの位置を辿る方法を聞いて、どうやっているんだろうと思いながら調べていたら気付いたらnixpkgsのtop level mattributeを辿るdduソースを作っていた
    • 今の所Nixでソースファイルの位置を取得する方法は3つある
      • __curPos を参照すると __curPos の位置を指すAttrSetが取れる
      • builtins.unsafeGetAttrPos を叩くとAttrSetのattributeが定義された場所が取得できる
        • 返ってくるのはattributeの中身ではなくattributeそのものの場所なので、後付けで使うのには向いていない
        • こちらは stdenv.mkDerivation の中で meta.position の中身を埋めるのに使われている
      • 関数は宣言した時に位置を保存しているらしく、replに打ち込んだりtraceしたりすると位置が表示されるものの、文字列にしたりはできない
    • 後、nixpkgsにはAttrSetで関数をwrapするやつがあって、一部それになってるのでこれもどうにかする必要がある
      • {pkg}.__functor {pkg} みたいなことをしてやったら元の関数が見えたのでこれで行くことにした
        • partial applicationなので与える値はなんでもいいけど
    • 関数がどうにもならないので、仕方なくreplをstdin流し込んで叩くことにした
      • エラーが出ても無視できるので雑に上に書いたことをやってる
    • 最終的にこうなった
  • Nixのセミコロン忘れがあまりに激しいのでlexima.vimとnvim-insxで =<Space> のパターンが末尾に来たらセミコロンを補完するように仕込んでみた
    • 延々とhrsh7thさん(nvim-insxの作者の方)Kento Ogataさんとこのへんの話で盛り上がってたけど楽しかった
    • 私は素朴にやってたけど、hrsh7thさんが出してくれたsubstituteパターンの方がすっきりして見えるのでこっちにした
  • Emacsでもinsxみたいなの欲しいので明日無いか聞いてみたい
  • 話の流れでスニペットの強制マッピングしんどい話から補完の話になって(Vimの組み込み補完にはマッピングを突き抜ける強制キーバインドが存在する)、補完の確定の際にキーワード単位で置換すると便利という話を聞いたのでこれも仕込んでみた
    • call search('\%#\k*\zs') を補完の確定動作の前に挟んでみた
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment