👌
Nushellのカスタムメニュー
Nushellのカスタムメニュー
メニュー設定とメニューを起動するためのキー設定をする必要があります。
今回はお気に入りのディレクトリを記載したファイルをからメニューを作成して、cd
などで候補一覧を出せるようにしてみます。
メニュー項目記載ファイルパス設定:config.nu
の先頭あたり
let fv_list_file = "/home/kawa90/.config/nushell/favorite_dir.txt" # full path
メニュー設定:config.nu
のmenu
{
# メニュー名称を設定
name: fv_menu
# trueの場合、メニュー起動時に`source`に基づきリスト作成
only_buffer_difference: true
marker: "# "
type: {
# メニューのレイアウト
layout: list
page_size: 10
}
style: {
# メニューリストの通常文字色
text: green
# メニュー選択時の文字色
selected_text: green_reverse
# description(optional)があれば、その文字色で表示
description_text: yellow
}
source: { |buffer, position|
# ここでは、$fv_list_fileに記載のディレクトリストをメニュー項目としている。
open $fv_list_file | lines
| each { |it| {value: $it} }
}
}
NushellマニュアルのMenus記載の下記のrecord
をsource:
で応答するようにする。ただこのコンテキストではconfig.nu
で定義した以外のグローバル変数はアクセスできないようだ($nu
などは除外のようだ)。このため、$fv_list_file
をconfig.nu
先頭で定義している。
{
value: # The value that will be inserted in the buffer
description: # Optional. Description that will be display with the selected value
span: { # Optional. Span indicating what section of the string will be replaced by the value
start:
end:
}
extra: [string] # Optional. A list of strings that will be displayed with the selected value. Only works with a description menu
}
キー設定:config.nu
のkeybindings
{
# 作成したメニュー名を指定
name: fv_menu
# キーの修飾キー(alt/ctrl/shft/control | alt/control | shift)
modifier: control
# キー名称(char_文字, TAB, backspace, insertなど)
# keybindings listenコマンドで確認できる
keycode: char_t
# 編集モード(vi挿入モード:vi_insertなど)で使用できるか決める
mode: [emacs, vi_normal, vi_insert] # Options: emacs vi_normal vi_insert
# キー押下時に、menuイベント及び、メニュー名称を送信する。
event: { send: menu name: fv_menu }
}
cd
と入力したところで、Ctrl-t
押下で下記のようなメニューリストが表示され、選択項目がコマンドラインに反映された。
❯ # cd
0: ~/work/deno/ansi_escape
1: ~/work/deno
2: ~/Documents/Zenn_Contents/
Page 1: records 0 - 2 total: 3
Tips
keybindings listen
built-inコマンドのkeybindings listen
では押下したキー情報を表示する。終了はESC
キーとなっている。
❯ keybindings listen
Type any key combination to see key details. Press ESC to abort.
char: a, code: 0x000061, modifier: NONE, flags: 0b000000
char: b, code: 0x000062, modifier: NONE, flags: 0b000000
char: c, code: 0x000063, modifier: NONE, flags: 0b000000
char: c, code: 0x000063, modifier: CONTROL, flags: 0b000010
keybindingsのキー設定
Terminalのキー設定およびnushellデフォルトのキー設定とかぶらないようにする。
デフォルトのキー設定
built-inコマンドのkeybindings default
で確認できる。
❯ keybindings default | first 4
╭───┬───────┬──────────┬───────────┬────────────────────────╮
│ # │ mode │ modifier │ code │ event │
├───┼───────┼──────────┼───────────┼────────────────────────┤
│ 0 │ emacs │ ALT │ Backspace │ Edit([BackspaceWord]) │
│ 1 │ emacs │ ALT │ Char('b') │ Edit([MoveWordLeft]) │
│ 2 │ emacs │ ALT │ Char('c') │ Edit([CapitalizeChar]) │
│ 3 │ emacs │ ALT │ Char('d') │ Edit([CutWordRight]) │
╰───┴───────┴──────────┴───────────┴────────────────────────╯
VSCodeのextension
VSCode使っているならvscode-nushell-lang
をインストールしたほうがいいかも。編集支援とsyntax ハイライトに対応している。
Discussion