Přemysl Eric Janouch
5759df156b
The tilde may be escaped, and this first escape may be escaped as well, so all paths should be expressable. All will just work(TM) for those who need it, and those who start filenames with backslashes are begging to have their foot shot. It appears that even Shift JIS, Big5, GB 18030, and GBK are compatible with Unix paths, meaning they don't redefine the slash (0x2F), so I'm okay with my direct multibyte string handling in unknown locales. Legacy stuff smells. |
||
---|---|---|
CMakeLists.txt | ||
LICENSE | ||
Makefile | ||
README.adoc | ||
sdn.cpp | ||
sdn.png |
README.adoc
sdn
sdn is a simple directory navigator that you can invoke while editing shell commands. It enables you to:
-
take a quick peek at directory contents without running
ls
-
browse the filesystem without all the mess that Midnight Commander does: there’s no need to create a subshell in a new pty. The current command line can be simply forwarded if it is to be edited. What’s more, it will always be obvious whether the navigator is running.
The only supported platform is Linux. I wanted to try a different, simpler approach here, and the end result is very friendly to tinkering.
Building
Build dependencies: CMake and/or make, a C++14 compiler, pkg-config
Runtime dependencies: ncursesw, libacl
Unfortunately most LLVM libc++ versions have a bug that crashes sdn on start. Use GNU libstdc++ if you’re affected.
$ git clone https://git.janouch.name/p/sdn.git $ mkdir sdn/build $ cd sdn/build $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug $ make
To install the application, you can do either the usual:
# make install
Or you can try telling CMake to make a package for you. For Debian it is:
$ cpack -G DEB # dpkg -i sdn-*.deb
There is also a Makefile you can use to quickly build a binary to be copied into the PATH of any machine you want to have sdn on.
zsh
To start using this navigator, put the following in your .zshrc:
sdn-navigate () { # ... possibly zle-line-init eval "`sdn`" [ -z "$cd" ] || cd "$cd" [ -z "$insert" ] || LBUFFER="$LBUFFER$insert " zle reset-prompt # ... possibly zle-line-finish } zle -N sdn-navigate bindkey '\eo' sdn-navigate
bash
Here we can’t reset the prompt from within a bind -x
handler but there is
an acceptable workaround:
sdn-navigate () { SDN_L=$READLINE_LINE SDN_P=$READLINE_POINT READLINE_LINE= eval "`sdn`" [[ -z "$cd" ]] || cd "$cd" [[ -z "$insert" ]] || { SDN_L="${SDN_L:0:$SDN_P}$insert ${SDN_L:$SDN_P}" ((SDN_P=SDN_P+${#insert}+1)) } } sdn-restore () { READLINE_LINE=$SDN_L READLINE_POINT=$SDN_P unset SDN_L SDN_P } bind -x '"\200": sdn-navigate' bind -x '"\201": sdn-restore' bind '"\eo":"\200\C-m\201"'
Colors
Here is an example of a ~/.config/sdn/look file; the format is similar to that of git, only named colors aren’t supported:
cursor 231 202 bar 16 255 ul cwd bold input
Filename colors are taken from the LS_COLORS
environment variable.
Run dircolors
to get some defaults.
Bindings
To obtain more vifm-like controls, you may write the following to your ~/.config/sdn/bindings file:
normal h parent normal l choose normal ? help
Similar software
-
https://elvish.io/ is an entire shell with an integrated ranger-like file manager on Ctrl-N (I find this confusing and resource-demanding, preferring to keep closer to "orthodox file managers")
Contributing and Support
Use https://git.janouch.name/p/sdn to report any bugs, request features,
or submit pull requests. git send-email
is tolerated. If you want to discuss
the project, feel free to join me at ircs://irc.janouch.name, channel #dev.
Bitcoin donations are accepted at: 12r5uEWEgcHC46xd64tt3hHt9EUvYYDHe9
License
This software is released under the terms of the 0BSD license, the text of which is included within the package along with the list of authors.