Customize¶
Common changes, ready to copy. After saving a file, run Reload settings from the command palette. Where the files are: Configuration files.
Change a key¶
In keymap.toml (Edit keymap, ⌘K ⌘S / Ctrl+K Ctrl+S), add a block below the preset. Find the action ids in Actions and keys.
# F2 renames, Shift+F6 does nothing any more, Cmd+Shift+N (Ctrl+Shift+N) makes a folder
[[bindings]]
context = "FilePane"
keys = { "f2" = "pane.rename", "shift-f6" = "", "mod-shift-n" = "pane.mkdir" }
# The terminal on Ctrl+` everywhere
[[bindings]]
context = "Global"
keys = { "ctrl-backtick" = "terminal.toggle" }
Prefer macOS-style keys? Set preset = "macos" at the top. See Keys for the details.
Your editor¶
F4 opens files in your editor. In settings.toml:
[editor]
command = "zed" # or "code -n", "subl {file}:1", "open -a TextEdit", "notepad++ {file}"
folder = "zed" # F4 on a folder and Shift+F11
[editor.extensions]
md = "typora"
"rs,toml,json,yaml" = "zed"
"png,jpg,jpeg,psd" = "open -a GIMP"
pdf = "open -a 'Adobe Acrobat'"
"Dockerfile,Makefile" = "zed"
"(none)" = "zed" # files without an extension
The file's path goes where {file} stands, or at the end. Program names are also found in /opt/homebrew/bin, /usr/local/bin, ~/.cargo/bin and ~/.local/bin, so tools installed with Homebrew or Cargo work even when Bella Commander was started from the Dock.
Terminal app¶
F11 opens the active folder in a terminal app. In settings.toml:
[terminal]
app = "open -a Ghostty {dir}" # or "open -a iTerm {dir}", "wezterm start --cwd {dir}", "kitty --directory {dir}"
Empty means Terminal on macOS, Windows Terminal, or x-terminal-emulator on Linux. For the built-in terminal panel:
[terminal]
shell = "/opt/homebrew/bin/fish" # empty: your login shell
position = "right" # bottom | left | right
Your own commands¶
Any command line can become a command of its own: in the command palette, on a key, and in the context menu. In settings.toml:
[[commands]]
id = "user.pdf"
title = "Convert to PDF"
run = "pandoc {file} -o {stem}.pdf"
context_menu = true
[[commands]]
id = "user.git_status"
title = "Git status"
run = "git status"
terminal = true # runs in the terminal panel, where the output stays
[[commands]]
id = "user.diff"
title = "Diff with the other pane"
run = "opendiff {file} {other_file}"
[[commands]]
id = "user.zip_each"
title = "Zip each selected file"
run = "for f in {files}; do zip -j \"$f.zip\" \"$f\"; done"
| Placeholder | Becomes |
|---|---|
{file} |
the path under the cursor |
{files} |
the paths of the selected items (or the one under the cursor) |
{name}, {stem}, {ext} |
the name under the cursor, without its extension, its extension |
{dir} |
the active pane's folder |
{other_dir}, {other_file} |
the same in the other pane |
Placeholders are quoted for the shell, so names with spaces work; do not put quotes around them. Other text in braces stays as it is (${HOME}, find -exec ls {} +). The command runs in the active folder through your shell (cmd on Windows), so pipes, && and variables work. Without terminal = true it runs in the background and the status line shows its last line of output.
To put it on a key, use its id in keymap.toml:
Favorites¶
⇧⌘B / Ctrl+Shift+B adds the current folder. To name, order and group them, edit favorites.toml (Edit favorites):
[favorites]
Home = "~"
Downloads = "~/Downloads"
"My files" = "~/files" # quote names with spaces or dots
[favorites.Teaching] # a group, shown as a folder in the sidebar
"Course A" = "~/work/courses/a"
"Course B" = "~/work/courses/b"
[favorites.Teaching.Archive] # groups can be nested
"2025" = "~/work/courses/2025"
⌘1 to ⌘9 (Ctrl+1 to Ctrl+9) open the first nine, groups included, in this order.
Colors and look¶
In settings.toml:
[appearance]
mode = "dark" # always dark; "system" follows the system
cursor_color = "#2e7d32" # a green cursor
selection_color = "#c2185b" # selected files in pink
alternate_row_colors = false
font_family = "JetBrains Mono"
font_size = 14
row_height = 22
The text on the cursor turns black or white by itself to stay readable.
Panes¶
[panes]
show_hidden = true # show dot files in new tabs
sort = "modified" # newest work first: name | extension | size | modified | permissions
dirs_first = false