Awesome
twilight-commander
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.
Build and install
Instructions for Debian 10 or Ubuntu 18.04/20.04
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 |
Implemented features
Configuration
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
.
Configurable key bindings
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 |
Directory entry management
File Action
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.
Scrolling modes
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
Utf-8 support
In case your terminal does not support utf-8 you can disable it with --composition.use_utf8=false
.
Logs
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
Usage with tmux and vim
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.
tcide requirements
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
Ideas for improvements
- 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