yw3008 发表于 2004-5-28 20:51:10

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

用惯了双拼,安装了linux之后,还想用双拼。
不过,在安装了小企鹅输入法(是最新版)之后,发现小企鹅的双拼,不是我惯用的中文之星双拼,它们的键位很多不同。
我试图记住这新的键位,但是,还是经常搞混。
人脑不是电脑,那个过去键位的记忆,“删除”又来,非常顽强,超出我所预料。

如果,能自定义键盘,那该多么美好啊。可是,我不会。
谁懂行,请不吝赐教。
谢谢。

Ivn 发表于 2004-5-28 21:38:42

~/.fcitx/config 这个文件中有,但不知道是否是你要地.

yw3008 发表于 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

yw3008 发表于 2004-5-29 18:15:07

请指示具体。

Ivn 发表于 2004-5-30 01:04:52

我不知道你想改什么,
fcitx 就提供了两文件在 ~/.fcitx
一个 config 就是上面这个
一个 profile 似乎没有键位设置。
//

yw3008 发表于 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;
    char            str, strS, *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 = '\0';
        pstr = str;
        if (*pstr == ' ' || *pstr == '\t')
          pstr++;
        if (!strlen (pstr) || pstr == '#')
          continue;

        if (pstr == '=')        //是零声母设置
          cNonS = tolower (pstr);
        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);
                  else {
                        i = GetSPIndexQP_C (strS);
                        if (i != -1)
                          SPMap_C.cJP = tolower (pstr);
                  }
                  break;
                }
                i++;
          }
        }
    }

    fclose (fp);

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

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

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

        return;
    }

    iIndex = IsSyllabary (strQP, True);

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

    strTmp = '\0';
    strQP = '\0';

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

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

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

          strcpy (strQP, str_QP);
        }
    }

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

    strTmp = strSP;
    strTmp = '\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) {
        if (!strcmp (str, SPMap_S.strQP))
          return i;

        i++;
    }

    return -1;
}

int GetSPIndexQP_C (char *str)
{
    int             i;

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

    return -1;
}

int GetSPIndexJP_S (char c)
{
    int             i;

    i = 0;
    while (SPMap_S.strQP) {
        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) {
        if (c == SPMap_C.cJP)
          return i;
        i++;
    }

    return -1;
}

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

    if (bSP)
        LoadSPData ();
}

yw3008 发表于 2004-5-30 10:24:59

我只是改了键位,别的看不懂,未动。
现在,当我用双拼的时候,并不依我改变的键位出字,还是老样子。
页: [1]
查看完整版本: 小企鹅的键盘怎么自定义?