mirror of
https://github.com/tmux/tmux.git
synced 2024-11-07 11:48:50 +00:00
Use a macro-based mask for obtaining a key or modifier-set from the combination.
Display C-@, etc, as C-Space, in list-keys.
This commit is contained in:
parent
89eb95265a
commit
227e458ebb
13
key-string.c
13
key-string.c
@ -1,4 +1,4 @@
|
||||
/* $Id: key-string.c,v 1.33 2010-06-05 06:27:19 micahcowan Exp $ */
|
||||
/* $Id: key-string.c,v 1.34 2010-06-05 20:29:11 micahcowan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -184,6 +184,15 @@ key_string_lookup_key(int key)
|
||||
|
||||
*out = '\0';
|
||||
|
||||
/*
|
||||
* Special case: display C-@ as C-Space. Could do this below in
|
||||
* the (key >= 0 && key <= 32), but this way we let it be found
|
||||
* in key_string_table, for the unlikely chance that we might
|
||||
* change its name.
|
||||
*/
|
||||
if ((key & KEYC_MASK_KEY) == 0)
|
||||
key = ' ' | KEYC_CTRL | (key & KEYC_MASK_MOD);
|
||||
|
||||
/* Fill in the modifiers. */
|
||||
if (key & KEYC_CTRL)
|
||||
strlcat(out, "C-", sizeof out);
|
||||
@ -191,7 +200,7 @@ key_string_lookup_key(int key)
|
||||
strlcat(out, "M-", sizeof out);
|
||||
if (key & KEYC_SHIFT)
|
||||
strlcat(out, "S-", sizeof out);
|
||||
key &= ~(KEYC_CTRL|KEYC_ESCAPE|KEYC_SHIFT);
|
||||
key &= KEYC_MASK_KEY;
|
||||
|
||||
/* Try the key against the string table. */
|
||||
for (i = 0; i < nitems(key_string_table); i++) {
|
||||
|
6
tmux.h
6
tmux.h
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.h,v 1.558 2010-05-22 21:56:04 micahcowan Exp $ */
|
||||
/* $Id: tmux.h,v 1.559 2010-06-05 20:29:11 micahcowan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -110,6 +110,10 @@ extern char **environ;
|
||||
#define KEYC_SHIFT 0x8000
|
||||
#define KEYC_PREFIX 0x10000
|
||||
|
||||
/* Mask to obtain key w/o modifiers */
|
||||
#define KEYC_MASK_MOD (KEYC_ESCAPE|KEYC_CTRL|KEYC_SHIFT|KEYC_PREFIX)
|
||||
#define KEYC_MASK_KEY (~KEYC_MASK_MOD)
|
||||
|
||||
/* Other key codes. */
|
||||
enum key_code {
|
||||
/* Mouse key. */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: window-copy.c,v 1.118 2010-06-05 07:48:35 micahcowan Exp $ */
|
||||
/* $Id: window-copy.c,v 1.119 2010-06-05 20:29:11 micahcowan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -367,7 +367,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
||||
if (data->inputtype == WINDOW_COPY_JUMPFORWARD
|
||||
|| data->inputtype == WINDOW_COPY_JUMPBACK) {
|
||||
/* Ignore keys with modifiers. */
|
||||
if ((key & 0xff00) == 0) {
|
||||
if ((key & KEYC_MASK_MOD) == 0) {
|
||||
data->jumpchar = key;
|
||||
if (data->inputtype == WINDOW_COPY_JUMPFORWARD) {
|
||||
for (; np != 0; np--)
|
||||
@ -627,7 +627,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
||||
*data->inputstr = '\0';
|
||||
goto input_on;
|
||||
case MODEKEYCOPY_STARTNUMBERPREFIX:
|
||||
key &= 0xff;
|
||||
key &= KEYC_MASK_KEY;
|
||||
if (key >= '0' && key <= '9') {
|
||||
data->inputtype = WINDOW_COPY_NUMERICPREFIX;
|
||||
data->numprefix = 0;
|
||||
@ -741,7 +741,7 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
|
||||
struct window_copy_mode_data *data = wp->modedata;
|
||||
struct screen *s = &data->screen;
|
||||
|
||||
key &= 0xff;
|
||||
key &= KEYC_MASK_KEY;
|
||||
if (key < '0' || key > '9')
|
||||
return 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user