Compare commits
3 Commits
9a996c8440
...
8529f24a46
Author | SHA1 | Date | |
---|---|---|---|
8529f24a46 | |||
190e813d49 | |||
9af74259d2 |
2
NEWS
2
NEWS
@ -4,6 +4,8 @@ Unreleased
|
|||||||
|
|
||||||
* Implemented mouse drags on the elapsed time gauge and the scrollbar
|
* Implemented mouse drags on the elapsed time gauge and the scrollbar
|
||||||
|
|
||||||
|
* Added Tab and S-Tab bindings to iterate tabs
|
||||||
|
|
||||||
* Added a "z" binding to center the view on the selected item
|
* Added a "z" binding to center the view on the selected item
|
||||||
|
|
||||||
* Added a "?" binding to describe items in various tabs
|
* Added a "?" binding to describe items in various tabs
|
||||||
|
49
nncmpp.c
49
nncmpp.c
@ -2948,6 +2948,8 @@ g_normal_defaults[] =
|
|||||||
{ "C-l", ACTION_REDRAW },
|
{ "C-l", ACTION_REDRAW },
|
||||||
{ "M-Tab", ACTION_TAB_LAST },
|
{ "M-Tab", ACTION_TAB_LAST },
|
||||||
{ "F1", ACTION_TAB_HELP },
|
{ "F1", ACTION_TAB_HELP },
|
||||||
|
{ "S-Tab", ACTION_TAB_PREVIOUS },
|
||||||
|
{ "Tab", ACTION_TAB_NEXT },
|
||||||
{ "C-Left", ACTION_TAB_PREVIOUS },
|
{ "C-Left", ACTION_TAB_PREVIOUS },
|
||||||
{ "C-Right", ACTION_TAB_NEXT },
|
{ "C-Right", ACTION_TAB_NEXT },
|
||||||
{ "C-PageUp", ACTION_TAB_PREVIOUS },
|
{ "C-PageUp", ACTION_TAB_PREVIOUS },
|
||||||
@ -3108,9 +3110,28 @@ app_init_bindings (const char *keymap,
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
app_strfkey (const termo_key_t *key)
|
||||||
|
{
|
||||||
|
// For display purposes, this is highly desirable
|
||||||
|
int flags = termo_get_flags (g.tk);
|
||||||
|
termo_set_flags (g.tk, flags | TERMO_FLAG_SPACESYMBOL);
|
||||||
|
termo_key_t fixed = *key;
|
||||||
|
termo_canonicalise (g.tk, &fixed);
|
||||||
|
termo_set_flags (g.tk, flags);
|
||||||
|
|
||||||
|
char buf[16] = "";
|
||||||
|
termo_strfkey_utf8 (g.tk, buf, sizeof buf, &fixed, TERMO_FORMAT_ALTISMETA);
|
||||||
|
return xstrdup (buf);
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
app_process_termo_event (termo_key_t *event)
|
app_process_termo_event (termo_key_t *event)
|
||||||
{
|
{
|
||||||
|
char *formatted = app_strfkey (event);
|
||||||
|
print_debug ("%s", formatted);
|
||||||
|
free (formatted);
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
if ((handled = event->type == TERMO_TYPE_FOCUS))
|
if ((handled = event->type == TERMO_TYPE_FOCUS))
|
||||||
{
|
{
|
||||||
@ -4162,21 +4183,6 @@ help_tab_on_action (enum action action)
|
|||||||
return app_process_action (a), true;
|
return app_process_action (a), true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
help_tab_strfkey (const termo_key_t *key, struct strv *out)
|
|
||||||
{
|
|
||||||
// For display purposes, this is highly desirable
|
|
||||||
int flags = termo_get_flags (g.tk);
|
|
||||||
termo_set_flags (g.tk, flags | TERMO_FLAG_SPACESYMBOL);
|
|
||||||
termo_key_t fixed = *key;
|
|
||||||
termo_canonicalise (g.tk, &fixed);
|
|
||||||
termo_set_flags (g.tk, flags);
|
|
||||||
|
|
||||||
char buf[16];
|
|
||||||
termo_strfkey_utf8 (g.tk, buf, sizeof buf, &fixed, TERMO_FORMAT_ALTISMETA);
|
|
||||||
strv_append (out, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
help_tab_assign_action (enum action action)
|
help_tab_assign_action (enum action action)
|
||||||
{
|
{
|
||||||
@ -4198,7 +4204,7 @@ help_tab_group (struct binding *keys, size_t len, struct strv *out,
|
|||||||
struct strv ass = strv_make ();
|
struct strv ass = strv_make ();
|
||||||
for (size_t k = 0; k < len; k++)
|
for (size_t k = 0; k < len; k++)
|
||||||
if (keys[k].action == i)
|
if (keys[k].action == i)
|
||||||
help_tab_strfkey (&keys[k].decoded, &ass);
|
strv_append_owned (&ass, app_strfkey (&keys[k].decoded));
|
||||||
if (ass.len)
|
if (ass.len)
|
||||||
{
|
{
|
||||||
char *joined = strv_join (&ass, ", ");
|
char *joined = strv_join (&ass, ", ");
|
||||||
@ -5947,6 +5953,7 @@ x11_convert_keysym (KeySym keysym)
|
|||||||
{
|
{
|
||||||
case XK_BackSpace: return TERMO_SYM_BACKSPACE;
|
case XK_BackSpace: return TERMO_SYM_BACKSPACE;
|
||||||
case XK_Tab: return TERMO_SYM_TAB;
|
case XK_Tab: return TERMO_SYM_TAB;
|
||||||
|
case XK_ISO_Left_Tab: return TERMO_SYM_TAB;
|
||||||
case XK_Return: return TERMO_SYM_ENTER;
|
case XK_Return: return TERMO_SYM_ENTER;
|
||||||
case XK_Escape: return TERMO_SYM_ESCAPE;
|
case XK_Escape: return TERMO_SYM_ESCAPE;
|
||||||
|
|
||||||
@ -6057,8 +6064,14 @@ on_x11_keypress (XEvent *e)
|
|||||||
memcpy (k.multibyte, p, MIN (cp_len, sizeof k.multibyte - 1));
|
memcpy (k.multibyte, p, MIN (cp_len, sizeof k.multibyte - 1));
|
||||||
p += cp_len;
|
p += cp_len;
|
||||||
|
|
||||||
// This is unfortunate, but probably in the right place.
|
// This is all unfortunate, but probably in the right place.
|
||||||
if (cp >= 32)
|
if (!cp)
|
||||||
|
{
|
||||||
|
k.code.codepoint = ' ';
|
||||||
|
if (ev->state & ShiftMask)
|
||||||
|
k.modifiers |= TERMO_KEYMOD_SHIFT;
|
||||||
|
}
|
||||||
|
else if (cp >= 32)
|
||||||
k.code.codepoint = cp;
|
k.code.codepoint = cp;
|
||||||
else if (ev->state & ShiftMask)
|
else if (ev->state & ShiftMask)
|
||||||
k.code.codepoint = cp + 64;
|
k.code.codepoint = cp + 64;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user