Skip to content

KASAHARA-Kyohei/cmdnote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cmdnote

cmdnote は、セキュリティ系コマンドや日常的な CLI コマンドをカテゴリ単位で参照し、選択したコマンド文字列を標準出力へ返せる Rust 製 TUI アプリです。入力欄への挿入は zsh / bash の shell integration で行います。TUI 内でコマンドを追加・編集・削除できます。

MVP では以下を提供します。

  • ratatui + crossterm による 3 ペイン UI
  • ~/.config/cmdnote/commands.toml の TOML 読み書き
  • カテゴリ絞り込み
  • 全文検索
  • a による TUI 内追加フォーム
  • e による編集
  • d による削除確認
  • Enter で選択コマンドを標準出力へ返して終了
  • cmdnote init による初期設定ファイルの自動生成
  • cmdnote install-shell zsh|bash による shell 設定の自動追記
  • cmdnote shell-init zsh|bash による入力欄連携
  • cmdnote insert による実験的な入力欄挿入モード
  • プレースホルダがある場合の簡易入力フォーム
  • y でクリップボードへコピー
  • favorite フラグ
  • 将来のプレースホルダ置換に備えた構造

ファイル構成

  • src/main.rs: 初期化、ターミナル制御、イベントループ
  • src/app.rs: アプリケーション状態の更新とキー操作
  • src/model.rs: データモデルと AppState
  • src/store.rs: TOML の読み込み・保存
  • src/ui.rs: 画面描画
  • src/event.rs: crossterm イベントラッパー
  • src/clipboard.rs: クリップボード連携
  • src/filter.rs: カテゴリ絞り込みと検索
  • src/form.rs: add/edit/placeholder のフォーム状態
  • src/validate.rs: 入力バリデーション
  • assets/sample_commands.toml: サンプル設定

通常利用

通常利用では、次の 2 つに固定して使う想定です。

  • 実行コマンド: cmdnote
  • 設定ファイル: ~/.config/cmdnote/commands.toml

まず cmdnote コマンドを使えるようにします。

GitHub から入れる場合:

cargo install --git https://github.com/KASAHARA-Kyohei/cmdnote.git

ローカルリポジトリから入れる場合:

cargo install --path .

cargo install の後に cmdnote が見つからない場合は、~/.cargo/bin に PATH が通っているか確認してください。

初回セットアップ:

インストール済みバイナリを使う場合

cmdnote init
cmdnote install-shell zsh
exec zsh

これで以後は Ctrl-gcmdnote を開けます。選択して Enter を押すと、コマンド文字列がシェルの入力欄に入ります。

既存ファイルをサンプルで上書きしたい場合:

cmdnote init --force

通常の起動:

cmdnote

shell 連携

zsh

cmdnote init
cmdnote install-shell zsh
exec zsh

その後は Ctrl-gcmdnote を開き、選択したコマンドを入力欄へ入れられます。

bash

cmdnote init
cmdnote install-shell bash
exec bash

内部的には source <(cmdnote shell-init zsh|bash) を使っていますが、通常は install-shell が rc ファイルへ自動設定するため意識しなくて大丈夫です。

操作方法

  • Tab, h, l: ペイン移動
  • j, k, , : 選択移動
  • /: 検索モードに入る
  • a: 追加フォームを開く
  • e: 選択中コマンドを編集
  • d: 選択中コマンドを削除
  • Backspace: 検索文字を削除
  • Enter: 検索モード終了、フォーム保存、または選択中コマンドを標準出力へ返して終了
  • y: 選択中コマンドをクリップボードへコピー
  • q: 終了
  • PgUp, PgDn: details ペインをスクロール

add / edit フォーム

a で add フォーム、e で edit フォームを開きます。

  • 入力項目: category, title, command, description, memo, tags, favorite
  • Tab, Shift-Tab: 項目移動
  • Enter: 保存
  • Esc: キャンセル
  • favorite: Space で切り替え
  • tags: カンマ区切りで入力

idtitle から自動生成され、重複時は連番サフィックスを付けて一意化します。

保存時には最低限以下を検証します。

  • category 必須
  • title 必須
  • command 必須

保存は ~/.config/cmdnote/commands.toml へ行われ、親ディレクトリが無ければ自動作成されます。

プレースホルダ

command{target}{url} のようなプレースホルダが含まれている場合、Enter 時に簡易入力フォームを開きます。入力値で置換した結果を標準出力へ返して終了します。

stdout モード

cmdnote 本体は標準出力へ返すツールとして使います。

selected="$(cmdnote)"
printf '%s\n' "$selected"

開発者向け

開発中だけ、cargo runCMDNOTE_CONFIG を使います。通常利用では不要です。

別パスの設定ファイルで試す例:

CMDNOTE_CONFIG=./tmp/commands.toml cargo run -- init
CMDNOTE_CONFIG=./tmp/commands.toml cargo run

開発中に shell 連携をその場だけ読み込む例:

source <(CMDNOTE_CONFIG=assets/sample_commands.toml cargo run -- shell-init zsh)

cargo run で通常起動する例:

cargo run -- init
cargo run

実験的な入力欄挿入モード:

cargo run -- insert

生成される zsh widget は次のとおりです。

cmdinsert() {
  local selected
  selected="$(cmdnote </dev/tty)" || return
  [[ -n "$selected" ]] || return
  LBUFFER+="$selected"
  zle reset-prompt
}
zle -N cmdinsert
bindkey '^g' cmdinsert

insert モードについて

cmdnote insertTIOCSTI を使った実験的な補助モードです。環境によっては動かないため、配布用途では shell-init を推奨します。

TOML 形式

より実用的なカテゴリ別サンプルは assets/sample_commands.toml を参照してください。

version = 1

[[commands]]
id = "nmap_tcp_syn"
category = "network"
title = "Nmap SYN scan"
command = "nmap -sS -T4 {target}"
description = "基本的なTCP SYNスキャンを実行します。"
memo = "自分用メモ"
tags = ["nmap", "scan"]
favorite = true

今後の拡張ポイント

  • favorite の切り替え操作
  • ソート順の切り替え
  • プレビュー内でのシンタックスハイライト
  • シェル補完や zsh/fish 連携
  • tmux やクリップボード周りの追加連携
  • よりリッチなプレースホルダ入力 UI
  • 入力履歴やテンプレート管理

注意点

  • Linux で y を使う場合、実行環境によってはクリップボード機能に GUI セッション依存の制約があります。
  • 初回起動時に設定ファイルが無くても、a で追加して保存すれば自動作成されます。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages