RoswellとSBCLのFish Completionを作った

roswellをfishでもっと扱いやすくするためにcompletionを書いたのでメモ。


sbcl --helpros help を引いてemacsのkeyboard macroで整形をしまくって書いた。ついでに pry もcompletion書いた。

大体はfish-shell/fish-shellのコードを読めば理解ができる。

一番の難関はcompletionの -n だと思うが、今回は愚直に記述した。詳しくは Fish用の補完スクリプトの作り方#補完スクリプトの作り方に書いてあるので今後必要になった時に参照したい。

ソースコード:

参考にしたもの

こんな感じで補完が効く。

~/.g/g/t/roswell (*´ω`*) < ros <tab>
build       (Make executable from script.)  help         (Use "ros help [command]" for more information about a command.)  run                        (Run repl)  version  (Show the roswell version information)
config               (Get and set options)  init              (Creates a new ros script, optionally based on a template.)  template           (Manage templates)
delete  (Delete installed implementations)  install  (Install a given implementation or a system for roswell environment)  update    (Update installed systems.)
fmt                  (Indent lisp source.)  list                                                       (List Information)  use  (Change default implementation.)

オプションを補完

sbcl <--option> のようなケース。

# pry -e
complete -c pry -s e -d "A line of code to execute in context before the session starts"

# sbcl --version
complete -c sbcl -l version -d  "Print version information and exit."

サブコマンドを補完

ros <commant> のようなケース。

# ros run
complete -f -c ros -n '__fish_use_subcommand' -xa run -d "Run repl"

# ros install
complete -f -c ros -n '__fish_use_subcommand' -xa install -d "Install a given implementation or a system for roswell environment"

サブコマンドのオプションを補完

ros <command> <--option> のようなケース。

# ros run -l
complete -c ros -n '__fish_seen_subcommand_from run' -s l -d 'load lisp FILE while building'

# ros run --load
complete -c ros -n '__fish_seen_subcommand_from run' -l load -d 'load lisp FILE while building'

サブコマンドのサブコマンドを補完

  1. helpのような説明が要らない場合
# ros help <command>
set -l __roswell_helps "run install update build use init fmt list template delete config version"
complete -c ros -n "__fish_seen_subcommand_from help" -xa $__roswell_helps
  1. ros <command> <command> の場合
# ros config show
complete -c ros -n "__fish_seen_subcommand_from config" -xa show -d "show TARGET."

ついでに ros config のmanualの説明が間違っていたので修正pull requestを出してmergeされた。嬉しい。

https://github.com/roswell/roswell/pull/446

roswellの場合、ドキュメントやmanはTravis CIで自動生成してくれるみたいだ。

You're right, it's supposed to push in travis ci!

We'll make a separate pull request with only markdown changes.

https://github.com/roswell/roswell/blob/master/.travis.yml#L75-L82

https://github.com/roswell/roswell/search?q=documents+update&type=commits

https://github.com/roswell/roswell/pull/445#issuecomment-708889683

roswellは以下のようにbuildする。

--enable-manual-generation--enable-html-generation をconfigureの引数に入れるとdocumentをupdateしてくれるみたい。

~/.g/g/t/roswell (*´ω`*) < bash bootstrap
~/.g/g/t/roswell (*´ω`*) < ./configure --enable-manual-generation --enable-html-generation
~/.g/g/t/roswell (*´ω`*) < make
~/.g/g/t/roswell (*´ω`*) < sudo make install

fishを便利にするのも、ちょっとしたpull requestを出すのも楽しいね。