QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 607|回复: 6

小企鹅的键盘怎么自定义?

[复制链接]
发表于 2004-5-28 20:51:10 | 显示全部楼层 |阅读模式
用惯了双拼,安装了linux之后,还想用双拼。
不过,在安装了小企鹅输入法(是最新版)之后,发现小企鹅的双拼,不是我惯用的中文之星双拼,它们的键位很多不同。
我试图记住这新的键位,但是,还是经常搞混。
人脑不是电脑,那个过去键位的记忆,“删除”又来,非常顽强,超出我所预料。

如果,能自定义键盘,那该多么美好啊。可是,我不会。
谁懂行,请不吝赐教。
谢谢。
发表于 2004-5-28 21:38:42 | 显示全部楼层
~/.fcitx/config 这个文件中有,但不知道是否是你要地.
回复

使用道具 举报

 楼主| 发表于 2004-5-29 18:09:49 | 显示全部楼层
这个文件,[程序]
#区域设置=zh_CN
显示字体=*
显示字体大小=18
是否使用AA字体=1

[输出]
数字后跟半角符号=1
Enter键行为=2
分号输入英文=1
大写字母输入英文=1
联想方式禁止翻页=1

[界面]
候选词个数=5
是否使用3D界面=2
是否自动隐藏输入条=1
主窗口隐藏模式=1
是否光标跟随=1
光标色=92 210 131
主窗口背景色=230 230 230
主窗口线条色=255 0 0
输入窗背景色=240 240 240
输入窗线条色=100 200 255
输入窗箭头色=255 150 255
输入窗用户输入色=0 0 255
输入窗提示色=255 0 0
输入窗序号色=200 0 0
输入窗第一个候选字色=0 150 100
#该颜色值只用于拼音中的用户自造词
输入窗用户词组色=0 0 255
输入窗提示编码色=100 100 255
#五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=0 0 0

#除了“中英文快速切换键”外,其它的热键均可设置为两个,中间用空格分隔
[热键]
打开/关闭输入法=CTRL_SPACE
#中英文快速切换键 可以设置为L_CTRL R_CTRL L_SHIFT R_SHIFT
中英文快速切换键=L_CTRL
GBK支持=CTRL_M
联想支持=CTRL_L
全半角=SHIFT_SPACE
中文标点=ALT_SPACE
上一页=- ,
下一页== .
第二三候选词选择键=SHIFT

[五笔]
五笔四键自动上屏=1
自动调整五笔顺序=0
提示词库中已有的词组=0
五笔精确匹配=0
提示五笔编码=1
使用Z输入拼音=1
Z模糊匹配=1
增加五笔词组=CTRL_8
调整五笔顺序=CTRL_6
删除五笔词组=CTRL_7

[二笔]
向前翻页=[
向后翻页=]

[拼音]
使用全拼=0
拼音自动组词=1
保存自动组词=0
增加拼音常用字=CTRL_8
删除拼音常用字=CTRL_7
删除拼音用户词组=CTRL_DELETE
#重码调整方式说明:0-->不调整  1-->快速调整  2-->按频率调整
拼音单字重码调整方式=2
拼音词组重码调整方式=1
拼音常用词重码调整方式=0
是否模糊an和ang=0
是否模糊en和eng=0
是否模糊ian和iang=0
是否模糊in和ing=0
是否模糊ou和u=0
是否模糊uan和uang=0
是否模糊c和ch=0
是否模糊f和h=0
是否模糊l和n=0
是否模糊s和sh=0
是否模糊z和zh=0
回复

使用道具 举报

 楼主| 发表于 2004-5-29 18:15:07 | 显示全部楼层
请指示具体。
回复

使用道具 举报

发表于 2004-5-30 01:04:52 | 显示全部楼层
我不知道你想改什么,
fcitx 就提供了两文件在 ~/.fcitx
一个 config 就是上面这个
一个 profile 似乎没有键位设置。
//
回复

使用道具 举报

 楼主| 发表于 2004-5-30 10:21:29 | 显示全部楼层
我要的,看起来是下面这个,这是我已经改过来的,但是它不起作用。我不知道还差在哪里,请继续帮助。
文件为/root/.Trash/fcitx-2.0.2/src/sp.c


#include <stdio.h>
#include <sys/stat.h>
#include <limits.h>
#include <ctype.h>

#include "main.h"
#include "sp.h"
#include "pyMapTable.h"
#include "pyParser.h"
#include "MainWindow.h"

SP_C            SPMap_C[] = {
    {"in", 'l'}
    ,
    {"jan", 'j'}
    ,
    {"iang", 'h'}
    ,
    {"iao", 'k'}
    ,
    {"un", 'z'}
    ,
    {"an", 'f'}
    ,
    {"ang", 'g'}
    ,
    {"en", 'r'}
    ,
    {"ei", 'w'}
    ,
    {"ie", 'm'}
    ,
    {"ao", 'd'}
    ,
    {"uan", 'c'}
    ,
    {"ue", 'x'}
    ,
    {"iu", 'n'}
    ,
    {"ong", 'y'}
    ,
    {"ai", 's'}
    ,
    {"er", 'q'}
    ,
    {"ing", 'q'}
    ,
    {"uai", 'x'}
    ,
    {"ia", 'b'}
    ,
    {"uang", 'h'}
    ,
    {"iong", 'y'}
    ,
    {"en", 'r'}
    ,
    {"ao", 'd'}
    ,
    {"eng", 't'}
    ,
    {"ui", 'v'}
    ,
    {"ou", 'p'}
    ,
    {"ua","b"}
    ,
    {"v","v"
    ,
    {"uo", 'o'}
    ,
    {"eng", 't'}
    ,

    {"\0", '\0'}
};

SP_S            SPMap_S[] = {
    {"sh", 'i'}
    ,
    {"ch", 'u'}
    ,
    {"zh", 'v'}
    ,
    {"\0", '\0'}
};

Bool            bSP_UseSemicolon = False;
Bool            bSP = False;
char            cNonS = 'o';

void LoadSPData (void)
{
    FILE           *fp;
    char            strPath[PATH_MAX];
    char            str[20], strS[5], *pstr;
    int             i;

    strcpy (strPath, (char *) getenv ("HOME"));
    strcat (strPath, "/.fcitx/");

    if (access (strPath, 0))
        mkdir (strPath, S_IRWXU);

    strcat (strPath, "sp.dat");
    fp = fopen (strPath, "rt");

    if (!fp)
        return;

    while (1) {
        if (!fgets (str, 20, fp))
            break;

        i = strlen (str) - 1;
        while (str == ' ' || str == '\n')
            str[i--] = '\0';
        pstr = str;
        if (*pstr == ' ' || *pstr == '\t')
            pstr++;
        if (!strlen (pstr) || pstr[0] == '#')
            continue;

        if (pstr[0] == '=')        //是零声母设置
            cNonS = tolower (pstr[1]);
        else {
            i = 0;
            while (pstr) {
                if (pstr == '=') {
                    strncpy (strS, pstr, i);
                    strS = '\0';

                    pstr += i;
                    i = GetSPIndexQP_S (strS);
                    if (i != -1)
                        SPMap_S.cJP = tolower (pstr[1]);
                    else {
                        i = GetSPIndexQP_C (strS);
                        if (i != -1)
                            SPMap_C.cJP = tolower (pstr[1]);
                    }
                    break;
                }
                i++;
            }
        }
    }

    fclose (fp);

    //下面判断是否使用了';'
    i = 0;
    while (SPMap_C.strQP[0]) {
        if (SPMap_C[i++].cJP == ';')
            bSP_UseSemicolon = True;
    }
    if (!bSP_UseSemicolon) {
        i = 0;
        while (SPMap_S.strQP[0]) {
            if (SPMap_S[i++].cJP == ';')
                bSP_UseSemicolon = True;
        }
    }
    if (!bSP_UseSemicolon) {
        if (cNonS == ';')
            bSP_UseSemicolon = True;
    }
}

/*
* 将一个全拼转换为双拼
* strQP只能是一个标准的全拼,本函数不检查错误
*/
/*void QP2SP (char *strQP, char *strSP)
{
    //IsConsonant
    int             iIndex;

    strSP[2] = '\0';
    //"ang"是唯一一个可单独使用、长为3的拼音,单独处理
    if (!strcmp (strQP, "ang")) {
        strSP[0] = cNonS;
        strSP[1] = SPMap_C[GetSPIndexQP_C (strQP)].cJP;
        return;
    }
    if (strlen (strQP) == 1) {
        strSP[0] = cNonS;
        strSP[1] = *strQP;
        return;
    }
    if (strlen (strQP) == 2) {
        iIndex = GetSPIndexQP_C (strQP);
        if (iIndex == -1)
            strcpy (strSP, strQP);
        else {
            strSP[0] = cNonS;
            strSP[1] = SPMap_C[iIndex].cJP;
        }

        return;
    }

    iIndex = IsSyllabary (strQP, True);

    strQP += strlen (syllabaryMapTable[iIndex].strPY);
    if (*strQP) {
        if (strlen (syllabaryMapTable[iIndex].strPY) == 1)
            strSP[0] = syllabaryMapTable[iIndex].strPY[0];
        else
            strSP[0] = SPMap_S[GetSPIndexQP_S (syllabaryMapTable[iIndex].strPY)].cJP;
        if (strlen (strQP) == 1)
            strSP[1] = strQP[0];
        else
            strSP[1] = SPMap_C[GetSPIndexQP_C (strQP)].cJP;
    }
    else {
        strSP[0] = cNonS;
        strSP[1] = SPMap_C[GetSPIndexQP_C (syllabaryMapTable[iIndex].strPY)].cJP;
    }
}
*/
/*
* 此处只转换单个双拼,并且不检查错误
*/
void SP2QP (char *strSP, char *strQP)
{
    int             iIndex1 = 0, iIndex2 = 0;
    char            strTmp[2];
    char            str_QP[MAX_PY_LENGTH + 1];

    strTmp[1] = '\0';
    strQP[0] = '\0';

    if (strSP[0] != cNonS) {
        iIndex1 = GetSPIndexJP_S (*strSP);
        if (iIndex1 == -1) {
            strTmp[0] = strSP[0];
            strcat (strQP, strTmp);
        }
        else
            strcat (strQP, SPMap_S[iIndex1].strQP);
    }
    else if (!strSP[1])
        strcpy (strQP, strSP);

    if (strSP[1]) {
        iIndex2 = -1;
        while (1) {
            iIndex2 = GetSPIndexJP_C (strSP[1], iIndex2 + 1);
            if (iIndex2 == -1) {
                strTmp[0] = strSP[1];
                strcat (strQP, strTmp);
                break;
            }

            strcpy (str_QP, strQP);
            strcat (strQP, SPMap_C[iIndex2].strQP);
            if (FindPYFAIndex (strQP, False) != -1)
                break;

            strcpy (strQP, str_QP);
        }
    }

    if (FindPYFAIndex (strQP, False) != -1)
        iIndex2 = 0;                //这只是将iIndex2置为非-1,以免后面的判断

    strTmp[0] = strSP[0];
    strTmp[1] = '\0';
    if ((iIndex1 == -1 && !(IsSyllabary (strTmp, 0))) || iIndex2 == -1) {
        iIndex1 = FindPYFAIndex (strSP, False);
        if (iIndex1 != -1)
            strcpy (strQP, strSP);
    }
}

int GetSPIndexQP_S (char *str)
{
    int             i;

    i = 0;
    while (SPMap_S.strQP[0]) {
        if (!strcmp (str, SPMap_S.strQP))
            return i;

        i++;
    }

    return -1;
}

int GetSPIndexQP_C (char *str)
{
    int             i;

    i = 0;
    while (SPMap_C.strQP[0]) {
        if (!strcmp (str, SPMap_C.strQP))
            return i;
        i++;
    }

    return -1;
}

int GetSPIndexJP_S (char c)
{
    int             i;

    i = 0;
    while (SPMap_S.strQP[0]) {
        if (c == SPMap_S.cJP)
            return i;

        i++;
    }

    return -1;
}

int GetSPIndexJP_C (char c, int iStart)
{
    int             i;

    i = iStart;
    while (SPMap_C.strQP[0]) {
        if (c == SPMap_C.cJP)
            return i;
        i++;
    }

    return -1;
}

void SwitchSP (void)
{
    bSP = !bSP;
    DisplayMainWindow ();

    if (bSP)
        LoadSPData ();
}
回复

使用道具 举报

 楼主| 发表于 2004-5-30 10:24:59 | 显示全部楼层
我只是改了键位,别的看不懂,未动。
现在,当我用双拼的时候,并不依我改变的键位出字,还是老样子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 22:54 , Processed in 0.036903 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表