1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
# konoma 設定例。~/.config/konoma/config.toml に置く。
# 無くてもデフォルトで動作する。
[]
= false
# 表示言語。"auto"(既定) | "en" | "jp"。ヘルプ(?)・キーヒント・モード表示・メッセージ等に適用。
# "auto" は OS の既定言語に追従 (macOS のシステム言語が日本語なら jp、それ以外は en)。
= "auto"
= "auto" # always | auto | hidden
# ステータス系の配置。
# split = コンテキスト(モード/パス/倍率)を上(タブと同じ行の右)・キーヒントを下 (既定)。
# bottom = コンテキストもキーヒントも下1行にまとめる。
# キーヒントは「最も有用な順」に、表示幅へ入る分だけ自動表示し、続きは末尾 … で省略する。
= "split"
# ツリー行頭に Nerd Font アイコンを表示。要 Nerd Font。端末に "Symbols Nerd Font" を
# フォールバック追加すれば普段のフォントのまま使える。豆腐(□)が出る/未導入なら false に。
# アイコンは無色(端末の既定前景色を継承)。色は将来 git status のあるファイルにのみ使う。
= true
# テキストプレビューの長い行の扱い。
# true = 折返して全文を表示 (既定)。
# false = 折返さず h/l・←/→ で横スクロール (less 風)。
= true
# コード/テキストプレビューに行番号ガターを表示するか。
# false = 表示しない (既定・最小表示)。
# true = 行頭に行番号を表示 (淡色)。大きいファイルは less 風ウィンドウ読みで、
# G(末尾)時も総行数から正しい行番号を表示する。
= false
# エディタ風の git 変更ガター (Zed 風)。作業ツリーに変更のあるコード/テキストファイルの
# プレビューで、左端に変更マーカーを出す:
# 緑 ▌ = 追加行 / アンバー ▌ = 変更行 / 赤 ▔ = 直下の行の上端=削除が起きた行間。
# true = 表示 (既定。変更のないファイル/非 git リポジトリでは何も出さない)。
# false = 表示しない。
= true
# タブのタブストップ幅 (既定 4)。コード/テキストプレビューでタブを「可視マーカー(→)+
# 次タブストップまでの空白」に展開する桁数。端末はタブを桁揃えしないため、これでインデントが
# 揃い、かつタブだと分かる。0 にすると展開しない(生のタブのまま=桁が崩れることがある)。
= 4
# コードのシンタックスハイライトを行うか。
# true = syntect で着色 (既定)。初回に言語ごと文法コンパイルが入る(下記 preview_loading で吸収)。
# false = 素テキスト表示で最速 (syntect を一切使わない)。重さが気になる/不要なら false。
= true
# 重いコードプレビュー(初めて開く言語=文法コンパイルが要るとき)の待ちの見せ方。
# ※ 一度開いた言語は温まるので即時表示=この設定に関係なく一瞬。
# indicator = 画面中央にローディング表示を出してから本文を着色表示 (既定)。
# progressive = 本文を素テキストで即表示し、準備でき次第ハイライトへ差し替え (フリーズ無し)。
= "indicator"
# タイトル(tree/preview)のパス表示の既定。p キーで relative→home→full を巡回。
# relative = 起動ディレクトリ名からの相対 (例: konoma/src/main.rs)。既定。
# home = HOME からの相対 (例: ~/work/konoma)。
# full = フルパス (例: /Users/me/work/konoma)。
= "relative"
# プレビューのページ送りキー流儀(既定プロファイル)。j/k 行移動・矢印・PageUp/Down は両流儀共通。
# vim = Ctrl-f/Ctrl-b でページ、Ctrl-d/Ctrl-u でハーフページ (既定)。
# less = Space/b でページ、d/u でハーフページ (※プレビュー系の面のみ。ツリーの Space は
# ファイル管理リーダーに割り当て済みのため less でも vim ページのまま)。
# ※これは「ページ送りの既定プロファイル」。個別キーは下の【トップレベル】[keys.<面>] で
# 上書きできる(そちらが優先・別物)。
= "vim"
# 画像プレビューの表示サイズスケール (0.1〜1.0)。表示矩形をこの倍率に縮めて表示する。
# 既定 1.0 では「初期=画像サイズ(フィット)、+で拡大、viewport を超えたら hjkl でパン」。
# 1.0 未満にすると表示が小さくなる代わりに、kitty への転送ピクセル(=表示/ズームの待ち時間)が減る。
# 配置は常に中央・アスペクト比も正しい。速度が要るとき下げる(例 0.6 で転送 ≒ 1/3)。
# GIF アニメ/全画像で共有(GIF の転送を軽くしたいときもこれ)。
= 1.0
# SVG ラスタライズの最大辺(px)。ベクタは無限解像度なので、この px まで拡大して描く
# (小さい SVG もくっきり)。大きいほど鮮明だが描画・転送が重い。既定 800。
# ★SVG 専用★: ラスタ画像/GIF はこの設定の影響を受けない(GIF の転送量は image_render_scale)。
= 800
# 詳細リスト表示: 各行の右に並べるメタ情報の列。空 [] (既定) で素の表示。
# 指定できる列: "size"(サイズ) / "modified"(更新日時) / "perm"(権限 rwx) /
# "type"(file/dir/link) / "items"(ディレクトリの項目数。各 dir 行で read_dir するので
# ディレクトリが多い木では少し重い)。指定順に右へ並ぶ。
# 長い名前は自動で切り詰め(…)、列は右寄せで縦に揃う。
# 単体の全情報(symlink 先・絶対パス含む)は `i` のポップアップで見られる。
= [] # 例: ["type", "size", "modified"]
# コミットグラフ(o→g)で同時に描くローカルブランチの上限 (既定 12)。
# ブランチが多いとレーン/色/凡例が溢れるため、起動時は 基準/優先+HEAD+最近コミット順で
# 上限まで自動選択する。グラフ内 `b` のパネルで表示/非表示の切替+優先順の並び替えができる
# (Space:切替 / J/K:並替 / a:全部 / n:現在のみ / Enter:適用、HEAD は常に表示)。0 で無制限。
= 12
# コミットグラフの「基準/優先ブランチ」(順序つき・既定 [])。例: ["main", "develop"]
# ① ここに挙げたブランチを優先的に表示(上限の先頭に置く)。
# ② 左から最初に存在するものを「基準」= lane0 に左一直線で固定する。
# ③ 並び順が凡例/パネルの表示順にも反映される(配列→HEAD→最近順)。
# グラフ内 `b` パネルの J/K で当セッション限り並び替え可(config への書き戻しはしない)。
= []
# log(o→l)/グラフ(o→g)のコミット行で、右側メタ情報(author・日付、グラフは short も)の寄せ方。
# "right" (既定) … パネル右端に揃えて「列」にする。日付/著者が縦に揃い、新旧を一目で追える
# (SourceTree / VS Code Git Graph 流)。狭い時は subject を末尾省略し、
# さらに狭ければメタ自体を省く(非本質列を落とす)。
# "inline" … subject の直後に続けて出す(従来表示。subject のすぐ隣にメタが並ぶ)。
= "right"
# 終了確認。q(最上位ツリー)/ Q(どこからでも) でアプリ全体を終了するとき、確認ダイアログを出すか。
# true (既定) … 「終了しますか?」を確認(q / y / Enter = 終了, n / Esc = 取消。qq で素早く抜ける)
# false … 即終了(確認なし)
= true
# ブックマーク上書き確認。m でブックマークを登録するとき、そのキーが既に**別のパス**を指していれば
# 確認ダイアログを出す(誤って上書きするのを防ぐ)。同じパスの再登録・未使用キーは確認なしで登録。
# true (既定) … 上書き前に確認(y / Enter = 上書き, n / Esc = 取消)
# false … 確認なしで即上書き
= true
# CSV/TSV テーブルプレビューの列レインボー。列ごとに色を回して見分けやすくする(Rainbow CSV / csvlens 流)。
# true (既定) … 列ごとに色付け。
# false … 単色(整列・セル移動・コピーはそのまま)。
# 操作: hjkl=セル移動 / g・G=先頭末尾行 / 0・$=先頭末尾列 / y→ c:セル r:行 C:列 f:フルパス / q:戻る。
= true
# フォローモード(F)がジャンプ先ファイルをどう開くか。
# "diff" (既定) … そのファイルの全画面 git diff(何から何に変わったかがハンク単位で見える。
# 未追跡ファイルは全行追加の diff)。q で戻る・s でレイアウト切替。
# "file" … 通常の全画面プレビュー(最初の変更ハンクの位置まで自動スクロール・変更行にガター)。
# どちらでも、diff の無いファイル(変更なし/リポジトリ外)と画像/SVG/動画/PDF は通常プレビューで開く。
= "diff"
# Markdown プレビューのタスクリスト(チェックボックス)で Space が巡回する状態の配列(巡回順)。
# 各要素は 1 文字。既定 [" ", "x"] = GFM 標準の 未完 ⇄ 完了。
# 例: [" ", "/", "x"] で Obsidian 流の「作業中 [/]」を挟む。標準状態は Nerd Font の
# チェックボックスアイコン(ui.icons=false なら [ ]/[x])・カスタム状態は [/] のまま表示。
# 操作: 装飾表示で Tab/⇧Tab=リンクとチェックボックスを巡回 → Space(または Enter)=トグル。
# トグルは書込み前にファイルを照合し、外部で変わっていたら書かずに再読込する(安全側)。
# 配列に無い状態のボックスは先頭状態へ正規化。不正な設定(2文字要素・1要素以下)は既定に戻る。
= [" ", "x"]
# バックグラウンド処理インジケーター。git の無視ファイルスキャン・メディア読込・
# ハイライト準備・インライン画像取得などが裏で走っている間、右上にスピナーと
# ジョブ名(複数なら +n)を表示する。処理が無いときは何も出ない(=アイドル負荷ゼロ)。
# true (既定) … 表示する
# false … 表示しない(中央の「読み込み中…」等、個別の表示はそのまま)
= true
# ツリーの既定の並び (起動時)。実行時は `s` のソートメニューで切り替え可
# (基準 n/s/m/e・r=昇降反転・.=フォルダ先頭)。
[]
= "name" # 並び替えの基準: "name"(既定) | "size" | "modified" | "ext"
= false # 降順にするか (既定 false=昇順)
= true # ディレクトリを先頭に固める (既定 true)。false=ファイルと混在
[]
# 色は "#rrggbb" / 色名 ("black","lightblue" 等) / 端末インデックス ("8") / "none" で指定。
#
# アプリ全体の背景色。既定 "none" = 端末の既定背景のまま (端末側の透過設定もそのまま活きる)。
# 色を指定すると全画面をその色で塗りつぶす (透過は無効化される)。
= "none"
#
# Markdown の「コード」の背景色 (inline code `...` とコードブロック ``` 共通)。
# "none" = 背景なし。inline code の箱を消し、太字/斜体/リンクと同じく前景色だけで表現
# (コードブロックは左ガター ▎ +色のみ)。見た目を揃えたい場合はこれ。
# 既定はやや明るいスレート。背景を出したくない場合は code_bg = "none"。
= "#2b303b"
# コードブロック先頭の言語ラベル(バッジ)の寄せ。"right"(既定) または "left"。
= "right"
# 言語バッジの背景色。
# "auto"(既定) = code_bg を少し明るくした色(本文コードと区別)。
# "none" = 背景なし(淡色テキストのみ)。
# 任意の色 = "#rrggbb" / 色名 等。
= "auto"
# コードのシンタックスハイライトのテーマ (two-face 同梱・単体コードと md フェンス共通)。
# 既定 "TwoDark" = Zed の One Dark 配色。区切り(空白/-/_)と大文字小文字は無視・不明名は TwoDark。
# 主な選択肢: "TwoDark"(=one-dark) / "OneHalfDark" / "Dracula" / "Nord" /
# "gruvbox-dark" / "gruvbox-light" / "Catppuccin Mocha"(Frappe/Latte/Macchiato) /
# "Monokai Extended" / "Solarized (dark)" / "Solarized (light)" /
# "base16-ocean.dark" / "GitHub" / "zenburn" / "Sublime Snazzy" / "DarkNeon" など。
= "TwoDark"
# プレビュールールは上から評価し、最初にマッチしたものを使う。
# builtin: 内蔵レンダラ ("markdown" | "mermaid" | "image" | "svg" | "video" | "pdf" | "code" | "text")
# markdown=tui-markdown で装飾(コードは syntect ハイライト)。md内の ```mermaid は図に合成。
# mermaid =mermaid-text で .mmd/.mermaid 単体を Unicode 罫線図に描画(純Rust・外部不要)。
# image =kitty graphics で全画面表示(ズーム/パン)。GIF は自動でアニメーション再生。
# svg =resvg/usvg/tiny-skia でラスタライズして画像表示(純Rust・外部不要)。
# video =ffmpegthumbnailer/ffmpeg で代表フレーム1枚を抽出しサムネイル表示(端末内再生はしない)。
# 外部ツールは任意(不在ならヒント表示にフォールバック)。再生したい場合は下の command 例参照。
# pdf =ページを1枚ずつラスタライズして画像表示(pdftocairo/pdftoppm/qlmanage/sips)。macOS は qlmanage/sips
# が常在するため事実上どの環境でも表示可。外部ツール全滅時のみヒント表示にフォールバック。
# 複数ページは J/K(または PageDown/PageUp)で送る(poppler 必須=pdfinfo でページ数取得+任意ページ描画)。
# csv =カンマ区切りを整列テーブルで表示(列レインボー+セルカーソル)。hjkl=セル移動 / y→=セル/行/列コピー。
# tsv =タブ区切り。表示・操作は csv と同じ(区切り文字だけタブ)。色は [ui] csv_rainbow で切替。
# command: 外部コマンド委譲。{path}=対象ファイル, {out}=出力先(一時パス)
# render_as: command 出力の扱い ("image" でPNG等を全画面画像表示)
# detached: 別プロセスで開きTUIをブロックしない(動画等)
[[]]
= "*.md"
= "markdown"
[[]]
= "*.{mmd,mermaid}"
= "mermaid" # 内蔵(mermaid-text)で罫線描画。崩れる図は下のコマンド委譲に差し替え可
# command = "merman -i {path} -o {out}.png --scale 2"
# render_as = "image"
[[]]
= "*.svg" # ラスタ画像より先に(infer は svg も image/* と判定するため順序が重要)
= "svg"
[[]]
= "image/*" # png/jpg/webp/bmp... と GIF(自動アニメーション)
= "image"
[[]]
= "*.csv" # 整列テーブル(列レインボー+セルカーソル)。色は [ui] csv_rainbow で切替
= "csv"
[[]]
= "*.tsv" # タブ区切り版
= "tsv"
[[]]
= "*.{rs,ts,tsx,js,py,go,toml,json,sh,yaml,yml,c,cpp,h}"
= "code"
[[]]
= "video/*" # 既定: 代表フレーム1枚をサムネイル表示(端末内再生はしない)
= "video"
# 端末内ではなく外部プレイヤーで"再生"したい場合は、上を消して下に差し替える(委譲):
# command = "mpv {path}"
# detached = true # 別プロセスで開き TUI をブロックしない
[[]]
= "*.pdf" # 既定: ページを1枚ずつラスタライズして全画面画像表示(J/K でページ送り・macOS は標準ツールで表示可)
= "pdf"
# どのルールにもマッチしないファイルは [can not preview: <ext>] を全画面表示。
# ── キーバインド (FR-8) ──────────────────────────────────────────────────────
# 【トップレベルのセクション】 — [ui] の中ではなく、ファイルの一番外側に書くこと。
# (上の ui の keys="vim" とは別物。混同しやすいので注意)
#
# モデル: 「面(surface) ごとに キー → コマンド(action) を割り当てる」。内蔵の既定マップが
# あり、ここで上書き/追加/無効化できる(書かなければ既定のまま)。helix 風の表記:
# [keys.<面>]
# <キー> = "<アクション>"
#
# ■ 面(surface)名 — 「今どの画面か」で別々のマップを持つ。snake_case:
# global : どの面でも効く(タブ t/[/]/1-9・T=タブ一覧・ヘルプ ?)。w は既定未割当
# (vim の単語移動と誤爆するため。閉じるはツリーの q。"w"="tab_close" で復活可)
# tree : ツリー全画面 tree_visual : ツリーのビジュアル選択中
# preview_text : テキスト/Markdown preview_image : 画像 preview_git_diff : git 差分
# git_changes : Git 変更ハブ(o) git_log / git_graph / git_branches / git_detail
# sort bookmarks tabs(タブ一覧: d=tab_list_close) info help
#
# ■ キー表記: 単文字(大文字=Shift 込み: "G")・"space"・リテラル "0 $ ! + - = . / '"・
# 装飾 "ctrl-f"(別名 "c-f")・名前付き "tab enter esc up down left right home end pageup pagedown"。
# 和音(リーダー)は空白区切り 2 トークン: "y f" = y の後に f、"space d" = Space の後に d。
# ※ Esc/Enter/Backspace/Delete/Tab/矢印・テキスト入力中の文字キーは固定(rebind 不可・無視)。
#
# ■ アクション名(snake_case)の主なもの:
# 移動 : "navigate:down|up|top|bottom|page_down|page_up|half_down|half_up|left|right|line_home|line_end"
# パスコピー : "copy_name" "copy_relative" "copy_full" "copy_parent" "copy_at_ref"(@相対パス) "copy_code_block"(md コードブロック)
# ファイル管理 : "file_create" "file_rename" "file_delete" "file_copy" "file_cut" "file_paste"
# ツリー : "quit" "tree_descend" "tree_leave" "filter_start" "toggle_hidden" "refresh"
# "open_sort_menu" "toggle_info" "request_edit" "cycle_path_style" "mark_set"
# "mark_jump" "set_anchor" "reset_anchor" "open_git_diff_cursor" "open_git_view"
# "enter_visual" "toggle_select"
# Agent Watch : "toggle_changed_filter"(C: 変更ファイルのみ表示) "jump_next_change"(n) "jump_prev_change"(N)
# "toggle_follow"(F・global: 外部変更ファイルへ自動ジャンプ=AI の作業を追尾)
# パス移動 : "paste_jump"(P・global: クリップボードのパス/GitHub リンクを読んでその位置へ移動=
# reveal + preview。ローカル絶対/相対・GitHub blob/raw URL・#L123 / :123 行指定に対応。
# 現在の root 外なら対象の repo を root に切替。@path#L 参照もそのまま貼れる)
# ブックマーク : m=登録・'=一覧はツリーとプレビュー両面に既定割当(プレビュー中は表示中ファイルを登録)。
# 一覧(')内は素の英字=そのブックマークへジャンプ(a-z ローカル/A-Z グローバル)。
# "bookmark_edit"(既定 ctrl-e) "bookmark_delete"(既定 ctrl-d) "bookmark_close"(q / ')
# ※ j/k/q と global の t/T/F/Q はキー操作に取られるため、その文字のブックマークは
# j/k + Enter で選んで開く(または当該キーを config で退避)。
# プレビュー : "preview_back" "search_start" "search_next" "search_prev"
# "preview_copy_selection_ref"(Y: 選択/キャレットの @path#L 参照コピー)
# "link_open"(Enter: リンクを同タブで開く) "open_link_new_tab"(Ctrl-t: リンクを別タブで開く)
# "image_zoom_in" "image_zoom_out" "image_zoom_reset"
# 並べ替え : "sort_name" "sort_size" "sort_modified" "sort_ext" "sort_toggle_reverse" "sort_toggle_dirs_first"
# Git : "git_stage" "git_unstage" "git_stage_all" "git_unstage_all" "git_discard"
# "git_commit" "git_worktree_diff" "git_open_log" "git_open_graph"
# "git_open_branches" "git_launch_tool" "cycle_diff_layout" "git_diff_discard"
# 無効化 : "noop"(別名 "disabled") = そのキーの既定割り当てを消す
#
# ■ リーダー(2 段キー / which-key): 押すと候補がフッターに出る。
# y → パスコピー (n=名前 r=相対 f=フル p=親 @=AI 向け @相対パス参照)
# Space → ファイル管理 (n=作成 r=改名 d=削除 c=コピー x=カット p=貼付) ※ツリー / ビジュアル
#
# ■ 衝突検知: 同じ面で既定の重要キーを奪う設定(リーダー prefix を単発で潰す・global の
# タブキーを別用途にする等)は起動時に検知し、フッターに通知して既定へ戻す(黙って壊さない)。
#
# 例(コメントを外して使う):
# [keys.tree]
# d = "open_git_diff_cursor" # カーソルの変更ファイル diff (既定)
# "space d" = "file_delete" # Space→d で削除 (既定)
# "y f" = "copy_full" # y→f でフルパスコピー (既定)
# x = "noop" # x を無効化
#
# [keys.preview_text]
# "ctrl-f" = "navigate:page_down"
#
# [keys.git_changes]
# g = "git_open_graph"
#
# (後方互換) 旧 [keys] の copy_name/copy_full/copy_relative/copy_parent (suffix) は当面読み込み、
# パスコピーの y リーダーへ反映する。**copy_prefix は無視** (新スキームでプレフィクスは y 固定)。
# いずれも非推奨・新形式 [keys.<面>] を推奨。
# 外部エディタ(`e` キーで起動)。**拡張子ごとに指定可能**。
# 解決順: [editor.ext] の拡張子別 → command(全体既定) → $VISUAL → $EDITOR → vim。
# 値はコマンド+引数(空白区切り)。{path} があればそこへファイルパスを差し込み、無ければ末尾に追加。
# {line} は「プレビューで見ていた行」に置換(text/code/生 Markdown[R] のキャレット行)。
# {line} を書かなくても主要エディタは自動で行指定になる(vim 系=+N / VS Code=-g path:N / Sublime・Helix=path:N)。
# 装飾 Markdown/Mermaid は reflow で 1:1 対応が無いため先頭で開く(`R` で生ソースにすれば行指定可)。
# (注: 引数のクオートは未対応=空白区切りのみ。複雑な起動はラッパースクリプトを指定。)
[]
= "" # 既定エディタ。空なら $VISUAL→$EDITOR→vim にフォールバック。
# 拡張子別の割り当て(ドット無しのキー)。
[]
# rs = "nvim"
# md = "code -w" # GUI は終了待ちフラグ(-w/--wait)推奨
# py = "nvim +{line} {path}" # {line} で開く行を明示(無くても vim/code 等は自動)
# txt = "nano"
# ── Git 連携 ───────────────────────────────────────────────────────────────
# `o` で内蔵 Git ビュー(変更ハブ)を開く。外部 git ツールは変更ハブの中で `!` から起動する。
[]
= "lazygit" # 変更ハブの `!` で起動する外部 git ツール(コマンド+引数・空白区切り)。例: "tig status"
= "unified" # diff の初期レイアウト: "unified"(縦) | "split"(横並び) | "auto"(幅で自動)。差分中 `s` で縦→横→Auto を巡回
# main_branch: 【未実装/予約】基準ブランチ固定グラフ(リリース後・docs/GRAPH-BASE-SPEC.md)用。
# 現状はどこからも参照されない=設定しても無効。実装時に有効化する。