2017-06-29 02:50:39 +02:00
|
|
|
sdn
|
|
|
|
===
|
|
|
|
:compact-option:
|
|
|
|
|
|
|
|
'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.
|
|
|
|
|
|
|
|
Development has just started and the only supported platform is Linux.
|
|
|
|
I wanted to try a different, simpler approach here.
|
|
|
|
|
|
|
|
Building
|
|
|
|
--------
|
|
|
|
Build dependencies: CMake and/or make, a C++14 compiler, pkg-config +
|
|
|
|
Runtime dependencies: ncursesw
|
|
|
|
|
|
|
|
$ git clone https://github.com/pjanouch/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:
|
|
|
|
....
|
2017-06-30 22:51:52 +02:00
|
|
|
sdn-navigate () {
|
2017-06-30 22:55:18 +02:00
|
|
|
# ... possibly zle-line-init
|
|
|
|
eval `sdn`
|
|
|
|
[ -z "$cd" ] || cd "$cd"
|
|
|
|
[ -z "$insert" ] || LBUFFER="$LBUFFER$insert "
|
|
|
|
zle reset-prompt
|
|
|
|
# ... possibly zle-line-finish
|
2017-06-29 02:50:39 +02:00
|
|
|
}
|
2017-06-30 22:51:52 +02:00
|
|
|
zle -N sdn-navigate
|
|
|
|
bindkey '\eo' sdn-navigate
|
2017-06-29 02:50:39 +02:00
|
|
|
....
|
|
|
|
|
2017-06-30 22:51:52 +02:00
|
|
|
bash
|
|
|
|
----
|
|
|
|
Here we can't reset the prompt from within a `bind -x` handler but there is
|
|
|
|
an acceptable workaround:
|
|
|
|
....
|
|
|
|
sdn-navigate () {
|
2017-06-30 22:55:18 +02:00
|
|
|
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))
|
|
|
|
}
|
2017-06-30 22:51:52 +02:00
|
|
|
}
|
|
|
|
sdn-restore () {
|
2017-06-30 22:55:18 +02:00
|
|
|
READLINE_LINE=$SDN_L READLINE_POINT=$SDN_P
|
|
|
|
unset SDN_L SDN_P
|
2017-06-30 22:51:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bind -x '"\200": sdn-navigate'
|
|
|
|
bind -x '"\201": sdn-restore'
|
|
|
|
bind '"\eo":"\200\C-m\201"'
|
|
|
|
....
|
2017-06-29 02:50:39 +02:00
|
|
|
|
2017-06-30 21:29:10 +02:00
|
|
|
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
|
|
|
|
....
|
|
|
|
|
2017-06-29 02:50:39 +02:00
|
|
|
Contributing and Support
|
|
|
|
------------------------
|
|
|
|
Use this project's GitHub to report any bugs, request features, or submit pull
|
|
|
|
requests. If you want to discuss this project, or maybe just hang out with
|
|
|
|
the developer, feel free to join me at irc://irc.janouch.name, channel #dev.
|
|
|
|
|
|
|
|
Bitcoin donations: 12r5uEWEgcHC46xd64tt3hHt9EUvYYDHe9
|
|
|
|
|
|
|
|
License
|
|
|
|
-------
|
|
|
|
'sdn' is written by Přemysl Janouch <p.janouch@gmail.com>.
|
|
|
|
|
|
|
|
You may use the software under the terms of the ISC license, the text of which
|
|
|
|
is included within the package, or, at your option, you may relicense the work
|
|
|
|
under the MIT or the Modified BSD License, as listed at the following site:
|
|
|
|
|
|
|
|
http://www.gnu.org/licenses/license-list.html
|