Compare commits
2 Commits
c07f557c16
...
5451eba2a3
Author | SHA1 | Date | |
---|---|---|---|
5451eba2a3 | |||
b8c767354e |
@ -55,7 +55,7 @@ To start using this navigator, put the following in your '.zshrc':
|
||||
----
|
||||
sdn-navigate () {
|
||||
# ... possibly zle-line-init
|
||||
while eval "`sdn`"; do
|
||||
while eval "`sdn "$BUFFER" "$CURSOR"`"; do
|
||||
[ -z "$cd" ] || cd "$cd"
|
||||
[ -z "$insert" ] || LBUFFER="$LBUFFER$insert "
|
||||
[ -z "$helper" ] && break
|
||||
@ -74,7 +74,9 @@ To start using this navigator, put the following in your 'config.fish':
|
||||
----
|
||||
function sdn-navigate
|
||||
set --local IFS
|
||||
while eval (sdn | string replace -ar '^(.*?)=' 'set --$1 ')
|
||||
set --local buffer (commandline)
|
||||
set --local cursor (commandline --cursor)
|
||||
while eval (sdn $buffer $cursor | string replace -ar '^(.*?)=' 'set --$1 ')
|
||||
test -z "$cd" || cd "$cd"
|
||||
test -z "$insert" || commandline --insert "$insert "
|
||||
test -z "$helper" && break
|
||||
@ -96,7 +98,7 @@ sdn-navigate () {
|
||||
SDN_L=$READLINE_LINE SDN_P=$READLINE_POINT
|
||||
READLINE_LINE=
|
||||
|
||||
while eval "`sdn`"; do
|
||||
while eval "`sdn "$SDN_L" "$SDN_P"`"; do
|
||||
[[ -z "$cd" ]] || cd "$cd"
|
||||
[[ -z "$insert" ]] || {
|
||||
SDN_L="${SDN_L:0:$SDN_P}$insert ${SDN_L:$SDN_P}"
|
||||
@ -129,6 +131,7 @@ cursor 231 202
|
||||
bar 16 255 ul
|
||||
cwd bold
|
||||
input
|
||||
cmdline 145
|
||||
....
|
||||
|
||||
Filename colours are taken from the `LS_COLORS` environment variable.
|
||||
|
29
sdn.cpp
29
sdn.cpp
@ -495,6 +495,7 @@ struct level {
|
||||
};
|
||||
|
||||
static struct {
|
||||
ncstring cmdline; ///< Outer command line
|
||||
string cwd; ///< Current working directory
|
||||
string start_dir; ///< Starting directory
|
||||
vector<entry> entries; ///< Current directory entries
|
||||
@ -525,9 +526,10 @@ static struct {
|
||||
void (*editor_on_change) (); ///< Callback on editor change
|
||||
void (*editor_on_confirm) (); ///< Callback on editor confirmation
|
||||
|
||||
enum { AT_CURSOR, AT_BAR, AT_CWD, AT_INPUT, AT_COUNT };
|
||||
chtype attrs[AT_COUNT] = {A_REVERSE, 0, A_BOLD, 0};
|
||||
const char *attr_names[AT_COUNT] = {"cursor", "bar", "cwd", "input"};
|
||||
enum { AT_CURSOR, AT_BAR, AT_CWD, AT_INPUT, AT_CMDLINE, AT_COUNT };
|
||||
chtype attrs[AT_COUNT] = {A_REVERSE, 0, A_BOLD, 0, 0};
|
||||
const char *attr_names[AT_COUNT] =
|
||||
{"cursor", "bar", "cwd", "input", "cmdline"};
|
||||
|
||||
map<int, chtype> ls_colors; ///< LS_COLORS decoded
|
||||
map<string, chtype> ls_exts; ///< LS_COLORS file extensions
|
||||
@ -746,6 +748,9 @@ fun update () {
|
||||
} else if (!g.message.empty ()) {
|
||||
move (LINES - 1, 0);
|
||||
print (apply_attrs (g.message, 0), COLS);
|
||||
} else if (!g.cmdline.empty ()) {
|
||||
move (LINES - 1, 0);
|
||||
print (g.cmdline, COLS);
|
||||
}
|
||||
|
||||
refresh ();
|
||||
@ -1352,6 +1357,20 @@ fun inotify_check () {
|
||||
update ();
|
||||
}
|
||||
|
||||
fun load_cmdline (int argc, char *argv[]) {
|
||||
if (argc < 3)
|
||||
return;
|
||||
|
||||
wstring line = to_wide (argv[1]); int cursor = atoi (argv[2]);
|
||||
if (line.empty () || cursor < 0 || cursor > (int) line.length ())
|
||||
return;
|
||||
|
||||
std::replace_if (begin (line), end (line), iswspace, L' ');
|
||||
g.cmdline = apply_attrs (line += L' ', g.attrs[g.AT_CMDLINE]);
|
||||
// It is tempting to touch the cchar_t directly, though let's rather not
|
||||
g.cmdline[cursor] = cchar (g.attrs[g.AT_CMDLINE] ^ A_REVERSE, line[cursor]);
|
||||
}
|
||||
|
||||
fun decode_ansi_sgr (const vector<string> &v) -> chtype {
|
||||
vector<int> args;
|
||||
for (const auto &arg : v) {
|
||||
@ -1627,9 +1646,6 @@ fun save_config () {
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
|
||||
// That bitch zle closes stdin before exec without redirection
|
||||
(void) close (STDIN_FILENO);
|
||||
if (open ("/dev/tty", O_RDWR)) {
|
||||
@ -1659,6 +1675,7 @@ int main (int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
load_colors ();
|
||||
load_cmdline (argc, argv);
|
||||
g.start_dir = g.cwd = initial_cwd ();
|
||||
reload (false);
|
||||
pop_levels (g.cwd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user