2024-11-13
fzfで表示される選択肢と選択した結果得られる値を分けられるようにしたいので作った。yamlでkey-valueペアのリストを保持しておいて、そのキーの選択をfzfで行い、得られる値はvalueである、みたいな感じ。
#!/bin/bash
# ヘルプメッセージ
function print_help {
echo "Usage: $0 <yaml_file>"
echo
echo "This script allows you to select a key from a YAML file using fzf, and outputs the corresponding value."
echo
echo "Options:"
echo " -h Show this help message and exit"
echo
echo "Sample YAML format:"
echo " key1: value1"
echo " key2: value2"
echo " key3: value3"
}
# -hオプションのチェック
if [ "$1" == "-h" ]; then
print_help
exit 0
fi
# 引数チェック
if [ -z "$1" ]; then
echo "Error: No YAML file specified." >&2
print_help
exit 1
fi
# 引数からYAMLファイルのパスを取得
YAML_FILE="$1"
# YAMLファイルの存在チェック
if [ ! -f "$YAML_FILE" ]; then
echo "Error: File '$YAML_FILE' not found." >&2
exit 1
fi
# キーをfzfで選択
selected_key=$(yq e 'keys | .[]' "$YAML_FILE" | fzf)
# キーが選択されていない場合
if [ -z "$selected_key" ]; then
echo "No key selected." >&2
exit 1
fi
# 選択されたキーに対応する値を取得
selected_value=$(yq e ".${selected_key}" "$YAML_FILE")
# 値を標準出力に表示
echo "$selected_value"
exit 0
上のコマンドを fzf-keyvalue-select
という名前でパスを通しておく。その上で以下のような関数を登録しておくと便利。
function notion
set url (fzf-keyvalue-select ~/.local/fish/notion.yaml)
and open $url
end