in get_escape_seq_kbinput(), add escape sequences for Terminal

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4067 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2007-04-04 20:36:56 +00:00
parent a2c4704abb
commit 267daeb381
2 changed files with 90 additions and 27 deletions

View File

@ -1,6 +1,8 @@
2007-04-04 David Lawrence Ramsey <pooka109@gmail.com> 2007-04-04 David Lawrence Ramsey <pooka109@gmail.com>
* AUTHORS, faq.html: Update email address. * AUTHORS, faq.html: Update email address.
* winio.c (get_escape_seq_kbinput): Add escape sequences for
Terminal.
2007-02-01 Benno Schulenberg <bensberg@justemail.net> 2007-02-01 Benno Schulenberg <bensberg@justemail.net>

View File

@ -70,9 +70,9 @@ static bool disable_cursorpos = FALSE;
* Escape sequence compatibility: * Escape sequence compatibility:
* *
* We support escape sequences for ANSI, VT100, VT220, VT320, the Linux * We support escape sequences for ANSI, VT100, VT220, VT320, the Linux
* console, the FreeBSD console, the Mach console, xterm, rxvt, and * console, the FreeBSD console, the Mach console, xterm, rxvt, Eterm,
* Eterm. Among these, there are several conflicts and omissions, * and Terminal. Among these, there are several conflicts and
* outlined as follows: * omissions, outlined as follows:
* *
* - Tab on ANSI == PageUp on FreeBSD console; the former is omitted. * - Tab on ANSI == PageUp on FreeBSD console; the former is omitted.
* (Ctrl-I is also Tab on ANSI, which we already support.) * (Ctrl-I is also Tab on ANSI, which we already support.)
@ -681,6 +681,66 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
switch (seq[0]) { switch (seq[0]) {
case 'O': case 'O':
switch (seq[1]) { switch (seq[1]) {
case '1':
if (seq_len >= 3) {
switch (seq[2]) {
case ';':
if (seq_len >= 4) {
switch (seq[3]) {
case '2':
if (seq_len >= 5) {
switch (seq[4]) {
case 'A': /* Esc O 1 ; 2 A == Shift-Up on
* Terminal. */
case 'B': /* Esc O 1 ; 2 B == Shift-Down on
* Terminal. */
case 'C': /* Esc O 1 ; 2 C == Shift-Right on
* Terminal. */
case 'D': /* Esc O 1 ; 2 D == Shift-Left on
* Terminal. */
retval = get_escape_seq_abcd(seq[4]);
break;
case 'P': /* Esc O 1 ; 2 P == F13 on
* Terminal. */
retval = KEY_F(13);
break;
case 'Q': /* Esc O 1 ; 2 Q == F14 on
* Terminal. */
retval = KEY_F(14);
break;
case 'R': /* Esc O 1 ; 2 R == F15 on
* Terminal. */
retval = KEY_F(15);
break;
case 'S': /* Esc O 1 ; 2 S == F16 on
* Terminal. */
retval = KEY_F(16);
break;
}
}
break;
case '5':
if (seq_len >= 5) {
switch (seq[4]) {
case 'A': /* Esc O 1 ; 5 A == Ctrl-Up on
* Terminal. */
case 'B': /* Esc O 1 ; 5 B == Ctrl-Down on
* Terminal. */
case 'C': /* Esc O 1 ; 5 C == Ctrl-Right on
* Terminal. */
case 'D': /* Esc O 1 ; 5 D == Ctrl-Left on
* Terminal. */
retval = get_escape_seq_abcd(seq[4]);
break;
}
}
break;
}
}
break;
}
}
break;
case '2': case '2':
if (seq_len >= 3) { if (seq_len >= 3) {
switch (seq[2]) { switch (seq[2]) {
@ -716,10 +776,10 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
* with NumLock off on xterm. */ * with NumLock off on xterm. */
retval = KEY_B2; retval = KEY_B2;
break; break;
case 'F': /* Esc O F == End on xterm. */ case 'F': /* Esc O F == End on xterm/Terminal. */
retval = NANO_END_KEY; retval = NANO_END_KEY;
break; break;
case 'H': /* Esc O H == Home on xterm. */ case 'H': /* Esc O H == Home on xterm/Terminal. */
retval = NANO_HOME_KEY; retval = NANO_HOME_KEY;
break; break;
case 'M': /* Esc O M == Enter on numeric keypad with case 'M': /* Esc O M == Enter on numeric keypad with
@ -769,57 +829,57 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
break; break;
case 'j': /* Esc O j == '*' on numeric keypad with case 'j': /* Esc O j == '*' on numeric keypad with
* NumLock off on VT100/VT220/VT320/xterm/ * NumLock off on VT100/VT220/VT320/xterm/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = '*'; retval = '*';
break; break;
case 'k': /* Esc O k == '+' on numeric keypad with case 'k': /* Esc O k == '+' on numeric keypad with
* NumLock off on VT100/VT220/VT320/xterm/ * NumLock off on VT100/VT220/VT320/xterm/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = '+'; retval = '+';
break; break;
case 'l': /* Esc O l == ',' on numeric keypad with case 'l': /* Esc O l == ',' on numeric keypad with
* NumLock off on VT100/VT220/VT320/xterm/ * NumLock off on VT100/VT220/VT320/xterm/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = ','; retval = ',';
break; break;
case 'm': /* Esc O m == '-' on numeric keypad with case 'm': /* Esc O m == '-' on numeric keypad with
* NumLock off on VT100/VT220/VT320/xterm/ * NumLock off on VT100/VT220/VT320/xterm/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = '-'; retval = '-';
break; break;
case 'n': /* Esc O n == Delete (.) on numeric keypad case 'n': /* Esc O n == Delete (.) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* xterm/rxvt/Eterm. */ * xterm/rxvt/Eterm/Terminal. */
retval = NANO_DELETE_KEY; retval = NANO_DELETE_KEY;
break; break;
case 'o': /* Esc O o == '/' on numeric keypad with case 'o': /* Esc O o == '/' on numeric keypad with
* NumLock off on VT100/VT220/VT320/xterm/ * NumLock off on VT100/VT220/VT320/xterm/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = '/'; retval = '/';
break; break;
case 'p': /* Esc O p == Insert (0) on numeric keypad case 'p': /* Esc O p == Insert (0) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_INSERTFILE_KEY; retval = NANO_INSERTFILE_KEY;
break; break;
case 'q': /* Esc O q == End (1) on numeric keypad case 'q': /* Esc O q == End (1) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_END_KEY; retval = NANO_END_KEY;
break; break;
case 'r': /* Esc O r == Down (2) on numeric keypad case 'r': /* Esc O r == Down (2) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_NEXTLINE_KEY; retval = NANO_NEXTLINE_KEY;
break; break;
case 's': /* Esc O s == PageDown (3) on numeric case 's': /* Esc O s == PageDown (3) on numeric
* keypad with NumLock off on VT100/VT220/ * keypad with NumLock off on VT100/VT220/
* VT320/rxvt/Eterm. */ * VT320/rxvt/Eterm/Terminal. */
retval = NANO_NEXTPAGE_KEY; retval = NANO_NEXTPAGE_KEY;
break; break;
case 't': /* Esc O t == Left (4) on numeric keypad case 't': /* Esc O t == Left (4) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_BACK_KEY; retval = NANO_BACK_KEY;
break; break;
case 'u': /* Esc O u == Center (5) on numeric keypad case 'u': /* Esc O u == Center (5) on numeric keypad
@ -829,22 +889,22 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
break; break;
case 'v': /* Esc O v == Right (6) on numeric keypad case 'v': /* Esc O v == Right (6) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_FORWARD_KEY; retval = NANO_FORWARD_KEY;
break; break;
case 'w': /* Esc O w == Home (7) on numeric keypad case 'w': /* Esc O w == Home (7) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_HOME_KEY; retval = NANO_HOME_KEY;
break; break;
case 'x': /* Esc O x == Up (8) on numeric keypad case 'x': /* Esc O x == Up (8) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_PREVLINE_KEY; retval = NANO_PREVLINE_KEY;
break; break;
case 'y': /* Esc O y == PageUp (9) on numeric keypad case 'y': /* Esc O y == PageUp (9) on numeric keypad
* with NumLock off on VT100/VT220/VT320/ * with NumLock off on VT100/VT220/VT320/
* rxvt/Eterm. */ * rxvt/Eterm/Terminal. */
retval = NANO_PREVPAGE_KEY; retval = NANO_PREVPAGE_KEY;
break; break;
} }
@ -989,14 +1049,14 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
break; break;
default: /* Esc [ 2 ~ == Insert on default: /* Esc [ 2 ~ == Insert on
* VT220/VT320/Linux console/ * VT220/VT320/Linux console/
* xterm. */ * xterm/Terminal. */
retval = NANO_INSERTFILE_KEY; retval = NANO_INSERTFILE_KEY;
break; break;
} }
} }
break; break;
case '3': /* Esc [ 3 ~ == Delete on VT220/VT320/ case '3': /* Esc [ 3 ~ == Delete on VT220/VT320/
* Linux console/xterm. */ * Linux console/xterm/Terminal. */
retval = NANO_DELETE_KEY; retval = NANO_DELETE_KEY;
break; break;
case '4': /* Esc [ 4 ~ == End on VT220/VT320/Linux case '4': /* Esc [ 4 ~ == End on VT220/VT320/Linux
@ -1004,13 +1064,13 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
retval = NANO_END_KEY; retval = NANO_END_KEY;
break; break;
case '5': /* Esc [ 5 ~ == PageUp on VT220/VT320/ case '5': /* Esc [ 5 ~ == PageUp on VT220/VT320/
* Linux console/xterm; Esc [ 5 ^ == * Linux console/xterm/Terminal;
* PageUp on Eterm. */ * Esc [ 5 ^ == PageUp on Eterm. */
retval = NANO_PREVPAGE_KEY; retval = NANO_PREVPAGE_KEY;
break; break;
case '6': /* Esc [ 6 ~ == PageDown on VT220/VT320/ case '6': /* Esc [ 6 ~ == PageDown on VT220/VT320/
* Linux console/xterm; Esc [ 6 ^ == * Linux console/xterm/Terminal;
* PageDown on Eterm. */ * Esc [ 6 ^ == PageDown on Eterm. */
retval = NANO_NEXTPAGE_KEY; retval = NANO_NEXTPAGE_KEY;
break; break;
case '7': /* Esc [ 7 ~ == Home on rxvt. */ case '7': /* Esc [ 7 ~ == Home on rxvt. */
@ -1040,7 +1100,8 @@ int get_escape_seq_kbinput(const int *seq, size_t seq_len)
retval = get_escape_seq_abcd(seq[1]); retval = get_escape_seq_abcd(seq[1]);
break; break;
case 'E': /* Esc [ E == Center (5) on numeric keypad case 'E': /* Esc [ E == Center (5) on numeric keypad
* with NumLock off on FreeBSD console. */ * with NumLock off on FreeBSD console/
* Terminal. */
retval = KEY_B2; retval = KEY_B2;
break; break;
case 'F': /* Esc [ F == End on FreeBSD case 'F': /* Esc [ F == End on FreeBSD