作者seed2501 (呆子)
看板Array
标题[心得] 让 gcin 支援二级简码
时间Sat Jun 4 18:26:44 2005
我是使用很笨的方法去改的,而且需要改动到原本的一些结构,但是我确定是可以
work 的,跟 gcin 的原始码奋战了一下午,虽然还是看不太懂(爆!),
但是还好 gcin 的作者有写注解,所以慢慢的去看他的 code 之後,改起来就不难
source code 是从
http://www.csie.nctu.edu.tw/~cp76/gcin/
来的,目前最新的 code 版本为 0.9.7
希望有人可以帮忙测试,如果没有问题,再看看怎麽提交给 gcin team,
但网页上没有作者的信箱...
(呃,虽然我自己可以用,但是不太有自信是不是有全改好...)
欢迎讨论是不是有更好的修改法,因为我动到了一些 struct 和 cin 档案
定义,自己觉得不是很好,虽然可以 work...
以下是我的改法:
----------------------------------------------------------------------------
ar30.cin的改变
为了支援行列二级简码,在 ar30.cin中,新增加一个quick2的段落,记录行列的二级简
码,这里是使用
行列输入法的家所提供的将特别码放在二级简码的第一个字的二级
简码表。
修改gtab.h
gcin使用QUICK_KEYS这个 struct定义简码,为了支援二级简码,所以改成:
typedef struct {
u_char quick1[46][10][CH_SZ];
u_char quick2[46][46][10][CH_SZ];
} QUICK_KEYS;
本来只有 quick1,增加 quick2 去纪录二级简码。
修改gcin2tab.c
新增如何处理 quick2 定义的 code(照抄quick 的段落),
cmd_arg(tt,&cmd, &arg);
if (sequ(cmd,"%quick2") && sequ(arg,"begin")) {
dbg(".. quick keys defined\n");
for(quick_def=0;;) {
char k1, k2;
int len;
cmd_arg(tt,&cmd, &arg);
if (sequ(cmd,"%quick2")) break;
k1=kno[mtolower(cmd[0])]-1;
k2=kno[mtolower(cmd[1])]-1;
int N = 0;
char *p = arg;
while (*p) {
bchcpy(th.qkeys.quick2[(int)k1][(int)k2][N++], p);
p+=utf8_sz(p);
}
quick_def++;
}
// cmd_arg(tt,&cmd, &arg);
}
修改 gtab.c
首先是处理倒退键(BackSpace),原本是只有显示一级简码,现在配合修改,
(还是用抄的...)
if (ci==2 && cur_inmd->use_quick) {
int i;
bzero(seltab,sizeof(seltab));
for(i=0;i<10;i++)
utf8cpy(seltab[i], cur_inmd->qkeys.quick2[inch[0]-1][inch[1]-1][i]);
defselN=10;
DispInArea();
goto Disp_opt;
}
再来是处理使用者输入的时候:
if ((ci==2 && cur_inmd->use_quick) && (inkey <= 30 || inkey >= 41 ) )
{
int i;
for(i=0;i < cur_inmd->M_DUP_SEL; i++) {
utf8cpy(seltab[i],
&cur_inmd->qkeys.quick2[inch[0]-1][inkey-1][i]);
}
defselN=cur_inmd->M_DUP_SEL;
DispInArea();
goto Disp_opt;
}
因为如果不排除数字键,在原来的设计下,会把一级简码+数字键当成二级简码,所以在
进入的判断式上加上这个判断,
否则一级简码会失灵,
全部改完,这样就可以支援二级简码。
patch gcin 原始码
把 ar30.cin放到gcin原始码目录下的子目录 data.
三个 diff 档案放在 gcin 原始码的目录下,使用 patch 更新原始档,
patch -R gtab.c gtab.c.diff
patch -R gtab.h gtab.h.diff
patch -R gcin2tab.c gcin2tab.c.diff
(应该吧... 不然就直接 patch [source file] [patch file],有选项按 y )
重新编译并安装,登出再登入後你的 gcin
理论上就可以支援二级简码。
档案:
http://ljh.ee.nchu.edu.tw/~cch/array/array30_quick_patch.zip
里面包含的档案:
ar30.cin
gtab.c.diff
gtab.h.diff
gcin2tab.c.diff
希望有使用 gcin 而且想试试看的人看看我有没有改错,
如果可以 work 而且没有明显的问题,再看看如何跟 gcin team 提交这个
支援行列二级简码的修改...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.105.134.119
※ 编辑: seed2501 来自: 59.105.134.119 (06/04 18:38)