index ae335183f472645e08687af539be91ec2213fb36..90c2fc148b724677fe0ef8c7c14008cdc1f90f71 100644 (file)
--- a/tig.c
+++ b/tig.c
#define S_ISGITLINK(mode) (((mode) & S_IFMT) == 0160000)
/* Some ASCII-shorthands fitted into the ncurses namespace. */
+#define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */
#define KEY_TAB '\t'
#define KEY_RETURN '\r'
#define KEY_ESC 27
{ KEY_TAB, REQ_VIEW_NEXT },
{ KEY_RETURN, REQ_ENTER },
{ KEY_UP, REQ_PREVIOUS },
+ { KEY_CTL('P'), REQ_PREVIOUS },
{ KEY_DOWN, REQ_NEXT },
+ { KEY_CTL('N'), REQ_NEXT },
{ 'R', REQ_REFRESH },
{ KEY_F(5), REQ_REFRESH },
{ 'O', REQ_MAXIMIZE },
{ KEY_NPAGE, REQ_MOVE_PAGE_DOWN },
{ ' ', REQ_MOVE_PAGE_DOWN },
{ KEY_PPAGE, REQ_MOVE_PAGE_UP },
+ { KEY_CTL('U'), REQ_MOVE_PAGE_UP },
{ 'b', REQ_MOVE_PAGE_UP },
{ '-', REQ_MOVE_PAGE_UP },
{ KEY_LEFT, REQ_SCROLL_LEFT },
{ KEY_RIGHT, REQ_SCROLL_RIGHT },
{ KEY_IC, REQ_SCROLL_LINE_UP },
+ { KEY_CTL('Y'), REQ_SCROLL_LINE_UP },
{ KEY_DC, REQ_SCROLL_LINE_DOWN },
+ { KEY_CTL('E'), REQ_SCROLL_LINE_DOWN },
{ 'w', REQ_SCROLL_PAGE_UP },
{ 's', REQ_SCROLL_PAGE_DOWN },
{ 'z', REQ_STOP_LOADING },
{ 'v', REQ_SHOW_VERSION },
{ 'r', REQ_SCREEN_REDRAW },
+ { KEY_CTL('L'), REQ_SCREEN_REDRAW },
{ 'o', REQ_OPTIONS },
{ '.', REQ_TOGGLE_LINENO },
{ 'D', REQ_TOGGLE_DATE },
if (!strcasecmp(key_table[i].name, name))
return key_table[i].value;
+ if (strlen(name) == 2 && name[0] == '^' && isprint(*name))
+ return (int)name[1] & 0x1f;
if (strlen(name) == 1 && isprint(*name))
return (int) *name;
-
return ERR;
}
static const char *
get_key_name(int key_value)
{
- static char key_char[] = "'X'";
+ static char key_char[] = "'X'\0";
const char *seq = NULL;
int key;
if (key_table[key].value == key_value)
seq = key_table[key].name;
- if (seq == NULL &&
- key_value < 127 &&
- isprint(key_value)) {
- key_char[1] = (char) key_value;
+ if (seq == NULL && key_value < 0x7f) {
+ char *s = key_char + 1;
+
+ if (key_value >= 0x20) {
+ *s++ = key_value;
+ } else {
+ *s++ = '^';
+ *s++ = 0x40 | (key_value & 0x1f);
+ }
+ *s++ = '\'';
+ *s++ = '\0';
seq = key_char;
}