Great Circle Associates

XCIN Mail-list
(December 2000)


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)) {

PGP signature

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