15 releases (8 breaking)

0.10.1 Feb 18, 2023
0.8.2 Aug 28, 2022
0.6.1 Apr 20, 2022
0.6.0 Oct 14, 2021
0.3.0 May 10, 2021

#295 in Text editors

MIT license

74KB
2K SLoC

A TUI File tree panel

image

Built for integration with kakoune, but with a little bit of configuration, it can be used with most TUIs, or even as a minimal terminal file manager in its own right.

Currently in early alpha stage, PRs are welcome!

Installation

Since sidetree is published on crates.io, any system with cargo installed can simply get sidetree by running

cargo install sidetree

Example integration

Very simple integration with kakoune in tmux:

map -docstring 'file explorer' global normal <c-e> ':connect panel sidetree --select %val{buffile}<ret>'

This also requires kcr

Configuration

Commands can be placed in ~/.config/sidetree/sidetreerc:

set show_hidden false
set quit_on_open false
set open_cmd 'kcr open "${sidetree_entry}"'

set file_icons true
set icon_style darkgray
set dir_name_style lightblue+b
set file_name_style reset
set highlight_style +r
set link_style cyan+b

For more examples, see the provided sidetreerc file.

Commands

Commands can be executed by pressing : to get the command prompt, or placed in the config file as described above.

quit

Quit sidetree

open [path]

Open the given path or the currently selected one. See the open_cmd option below for configuration.

set <option> <value>

Set a config option. See options below

echo [args...]

Echo something to the status line. All arguments will be joined by spaces and echoed.

shell [command...]

Execute command in a shell. Without quotes, all arguments are joined by spaces and executed.

cd [path]

Change root directory to the given path, or the currently selected folder.

map <key> <command> [args...]

Map a key to another sidetree command. Example: map H cd ..

Keys are formatted as one of the following:

  • A character, or one of return, ret, semicolon, gt, lt, percent, space, tab.
  • Any of the above with modifiers ctrl or alt, formatted as <[mods-...][key]>, for example <c-j>, <a-j>, <c-a-space> etc.
  • One of the special named keys that do not support modifiers: esc, backtab, backspace, del, home, end, up, down, left, right, insert, pageup, pagedown.

Expansions

sidetree_entry

Path to selected entry.

sidetree_dir

Path to selected directory.

Options

Options are set using the set [option] [value] command

show_hidden: bool

Whether to show hidden files (file names starting with .)

open_cmd: String

The shell command to run to open a file, i.e. on the :open command, or when pressing <return> on a file.

Example: set open_cmd 'xdg-open "$sidetree_entry"'.

quit_on_open: bool

Whether to quit sidetree after :open (or pressing <return> on a file)

file_icons: bool

Whether to enable file icons by extension. May or may not be supported by your fonts.

Styling

Style options have the following format: [<fg>][,<bg>][+<add_attr>][-<sub_attr>]

<fg> and <bg> are colors, which can either be the name of a color, a rgb:XXXXXX string, where XXXXXX is the hex color value, or colorX, where X is the index of the terminal color. Valid color names are: reset, black, red, green, yellow, blue, magenta, cyan, gray, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, white

<add_attr> are attributes to add, and sub_attr are attributes to remove. These are a series of characters, that each correspond to the following attributes:

b → bold
d → dim
i → italic
u → underlined
B → blink
r → reversed

Example styles: blue,black+bu-i, ,red, reset,reset+r, -B

icon_style: Style: Style of the file/folder icon

dir_name_style: Style: Style of directory names

file_name_style: Style: Style of non-directory names

highlight_style: Style: Style of the highlighted entry

This style is applied on top of the existing styles, so +r could be a good option, or alternatively blue,reset+r.

TODO

  • Proper symlink handling
  • Custom key maps, map command
  • More navigation commands
  • Save selection & expanded folders between launches
  • Backend for styling entries
  • File icons by extension
  • Custom formatting
  • Better script parsing
    • Comments
    • Blocks
    • percent-strings
    • Expansions
  • Auto reflection of configs
  • Custom commands and aliases
  • Better prompt keybinds and cursor movements
  • Git integration
    • Gitignore
    • Git status
  • IPC for two way syncing

Dependencies

~6MB
~111K SLoC