Reorganization of key and window management functions.
Этот коммит содержится в:
родитель
d91122a172
Коммит
5a5a8bd3c0
@ -38,7 +38,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -39,7 +39,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h" /* Color definitions */
|
||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../src/tty/win.h" /* Our window tools */
|
||||
|
||||
#include "dialog.h" /* The nice dialog manager */
|
||||
#include "widget.h" /* The widgets for the nice dialog manager */
|
||||
|
@ -36,7 +36,6 @@
|
||||
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -64,6 +64,7 @@
|
||||
|
||||
#define LINUX_CONS_SAVER_C
|
||||
#include "cons.saver.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
static void
|
||||
send_contents (char *buffer, unsigned int columns, unsigned int rows)
|
||||
|
@ -29,9 +29,6 @@ extern signed char console_flag;
|
||||
void show_console_contents (int starty, unsigned char begin_line, unsigned char end_line);
|
||||
void handle_console (unsigned char action);
|
||||
|
||||
void show_rxvt_contents (int starty, unsigned char y1, unsigned char y2);
|
||||
int look_for_rxvt_extensions (void);
|
||||
|
||||
extern int cons_saver_pid;
|
||||
#endif /* !LINUX_CONS_SAVER_C */
|
||||
|
||||
|
@ -61,7 +61,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/key.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "../src/search/search.h"
|
||||
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/key.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "../src/search/search.h"
|
||||
|
||||
|
@ -57,7 +57,6 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/mouse.h"
|
||||
#include "../src/tty/key.h" /* For mi_getch() */
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "help.h"
|
||||
#include "dialog.h" /* For Dlg_head */
|
||||
|
@ -39,7 +39,6 @@
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/key.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "tty.h"
|
||||
#include "win.h"
|
||||
#include "key.h"
|
||||
#include "color.h"
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/mouse.h"
|
||||
#include "../src/tty/key.h" /* For init_key() and mi_getch() */
|
||||
#include "../src/tty/win.h"
|
||||
#include "../src/tty/win.h" /* xterm_flag */
|
||||
|
||||
#include "dir.h"
|
||||
#include "dialog.h"
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/mouse.h"
|
||||
#include "../src/tty/key.h" /* For mi_getch() */
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "menu.h"
|
||||
#include "help.h"
|
||||
|
@ -34,7 +34,6 @@
|
||||
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -37,7 +37,6 @@
|
||||
|
||||
#include "../src/tty/tty.h" /* tty_setcolor() */
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/mouse.h" /* For Gpm_Event */
|
||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dir.h"
|
||||
#include "panel.h"
|
||||
|
@ -31,9 +31,8 @@
|
||||
#include "global.h"
|
||||
|
||||
#include "../src/tty/tty.h"
|
||||
#include "../src/tty/key.h" /* For the externs */
|
||||
#include "../src/tty/key.h"
|
||||
#include "../src/tty/mouse.h" /* To make view.h happy */
|
||||
#include "../src/tty/win.h" /* lookup_key */
|
||||
|
||||
#include "dir.h"
|
||||
#include "panel.h"
|
||||
|
231
src/tty/key.c
231
src/tty/key.c
@ -42,11 +42,12 @@
|
||||
#include "../../src/tty/tty.h"
|
||||
#include "../../src/tty/mouse.h"
|
||||
#include "../../src/tty/key.h"
|
||||
#include "../../src/tty/win.h"
|
||||
#include "../../src/tty/win.h" /* xterm_flag */
|
||||
|
||||
#include "../../src/main.h"
|
||||
#include "../../src/layout.h" /* winch_flag */
|
||||
#include "../../src/cons.saver.h"
|
||||
#include "../../src/strutil.h" /* str_casecmp */
|
||||
|
||||
#ifdef USE_VFS
|
||||
#include "../../vfs/gc.h"
|
||||
@ -59,7 +60,7 @@
|
||||
#ifdef __linux__
|
||||
# if defined(__GLIBC__) && (__GLIBC__ < 2)
|
||||
# include <linux/termios.h> /* TIOCLINUX */
|
||||
# else
|
||||
# elif defined HAVE_TERMIOS_H
|
||||
# include <termios.h>
|
||||
# endif
|
||||
# include <sys/ioctl.h>
|
||||
@ -224,6 +225,84 @@ is_abort_char (int c)
|
||||
c == KEY_F(10));
|
||||
}
|
||||
|
||||
/*
|
||||
* Common handler for standard movement keys in a text area. Provided
|
||||
* functions are called with the "data" argument. backfn and forfn also
|
||||
* get an argument indicating how many lines to scroll. Return MSG_HANDLED
|
||||
* if the key was handled, MSG_NOT_HANDLED otherwise.
|
||||
*/
|
||||
cb_ret_t
|
||||
check_movement_keys (int key, int page_size, void *data, move_fn backfn,
|
||||
move_fn forfn, move_fn topfn, move_fn bottomfn)
|
||||
{
|
||||
switch (key) {
|
||||
case KEY_UP:
|
||||
case XCTRL ('p'):
|
||||
(*backfn) (data, 1);
|
||||
break;
|
||||
|
||||
case KEY_DOWN:
|
||||
case XCTRL ('n'):
|
||||
(*forfn) (data, 1);
|
||||
break;
|
||||
|
||||
case KEY_PPAGE:
|
||||
case ALT ('v'):
|
||||
(*backfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case KEY_NPAGE:
|
||||
case XCTRL ('v'):
|
||||
(*forfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case KEY_HOME:
|
||||
case KEY_M_CTRL | KEY_HOME:
|
||||
case KEY_M_CTRL | KEY_PPAGE:
|
||||
case KEY_A1:
|
||||
case ALT ('<'):
|
||||
(*topfn) (data, 0);
|
||||
break;
|
||||
|
||||
case KEY_END:
|
||||
case KEY_M_CTRL | KEY_END:
|
||||
case KEY_M_CTRL | KEY_NPAGE:
|
||||
case KEY_C1:
|
||||
case ALT ('>'):
|
||||
(*bottomfn) (data, 0);
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
case KEY_BACKSPACE:
|
||||
(*backfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
(*forfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
(*backfn) (data, page_size / 2);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
(*forfn) (data, page_size / 2);
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
(*topfn) (data, 0);
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
(*bottomfn) (data, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return MSG_NOT_HANDLED;
|
||||
}
|
||||
return MSG_HANDLED;
|
||||
}
|
||||
|
||||
typedef const struct {
|
||||
int code;
|
||||
const char *seq;
|
||||
@ -467,6 +546,142 @@ static key_define_t mc_default_keys [] = {
|
||||
{ 0, NULL, MCKEY_NOACTION },
|
||||
};
|
||||
|
||||
|
||||
/* This table is a mapping between names and the constants we use
|
||||
* We use this to allow users to define alternate definitions for
|
||||
* certain keys that may be missing from the terminal database
|
||||
*/
|
||||
key_code_name_t key_name_conv_tab [] = {
|
||||
/* KEY_F(0) is not here, since we are mapping it to f10, so there is no reason
|
||||
to define f0 as well. Also, it makes Learn keys a bunch of problems :( */
|
||||
{ KEY_F(1), "f1", N_("Function key 1") },
|
||||
{ KEY_F(2), "f2", N_("Function key 2") },
|
||||
{ KEY_F(3), "f3", N_("Function key 3") },
|
||||
{ KEY_F(4), "f4", N_("Function key 4") },
|
||||
{ KEY_F(5), "f5", N_("Function key 5") },
|
||||
{ KEY_F(6), "f6", N_("Function key 6") },
|
||||
{ KEY_F(7), "f7", N_("Function key 7") },
|
||||
{ KEY_F(8), "f8", N_("Function key 8") },
|
||||
{ KEY_F(9), "f9", N_("Function key 9") },
|
||||
{ KEY_F(10), "f10", N_("Function key 10") },
|
||||
{ KEY_F(11), "f11", N_("Function key 11") },
|
||||
{ KEY_F(12), "f12", N_("Function key 12") },
|
||||
{ KEY_F(13), "f13", N_("Function key 13") },
|
||||
{ KEY_F(14), "f14", N_("Function key 14") },
|
||||
{ KEY_F(15), "f15", N_("Function key 15") },
|
||||
{ KEY_F(16), "f16", N_("Function key 16") },
|
||||
{ KEY_F(17), "f17", N_("Function key 17") },
|
||||
{ KEY_F(18), "f18", N_("Function key 18") },
|
||||
{ KEY_F(19), "f19", N_("Function key 19") },
|
||||
{ KEY_F(20), "f20", N_("Function key 20") },
|
||||
{ KEY_BACKSPACE, "bs", N_("Backspace key") },
|
||||
{ KEY_END, "end", N_("End key") },
|
||||
{ KEY_UP, "up", N_("Up arrow key") },
|
||||
{ KEY_DOWN, "down", N_("Down arrow key") },
|
||||
{ KEY_LEFT, "left", N_("Left arrow key") },
|
||||
{ KEY_RIGHT, "right", N_("Right arrow key") },
|
||||
{ KEY_HOME, "home", N_("Home key") },
|
||||
{ KEY_NPAGE, "pgdn", N_("Page Down key") },
|
||||
{ KEY_PPAGE, "pgup", N_("Page Up key") },
|
||||
{ KEY_IC, "ins", N_("Insert key") },
|
||||
{ KEY_DC, "delete", N_("Delete key") },
|
||||
{ ALT('\t'), "complete", N_("Completion/M-tab") },
|
||||
{ KEY_KP_ADD, "kpplus", N_("+ on keypad") },
|
||||
{ KEY_KP_SUBTRACT,"kpminus", N_("- on keypad") },
|
||||
{ KEY_KP_MULTIPLY,"kpasterix", N_("* on keypad") },
|
||||
|
||||
/* From here on, these won't be shown in Learn keys (no space) */
|
||||
{ KEY_LEFT, "kpleft", N_("Left arrow keypad") },
|
||||
{ KEY_RIGHT, "kpright", N_("Right arrow keypad") },
|
||||
{ KEY_UP, "kpup", N_("Up arrow keypad") },
|
||||
{ KEY_DOWN, "kpdown", N_("Down arrow keypad") },
|
||||
{ KEY_HOME, "kphome", N_("Home on keypad") },
|
||||
{ KEY_END, "kpend", N_("End on keypad") },
|
||||
{ KEY_NPAGE, "kpnpage", N_("Page Down keypad") },
|
||||
{ KEY_PPAGE, "kpppage", N_("Page Up keypad") },
|
||||
{ KEY_IC, "kpinsert", N_("Insert on keypad") },
|
||||
{ KEY_DC, "kpdelete", N_("Delete on keypad") },
|
||||
{ (int) '\n', "kpenter", N_("Enter on keypad") },
|
||||
{ (int) '\n', "enter", N_("Enter on keypad") },
|
||||
{ (int) '\t', "tab", N_("Tab on keypad") },
|
||||
{ (int) ' ', "space", N_("Space on keypad") },
|
||||
{ (int) '/', "kpslash", N_("Slash on keypad") },
|
||||
{ (int) '#', "kpnumlock", N_("NumLock on keypad") },
|
||||
|
||||
/* Alternative label */
|
||||
{ KEY_BACKSPACE, "backspace", N_("Backspace key") },
|
||||
{ KEY_IC, "insert", N_("Insert key") },
|
||||
{ KEY_KP_ADD, "plus", N_("+ on keypad") },
|
||||
{ KEY_KP_SUBTRACT,"minus", N_("- on keypad") },
|
||||
{ KEY_KP_MULTIPLY,"asterix", N_("* on keypad") },
|
||||
|
||||
/* meta keys */
|
||||
{ KEY_M_CTRL, "control", N_("Ctrl") },
|
||||
{ KEY_M_CTRL, "ctrl", N_("Ctrl") },
|
||||
{ KEY_M_ALT, "alt", N_("Alt") },
|
||||
{ KEY_M_ALT, "ralt", N_("Alt") },
|
||||
{ KEY_M_ALT, "meta", N_("Alt") },
|
||||
{ KEY_M_SHIFT, "shift", N_("Shift") },
|
||||
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
int
|
||||
lookup_keyname (char *keyname)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (keyname[0] == '\0')
|
||||
return 0;
|
||||
if (keyname[1] == '\0')
|
||||
return (int) keyname[0];
|
||||
|
||||
for (i = 0; key_name_conv_tab [i].code; i++)
|
||||
if (str_casecmp (key_name_conv_tab [i].name, keyname) == 0)
|
||||
return key_name_conv_tab [i].code;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Return the code associated with the symbolic name keyname */
|
||||
int
|
||||
lookup_key (char *keyname)
|
||||
{
|
||||
int k = -1;
|
||||
char **keys;
|
||||
guint keys_count = -1;
|
||||
int key = 0;
|
||||
int i = 0;
|
||||
|
||||
if (keyname == NULL)
|
||||
return 0;
|
||||
|
||||
keys = g_strsplit (keyname, " ", -1);
|
||||
keys_count = g_strv_length (keys);
|
||||
for (i = keys_count - 1; i >= 0; i--) {
|
||||
if (keys[i] !=NULL && keys[i][0] != 0) {
|
||||
key = lookup_keyname (keys[i]);
|
||||
if (key & KEY_M_CTRL) {
|
||||
if (k < 256)
|
||||
k = XCTRL(k);
|
||||
else
|
||||
k |= key;
|
||||
} else {
|
||||
if (k == -1)
|
||||
k = key;
|
||||
else
|
||||
k |= key;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (k == -1)
|
||||
return 0;
|
||||
|
||||
return k;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
define_sequences (key_define_t *kd)
|
||||
{
|
||||
@ -1006,6 +1221,18 @@ int get_key_code (int no_delay)
|
||||
return correct_key_code (c);
|
||||
}
|
||||
|
||||
/* Return the code associated with the symbolic name keyname */
|
||||
int lookup_key (char *keyname)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; key_name_conv_tab [i].code; i++){
|
||||
if (str_casecmp (key_name_conv_tab [i].name, keyname))
|
||||
continue;
|
||||
return key_name_conv_tab [i].code;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/* If set timeout is set, then we wait 0.1 seconds, else, we block */
|
||||
static void
|
||||
try_channels (int set_timeout)
|
||||
|
@ -7,16 +7,34 @@
|
||||
#define MC_KEY_H
|
||||
|
||||
#include "../../src/global.h" /* <glib.h> */
|
||||
#include "../../src/dialog.h" /* cb_ret_t */
|
||||
|
||||
void init_key (void);
|
||||
void init_key_input_fd (void);
|
||||
void done_key (void);
|
||||
|
||||
/* Keys management */
|
||||
typedef void (*move_fn) (void *data, int param);
|
||||
cb_ret_t check_movement_keys (int key, int page_size, void *data,
|
||||
move_fn backfn, move_fn forfn,
|
||||
move_fn topfn, move_fn bottomfn);
|
||||
int lookup_keyname (char *keyname);
|
||||
int lookup_key (char *keyname);
|
||||
|
||||
typedef const struct {
|
||||
int code;
|
||||
const char *name;
|
||||
const char *longname;
|
||||
} key_code_name_t;
|
||||
|
||||
extern key_code_name_t key_name_conv_tab [];
|
||||
|
||||
/* mouse support */
|
||||
struct Gpm_Event;
|
||||
int get_event (struct Gpm_Event *event, int redo_event, int block);
|
||||
int is_idle (void);
|
||||
|
||||
int mi_getch (void);
|
||||
|
||||
/* Possible return values from get_event: */
|
||||
#define EV_MOUSE -2
|
||||
#define EV_NONE -1
|
||||
@ -37,7 +55,6 @@ extern int irix_fn_keys;
|
||||
extern int use_8th_bit_as_meta;
|
||||
|
||||
/* While waiting for input, the program can select on more than one file */
|
||||
|
||||
typedef int (*select_fn)(int fd, void *info);
|
||||
|
||||
/* Channel manipulation */
|
||||
@ -72,16 +89,8 @@ char *learn_key (void);
|
||||
/* Returns a key code (interpreted) */
|
||||
int get_key_code (int nodelay);
|
||||
|
||||
typedef const struct {
|
||||
int code;
|
||||
const char *name;
|
||||
const char *longname;
|
||||
} key_code_name_t;
|
||||
|
||||
extern key_code_name_t key_name_conv_tab [];
|
||||
|
||||
/* Set keypad mode (xterm and linux console only) */
|
||||
void numeric_keypad_mode (void);
|
||||
void application_keypad_mode (void);
|
||||
|
||||
#endif
|
||||
#endif /* MC_KEY_H */
|
||||
|
@ -32,44 +32,48 @@
|
||||
|
||||
#include "../../src/tty/tty.h" /* tty_gotoyx, addch */
|
||||
|
||||
#include "../../src/cons.saver.h"
|
||||
#include "../../src/cons.saver.h" /* console_flag */
|
||||
|
||||
static int rxvt_extensions = 0;
|
||||
static gboolean rxvt_extensions = FALSE;
|
||||
|
||||
int look_for_rxvt_extensions (void)
|
||||
gboolean
|
||||
look_for_rxvt_extensions (void)
|
||||
{
|
||||
static int been_called = 0;
|
||||
const char *e;
|
||||
static gboolean been_called = FALSE;
|
||||
|
||||
if (!been_called) {
|
||||
rxvt_extensions = 0;
|
||||
e = getenv ("RXVT_EXT");
|
||||
if (e)
|
||||
if (!strcmp (e, "1.0"))
|
||||
rxvt_extensions = 1;
|
||||
been_called = 1;
|
||||
const char *e = getenv ("RXVT_EXT");
|
||||
rxvt_extensions = ((e != NULL) && (strcmp (e, "1.0") == 0));
|
||||
been_called = TRUE;
|
||||
}
|
||||
|
||||
if (rxvt_extensions)
|
||||
console_flag = 4;
|
||||
|
||||
return rxvt_extensions;
|
||||
}
|
||||
|
||||
/* my own wierd protocol base 16 - paul */
|
||||
static int rxvt_getc (void)
|
||||
static int
|
||||
rxvt_getc (void)
|
||||
{
|
||||
int r;
|
||||
unsigned char c;
|
||||
while (read (0, &c, 1) != 1);
|
||||
while (read (0, &c, 1) != 1)
|
||||
;
|
||||
if (c == '\n')
|
||||
return -1;
|
||||
r = (c - 'A') * 16;
|
||||
while (read (0, &c, 1) != 1);
|
||||
while (read (0, &c, 1) != 1)
|
||||
;
|
||||
r += (c - 'A');
|
||||
return r;
|
||||
}
|
||||
|
||||
extern int keybar_visible;
|
||||
|
||||
static int anything_ready (void)
|
||||
static int
|
||||
anything_ready (void)
|
||||
{
|
||||
fd_set fds;
|
||||
struct timeval tv;
|
||||
@ -81,10 +85,12 @@ static int anything_ready (void)
|
||||
return select (1, &fds, 0, 0, &tv);
|
||||
}
|
||||
|
||||
void show_rxvt_contents (int starty, unsigned char y1, unsigned char y2)
|
||||
void
|
||||
show_rxvt_contents (int starty, unsigned char y1, unsigned char y2)
|
||||
{
|
||||
unsigned char *k;
|
||||
int bytes, i, j, cols = 0;
|
||||
|
||||
y1 += (keybar_visible != 0); /* i don't knwo why we need this - paul */
|
||||
y2 += (keybar_visible != 0);
|
||||
while (anything_ready ())
|
||||
|
232
src/tty/win.c
232
src/tty/win.c
@ -25,108 +25,16 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
#include <termios.h>
|
||||
#endif
|
||||
|
||||
#include "../../src/global.h"
|
||||
|
||||
#include "../../src/tty/tty.h"
|
||||
#include "../../src/tty/color.h"
|
||||
#include "../../src/tty/mouse.h"
|
||||
#include "../../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../../src/tty/win.h"
|
||||
|
||||
#include "../../src/dialog.h"
|
||||
#include "../../src/widget.h"
|
||||
#include "../../src/layout.h"
|
||||
#include "../../src/strutil.h"
|
||||
|
||||
/*
|
||||
* Common handler for standard movement keys in a text area. Provided
|
||||
* functions are called with the "data" argument. backfn and forfn also
|
||||
* get an argument indicating how many lines to scroll. Return MSG_HANDLED
|
||||
* if the key was handled, MSG_NOT_HANDLED otherwise.
|
||||
*/
|
||||
cb_ret_t
|
||||
check_movement_keys (int key, int page_size, void *data, movefn backfn,
|
||||
movefn forfn, movefn topfn, movefn bottomfn)
|
||||
{
|
||||
switch (key) {
|
||||
case KEY_UP:
|
||||
case XCTRL ('p'):
|
||||
(*backfn) (data, 1);
|
||||
break;
|
||||
|
||||
case KEY_DOWN:
|
||||
case XCTRL ('n'):
|
||||
(*forfn) (data, 1);
|
||||
break;
|
||||
|
||||
case KEY_PPAGE:
|
||||
case ALT ('v'):
|
||||
(*backfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case KEY_NPAGE:
|
||||
case XCTRL ('v'):
|
||||
(*forfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case KEY_HOME:
|
||||
case KEY_M_CTRL | KEY_HOME:
|
||||
case KEY_M_CTRL | KEY_PPAGE:
|
||||
case KEY_A1:
|
||||
case ALT ('<'):
|
||||
(*topfn) (data, 0);
|
||||
break;
|
||||
|
||||
case KEY_END:
|
||||
case KEY_M_CTRL | KEY_END:
|
||||
case KEY_M_CTRL | KEY_NPAGE:
|
||||
case KEY_C1:
|
||||
case ALT ('>'):
|
||||
(*bottomfn) (data, 0);
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
case KEY_BACKSPACE:
|
||||
(*backfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
(*forfn) (data, page_size - 1);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
(*backfn) (data, page_size / 2);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
(*forfn) (data, page_size / 2);
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
(*topfn) (data, 0);
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
(*bottomfn) (data, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return MSG_NOT_HANDLED;
|
||||
}
|
||||
return MSG_HANDLED;
|
||||
}
|
||||
|
||||
/* This flag is set by xterm detection routine in function main() */
|
||||
/* It is used by function view_other_cmd() */
|
||||
int xterm_flag = 0;
|
||||
|
||||
/* The following routines only work on xterm terminals */
|
||||
|
||||
void do_enter_ca_mode (void)
|
||||
void
|
||||
do_enter_ca_mode (void)
|
||||
{
|
||||
if (!xterm_flag)
|
||||
return;
|
||||
@ -134,143 +42,11 @@ void do_enter_ca_mode (void)
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
void do_exit_ca_mode (void)
|
||||
void
|
||||
do_exit_ca_mode (void)
|
||||
{
|
||||
if (!xterm_flag)
|
||||
return;
|
||||
fprintf (stdout, ESC_STR "[?47l" ESC_STR "8" ESC_STR "[m");
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
/* This table is a mapping between names and the constants we use
|
||||
* We use this to allow users to define alternate definitions for
|
||||
* certain keys that may be missing from the terminal database
|
||||
*/
|
||||
key_code_name_t key_name_conv_tab [] = {
|
||||
/* KEY_F(0) is not here, since we are mapping it to f10, so there is no reason
|
||||
to define f0 as well. Also, it makes Learn keys a bunch of problems :( */
|
||||
{ KEY_F(1), "f1", N_("Function key 1") },
|
||||
{ KEY_F(2), "f2", N_("Function key 2") },
|
||||
{ KEY_F(3), "f3", N_("Function key 3") },
|
||||
{ KEY_F(4), "f4", N_("Function key 4") },
|
||||
{ KEY_F(5), "f5", N_("Function key 5") },
|
||||
{ KEY_F(6), "f6", N_("Function key 6") },
|
||||
{ KEY_F(7), "f7", N_("Function key 7") },
|
||||
{ KEY_F(8), "f8", N_("Function key 8") },
|
||||
{ KEY_F(9), "f9", N_("Function key 9") },
|
||||
{ KEY_F(10), "f10", N_("Function key 10") },
|
||||
{ KEY_F(11), "f11", N_("Function key 11") },
|
||||
{ KEY_F(12), "f12", N_("Function key 12") },
|
||||
{ KEY_F(13), "f13", N_("Function key 13") },
|
||||
{ KEY_F(14), "f14", N_("Function key 14") },
|
||||
{ KEY_F(15), "f15", N_("Function key 15") },
|
||||
{ KEY_F(16), "f16", N_("Function key 16") },
|
||||
{ KEY_F(17), "f17", N_("Function key 17") },
|
||||
{ KEY_F(18), "f18", N_("Function key 18") },
|
||||
{ KEY_F(19), "f19", N_("Function key 19") },
|
||||
{ KEY_F(20), "f20", N_("Function key 20") },
|
||||
{ KEY_BACKSPACE, "bs", N_("Backspace key") },
|
||||
{ KEY_END, "end", N_("End key") },
|
||||
{ KEY_UP, "up", N_("Up arrow key") },
|
||||
{ KEY_DOWN, "down", N_("Down arrow key") },
|
||||
{ KEY_LEFT, "left", N_("Left arrow key") },
|
||||
{ KEY_RIGHT, "right", N_("Right arrow key") },
|
||||
{ KEY_HOME, "home", N_("Home key") },
|
||||
{ KEY_NPAGE, "pgdn", N_("Page Down key") },
|
||||
{ KEY_PPAGE, "pgup", N_("Page Up key") },
|
||||
{ KEY_IC, "ins", N_("Insert key") },
|
||||
{ KEY_DC, "delete", N_("Delete key") },
|
||||
{ ALT('\t'), "complete", N_("Completion/M-tab") },
|
||||
{ KEY_KP_ADD, "kpplus", N_("+ on keypad") },
|
||||
{ KEY_KP_SUBTRACT,"kpminus", N_("- on keypad") },
|
||||
{ KEY_KP_MULTIPLY,"kpasterix", N_("* on keypad") },
|
||||
|
||||
/* From here on, these won't be shown in Learn keys (no space) */
|
||||
{ KEY_LEFT, "kpleft", N_("Left arrow keypad") },
|
||||
{ KEY_RIGHT, "kpright", N_("Right arrow keypad") },
|
||||
{ KEY_UP, "kpup", N_("Up arrow keypad") },
|
||||
{ KEY_DOWN, "kpdown", N_("Down arrow keypad") },
|
||||
{ KEY_HOME, "kphome", N_("Home on keypad") },
|
||||
{ KEY_END, "kpend", N_("End on keypad") },
|
||||
{ KEY_NPAGE, "kpnpage", N_("Page Down keypad") },
|
||||
{ KEY_PPAGE, "kpppage", N_("Page Up keypad") },
|
||||
{ KEY_IC, "kpinsert", N_("Insert on keypad") },
|
||||
{ KEY_DC, "kpdelete", N_("Delete on keypad") },
|
||||
{ (int) '\n', "kpenter", N_("Enter on keypad") },
|
||||
{ (int) '\n', "enter", N_("Enter on keypad") },
|
||||
{ (int) '\t', "tab", N_("Tab on keypad") },
|
||||
{ (int) ' ', "space", N_("Space on keypad") },
|
||||
{ (int) '/', "kpslash", N_("Slash on keypad") },
|
||||
{ (int) '#', "kpnumlock", N_("NumLock on keypad") },
|
||||
|
||||
/* Alternative label */
|
||||
{ KEY_BACKSPACE, "backspace", N_("Backspace key") },
|
||||
{ KEY_IC, "insert", N_("Insert key") },
|
||||
{ KEY_KP_ADD, "plus", N_("+ on keypad") },
|
||||
{ KEY_KP_SUBTRACT,"minus", N_("- on keypad") },
|
||||
{ KEY_KP_MULTIPLY,"asterix", N_("* on keypad") },
|
||||
|
||||
/* meta keys */
|
||||
{ KEY_M_CTRL, "control", N_("Ctrl") },
|
||||
{ KEY_M_CTRL, "ctrl", N_("Ctrl") },
|
||||
{ KEY_M_ALT, "alt", N_("Alt") },
|
||||
{ KEY_M_ALT, "ralt", N_("Alt") },
|
||||
{ KEY_M_ALT, "meta", N_("Alt") },
|
||||
{ KEY_M_SHIFT, "shift", N_("Shift") },
|
||||
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
int lookup_keyname (char *keyname)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (keyname[0] == '\0')
|
||||
return 0;
|
||||
if (keyname[1] == '\0')
|
||||
return (int) keyname[0];
|
||||
|
||||
for (i = 0; key_name_conv_tab [i].code; i++)
|
||||
if (str_casecmp (key_name_conv_tab [i].name, keyname) == 0)
|
||||
return key_name_conv_tab [i].code;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Return the code associated with the symbolic name keyname */
|
||||
int lookup_key (char *keyname)
|
||||
{
|
||||
int k = -1;
|
||||
char **keys;
|
||||
guint keys_count = -1;
|
||||
int key = 0;
|
||||
int i = 0;
|
||||
|
||||
if (keyname == NULL)
|
||||
return 0;
|
||||
|
||||
keys = g_strsplit (keyname, " ", -1);
|
||||
keys_count = g_strv_length (keys);
|
||||
for (i = keys_count - 1; i >= 0; i--) {
|
||||
if (keys[i] !=NULL && keys[i][0] != 0) {
|
||||
key = lookup_keyname (keys[i]);
|
||||
if (key & KEY_M_CTRL) {
|
||||
if (k < 256)
|
||||
k = XCTRL(k);
|
||||
else
|
||||
k |= key;
|
||||
} else {
|
||||
if (k == -1)
|
||||
k = key;
|
||||
else
|
||||
k |= key;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (k == -1)
|
||||
return 0;
|
||||
|
||||
return k;
|
||||
}
|
||||
|
@ -6,18 +6,14 @@
|
||||
#ifndef MC_WIN_H
|
||||
#define MC_WIN_H
|
||||
|
||||
#include "../../src/dialog.h" /* cb_ret_t */
|
||||
|
||||
/* Keys management */
|
||||
typedef void (*movefn) (void *, int);
|
||||
cb_ret_t check_movement_keys (int key, int page_size, void *data,
|
||||
movefn backfn, movefn forfn,
|
||||
movefn topfn, movefn bottomfn);
|
||||
int lookup_key (char *keyname);
|
||||
#include "../../src/global.h" /* <glib.h> */
|
||||
|
||||
/* Terminal management */
|
||||
extern int xterm_flag;
|
||||
void do_enter_ca_mode (void);
|
||||
void do_exit_ca_mode (void);
|
||||
|
||||
void show_rxvt_contents (int starty, unsigned char y1, unsigned char y2);
|
||||
gboolean look_for_rxvt_extensions (void);
|
||||
|
||||
#endif /* MC_WIN_H */
|
||||
|
@ -53,7 +53,6 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/key.h" /* For mi_getch() */
|
||||
#include "../src/tty/mouse.h"
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "cmd.h" /* For view_other_cmd */
|
||||
#include "dialog.h" /* Needed by widget.h */
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include "../src/tty/color.h"
|
||||
#include "../src/tty/mouse.h"
|
||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||
#include "../src/tty/win.h"
|
||||
|
||||
#include "dialog.h"
|
||||
#include "widget.h"
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user