[w3m-dev 03515] 2 stroke keybinding
* func.c (setKeymap): add map K_MULTI support (getKey2): added (getKey): rewrite to use getKey2() * func.h (K_MULTI): added (MULTI_KEY): added * funcname.tab (MULTIMAP): added * main.c (escKeyProc): added (escmap): rewrite to use escKeyProc() (escbmap): rewrite to use escKeyProc() (escdmap): rewrite to use escKeyProc() (multimap): added * proto.h (multimap): added From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
@@ -1,3 +1,20 @@
|
|||||||
|
2002-12-04 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 03515] 2 stroke keybinding
|
||||||
|
* func.c (setKeymap): add map
|
||||||
|
K_MULTI support
|
||||||
|
(getKey2): added
|
||||||
|
(getKey): rewrite to use getKey2()
|
||||||
|
* func.h (K_MULTI): added
|
||||||
|
(MULTI_KEY): added
|
||||||
|
* funcname.tab (MULTIMAP): added
|
||||||
|
* main.c (escKeyProc): added
|
||||||
|
(escmap): rewrite to use escKeyProc()
|
||||||
|
(escbmap): rewrite to use escKeyProc()
|
||||||
|
(escdmap): rewrite to use escKeyProc()
|
||||||
|
(multimap): added
|
||||||
|
* proto.h (multimap): added
|
||||||
|
|
||||||
2002-12-04 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
2002-12-04 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
* [w3m-dev 03514] Effect of tab title
|
* [w3m-dev 03514] Effect of tab title
|
||||||
@@ -5366,4 +5383,4 @@ a * [w3m-dev 03276] compile error on EWS4800
|
|||||||
* release-0-2-1
|
* release-0-2-1
|
||||||
* import w3m-0.2.1
|
* import w3m-0.2.1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.579 2002/12/03 15:52:37 ukai Exp $
|
$Id: ChangeLog,v 1.580 2002/12/03 16:01:14 ukai Exp $
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: func.c,v 1.17 2002/11/25 17:03:45 ukai Exp $ */
|
/* $Id: func.c,v 1.18 2002/12/03 16:01:31 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* w3m func.c
|
* w3m func.c
|
||||||
*/
|
*/
|
||||||
@@ -20,6 +20,7 @@ static struct stat current_keymap_file;
|
|||||||
void
|
void
|
||||||
setKeymap(char *p, int lineno, int verbose)
|
setKeymap(char *p, int lineno, int verbose)
|
||||||
{
|
{
|
||||||
|
unsigned char *map = NULL;
|
||||||
char *s, *emsg;
|
char *s, *emsg;
|
||||||
int c, f;
|
int c, f;
|
||||||
|
|
||||||
@@ -47,14 +48,56 @@ setKeymap(char *p, int lineno, int verbose)
|
|||||||
disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE);
|
disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (c & K_ESCD)
|
if (c & K_MULTI) {
|
||||||
EscDKeymap[c ^ K_ESCD] = f;
|
unsigned char **mmap = NULL;
|
||||||
else if (c & K_ESCB)
|
int i, j, m = MULTI_KEY(c);
|
||||||
EscBKeymap[c ^ K_ESCB] = f;
|
|
||||||
else if (c & K_ESC)
|
if (m & K_ESCD)
|
||||||
EscKeymap[c ^ K_ESC] = f;
|
map = EscDKeymap;
|
||||||
else
|
else if (m & K_ESCB)
|
||||||
GlobalKeymap[c] = f;
|
map = EscBKeymap;
|
||||||
|
else if (m & K_ESC)
|
||||||
|
map = EscKeymap;
|
||||||
|
else
|
||||||
|
map = GlobalKeymap;
|
||||||
|
if (map[m & 0x7F] == FUNCNAME_multimap)
|
||||||
|
mmap = (unsigned char **)getKeyData(m);
|
||||||
|
else
|
||||||
|
map[m & 0x7F] = FUNCNAME_multimap;
|
||||||
|
if (!mmap) {
|
||||||
|
mmap = New_N(unsigned char *, 4);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
mmap[i] = New_N(unsigned char, 128);
|
||||||
|
for (j = 0; j < 128; j++)
|
||||||
|
mmap[i][j] = FUNCNAME_nulcmd;
|
||||||
|
}
|
||||||
|
mmap[0][ESC_CODE] = FUNCNAME_escmap;
|
||||||
|
mmap[1]['['] = FUNCNAME_escbmap;
|
||||||
|
mmap[1]['O'] = FUNCNAME_escbmap;
|
||||||
|
}
|
||||||
|
if (keyData == NULL)
|
||||||
|
keyData = newHash_iv(KEYDATA_HASH_SIZE);
|
||||||
|
putHash_iv(keyData, m, (void *)mmap);
|
||||||
|
if (c & K_ESCD)
|
||||||
|
map = mmap[3];
|
||||||
|
else if (c & K_ESCB)
|
||||||
|
map = mmap[2];
|
||||||
|
else if (c & K_ESC)
|
||||||
|
map = mmap[1];
|
||||||
|
else
|
||||||
|
map = mmap[0];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (c & K_ESCD)
|
||||||
|
map = EscDKeymap;
|
||||||
|
else if (c & K_ESCB)
|
||||||
|
map = EscBKeymap;
|
||||||
|
else if (c & K_ESC)
|
||||||
|
map = EscKeymap;
|
||||||
|
else
|
||||||
|
map = GlobalKeymap;
|
||||||
|
}
|
||||||
|
map[c & 0x7F] = f;
|
||||||
s = getQWord(&p);
|
s = getQWord(&p);
|
||||||
if (*s) {
|
if (*s) {
|
||||||
if (keyData == NULL)
|
if (keyData == NULL)
|
||||||
@@ -134,22 +177,31 @@ getKeyData(int key)
|
|||||||
return (char *)getHash_iv(keyData, key, NULL);
|
return (char *)getHash_iv(keyData, key, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
getKey(char *s)
|
getKey2(char **str)
|
||||||
{
|
{
|
||||||
|
char *s = *str;
|
||||||
int c, esc = 0, ctrl = 0;
|
int c, esc = 0, ctrl = 0;
|
||||||
|
|
||||||
if (s == NULL || *s == '\0')
|
if (s == NULL || *s == '\0')
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (strcasecmp(s, "UP") == 0) /* ^[[A */
|
if (strcasecmp(s, "UP") == 0) { /* ^[[A */
|
||||||
|
*str = s + 2;
|
||||||
return K_ESCB | 'A';
|
return K_ESCB | 'A';
|
||||||
else if (strcasecmp(s, "DOWN") == 0) /* ^[[B */
|
}
|
||||||
|
else if (strcasecmp(s, "DOWN") == 0) { /* ^[[B */
|
||||||
|
*str = s + 4;
|
||||||
return K_ESCB | 'B';
|
return K_ESCB | 'B';
|
||||||
else if (strcasecmp(s, "RIGHT") == 0) /* ^[[C */
|
}
|
||||||
|
else if (strcasecmp(s, "RIGHT") == 0) { /* ^[[C */
|
||||||
|
*str = s + 5;
|
||||||
return K_ESCB | 'C';
|
return K_ESCB | 'C';
|
||||||
else if (strcasecmp(s, "LEFT") == 0) /* ^[[D */
|
}
|
||||||
|
else if (strcasecmp(s, "LEFT") == 0) { /* ^[[D */
|
||||||
|
*str = s + 4;
|
||||||
return K_ESCB | 'D';
|
return K_ESCB | 'D';
|
||||||
|
}
|
||||||
|
|
||||||
if (strncasecmp(s, "ESC-", 4) == 0 || strncasecmp(s, "ESC ", 4) == 0) { /* ^[ */
|
if (strncasecmp(s, "ESC-", 4) == 0 || strncasecmp(s, "ESC ", 4) == 0) { /* ^[ */
|
||||||
s += 4;
|
s += 4;
|
||||||
@@ -192,6 +244,7 @@ getKey(char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ctrl) {
|
if (ctrl) {
|
||||||
|
*str = s + 1;
|
||||||
if (*s >= '@' && *s <= '_') /* ^@ .. ^_ */
|
if (*s >= '@' && *s <= '_') /* ^@ .. ^_ */
|
||||||
return esc | (*s - '@');
|
return esc | (*s - '@');
|
||||||
else if (*s >= 'a' && *s <= 'z') /* ^a .. ^z */
|
else if (*s >= 'a' && *s <= 'z') /* ^a .. ^z */
|
||||||
@@ -209,21 +262,30 @@ getKey(char *s)
|
|||||||
c = c * 10 + (int)(*s - '0');
|
c = c * 10 + (int)(*s - '0');
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
*str = s + 1;
|
||||||
if (*s == '~')
|
if (*s == '~')
|
||||||
return K_ESCD | c;
|
return K_ESCD | c;
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncasecmp(s, "SPC", 3) == 0) /* ' ' */
|
if (strncasecmp(s, "SPC", 3) == 0) { /* ' ' */
|
||||||
|
*str = s + 3;
|
||||||
return esc | ' ';
|
return esc | ' ';
|
||||||
else if (strncasecmp(s, "TAB", 3) == 0) /* ^i */
|
}
|
||||||
|
else if (strncasecmp(s, "TAB", 3) == 0) { /* ^i */
|
||||||
|
*str = s + 3;
|
||||||
return esc | '\t';
|
return esc | '\t';
|
||||||
else if (strncasecmp(s, "DEL", 3) == 0) /* ^? */
|
}
|
||||||
|
else if (strncasecmp(s, "DEL", 3) == 0) { /* ^? */
|
||||||
|
*str = s + 3;
|
||||||
return esc | DEL_CODE;
|
return esc | DEL_CODE;
|
||||||
|
}
|
||||||
|
|
||||||
if (*s == '\\' && *(s + 1) != '\0') {
|
if (*s == '\\' && *(s + 1) != '\0') {
|
||||||
switch (*(s + 1)) {
|
s++;
|
||||||
|
*str = s + 1;
|
||||||
|
switch (*s) {
|
||||||
case 'a': /* ^g */
|
case 'a': /* ^g */
|
||||||
return esc | CTRL_G;
|
return esc | CTRL_G;
|
||||||
case 'b': /* ^h */
|
case 'b': /* ^h */
|
||||||
@@ -244,12 +306,32 @@ getKey(char *s)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*str = s + 1;
|
||||||
if (IS_ASCII(*s)) /* Ascii */
|
if (IS_ASCII(*s)) /* Ascii */
|
||||||
return esc | *s;
|
return esc | *s;
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
getKey(char *s)
|
||||||
|
{
|
||||||
|
int c, c2;
|
||||||
|
|
||||||
|
c = getKey2(&s);
|
||||||
|
if (c < 0)
|
||||||
|
return -1;
|
||||||
|
if (*s == ' ' || *s == '-')
|
||||||
|
s++;
|
||||||
|
if (*s) {
|
||||||
|
c2 = getKey2(&s);
|
||||||
|
if (c2 < 0)
|
||||||
|
return -1;
|
||||||
|
c = K_MULTI | (c << 16) | c2;
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
getWord(char **str)
|
getWord(char **str)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: func.h,v 1.3 2001/12/10 17:02:44 ukai Exp $ */
|
/* $Id: func.h,v 1.4 2002/12/03 16:01:33 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* w3m func.h
|
* w3m func.h
|
||||||
*/
|
*/
|
||||||
@@ -14,6 +14,8 @@
|
|||||||
#define K_ESC 0x100
|
#define K_ESC 0x100
|
||||||
#define K_ESCB 0x200
|
#define K_ESCB 0x200
|
||||||
#define K_ESCD 0x400
|
#define K_ESCD 0x400
|
||||||
|
#define K_MULTI 0x10000000
|
||||||
|
#define MULTI_KEY(c) (((c) >> 16) & 0x77F)
|
||||||
|
|
||||||
typedef struct _FuncList {
|
typedef struct _FuncList {
|
||||||
char *id;
|
char *id;
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
# $Id: funcname.tab,v 1.15 2002/11/25 16:57:17 ukai Exp $
|
# $Id: funcname.tab,v 1.16 2002/12/03 16:01:35 ukai Exp $
|
||||||
# macro name function name
|
# macro name function name
|
||||||
#----------------------------
|
#----------------------------
|
||||||
@@@ nulcmd
|
@@@ nulcmd
|
||||||
@@ -68,6 +68,7 @@ MOVE_RIGHT1 movR1
|
|||||||
MOVE_UP movU
|
MOVE_UP movU
|
||||||
MOVE_UP1 movU1
|
MOVE_UP1 movU1
|
||||||
MSGS msgs
|
MSGS msgs
|
||||||
|
MULTIMAP multimap
|
||||||
NEW_TAB newT
|
NEW_TAB newT
|
||||||
NEXT nextBf
|
NEXT nextBf
|
||||||
NEXT_DOWN nextD
|
NEXT_DOWN nextD
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: main.c,v 1.156 2002/11/26 18:03:27 ukai Exp $ */
|
/* $Id: main.c,v 1.157 2002/12/03 16:01:37 ukai Exp $ */
|
||||||
#define MAINPROGRAM
|
#define MAINPROGRAM
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@@ -1183,15 +1183,41 @@ pcmap(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
escKeyProc(int c, int esc, unsigned char *map)
|
||||||
|
{
|
||||||
|
if (CurrentKey >= 0 && CurrentKey & K_MULTI) {
|
||||||
|
unsigned char **mmap;
|
||||||
|
mmap = (unsigned char **)getKeyData(MULTI_KEY(CurrentKey));
|
||||||
|
if (!mmap)
|
||||||
|
return;
|
||||||
|
switch (esc) {
|
||||||
|
case K_ESCD:
|
||||||
|
map = mmap[3];
|
||||||
|
break;
|
||||||
|
case K_ESCB:
|
||||||
|
map = mmap[2];
|
||||||
|
break;
|
||||||
|
case K_ESC:
|
||||||
|
map = mmap[1];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
map = mmap[0];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
esc |= (CurrentKey & ~0xFFFF);
|
||||||
|
}
|
||||||
|
CurrentKey = esc | c;
|
||||||
|
w3mFuncList[(int)map[c]].func();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
escmap(void)
|
escmap(void)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
c = getch();
|
c = getch();
|
||||||
if (IS_ASCII(c)) {
|
if (IS_ASCII(c))
|
||||||
CurrentKey = K_ESC | c;
|
escKeyProc((int)c, K_ESC, EscKeymap);
|
||||||
w3mFuncList[(int)EscKeymap[(int)c]].func();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1199,29 +1225,36 @@ escbmap(void)
|
|||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
c = getch();
|
c = getch();
|
||||||
|
if (IS_DIGIT(c)) {
|
||||||
if (IS_DIGIT(c))
|
|
||||||
escdmap(c);
|
escdmap(c);
|
||||||
else if (IS_ASCII(c)) {
|
return;
|
||||||
CurrentKey = K_ESCB | c;
|
|
||||||
w3mFuncList[(int)EscBKeymap[(int)c]].func();
|
|
||||||
}
|
}
|
||||||
|
if (IS_ASCII(c))
|
||||||
|
escKeyProc((int)c, K_ESCB, EscBKeymap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
escdmap(char c)
|
escdmap(char c)
|
||||||
{
|
{
|
||||||
int d;
|
int d;
|
||||||
|
|
||||||
d = (int)c - (int)'0';
|
d = (int)c - (int)'0';
|
||||||
c = getch();
|
c = getch();
|
||||||
if (IS_DIGIT(c)) {
|
if (IS_DIGIT(c)) {
|
||||||
d = d * 10 + (int)c - (int)'0';
|
d = d * 10 + (int)c - (int)'0';
|
||||||
c = getch();
|
c = getch();
|
||||||
}
|
}
|
||||||
if (c == '~') {
|
if (c == '~')
|
||||||
CurrentKey = K_ESCD | d;
|
escKeyProc((int)d, K_ESCD, EscDKeymap);
|
||||||
w3mFuncList[(int)EscDKeymap[d]].func();
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
multimap(void)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
c = getch();
|
||||||
|
if (IS_ASCII(c)) {
|
||||||
|
CurrentKey = K_MULTI | (CurrentKey << 16) | c;
|
||||||
|
escKeyProc((int)c, 0, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: proto.h,v 1.63 2002/11/26 17:05:25 ukai Exp $ */
|
/* $Id: proto.h,v 1.64 2002/12/03 16:01:44 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* This file was automatically generated by version 1.7 of cextract.
|
* This file was automatically generated by version 1.7 of cextract.
|
||||||
* Manual editing not recommended.
|
* Manual editing not recommended.
|
||||||
@@ -313,6 +313,7 @@ extern void pcmap(void);
|
|||||||
extern void escmap(void);
|
extern void escmap(void);
|
||||||
extern void escbmap(void);
|
extern void escbmap(void);
|
||||||
extern void escdmap(char c);
|
extern void escdmap(char c);
|
||||||
|
extern void multimap(void);
|
||||||
extern char *inputLineHistSearch(char *prompt, char *def_str, int flag,
|
extern char *inputLineHistSearch(char *prompt, char *def_str, int flag,
|
||||||
Hist *hist, int (*incfunc) (int ch, Str buf,
|
Hist *hist, int (*incfunc) (int ch, Str buf,
|
||||||
Lineprop *prop));
|
Lineprop *prop));
|
||||||
|
|||||||
Reference in New Issue
Block a user