Flash column when sorting is changed

This commit is contained in:
Přemysl Eric Janouch 2018-11-02 18:14:53 +01:00
parent 3790f8dfa0
commit 6b1ff048b8
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 13 additions and 0 deletions

13
sdn.cpp
View File

@ -280,6 +280,12 @@ fun decolor (cchar_t &ch) {
setcchar (&ch, c, attrs &~ A_REVERSE, 0, nullptr); setcchar (&ch, c, attrs &~ A_REVERSE, 0, nullptr);
} }
fun invert (cchar_t &ch) {
wchar_t c[CCHARW_MAX]; attr_t attrs; short pair;
getcchar (&ch, c, &attrs, &pair, nullptr);
setcchar (&ch, c, attrs ^ A_REVERSE, 0, nullptr);
}
fun apply_attrs (const wstring &w, attr_t attrs) -> ncstring { fun apply_attrs (const wstring &w, attr_t attrs) -> ncstring {
ncstring res; ncstring res;
for (auto c : w) for (auto c : w)
@ -465,6 +471,7 @@ static struct {
bool show_hidden; ///< Show hidden files bool show_hidden; ///< Show hidden files
int max_widths[entry::COLUMNS]; ///< Column widths int max_widths[entry::COLUMNS]; ///< Column widths
int sort_column = entry::FILENAME; ///< Sorting column int sort_column = entry::FILENAME; ///< Sorting column
int sort_flash_ttl; ///< Sorting column flash TTL
wstring message; ///< Message for the user wstring message; ///< Message for the user
int message_ttl; ///< Time to live for the message int message_ttl; ///< Time to live for the message
@ -659,6 +666,8 @@ fun update () {
for (int col = start_column; col < entry::COLUMNS; col++) { for (int col = start_column; col < entry::COLUMNS; col++) {
const auto &field = g.entries[index].cols[col]; const auto &field = g.entries[index].cols[col];
auto aligned = align (field, alignment[col] * g.max_widths[col]); auto aligned = align (field, alignment[col] * g.max_widths[col]);
if (g.sort_flash_ttl && col == g.sort_column)
for_each (begin (aligned), end (aligned), invert);
if (selected) if (selected)
for_each (begin (aligned), end (aligned), decolor); for_each (begin (aligned), end (aligned), decolor);
used += print (aligned + apply_attrs (L" ", 0), COLS - used); used += print (aligned + apply_attrs (L" ", 0), COLS - used);
@ -965,10 +974,12 @@ fun handle (wint_t c) -> bool {
case ACTION_SORT_LEFT: case ACTION_SORT_LEFT:
g.sort_column = (g.sort_column + entry::COLUMNS - 1) % entry::COLUMNS; g.sort_column = (g.sort_column + entry::COLUMNS - 1) % entry::COLUMNS;
g.sort_flash_ttl = 2;
reload (); reload ();
break; break;
case ACTION_SORT_RIGHT: case ACTION_SORT_RIGHT:
g.sort_column = (g.sort_column + entry::COLUMNS + 1) % entry::COLUMNS; g.sort_column = (g.sort_column + entry::COLUMNS + 1) % entry::COLUMNS;
g.sort_flash_ttl = 2;
reload (); reload ();
break; break;
@ -1392,6 +1403,8 @@ int main (int argc, char *argv[]) {
wint_t c; wint_t c;
while (!read_key (c) || handle (c)) { while (!read_key (c) || handle (c)) {
inotify_check (); inotify_check ();
if (g.sort_flash_ttl && !--g.sort_flash_ttl)
update ();
if (g.message_ttl && !--g.message_ttl) { if (g.message_ttl && !--g.message_ttl) {
g.message.clear (); g.message.clear ();
update (); update ();