A simple console tree file explorer for linux, similiar to NERDTree but independent of vim. Developed and tested on Ubuntu 18.04 with xterm derivatives.
step | description | |
---|---|---|
1. | install rust | https://www.rust-lang.org/tools/install |
2. | clone the repository | git clone https://github.com/golmman/twilight-commander.git |
3. | change to the newly created directory | cd twilight-commander |
4. | build the project | cargo build --release |
5. | run the executable | ./target/release/twilight-commander |
The configuration is loaded as follows
- load values from
$XDG_CONFIG_HOME/twilight-commander.toml
- else load values from
$HOME/.config/twilight-commander/twilight-commander.toml
- fill missing values with app defaults
- overwrite values with defines from the command line options
For a config file with the default values, see twilight-commander.toml. The command line options are derived from the values defined inside the twilight-commander.toml . E.g.
[debug]
enabled = true
is set with the option --debug.enabled=true
.
The key bindings are configurable. For the set of configurable keys and key combinations consult the event.rs.
default key | default configuration | action |
---|---|---|
up arrow | --keybinding.entry_up=up |
move an entry up |
down arrow | --keybinding.entry_down=down |
move an entry down |
left arrow | --keybinding.collapse_dir=left |
collapse an entry directory or jump to parent if not collapsable |
right arrow | --keybinding.expand_dir=left |
expand an entry directory |
r | --keybinding.reload=r |
collapse all directories and reload root directory |
return | --keybinding.file_action=return |
perform configured file action |
q | --keybinding.quit=q |
quit |
The command line option / config value --behavior.file_action
defines the action taken when the return key is pressed
on a file. The action is interpreted by bash
and any occurence of %s
will be replaced by the selected filename.
E.g. when enter is pressed on the file .bashrc
in a twilight-commander process created with
twilight-commander "--behavior.file_action=xterm -e 'cat %s; echo opened file: %s; bash'"
then
bash -c "xterm -e 'cat /home/user/.bashrc; echo opened file: /home/user/.bashrc; bash'"
is executed, i.e.:
- a new xterm window is opened
- where the selected file (
.bashrc
) is printed to stdout - then
opened file: ~/.bashrc
is printed bash
prevents the window from closing.
--behavior.file_action
defaults to true, which does
(almost) nothing.
Specified with the option --behaviour.scrolling
(default = center
)
center
: move the cursor until it is in the center, then move the text insteadeditor
: move the cursor until it hits the top/bottom boundaries set by thedebug.paddin_top/bot
limits
In case your terminal does not support utf-8 you can disable it with --composition.use_utf8=false
.
Logs are written to
$XDG_CONFIG_HOME/tc.log
if XDG_CONFIG_HOME is defined- else they are placed in
$HOME/.config/twilight-commander/tc.log
The tcide_vim
and tcide_neovim
scripts open a new tmux session with 3 panes: (neo)vim, twilight-commander and terminal.
Hitting the file_action key (default: return) on a file entry opens it in a new tab.
When using vim you need to build it with the clientserver option:
git clone https://github.com/vim/vim.git
cd vim/src
make distclean
./configure +clientserver
make
sudo make install
- neovim support via https://neovim.io/doc/user/api.html
- configuration of 'on close'-event scripts
- storing sessions
- improved reload
preserve expanded tree on reload- automatic reload
- more colors, configurable
- git colors (indicating modified or new files)
- improved sorting
- sort case insensitivly
- advanced navigation
jump to parent directory- skip x entries by holding a modifier key
- collapse the current parent directory
- improve tcide to store vim sessions
- add a proper Makefile
- better response to terminal resize events: in some terminals response is too slow, text is wrapped
- intended to work like
less -S <filename>
- problem seems not to appear in plain xterm
- https://www.xfree86.org/4.8.0/ctlseqs.html
- https://invisible-island.net/ncurses/man/resizeterm.3x.html
- https://linux.die.net/man/1/resize
- https://stackoverflow.com/questions/4738803/resize-terminal-and-scrolling-problem-with-ncurses#4739108
- intended to work like
- directory entry stats
- directory entry management
- copy
- create directory
- create file
- move
open with custom command- remove
- rename
- --help screen with info to all command line options
- bookmark / pin entries (recursivly?) and prevent them from being collapsed
- search
- case insensitive wildcard
- mark hits
- nnn like status updates in the footer (permission denied, ...)
- logging
to log file- limit log file length
- add rust doc