From 5451eba2a317600111cd47104101bbec34fc9e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Thu, 1 Oct 2020 13:31:39 +0200 Subject: Make the outer prompt look more normal There's a slight issue with the inverted cell representing the cursor standing out a bit too much amongst the rest of the characters. The resulting experience is a lot more consistent, though. --- sdn.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'sdn.cpp') 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 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 &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); -- cgit v1.2.3