summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2020-10-01 13:31:39 +0200
committerPřemysl Eric Janouch <p@janouch.name>2020-10-01 13:40:52 +0200
commit5451eba2a317600111cd47104101bbec34fc9e54 (patch)
tree1db8b6f6a4fb5047e612c9863104fbdd1a7c0dba
parentb8c767354ec847e1415550b8002430c71e99ed47 (diff)
downloadsdn-5451eba2a317600111cd47104101bbec34fc9e54.tar.gz
sdn-5451eba2a317600111cd47104101bbec34fc9e54.tar.xz
sdn-5451eba2a317600111cd47104101bbec34fc9e54.zip
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.
-rw-r--r--README.adoc2
-rw-r--r--sdn.cpp16
2 files changed, 10 insertions, 8 deletions
diff --git a/README.adoc b/README.adoc
index dd4e583..5daf9ee 100644
--- a/README.adoc
+++ b/README.adoc
@@ -131,7 +131,7 @@ cursor 231 202
bar 16 255 ul
cwd bold
input
-cmdline 102
+cmdline 145
....
Filename colours are taken from the `LS_COLORS` environment variable.
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);