|
XCIN Mail-list
|
| Indexed By Date: [Previous] [Next] | Indexed By Thread: [Previous] [Next] |
| Subject: | 一些 patch |
| From: | Ken Shan <ken@digitas.harvard.edu> |
| Organization: | very far away from anywhere else |
| Date: | Sun, 3 Dec 2000 21:47:32 -0500 |
| To: | xcin@linux.org.tw |
| Reply-To: | xcin@linux.org.tw |
| User-Agent: | Mutt/1.2.5i |
大家好,以下是一些我自行修改 xcin 的新功能,不知道對其他人有沒有幫
助、有沒有利用價值。
Fix bug: 在 bimsphone 輸入法下,假設 %ctrl 片語功能關閉,然後
CapsLock 開啟,按 Ctrl + "," 的話會連續打出兩個逗號而非一個。
Fix bug:在bimsphone 輸入法下,就算 CapsLock 開啟按下空白鍵仍然
是選字的意思而非鍵入空白的意思。不知道這是故意的還是不小心的?
New feature: 除了 %trigger, %shift, %ctrl 與 %alt 四種快速片語
表以外,再增加第五種,稱為%fallback。所謂 %fallback 的意思是,
如果 bimsphone 在輸入狀態(也就是非選字狀態)之下碰到使用者按
鍵不在ㄅㄆㄇㄈ之列的話,就先查%fallback 片語表,如果查到了就當
作片語處理,如果查不到就把使用者按的鍵原封不動傳給XIM client。
這個功能是因為我懷念自然輸入法中輸入頓號、上引號及下引號可以按
"'", "[" 與 "]" 而加的。
再來有另一個我懷念自然輸入法的功能,就是按下Tab 可以切斷猜錯的詞。
不知道這個功能容不容易加到 bimsphone 裡面?
--
Edit this signature at http://rodimus.digitas.harvard.edu/cgi-bin/ken/sig
vi has detected that it is not your default text editor.
If you would like vi to be your default text editor, please press "Y".
~
:x
--- ./libtabe/src/supports/bims/bims.c.orig Sun Oct 15 10:24:19 2000
+++ ./libtabe/src/supports/bims/bims.c Fri Dec 1 17:41:35 2000
@@ -1102,7 +1102,6 @@
else {
return(BC_VAL_ABSORB);
}
- return(BC_VAL_IGNORE);
}
return(BC_VAL_IGNORE);
--- ./xcin-2.5/src/Cinput/im_comm/qphrase.c.orig Sun Oct 8 00:12:14 2000
+++ ./xcin-2.5/src/Cinput/im_comm/qphrase.c Fri Dec 1 18:22:08 2000
@@ -32,7 +32,8 @@
char *s;
} qphr_t;
-static qphr_t qphr[50], qphr_shift[50], qphr_ctrl[50], qphr_alt[50];
+static qphr_t qphr[50], qphr_shift[50], qphr_ctrl[50],
+ qphr_alt[50], qphr_fallback[50];
static char true_fn[256];
void
@@ -59,6 +60,8 @@
qp = qphr_ctrl;
else if (! strcmp(cmd, "%alt"))
qp = qphr_alt;
+ else if (! strcmp(cmd, "%fallback"))
+ qp = qphr_fallback;
else
perr(XCINMSG_WARNING,
N_("qphrase: %s: unknown tag: %s, ignore.\n"), true_fn, cmd);
@@ -81,11 +84,12 @@
qphr_t *qp;
switch (class) {
- case QPHR_TRIGGER: qp=qphr; break;
- case QPHR_SHIFT: qp=qphr_shift; break;
- case QPHR_CTRL: qp=qphr_ctrl; break;
- case QPHR_ALT: qp=qphr_alt; break;
- default: qp=qphr; break;
+ case QPHR_TRIGGER: qp=qphr; break;
+ case QPHR_SHIFT: qp=qphr_shift; break;
+ case QPHR_CTRL: qp=qphr_ctrl; break;
+ case QPHR_ALT: qp=qphr_alt; break;
+ case QPHR_FALLBACK: qp=qphr_fallback; break;
+ default: qp=qphr; break;
}
if ((key = key2code(ch)) && qp[key].n > 0)
return qp[key].s;
--- ./xcin-2.5/src/Cinput/gen_inp/gen_inp.c.orig Sun Oct 15 10:21:30 2000
+++ ./xcin-2.5/src/Cinput/gen_inp/gen_inp.c Fri Dec 1 19:45:28 2000
@@ -901,6 +901,10 @@
if ((cf->modesc & QPHR_ALT))
ret |= IMKEY_ALTPHR;
break;
+ case QPHR_FALLBACK:
+ if ((cf->modesc & QPHR_FALLBACK))
+ ret |= IMKEY_FALLBACKPHR;
+ break;
}
return ret;
}
--- ./xcin-2.5/src/Cinput/bimsphone/bimsphone.c.orig Sun Oct 8 00:12:14 2000
+++ ./xcin-2.5/src/Cinput/bimsphone/bimsphone.c Sun Dec 3 20:45:39 2000
@@ -528,12 +528,19 @@
static unsigned int
modifier_escape(phone_conf_t *cf, inpinfo_t *inpinfo,
- keyinfo_t *keyinfo, int *gotit)
+ keyinfo_t *keyinfo, int *gotit, int fallback)
{
unsigned int ret=0;
*gotit = 0;
- if ((keyinfo->keystate & ControlMask) == ControlMask) {
+ if ((keyinfo->keystate & LockMask) == LockMask) {
+ if ((keyinfo->keystr_len == 1) && (inpinfo->guimode & GUIMOD_LISTCHAR))
+ ret |= IMKEY_SHIFTESC;
+ else
+ ret |= IMKEY_IGNORE;
+ *gotit = 1;
+ }
+ else if ((keyinfo->keystate & ControlMask) == ControlMask) {
if ((cf->modesc & QPHR_CTRL))
ret |= IMKEY_CTRLPHR;
else
@@ -556,11 +563,12 @@
IMKEY_SHIFTESC : IMKEY_IGNORE);
*gotit = 1;
}
- if ((keyinfo->keystate & LockMask) == LockMask) {
- if ((keyinfo->keystr_len == 1) && (inpinfo->guimode & GUIMOD_LISTCHAR))
- ret |= IMKEY_SHIFTESC;
+ else if (fallback) {
+ if ((cf->modesc & QPHR_FALLBACK) &&
+ (keyinfo->keystr_len == 1) && (inpinfo->guimode & GUIMOD_LISTCHAR))
+ ret |= IMKEY_FALLBACKPHR;
else
- ret |= IMKEY_IGNORE;
+ ret = (inpinfo->n_lcch) ? IMKEY_ABSORB : IMKEY_IGNORE;
*gotit = 1;
}
@@ -731,7 +739,8 @@
else
return IMKEY_IGNORE;
}
- else if (keysym == XK_space) {
+ else if ((keysym == XK_space) &&
+ ((keyinfo->keystate & LockMask) != LockMask)) {
if ((iccf->mode & ICCF_MODE_COMPOSEDOK)) {
if ((cf->mode & BIMSPH_MODE_SPACESEL)) {
if (enter_selection(cf, inpinfo->imid)==0)
@@ -756,7 +765,7 @@
inpinfo->guimode &= ~GUIMOD_SELKEYSPOT;
if (keyinfo->keystate) {
int ret, gotit;
- ret = modifier_escape(cf, inpinfo, keyinfo, &gotit);
+ ret = modifier_escape(cf, inpinfo, keyinfo, &gotit, 0);
if (gotit)
return ret;
}
@@ -780,7 +789,10 @@
editing_status(cf, inpinfo, iccf);
return (rval == BC_VAL_COMMIT) ? IMKEY_COMMIT : IMKEY_ABSORB;
default:
- return (inpinfo->n_lcch) ? IMKEY_ABSORB : IMKEY_IGNORE;
+ {
+ int gotit;
+ return modifier_escape(cf, inpinfo, keyinfo, &gotit, 1);
+ }
}
break;
@@ -827,7 +839,7 @@
inpinfo->guimode &= ~GUIMOD_SELKEYSPOT;
if (keyinfo->keystate) {
int ret, gotit;
- ret = modifier_escape(cf, inpinfo, keyinfo, &gotit);
+ ret = modifier_escape(cf, inpinfo, keyinfo, &gotit, 0);
if (gotit)
return ret;
}
@@ -843,7 +855,10 @@
editing_status(cf, inpinfo, iccf);
return IMKEY_ABSORB;
default:
- return IMKEY_IGNORE;
+ {
+ int gotit;
+ return modifier_escape(cf, inpinfo, keyinfo, &gotit, 1);
+ }
}
}
else {
--- ./xcin-2.5/src/include/module.h.orig Sun Oct 15 10:21:30 2000
+++ ./xcin-2.5/src/include/module.h Fri Dec 1 17:54:55 2000
@@ -151,6 +151,7 @@
#define IMKEY_SHIFTPHR 0x00000020
#define IMKEY_CTRLPHR 0x00000040
#define IMKEY_ALTPHR 0x00000080
+#define IMKEY_FALLBACKPHR 0x00000100
/* Represent Page State of multi-char selection. */
#define MCCH_ONEPG 0
@@ -274,6 +275,7 @@
#define QPHR_SHIFT 1
#define QPHR_CTRL 2
#define QPHR_ALT 4
+#define QPHR_FALLBACK 8
/* Module object & encoding names */
extern int get_objenc(char *objname, objenc_t *objenc);
--- ./xcin-2.5/src/xim.c.orig Sun Oct 8 00:12:14 2000
+++ ./xcin-2.5/src/xim.c Fri Dec 1 18:47:47 2000
@@ -126,7 +126,7 @@
IM_Context_t *imc = ic->imc;
if (ret == 0) {
- /* This is IMKET_ABSORB */
+ /* This is IMKEY_ABSORB */
xccore->gui.winchange |= WIN_CHANGE_IM;
return True;
}
@@ -152,7 +152,9 @@
cch = qphrase_str(keyinfo->keystr[0], QPHR_CTRL);
else if ((ret & IMKEY_ALTPHR))
cch = qphrase_str(keyinfo->keystr[0], QPHR_ALT);
- if (! cch && (ret & IMKEY_SHIFTESC)) {
+ else if ((ret & IMKEY_FALLBACKPHR))
+ cch = qphrase_str(keyinfo->keystr[0], QPHR_FALLBACK);
+ if (! cch && (ret & (IMKEY_SHIFTESC | IMKEY_FALLBACKPHR))) {
if ((imc->inp_state & IM_2BYTES))
cch = fullchar_ascii(&(imc->inpinfo), 1, keyinfo);
else
@@ -163,6 +165,7 @@
if (cch) {
xccore->gui.winchange |= WIN_CHANGE_IM;
xim_commit(ic, cch);
+ ret &= ~IMKEY_IGNORE;
}
}
if (! (ret & IMKEY_IGNORE)) {
| Indexed By Date | Previous: |
救命啊!null xcin locale_sub_path From: "linux" <sol.yang@msa.hinet.net> |
|---|---|---|
| Next: |
如何修正locale From: "linux" <sol.yang@msa.hinet.net> |
|
| Indexed By Thread | Previous: |
Re: 救命啊!null xcin locale_sub_path From: Franklin.bbs@bbs.cynix.com.tw (Franklin) |
| Next: |
Re: 一些 patch From: thhsieh@linux.org.tw |