summaryrefslogtreecommitdiff
path: root/sdn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sdn.cpp')
-rw-r--r--sdn.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/sdn.cpp b/sdn.cpp
index 38475d4..9073025 100644
--- a/sdn.cpp
+++ b/sdn.cpp
@@ -495,7 +495,7 @@ struct level {
};
static struct {
- wstring cmdline; ///< Outer command line
+ ncstring cmdline; ///< Outer command line
string cwd; ///< Current working directory
string start_dir; ///< Starting directory
vector<entry> entries; ///< Current directory entries
@@ -750,7 +750,7 @@ fun update () {
print (apply_attrs (g.message, 0), COLS);
} else if (!g.cmdline.empty ()) {
move (LINES - 1, 0);
- print (apply_attrs (g.cmdline, g.attrs[g.AT_CMDLINE]), COLS);
+ print (g.cmdline, COLS);
}
refresh ();
@@ -1361,12 +1361,14 @@ fun load_cmdline (int argc, char *argv[]) {
if (argc < 3)
return;
- wstring line = to_wide (argv[1]); int point = atoi (argv[2]);
- if (line.empty () || point < 0 || point > (int) line.length ())
+ wstring line = to_wide (argv[1]); int cursor = atoi (argv[2]);
+ if (line.empty () || cursor < 0 || cursor > (int) line.length ())
return;
- std::replace_if (line.begin (), line.end (), iswspace, L' ');
- g.cmdline = line.substr (0, point) + L"◆" + line.substr (point);
+ 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 {
@@ -1672,8 +1674,8 @@ int main (int argc, char *argv[]) {
return 1;
}
- load_cmdline (argc, argv);
load_colors ();
+ load_cmdline (argc, argv);
g.start_dir = g.cwd = initial_cwd ();
reload (false);
pop_levels (g.cwd);