From 411a288513ed6e150478aa2804000a308999435f Mon Sep 17 00:00:00 2001 From: geekard Date: Mon, 19 Nov 2012 20:58:04 +0800 Subject: [PATCH] add files about keymaps and xmodmap --- Zim/.zim/index.db | Bin 231424 -> 231424 bytes Zim/.zim/state.conf | 13 +- .../输入法配置/{Fcitx.txt => Fcitx--过时.txt} | 13 +- Zim/Linux/输入法配置/fcitx.txt | 110 +++ Zim/Linux/输入法配置/小企鹅输入法.txt | 802 ++++++++++++++++ Zim/Linux/输入法配置/解析输入法环境变量.txt | 38 + Zim/Linux/黑客辞典.txt | 10 + Zim/Utils/grub.txt | 7 + Zim/Utils/xmodmap.txt | 77 -- Zim/Utils/键盘布局和按键映射.txt | 7 + Zim/Utils/键盘布局和按键映射/keymaps.txt | 323 +++++++ .../键盘布局和按键映射/keymaps/dumpkeys.txt | 482 ++++++++++ .../keymaps/dumpkeys_-l.txt | 878 ++++++++++++++++++ .../keymaps/personal.map.txt | 68 ++ Zim/Utils/键盘布局和按键映射/wiki_KEYMAPS.txt | 72 ++ Zim/Utils/键盘布局和按键映射/wiki_xmodmap.txt | 88 ++ Zim/Utils/键盘布局和按键映射/xmodmap.txt | 133 +++ 17 files changed, 3033 insertions(+), 88 deletions(-) rename Zim/Linux/输入法配置/{Fcitx.txt => Fcitx--过时.txt} (93%) create mode 100644 Zim/Linux/输入法配置/fcitx.txt create mode 100644 Zim/Linux/输入法配置/小企鹅输入法.txt create mode 100644 Zim/Linux/输入法配置/解析输入法环境变量.txt create mode 100644 Zim/Linux/黑客辞典.txt create mode 100644 Zim/Utils/grub.txt delete mode 100644 Zim/Utils/xmodmap.txt create mode 100644 Zim/Utils/键盘布局和按键映射.txt create mode 100644 Zim/Utils/键盘布局和按键映射/keymaps.txt create mode 100644 Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys.txt create mode 100644 Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys_-l.txt create mode 100644 Zim/Utils/键盘布局和按键映射/keymaps/personal.map.txt create mode 100644 Zim/Utils/键盘布局和按键映射/wiki_KEYMAPS.txt create mode 100644 Zim/Utils/键盘布局和按键映射/wiki_xmodmap.txt create mode 100644 Zim/Utils/键盘布局和按键映射/xmodmap.txt diff --git a/Zim/.zim/index.db b/Zim/.zim/index.db index b4fa20b9d65902ef69bb173d5fb1fec32709d778..d90a84d2468df8fee1af0ae28c5ca2f1800fb70e 100644 GIT binary patch delta 55042 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�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 delta 86006 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 diff --git a/Zim/.zim/state.conf b/Zim/.zim/state.conf index dd2d48c..7109f43 100644 --- a/Zim/.zim/state.conf +++ b/Zim/.zim/state.conf @@ -1,10 +1,10 @@ [History] -list=[["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2874,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934",356,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934:buffer cache",2108,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:Virtual file system",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:The Virtual File System in Linux",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:Linux\u6587\u4ef6\u7cfb\u7edfFAQ",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:GIO",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:Filesystem in Userspace (FUSE)",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:The Virtual File System in Linux",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934",356,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934:buffer cache",2108,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5982\u4f55\u5b9e\u73b0\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf",15137,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u89e3\u6790 Linux \u4e2d\u7684 VFS \u6587\u4ef6\u7cfb\u7edf\u673a\u5236",0,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76",1434,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2874,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf",0,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2874,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76",1434,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2875,null],["\u5185\u6838\u5f00\u53d1:Linux2.6.16\u7684\u542f\u52a8\u8fc7\u7a0b",0,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2493,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76",2075,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2493,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76",5340,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:The Page Cache FAQ",null,null]] +list=[["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",4502,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",187,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",145,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki KEYMAPS",1701,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",187,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",145,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",877,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",145,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",944,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",125,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki KEYMAPS",2508,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",637,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",914,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",914,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",914,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",983,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",2995,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps:personal.map",178,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",4928,null]] current=24 -recent=[["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:The Virtual File System in Linux",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934",356,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5757\u7f13\u51b2\u533a\u548c\u5757\u7f13\u51b2\u533a\u5934:buffer cache",2108,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u5982\u4f55\u5b9e\u73b0\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf",15137,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf:\u89e3\u6790 Linux \u4e2d\u7684 VFS \u6587\u4ef6\u7cfb\u7edf\u673a\u5236",0,null],["\u5185\u6838\u5f00\u53d1:linux\u6587\u4ef6\u7cfb\u7edf",0,null],["\u5185\u6838\u5f00\u53d1:Linux2.6.16\u7684\u542f\u52a8\u8fc7\u7a0b",0,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:Page Cache",2493,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76",5340,null],["\u5185\u6838\u5f00\u53d1:Linux Cache \u673a\u5236\u63a2\u7a76:The Page Cache FAQ",null,null]] +recent=[["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04",43,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:\u66f4\u6539\u952e\u76d8\u5e03\u5c40(vitual terminal\u548cX\u7a0b\u5e8f)",0,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps:dumpkeys",75,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps:dumpkeys -l",14500,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki KEYMAPS",2508,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps",13256,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:wiki xmodmap",2995,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:keymaps:personal.map",178,null],["Utils:\u952e\u76d8\u5e03\u5c40\u548c\u6309\u952e\u6620\u5c04:xmodmap",4928,null]] [MainWindow] -windowsize=[1600,836] +windowsize=[1278,779] show_sidepane=True sidepane_pos=316 show_menubar=True @@ -16,10 +16,15 @@ show_statusbar_fullscreen=False pathbar_type=recent pathbar_type_fullscreen=none readonly=False -windowpos=[-4,-4] +windowpos=[0,19] toolbar_style=None toolbar_size=tiny active_tabs=["Index",null,null,"Attachments"] +toggle_panes=[] +left_pane=[true,222,"Index"] +right_pane=[false,200,null] +top_pane=[false,200,null] +bottom_pane=[false,200,null] [ImportPageDialog] windowsize=[500,400] diff --git a/Zim/Linux/输入法配置/Fcitx.txt b/Zim/Linux/输入法配置/Fcitx--过时.txt similarity index 93% rename from Zim/Linux/输入法配置/Fcitx.txt rename to Zim/Linux/输入法配置/Fcitx--过时.txt index b3fe28d..5ea4e7b 100644 --- a/Zim/Linux/输入法配置/Fcitx.txt +++ b/Zim/Linux/输入法配置/Fcitx--过时.txt @@ -2,9 +2,9 @@ Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2011-11-17T17:36:30+08:00 -====== Fcitx ====== +====== Fcitx--过时 ====== Created Thursday 17 November 2011 -https://wiki.archlinux.org/index.php/Fcitx_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 +https://wiki.archlinux.org/index.php/Fcitx_%28简体中文%29 ==== Contents ==== @@ -31,14 +31,13 @@ Fcitx (Free Chinese Input Toy for X) ──即小企鹅输入法 ,它是一个 使用 FCITX 之前,你必须先进行环境设定,不过这并不难. - 打开你主文件夹(/home/XXX)下的 .bashrc文件,添加以下几行: +打开你主文件夹(/home/XXX)下的 .bashrc文件,添加以下几行: - #setup** XIM environment**, needn't if use SCIM as gtk-immodules + #setup** XIM environment**, needn't if use SCIM as gtk-immodules export XMODIFIERS="@im=fcitx" export GTK_IM_MODULE=xim export QT_IM_MODULE=xim -注意:如果使用scim则,上述的xim需改为scim,因为 fxitx基于xim而scim不是。 - 重新登录以使其生效. +注意:如果使用scim则上述的xim需改为scim,因为 fxitx基于xim而scim不是。重新登录以使其生效. 重新登录后,打开一个终端, 输入: @@ -108,7 +107,7 @@ export QT_IM_MODULE=xim 关于 locale 的详情,请参阅 Google. -=== 注意: === +=== 注意: === 其实,在英文环境下,并__不需要__将 LC_CTYPE 变量设为中文的locale(但是**emacs例外**)。也就是说,完全不用设置 locale ,也能照样使用中文输入法。如果 ~/.bashrc or ~/.xinitrc 文件中,已经有了: diff --git a/Zim/Linux/输入法配置/fcitx.txt b/Zim/Linux/输入法配置/fcitx.txt new file mode 100644 index 0000000..a864d4f --- /dev/null +++ b/Zim/Linux/输入法配置/fcitx.txt @@ -0,0 +1,110 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T10:18:22+08:00 + +====== fcitx ====== +Created Monday 19 November 2012 +https://wiki.archlinux.org/index.php/Fcitx_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) + +Fcitx (Flexible Input Method Framework) ──即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台(即原来的 G 五笔),包括五笔、拼音(全拼和双拼)、二笔、区位等输入模块,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。它的优点是,短小精悍、跟程序的兼容性比较好。 + +===== 安装 FCITX ===== +它在 extra 库中,可以用以下命令安装: +# pacman -S fcitx +__自从4.1.0, Fcitx提供了它自己的input method module, fcitx-gtk2, fcitx-gtk3 and fcitx-qt, 建议使用它们而不是直接使用xim。(方法是下面定义环境变量时,GTK_IM_MODULE和QT_IM_MODULE值为fcitx而不是xim。)__ + +为了在gtk与qt程序中获得良好的输入体验(例如光标跟随与显示预编辑字符串)并避免一些xim无法解决的bug, 请根据需要安装对应的输入法模块 +**# pacman -S fcitx-gtk2 fcitx-gtk3 fcitx-qt** + +风波:因云帆论坛有人批评Fcitx代码写的很差,作者于2007年7月10日决定终止了本项目。但随即有人宣布接手。现在该项目代码已经转移到了 GitHub 上面(https://github.com/fcitx/fcitx )。 + +当前的最新版本是其 git 版,即 fcitx-git。可以从 AUR 上安装 (已包含全部输入法模块): +$ yaourt -S fcitx-git + +===== 使用 FCITX 输入中文 ===== +使用 FCITX 之前,你必须先进行环境设定: +如果你采用KDM,GDM,LightDM:在~/.xprofile中加入(没有则新建一个) +export XMODIFIERS=@im=fcitx +export GTK_IM_MODULE=fcitx +export QT_IM_MODULE=fcitx + +采用startx启动,或者Slim(使用.xinitrc的场合):在~/.xinitrc中加入 +export XMODIFIERS=@im=fcitx +export GTK_IM_MODULE=fcitx +export QT_IM_MODULE=fcitx +重新登录后,打开一个终端, 输入: + fcitx & +为检验 fcitx 是否正常运行, 打开一个程序,比如 leafpad, 按 CTRL+Space 激活 FCITX 并试着输入几个字. + +===== 跟随桌面环境自动启动 ===== +对于支持 xdg 标准的桌面环境,例如 gnome,kde,xfce,lxde,Fcitx包已经包含了用于自动启动的 desktop 文件 /etc/xdg/autostart/fcitx-autostart.desktop 如果需要禁用自动启动或者调整自动启动的参数, 请用桌面环境提供的自动启动工具配置或者复制自动启动文件到用户目录后手动编辑 +cp /etc/xdg/autostart/fcitx-autostart.desktop ~/.config/autostart/ + +===== 全局配置文件说明 ===== +默认情况下,fcitx配置文件的存放位置尽量接近XDG标准(用户配置目录一般为~/.config/fcitx,首次运行时fcitx会自动创建该目录)。 +Fcitx从4.0开始提供了图形界面的配置程序, 其AUR包分别为__fcitx-configtool__(基于gtk3), fcitx-configtool-gtk2(基于gtk2), kcm-fcitx(基于KDE的KCM). 不再推荐手动编辑配置文件以免出现问题. + +===== 常用快捷键 ===== + +=== 内置快捷键 === +ctrl+5 重启 +ctrl+6 删除词语 +ctrl+7 增加词语 +可配置快捷键,请编辑~/.config/fcitx/config +Warning: 建议使用图形界面,如果直接编辑配置文件,请务必小心 + +=== [Hotkey] === + #中英文切换 + SwitchKey=L_CTRL + #全角半角 + FullWidthSwitchKey=SHIFT_SPACE + #符号切换 + PuncSwitchKey=CTRL_. + +=== [Output] === + #切换到英文时,编码上屏 + SendTextWhenSwitchEng=True + +==== 禁用输入法 ==== + +或许你并不希望看到一些输入法,比如双拼。那么你可以在配置界面里禁用相应的输入法 + +==== 扩充拼音词库 ==== + +用户配置拼音词库是在~/.config/fcitx/pinyin下,其中pybase.mb是拼音单字库 pyphrase.mb拼音词库(如果这两文件没有,那么fcitx就读取此目录/usr/share/fcitx/pinyin),将你下载的词库放置到此目录后,重启(ctrl+5)fcitx就可以了。 +mv pybase.mb pyphrase.mb ~/.config/fcitx/pinyin/ +Vim + +如果你经常在vim下使用fcitx,那么在~/.vimrc 添加如下代码,可实现退出插入模式时,关闭fcitx;进入插入模式时,启用fcitx +"##### auto fcitx ########### +let g:input_toggle = 1 +function! Fcitx2en() + let s:input_status = system("fcitx-remote") + if s:input_status == 2 + let g:input_toggle = 1 + let l:a = system("fcitx-remote -c") + endif +endfunction + +function! Fcitx2zh() + let s:input_status = system("fcitx-remote") + if s:input_status != 2 && g:input_toggle == 1 + let l:a = system("fcitx-remote -o") + let g:input_toggle = 0 + endif +endfunction + +set timeoutlen=150 +"退出插入模式 +autocmd InsertLeave * call Fcitx2en() +"进入插入模式 +autocmd InsertEnter * call Fcitx2zh() +"##### auto fcitx end ###### +Troubleshooting: + +==== 注意: ==== +当LC_CTYPE为英文时, 会出现Emacs下无法使用输入法的情况, 如出现此情况, 请在__启动Emacs时将LC_CTYPE设为zh_CN.UTF-8__. (终端下使用emacs无此问题, 输入法会由终端程序处理). + +===== 输入法模块(input module) ===== +Warning: 即使未安装输入法模块, 一般还是可以在大部分程序中使用输入法, 不过很可能出现从无法光标跟随, 无法显示预编辑字符串, 到无法输入甚至程序卡死等情况. 如无特殊情况请安装全部输入法模块 +Warning: firefox升级到13后可能与xim发生冲突造成菜单无法弹出等问题,安装fcitx-gtk2可以解决. diff --git a/Zim/Linux/输入法配置/小企鹅输入法.txt b/Zim/Linux/输入法配置/小企鹅输入法.txt new file mode 100644 index 0000000..6fb7edc --- /dev/null +++ b/Zim/Linux/输入法配置/小企鹅输入法.txt @@ -0,0 +1,802 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T10:36:25+08:00 + +====== 小企鹅输入法 ====== +Created Monday 19 November 2012 +http://fcitx.github.com/handbook/fcitx.html + +版权 © 2005, 2006, 2007, 2008, 2009, 2010 Yuking + +摘要 + +小企鹅中文输入法(Free Chinese Input Toy for X,fcitx) 是一个以GPL方式发布的输入法框架, 编写它的目是为桌面环境提供一个灵活的输入方案。 + + +===== 术语表 ===== + +候 + +候选字词窗口 +也叫候选词窗口或者候选窗口。 + +在非英文直接上屏的输入情况下, fcitx 会根据你输入的编码列出一个或者多个候选字或词, 这个显示候选词的窗口就叫候选字词窗口。 + +软 + +软键盘 +在主窗口上点击软键盘按钮会出现软键盘。 利用软键盘可以输入一些特殊字符, 比如半角全角英文字符和标点、希腊字母、俄文字母、数字序号、数学符号、数字符号、日文平假名、日文片假名、制表符等。 + +上 + +上屏 +输入的文字实际输入到屏幕上。 比如,在候选字词窗口上选择一个字或词后,被选择的字或词实际输入到了屏幕上的文本框内。 + +通 + +通知区域 +见系统托盘. + +托 + +托盘 +见系统托盘. + +托盘图标 +见系统托盘图标. + +系 + +系统托盘 +桌面环境中常用来显示通知的区域,通常位于桌面的右上角或者右下角。 + +系统托盘图标 +程序显示在托盘中的图标, 特指 fcitx 在托盘中显示的图标。 可以通过用鼠标点击它来控制程序的行为。 + +参见系统托盘图标。 + +主 + +主窗口 +fcitx 启动后,出现的一个左侧带有徽标的窗口, 在徽标后面依次可能有一些按钮, 比如显示当前的输入法、简繁状态、全角半角状态、中文标点状态、软键盘和联想状态等的按钮。 + +===== 部分 I. 软件概述 ===== + +小企鹅中文输入法(Free Chinese Input Toy for X,fcitx)是一个以 GPL 方式发布的__输入法框架__, 编写它的目是为桌面环境提供一个灵活的输入方案。 + +本程序目前可以支持__XIM和GTK2,GTK3,QT4的IM Module__,可为支持 XIM 的 X 应用程序提供输入服务(__自从4.1.0, Fcitx提供了它自己的input method module, fcitx-gtk2, fcitx-gtk3 and fcitx-qt, 建议使用它们而不是直接使用xim。(方法是下面定义环境变量时,GTK_IM_MODULE和QT_IM_MODULE值为fcitx而不是xim。),注意,fcitx自带的im以来DBus,所以在启动fcitx前需确保DBus已经启动__)。 fcitx 的源码包内提供了区位和全/简/双拼,并支持基于码表的输入法(自带五笔、二笔和仓颉等输入码表)。 + +您可以从 http://fcitx.googlecode.com 下载最新的发布版本。 + +如果您有兴趣尝试 fcitx 最新功能, 可以用以下方式从代码仓库中获取代码(这样得到的代码可能并非是正式发布的版本): + +hg clone https://fcitx.googlecode.com/hg/ fcitx + +===== 部分 II. 安装配置 ===== + +fcitx 通常以源码的方式发布,您需要编译安装后才能使用。具体参见附录中的编译安装流程。 + +===== 1.2. 从预编译包安装 ===== + +各发行版如果提供了预编译的 fcitx,用户可以从对应的软件源直接下载预编译的 fcitx 包进行安装。 + +===== 第 2 章 配置环境 ===== + +各大发行版都有提供自己的__输入法选择工具__,并且在打包时提供了额外的配置脚本。 在具体使用的时候请尽量使用发行版提供的工具,而不是自己配置输入法。__下面的im是input module的缩写,一般为xim.但是由于fcitx提供了自己的input module(需要在编译时指定相关的参数),所以其值也可以是fcitx.__ + +Fedora:使用im-chooser(图形界面) +Debian,Ubuntu:im-switch,执行 im-switch __-s fcitx__,im-config(图形界面) +OpenSUSE:~/.profile中加入export INPUT_METHOD="fcitx" + +如果你并非使用以上列出的发行版,那么你可以按照你启动桌面的方式选择配置。 + +采用KDM,GDM,LightDM:在~/.xprofile中加入(没有则新建一个) + export XMODIFIERS=@im=fcitx + export GTK_IM_MODULE=fcitx # 或者是xim,取决于你是否编译了对应的输入法模块 + export QT_IM_MODULE=fcitx # 或者是xim,取决于你是否编译了对应的输入法模块 + +采用startx启动,或者Slim(使用.xinitrc的场合):在~/.xinitrc中加入 + export XMODIFIERS=@im=fcitx + export GTK_IM_MODULE=fcitx # 或者是xim,取决于你是否编译了对应的输入法模块 + export QT_IM_MODULE=fcitx # 或者是xim,取决于你是否编译了对应的输入法模块 + +如果你需要使用im module(即上面提到的fcitx-gtk2, fcitx-gtk3, fcitx-qt),__你需要保证dbus正确初始化__。如果你的fcitx启动输出中包含了dbus相关的错误,请在你的启动脚本开头加入 + eval `dbus-launch --sh-syntax --exit-with-session` + + +===== 第 3 章 跟随桌面环境自动启动 ===== + +对于支持 xdg 标准的桌面环境,例如 gnome,kde,xfce,lxde, 可以将文件 安装目录/share/applications/fcitx.desktop 建立符号链接或者复制到 ~/.config/autostart/ 或者 /etc/xdg/autostart(/usr/local/etc/xdg/autostart/) 目录里: + +ln -s 安装目录/share/applications/fcitx.desktop ~/.config/autostart/fcitx.desktop +如果你采用独立的窗口管理器,例如Openbox,XMonad,等等。 不建议在~/.xinitrc 当中直接执行fcitx,而建议是采用这些窗口管理器的自动启动机制。 如果你希望使用IM Module,但是无法正确初始化DBus(IM Module依靠DBus进行通信),那将可能导致无法在GTK和QT程序中启用输入法。 + +===== 第 4 章 全局配置文件说明 ===== + +默认情况下,fcitx配置文件的存放位置尽量接近XDG标准(用户配置目录一般为~/.config/fcitx,首次运行时fcitx会自动创建该目录),配置文件名为config。fcitx从4.0开始可以安装配置程序进行配置,程序将自动修改配置文件中的内容。 + +配置文件在安装了fcitx-config-gtk之后(基于gtk的配置编辑器),或者kcm-fcitx(基于KDE的KCM Module的配置编辑器)可以不用手动编辑。 + +如果您需要进行手动编辑,请参考配置文件中的注释,以及对应的配置文件描述文件 + +===== 部分 III. 功能说明 ===== + +目录 + +5. 输入法 +5.1. 拼音输入法 +5.1.1. 常用字表 +5.1.2. 双拼输入 +5.1.3. 以词定字 +5.1.4. 特殊符号输入 +5.1.5. 制作拼音库 +5.2. 区位输入法 +5.3. 码表输入法 +5.3.1. 制作码表 +5.3.2. 反查拼音 +6. 中文标点 +7. 快速输入 +8. 系统托盘图标 +9. 皮肤 +10. 通过命令控制Fcitx +11. 其它功能 +第 5 章 输入法 + +目录 + +5.1. 拼音输入法 +5.1.1. 常用字表 +5.1.2. 双拼输入 +5.1.3. 以词定字 +5.1.4. 特殊符号输入 +5.1.5. 制作拼音库 +5.2. 区位输入法 +5.3. 码表输入法 +5.3.1. 制作码表 +5.3.2. 反查拼音 +5.1. 拼音输入法 + +支持全/简/双拼,双拼可自定义键盘方案 + +支持常用字表 + +特殊符号输入 + +完善的预编辑 + +支持以词定字 + +模糊拼音 + +5.1.1. 常用字表 + +设置常用字表的目的是为了方便录入某些常用字。 + +在候选字中,处于该表中的字总是排在其它字的前面。 fcitx的默认常用字表是空的。您可以用左ctrl+8/7来添加/删除常用字。 例如,您希望录入“d”时,“的”总放在第一个,可以按一下操作: + +进入拼音状态。 + +输入“d”,用翻页键-=/,.查找“的”字,直到它显示在候选字表中按ctrl+8, 然后按“的”前面的数字序号即可。 + +按上述操作可以为某个拼音编码设置多个常用字。您可以设置常用字表内的字频调节方式。 + +5.1.2. 双拼输入 + +如果在配置文件中打开双拼选项,即可进行双拼输入。 程序默认采用自然码的双拼方案,您也可以自定义键盘方案。 如果需要自定义,请将存放双拼方案的文件放在 ~/.config/fcitx下并重命名为sp.dat。 程序源码包中的data目录下有一个名为sp.dat的文件,该文件已经定义了一些双拼方案, 修改“默认方案”即可以使用用户指定的方案。请注意,模糊拼音的设置也会在双拼中生效。 + +5.1.3. 以词定字 + +fcitx支持“以词定字”,以方便录入某些排序比较靠后的字。 利用SHIFT_<词组序号>,按以词定字键(默认为'['/']')选择该词组的第一个或最后一个字。 + +比如,在默认设置下,如果需要录入“亥”字,可以输入“jh”, 按翻页键让词组“己亥”显示在输入条上, 然后按SHIFT_<它前面的序号>, 再按‘]’即可(如果按‘[’则是输出“已”字)。 + +5.1.4. 特殊符号输入 + +为了录入特殊符号,您必须将特殊符号按下列格式放在一个文件中: + +<编码> <符号> + +每个符号占一行。 编码部分必须是英文小写字母,且经拼音解析后的长度不应超过10个汉字(如zzz是3个汉字长度, 而zhangzhangzhang也是3个汉字长度), fcitx的源码包中有一个例子(文件pySym.mb)。 + +编辑好特殊符号后,将其保存为文件pySym.mb,并放在 ~/.config/fcitx 中,重新启动fcitx即可。 + +建议:特殊符号的编码应该足够长,免得影响正常的汉字录入。 + +注意:如果定义的编码与常用字表的编码相同,该特殊符号将无法使用。 + +如果要录入“西安”这样的词组,请用单引号作为分隔符(xi'an)。 + +5.1.5. 制作拼音库 + +在tools目录下提供了一个制作拼音库的工具createPYMB。用法如下: + +./createPYMB {拼音单字库} {拼音词组库} + +该工具将在当前目录下生成pybase.mb和pyphrase.mb, 将它复制到您的fcitx安装目录下的share/fcitx/data中替换原有文件, 或者放到~/.config/fcitx/pinyin (可以重命名,但后缀需要是mb)即可。 + +在源码包的data目录下包括了单字库和词组库,文件名为gbkpy.org和pyPhrase.org。 它们都是文本文件。一般说来,单字库无需更改,您可以将自己的词组加入到pyPhrase.org中,从而生成自己的词库。 + +5.2. 区位输入法 + +fcitx支持0~9的区位输入。 + +5.3. 码表输入法 + +fcitx支持用户自定义码表输入法。 + +系统的码表放置在prefix/share/fcitx/data/table/*.conf, 用户的码表和配置放置在~/.config/fcitx/table/*.conf + +该文件用“[CodeTable]”来区分不同的码表。其它设置说明如下: + +[CodeTable] + +Name:名称,显示在程序主窗口的输入法名称。 + +IconName:图标名称,皮肤中对应图标文件名。 + +File:码表文件,该码表输入法的码表文件名,程序会先查找 ~/.config/fcitx/table,然后在安装目录中找。 + +AdjustOrder:调频,与拼音中的相应设置意义一样。 + +Priority:优先级,码表输入法的优先级排序。 + +UsePY:使用拼音,是否使用临时拼音输入。 + +PYKey:拼音键,如果“拼音”选项打开,则以该字母起头的输入按全拼处理。 + +AutoSend:自动上屏,当输入达到最大码表且只有一个候选词时是否自动上屏。 + +NoneMatchAutoSend:空码自动上屏,空码时出空码前的内容。比如说abcd是空码,而abc不是,那么打abcd时,就将abc的内容自动上屏,d留在提示行中待处理。 + +UseMatchingKey:使用模糊键,是否使用模糊(通配符)输入。 + +MatchingKey:模糊键,模糊键(通配符)。 + +AutoPhrase:自动词组,是否使用自动组词功能(后面有详细说明)。 + +AutoPhraseLength:自动词组长度。 + +AutoPhrasePhrase:词组参与自动造词,指定录入的词组是否参与自动组词。 + +SaveAutoPhrase:保存自动词组,设定自动生成的词组被选择多少次后才被保存。0表示不保存。 + +ExactMatch:精确匹配,是否只在候选字表中显示精确匹配的结果。 + +PromptTableCode:提示编码,是否提示录入字/词的编码。 + +Symbol:符号,设置该选项则开启特殊符号输入功能。 + +SymbolFile:符号文件,特殊符号所在的文件。 + +Enabled:是否启用该码表。 + +码表输入法提供了两种在线造词方法(词组最长为10个汉字): + +在中文输入方式下按CTRL_8,则利用将刚刚输入的内容造词,默认为最近输入法两个字,可以用左右方向键的增加或减少词组中的字数。 + +自动组词:将需要造的词按单字连续输入后,再按它的组词规则连续输入编码,程序会提示用户这个新词。 如果此时按空格或它前面的序号则将这个新词输入到用户程序中,您可以设置这个新词是否进入词库。 如果不想录入该词,继续进行下一次输入即可(fcitx会记录最近2048个输入的汉字)。 + +如果想删除词库中的词,先让该词显示中输入条上,按CTRL_7,并按提示操作即可;或是当程序提示有该词组时,按CTRL_DEL删除。 + +如果想调整词库中词的顺序,按CTRL_6,并按提示操作即可。(如果调频设置为1或2,您可能看不到有什么变化)。 + +5.3.1. 制作码表 + +data目录下包括制造码表的工具:txt2mb和mb2txt。 前者是将码表源文件转换为码表输入法所需的格式;后者是将码表文件转换为文本文件。码表源文件格式如下: + +;fcitx 版本 0x03 码表文件 +键码=abcdefghijklmnopqrstuvwxy +码长=4 +规避字符=;iuv +拼音=@ +拼音长度=12 +[组词规则] +e2=p11+p12+p21+p22 +e3=p11+p21+p31+p32 +a4=p11+p21+p31+n11 +[数据] +a 工 +a 戈 +a 或 +a 其 +@a 阿 +@a 啊 +@a 呵 + + + +键码:表示该码表输入法需要用的键; + + + +码长:指该码表输入法最长码长; + + + +规避字符:在象二笔这样的码表输入法中,某些字符如果出现在编码的第一个,表示特殊用途,虽然可以组成单字,但却不参与组词。如果有这样的字符,可以列在这个地方,以免自动造词出错; + + + +拼音:以此字母开头的为拼音; + + + +拼音长度:表示该码表中拼音的最长长度; + + + +[组词规则]:表示自动组词的规则,如果没该标志,则不能在线造词; + +组词规则的数目应该比码长小1。 + +等号左边为词组的汉字个数。其中e表示“等于”,a表示“大于等于”(只能有这两个设置)。 + +等号右边为规则,其中p指正序,n指逆序。如p11指第一个字的第一个编码,n11则是指最后一个字的第一个编码。 + + + +[数据]:该标志以下为该码表输入法的数据,按“编码<空格>对应的汉字”。这部分无需排序。 + +按上述格式制作好编码后,利用txt2mb将其转换为fcitx需要的格式: + +./txt2mb {源文件} {目标文件} + +然后将目标文件复制到~/.config/fcitx/table中, 并在~/.config/fcitx/table/中建立对应conf文件, 然后在中文输入状态下按CTRL_5重新读入配置文件即可。 + +如果希望将已经制作好的码表文件转换为文本文件,可以: + +./mb2txt {码表文件} [ > 文本文件] + +生成的文本文件将形如上述码表源文件的格式。 + +在码表输入法模式下,只输入单个“拼音键”指定的字符可以重复上次的录入。 + +5.3.2. 反查拼音 + +如果不知道某个汉字的读音,可以先用码表输入法录入这个字,然后按反查拼音的热键(默认为CTRL_ALT_E),就可以查到该字的读音。 + +第 6 章 中文标点 + +fcitx的中文标点由一个文本文件设置,您可以根据自己的需要修改。 该文件即/share/fcitx/data/punc.mb(或用户配置目录下的punc.mb)。格式如下: + +对应的英文符号 中文标点 <中文标点> + +其中英文符号应该是类似“&*()”这样的符号,而中文标点最长为两个汉字,最多有两组,中间由空格隔开。如: + +_ …… +" “ ” +第 7 章 快速输入 + +当配置文件中的,“分号键行为”设置为2时,按下分号键则进入快速输入模式。 在这种模式下,您可以设置某些常用短语或符号的快速录入规则。 + +为了使用该功能,您需要将常用短语和符号按如下格式编辑 + +<字符组合> <短语> +并保存在用户配置目录data/QuickPhrase.mb(或fcitx的安装目录下的share/data)中,一个短语一行。如 + +zg 中华人民共和国 +h http +第 8 章 系统托盘图标 + +当启用系统托盘图标的选项时,启动 fcitx 后系统托盘区域显示一个托盘图标,您可以通过用鼠标点击它来控制程序的行为: + +单击右键可以显示菜单,左键激活输入法。 + +第 9 章 皮肤 + +fcitx从4.0开始支持皮肤功能,皮肤安装在 ~/.config/fcitx/skin(用户目录), 和PREFIX/share/fcitx/skin下面。 皮肤的配置需要建立一个目录放置所有相关文件,以及放置一个名为 fcitx_skin.conf的配置文件。 如果您需要创建一个新的皮肤,建议参考自带已有的三个皮肤的配置。并使用配置工具帮助配置。 + +对于Fcitx皮肤的图片来说,采用了和CSS类似的盒模型,每个图片分为9个区域,边界区域采用距离上,下,左,右的边界的四个值确定。Fcitx的皮肤里面的数字是全部是采用像素作为单位(包括字体大小,以免定位受到dpi的影响)。 + +菜单的是完全默认的盒模型,中间区域的大小完全根据菜单内容大大小进行变化修改。 + +输入条有两种模式(横,竖) + +在横排模式下,输入条的高度为Margin Top + Margin Bottom + Output Pos,需要注意的是,Output Pos是相对于中间区域的纵坐标,而不是相对于整个输入框的位置。在竖排模式下, Output Pos代表的是第一行左下角的纵坐标的位置。 + +主窗口由于其中的按钮个数是可以由插件加入的,因此从4.1之后也开始采用盒模型。默认情况图标保持单排。高度是图标图片中的最大值。对于还想要实现4.0时候不规则的排列的人来说,可以通过Placement这个属性进行设置,规则是:图标名称:横坐标,纵坐标;图标名称:横坐标,纵坐标....每一项之间由分号分隔。没有出现在Placement当中的图标,或者对应图片文件无法加载的图标不会显示。除了输入法图标和logo图标之外,剩下的图标的图片名称是固定的,一律按照“状态名称_active.png” “状态名称_inactive.png”。在Placement中,logo采用的名称是logo,输入法指示图标采用的名称是im。在采用了Placement属性进行布局时,主窗口的大小就是主窗口图片的大小,和Margin(边距)无关。下面是一个Placement的范例。 + +Placement=logo:4,30;punc:49,30;chttrans:27,53;fullwidth:20,5;im:45,4 + +Fcitx自带的属性图标的名称如下:logo,im,vk,chttrans,punc,fullwidth,legend。 + +第 10 章 通过命令控制Fcitx + +fcitx提供了一个基于socket的工具,fcitx-remote可以用于控制fcitx + +具体命令参数参见fcitx-remote -h 和 man + +一个实用的例子是用它自动控制vim的输入状态 + +let g:input_toggle = 1 +function! Fcitx2en() + let s:input_status = system("fcitx-remote") + if s:input_status == 2 + let g:input_toggle = 1 + let l:a = system("fcitx-remote -c") + endif +endfunction + +function! Fcitx2zh() + let s:input_status = system("fcitx-remote") + if s:input_status != 2 && g:input_toggle == 1 + let l:a = system("fcitx-remote -o") + let g:input_toggle = 0 + endif +endfunction + +set timeoutlen=150 +autocmd InsertLeave * call Fcitx2en() +"autocmd InsertEnter * call Fcitx2zh() + +将上面的代码加入 ~/.vimrc 中,可以实现退出插入模式时自动关闭输入法。去掉最后一行的注释可以实现进入插入模式自动启用输入法。 + +第 11 章 其它功能 + +可以任意拖动fcitx显示的图标和输入条(当处于光标跟随模式时,输入条的位置将根据用户程序输入点而决定)。 + +可以用鼠标左键单击输入条的相应部分切换输入法/改变标点状态/改变全半角设置/改变联想状态/在简繁输出间切换。 + +支持UTF8方式下的中文输入。 + +在主窗口上按鼠标右键可以切换主窗口的显示模式。有两种:简洁模式和完整模式。 + +按CTRL_5可以重新读取配置文件,向fcitx发送SIGHUP也可以重新读取配置文件。 + +在联想方式下,按第二选择键输出半角空格,按第三选择键输出全角空格。 + +单击企鹅图标可以改变输入法的状态。 + +===== 部分 IV. 附录 ===== + +目录 + +12. 热键 +13. 相关项目 +14. 编译安装流程 +14.1. 依赖 +14.2. 安装 +14.3. 卸载 +15. 常见问题 +第 12 章 热键 + +您可在fcitx的配置文件中使用以下热键: + +LCTRL LSHIFT LALT +RCTRL RSHIFT RALT +INSERT +HOME END +PGUP PGDN +CTRL_CTRL CTRL_LSHIFT CTRL_LALT CTRL_RSHIFT CTRL_RALT +SHIFT_LCTRL SHIFT_SHIFT SHIFT_LALT SHIFT_RCTRL SHIFT_RALT +ALT_LCTRL ALT_LSHIFT ALT_ALT ALT_RCTRL ALT_RSHIFT +其中,L前缀表示左键,R前缀表示右键。 如果需要CTRL/ALT+<字母/数字>的组合键,直接写入数字或字母即可,如CTRL_K等。 + +第 13 章 相关项目 + +目前一些相关的子项目分别host在Fcitx的googlecode和github上。 + +fcitx-googlepinyin:Android上的Google拼音的非官方移植。(GoogleCode) + +fcitx-sunpinyin:Fcitx的Sunpinyin支持(GoogleCode) + +fcitx-cloudpinyin:为Fcitx的拼音输入法增加一个来自Sogou,QQ,或Google云输入法的候选词。(Github) + +fcitx-ui-light,fcitx-classic-ui的再fork,使用Xft和Xlib进行渲染,提供类似Fcitx 3.6 时代的界面支持(Github) + +fcitx-handwriting,采用zinnia的Fcitx手写支持。(Github) + +fcitx-config,基于GTK的配置工具(GoogleCode) + +kcm-fcitx,基于KDE的配置工具(Github) + +fcitx-fbterm,提供fbterm下的输入支持。(Github) + +===== 第 14 章 编译安装流程 ===== + +摘要 + +fcitx 通常以源码的形式发布,您需要编译安装后才能使用。 + +目录 + +14.1. 依赖 +14.2. 安装 +14.3. 卸载 +14.1. 依赖 + +编译 fcitx 按照您需要的功能,需要(且不限于)以下包及其对应开发包,开发包在发行版中多以-dev或者-devel结尾: + +gcc + +gtk2,gtk3的IM Module需要gtk2,gtk3,以及__dbus-glib__ + +qt的IM Module需要qt4,libicu + +fcitx-classic-ui(支持皮肤的默认界面),fcitx-vk(虚拟键盘)需要libx11(xlib),cairo,可选项为pango + +fcitx-kimpanel-ui需要dbus + +fcitx-chttrans(简繁转换)可选项为OpenCC + +14.2. 安装 + +首先下载 fcitx 的源码包,文件名为 fcitx-4.1.0.tar.bz2,存放在某个临时的目录中(如 /temp )。执行: + +cd <临时目录> +tar jxvf fcitx-4.1.0.tar.bz2 +这样会在临时目录(如 /temp )目录下建立目录 fcitx-4.1.0,所有的源码都在该目录中。 + +执行以下命令编译安装: + + cd fcitx-4.1.0 + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=<安装目录> + make && make install +cmake 可选项(On/Off) + +-__DENABLE_DBUS__ +如果禁用DBus,同时不会编译任何的IM Module + +-DENABLE_CAIRO +如果禁用,将无法使用fcitx-classic-ui + +-DENABLE_PANGO +如果禁用,将不使用 pango 进行字体绘制,将只能支持单一字体显示(在字符集不足时)。 + +-DENABLE_TABLE +如果禁用,将不编译及生成码表相关数据 + +-__DENABLE_GTK2_IM_MODULE__ +如果禁用,将不编译GTK2的IM Module + +-__DENABLE_GTK3_IM_MODULE__ +如果禁用,将不编译GTK3的IM Module + +-__DENABLE_QT_IM_MODULE__ +如果禁用,将不编译QT4的IM Module + +-DENABLE_OPENCC +如果禁用,将不使用OpenCC作为简繁转换的后端 + +14.3. 卸载 + +如果你 cmake 之后产生的文件都还在。 用 root 权限执行 make uninstall 即可卸载了。 如果 cmake 之后的目录已经被你删除了,那就把代码重新下载下来,cmake 之后 make uninstall。 + +第 15 章 常见问题 + +15.1. 遭遇了4.1之前不曾遇到的输入问题(非输入法不能启用,而是例如删除文本错误,或者已经启用输入法但是无法输入) +15.2. 编译时说找不到文件X11/Xlib.h +15.3. 编译安装完成后,按ctrl_space无法打开fcitx的输入条啊? +15.4. 界面的颜色怎么那么难看? +15.5. 我将fcitx加到gnome的自动启动后,gnome怎么启动那么慢? +15.6. 为什么有时候fcitx会卡几秒? +15.7. 为什么我只按了一个键,输入条上却出现两个相同的字符? +15.8. 当我使用en_US.UTF-8时,为什么无法激活fcitx? +15.9. fcitx的默认字体并不是我常用字体 +15.10. 有些皮肤周围为什么有不透明的黑边 +15.11. fcitx启动后图标背景为黑色,但关闭后手动启动背景颜色正常 +15.12. 有时Firefox中输入的第一个字母会丢失 +15.13. fcitx在某些的程序中无法光标跟随/光标跟随存在问题 +15.14. 在flash中无法输入 +15.15. 我对于fcitx拼音词库很不满 +15.16. 我是kde4用户,kimpanel的问题太多了,可是我又想界面协调 +15.17. 我想输入日语怎么办? +15.18. 我想输入颜文字 +15.19. 我在使用vnc/nomachine远程连接时,fcitx好像不太好使? +15.20. 我发现了 fcitx 的 bug 怎么办? +15.1. + +遭遇了4.1之前不曾遇到的输入问题(非输入法不能启用,而是例如删除文本错误,或者已经启用输入法但是无法输入) + +如果是gtk或者qt程序的问题,请先尝试ctrl+alt+p关掉预编辑嵌入模式。 + +如果是x程序,请尝试关掉xim的On The Spot支持(需要重启输入法)。 + +15.2. + +编译时说找不到文件X11/Xlib.h + +这个信息是说编译程序没有找到X的头文件,一般是因为您没有安装X的开发包(在RH/MDK中名为XF*-devel-*或xorg-*-devel-*)。 + +15.3. + +编译安装完成后,按ctrl_space无法打开fcitx的输入条啊? + +这个的原因有很多并且十分复杂。你可能需要一一排查以下情况: + +如果其他程序可以成功使用fcitx,只有单独某个程序不能使用,那么也许是ctrl space的快捷键被抢占了,想办法设置保证不冲突。 + +如果一类程序(GTK,或者QT),或者全部的程序都不能输入,你需要检查环境变量。 + +打开一个终端,输入 + +echo $XMODIFIERS +echo $GTK_IM_MODULE +echo $QT_IM_MODULE + +检查是不是你想要的值。具体值参见配置环境。 如果是,先尝试从终端中启动程序看是否可以输入。如果不可以,有以下可能,你的locale没有生成,需要通过 locale -a 查看你当期的locale是否存在。 + +对于GTK程序,可以通过 gtk-query-immodules-2.0/gtk-query-immodules-3.0 检查是否有 xim 以及 fcitx 。如果有,但是不能输入,你也许应该继续检查 /etc/gtk-2.0/gtk.immodules 和 /usr/lib/gtk-3.0/3.0.0/immodules.cache (不同发行版和cpu架构可能路径不同) 是否和之前的命令输出相同。如果没有 xim 模块(这一般出现在opensuse上,因为它单独打包了xim的im module)。 + +如果终端中启动的程序可以,但是桌面启动的程序不行,那么你的环境变量可能仅仅设置在shell里面,而不是启动桌面的时候设置的环境变量,可以管用的位置有 ~/.xprofile (通过gdm或者kdm启动时),或者 ~/.xinitrc (通过slim或者startx启动时) + +检查 GTK 程序使用的输入模块。首先开启一个普通的gtk程序(不可以是firefox),比如gtk-demo就是一个不错的选择。在输入框右键单击,在输入法菜单里面检查是否是xim或者fcitx,如果不是,那么说明gtk没有选择fcitx支持的方式进行输入。需要设置 GTK_IM_MODULE=xim 或者 fcitx (4.1以后)才可以。 + +检查 QT 程序使用的输入模块。执行qtconfig 看选中的输入法模块,可以使用的是xim和fcitx,xim在 4.0.1之前只支持over the spot。 还可能存在的问题就是 /usr/share/X11/locale/ 没有你的locale(在一些自行编译的嵌入式系统上可能出现)。 + +检查是否正在使用fcitx im module 最简单的办法是执行 dbus-monitor,观察是否有org.fcitx.Fcitx 的内容。 + +15.4. + +界面的颜色怎么那么难看? + +欢迎你贡献你自己觉得更好的配色。 + +15.5. + +我将fcitx加到gnome的自动启动后,gnome怎么启动那么慢? + +把~/.gnome2/session-manual里面0,Priority=31的31换成50即可。 + +15.6. + +为什么有时候fcitx会卡几秒? + +fcitx是在第一次输入时读入码表,如果码表比较大的话,读入的时间可能会比较久一些,感觉有些卡,但后面输入就不会再有这种现象了(如果切换了输入法的话,切换后的第一次输入也会重新读入码表)。 + +15.7. + +为什么我只按了一个键,输入条上却出现两个相同的字符? + +这种情况一般出现在KDE中。应该是QT的XIM支持出现问题。出现这个现象时,请在窗口管理器的标题栏按鼠标右键弹出系统菜单,然后按ctrl_space关闭输入法,重新回到应用程序就可以了。 + +15.8. + +当我使用en_US.UTF-8时,为什么无法激活fcitx? + +参加前面的环境配置和faq + +15.9. + +fcitx的默认字体并不是我常用字体 + +由于fcitx并没有使用一些高层的字体处理,默认字体仅仅是利用Fontconfig找到的一个系统当中的中文字体(并无优先级关系,也不服从/etc/fonts.conf)。 可以通过配置文件指定具体的字体解决。或者你应该考虑编译时enable-pango,这样字体设置就有更好的支持了。 + +15.10. + +有些皮肤周围为什么有不透明的黑边 + +由于Xserver需要可以支持混成的窗口管理器才能处理真透明效果,因此需要对窗口管理器本身进行设置。相应的开启混成之后会消耗更多的CPU和GPU性能,因此是否开启这个效果请自己权衡。 + +分为以下情况: + +Gnome + +Metacity可以支持混成,但由于不是所有的显卡和驱动程序都能很好地支持混成,因此混成在gnome中默认是未开启的。如果你的显卡和驱动程序支持3D加速,则可以开启之。 + +使用gconf-editor进行编辑,编辑/apps/metacity/general/compositing_manager,设置为真即可。 + +或者直接使用下面的命令启用: + +gconftool-2 -s --type bool /apps/metacity/general/compositing_manager true +如果你想禁用它,修改“true”为“false”,并重新执行该命令。 + +KDE4 + +Kwin可以支持混成,在系统设置,桌面效果内设置。 + +XFCE + +Xfwm4支持混成,在高级窗口管理器内进行设置。 + +Compiz + +Compiz >= 0.9.0可能默认没有开启混成,可以通过安装ccsm进行配置。 + +其他 + +其他窗口管理器可以通过一个额外的混成管理器xcompmgr进行混成管理。只需要安装它即可。另外也可以将之前所述的窗口管理器在不开启混成的情形下同时使用xcompmgr,但相应的可能不如原生的效果那么好。 + +15.11. + +fcitx启动后图标背景为黑色,但关闭后手动启动背景颜色正常 + +你可以通过设置DelayStart延迟几秒启动fcitx,在支持混成的窗口管理器和面板启动之后再启动fcitx。 + +15.12. + +有时Firefox中输入的第一个字母会丢失 + +请使用GTK IM Module,参见环境配置 + +15.13. + +fcitx在某些的程序中无法光标跟随/光标跟随存在问题 + +请使用IM Module,以及调整xim的style,参见环境配置 + +15.14. + +在flash中无法输入 + +请使用GTK IM Module,参见环境配置 + +15.15. + +我对于fcitx拼音词库很不满 + +有两个折中的解决方案。 + +利用createPYMB创建自己的词库,放在~/.config/fcitx/pinyin下面。 + +尝试fcitx-sunpinyin,sunpinyin是一个基于语言模型的pinyin开源输入法项目,对于整句输入有很大提升。 + +15.16. + +我是kde4用户,kimpanel的问题太多了,可是我又想界面协调 + +你可以尝试这里的小工具http://csslayer.tk/wordpress/fcitx开发/fcitx-skingenerator/ + +15.17. + +我想输入日语怎么办? + +你可以尝试这里:http://forum.ubuntu.org.cn/viewtopic.php?f=8&t=290712&start=0 5楼的码表。 或者请等待基于anthy的fcitx的输入法wrapper,这个项目目前在计划中。 + +15.18. + +我想输入颜文字 + +fcitx的QuickPhrase?在你有想象力的前提下,可以发挥很多功能,例如用来输入颜文字,例如用来根据Latex的标记输入特殊符号。 + +15.19. + +我在使用vnc/nomachine远程连接时,fcitx好像不太好使? + +vnc下fcitx似乎确实有问题,但我们尚未验证是否这是基于xim的通病。 nomachine/nx下是没有问题的,不过由于你可能是使用windows进行远程连接,那么ctrl+space会被windows的输入法抢走而不会传递到远程的计算机上,你可以考虑将fcitx 的输入法切换快捷键设置为shift+space。在linux的nx客户端没有问题。 + +15.20. + +我发现了 fcitx 的 bug 怎么办? + +确认你发现的问题不在常见问题列表里。 + +在 Issues 中查询, 确认尚未有人报告该问题; 如果已经有人报告了该问题, 但是你想补充更多信息, 可以回复进行补充。 + +如果确认了不是已知问题,那么不必拘束,在 Issues 中 New issue 提交 bug 的详细情况,我们将尽快确认。 + +如果是导致 fcitx 退出的错误, 你可以查看 ~/.config/fcitx/log/crash.log 中是否有相关信息, 同时将这个信息和你的 fcitx 已经编译的二进制文件发上来。 + +致谢 + +fcitx(3.1.x 及以前的版本)使用了来自于 cjkvinput 项目的五笔 86 码表,请参看源码中的 doc/cjkvinput.txt。 + +fcitx-3.2 使用了拼音佳佳 4.0 的拼音词库,并根据该词库制作了五笔 86 的词库。详情请参看源码包中的 doc/pinyin.txt。 + +fcitx-3.3.X 以后使用了 kardinal@linuxsir 制作的五笔 86 词库(稍做修改)。 + +fcitx-3.6.4,fcitx-4.0.0 及以后的版本采用了 open-phrase 词库。 + +本程序参考了 rfinput-2.x 的源码,在此向其作者 Zhao yang (zyang@redflag-linux.com)致谢。 + +感谢 www.linuxsir.org 的北南南北为 fcitx 提供一个家。同时,他与小凡为 gWuBi/fcitx 的推广和测试做了很多工作。 + +感谢 xsim 的作者楚狂、scim 的 james_su 提供了宝贵的技术支持; + +感谢二笔输入法(ebf)的作者 tram,他为 fcitx 做了很多工作。 + +感谢 winix 多次为 gWuBi/fcitx 提出宝贵的意见和建议。 + +感谢 windrose 精心测试了双拼功能。 + +感谢 Wang Yin 为拼音输入提出了宝贵的意见。 + +感谢 Xie Yanbo 制作了安装配置脚本。 + +感谢 t3swing 为 fcitx 编写了皮肤功能。 + +感谢 Jarryson 和 Ukyoi 为 fcitx 制作了皮肤。 + +同时感谢所有其它测试 gWuBi/fcitx 的朋友,非常感谢。 diff --git a/Zim/Linux/输入法配置/解析输入法环境变量.txt b/Zim/Linux/输入法配置/解析输入法环境变量.txt new file mode 100644 index 0000000..2abf417 --- /dev/null +++ b/Zim/Linux/输入法配置/解析输入法环境变量.txt @@ -0,0 +1,38 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T10:51:12+08:00 + +====== 解析输入法环境变量 ====== +Created Monday 19 November 2012 +http://blog.csdn.net/kevinxtq/article/details/2289738 + + 我们配置输入法时,都是习惯性的在输入法启动前导出环境变量: + +export XMODIFIERS=@im=SCIM +export GTK_IM_MODULE=SCIM + +他们有何用意呢?? + +我们常用的输入法有以下几种: +1. XIM (X输入法, 所有 X 图形程序都是可用的) +2. GTK input module(GTK输入模块, 专给 GTK+2/GTK+3/Gnome 程序用的,GTK+ 1 不适用) +3. QT input module(QT输入模块, 专给 QT/KDE 程序用的) + +XMODIFIERS实际上是指定 __X图形程序的输入法__. +GTK_IM_MODULE 则是指定GTK+2的程序默认所用的输入法模块. + +有关GTK+2 所有输入法模块都安装在 __/usr/lib/gtk-2.0/2.4.0/immodules/__ 目录下.可以使用gtk-query-immodules-2.0来取得GTK2可以使用的Input Method Module。 + +关于他们之间的关系,我们有一个比较直观的经验就是, 当我们因为设置XMODIFIERS失误(比如在有些情况下scim小写),导致X输入法没法使用时,我们在gnome-terminal里单击鼠标右 键,移动到 "输入法",再选择 "SCIM Input Method"时,我们在gnome-terminal下却是可以输入中文的. 当然前提是我们已经安装scim-gtk2-immodule包. + +一般情况下__XMODIFIERS的优先级高于GTK_IM_MODULE__ ,即当我们同时设定这两个环境变量,在GTK+2的应用程序里优先使用的是XMODIFIERS指定的X输入法. + +GTK immodule 比起 XIM 有很多好处: +1. 不受 locale 限制 +2. 完全不用设定,随时可用,会自动调用 IM server +3. 可以任意切换各种不同 IM server,随时可改,无需重启X. +4. 真正支援游标跟随. + +但是因为 c++ 的兼容性问题使 scim-gtk2-immodule 跟许多程序相冲突,故而在目前,如果我们使用scim的话,还不能流畅享受到GTK 输入模块的种种妙处,只能使用 Scim for XIM. + +注:mozilla, firefox, thunderbird 等不是正规的 GTK+ 2,没办法用鼠标动态选择输入法. 如果你仅仅使用GTK immodule的话, 一定要使用GTK_IM_MODULE指定默认的GTK 输入模块. diff --git a/Zim/Linux/黑客辞典.txt b/Zim/Linux/黑客辞典.txt new file mode 100644 index 0000000..8c7382b --- /dev/null +++ b/Zim/Linux/黑客辞典.txt @@ -0,0 +1,10 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-02T13:37:45+08:00 + +====== 黑客辞典 ====== +Created Friday 02 November 2012 + +grub: gfx = graphics, 两者的读音差不多。 +VESA = Video Electronics Standards Association +VBE = VESA BIOS Extensions diff --git a/Zim/Utils/grub.txt b/Zim/Utils/grub.txt new file mode 100644 index 0000000..4f71aba --- /dev/null +++ b/Zim/Utils/grub.txt @@ -0,0 +1,7 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-09T21:20:10+08:00 + +====== grub ====== +Created Friday 09 November 2012 + diff --git a/Zim/Utils/xmodmap.txt b/Zim/Utils/xmodmap.txt deleted file mode 100644 index 315c3c8..0000000 --- a/Zim/Utils/xmodmap.txt +++ /dev/null @@ -1,77 +0,0 @@ -Content-Type: text/x-zim-wiki -Wiki-Format: zim 0.4 -Creation-Date: 2012-03-18T16:10:36+08:00 - -====== xmodmap ====== -Created Sunday 18 March 2012 - -http://lins05.mysmth.net/2011/04/24/67/ - -===== Linux改键利器:Xmodmap 的简单教程 ===== -Linux改键利器:Xmodmap 的简单教程 适用对象: -* Emacs用户,需要交换 CapsLock 和 left Ctrl的人 -* 其他有改键需要的人 -* 喜欢瞎折腾的人 - -对于一般用户,如果没有特殊的需要,可能从未听说过`Xmodmap`这个程序。即使听说,也跟 xinit/Xsession/X 一样蒙着一层神秘的面纱。今天,我由于迫切地想把左边的windows键给屏蔽掉(原因就说来话长了),Goolge了半天没有找到一个现成的答案,唯一的线索是可以使用xmodmap来实现。 最后不得不一行行地读 xmodmap的man,二十分钟之后,发现原来如此简单。心血来潮之际,写一个简单的教程,以xb心中的得意之情,同时以后也可以作为自己和别人的参考。 - -===== 提出问题: ===== -如何交换CapsLock和左边的Ctrl键? 答: - -xmodmap -e "remove **lock** = Caps_Lock" ; -xmodmap -e "remove **control** = Control_L"; -xmodmap -e "add control = Caps_Lock"; -xmodmap -e "add lock = Control_L" - -后面的内容是具体的教程,前面是提供给只需要一个做法而不需要了解具体的原理的。如果你属于此类,完全可以不看后面的内容了。 不过原理很简单,而且一旦学会,改键就跟grep一个正则表达式差不多简单。 - -===== 分析问题: ===== -看到这里的人,应该是有耐心理解下面三个概念的: keycode/keysym/modifier 这三个概念是键盘相关的、层次从低到高的三个名词。 - -===== keycode– ===== -一般的键盘上有102或者105键,每一个键被按下时会产生一个特有类型、主板能够分辨的电信号,传输给主板,主板给不同的电信号定下不同的编号,这就是所谓的keycode。 这些电信号是__在生产键盘时就定死了的__,比如左边的Ctrl键产生的keycode是37。CapsLock键产生的keycode是66。 要查找某个按键的keycode,可以在term中用__`xev`__程序来查看。xev使用很简单,它运行时,你按下一个键,term中就会显示这个键的许多信息,其中就有keycode。 这些keycode是硬件决定的,你我无法改变。总之记住,__一个按键产生的keycode是不可能在软件中改变的__。 - -===== keysym– ===== -操作系统按照统一的规范,给不同的keycode映射为不同的含义,这个映射后的含义的术语就叫做keysym。比如你在emacs中打字时按下一个s键。屏幕上出现一个`s`,而不是出现一个`b`,是因为:系统接收到s的keycode–我用xev查了下,keycode(s) = 39, 按照默认的标准,39对应于字母`s`,于是就这个`s`显示在屏幕上。 (当然,更严谨地、更准确地说,应该是把`s`这个字母作为输入传递给Emacs,emacs再把这个字母插入到当前的文件中的。) 这里,keycode是39,其对应的符号,术语叫keysym,即`key symbol`,就是字母`s`。 同理,你按下键盘上的’b'(keycode(b) = 56),它的(默认的)keysym就是字母`b`。 系统给一个keycode分配的keysym不只一个。对于一个字母键,至少两个。第一个是单独按下这个键时对应的一,第二个是shift和这个键同时按下时的keysym。 键盘上,还有另外一类按键,它们单独按下时,一般没有任何意义,只有与其他的按照一直按下时是,才会产生一些特殊的效果,比如Ctrl、Shift、win键;它们实现的效果,称为modifier。 -Modifier–修饰符 - -“修饰符”的修饰二字很好解释,你按下s,是打一个字母s,你按下Ctrl+s,大部分软件里,会保存当前文件;你按下Shift+s,是打另一个字母S。总之是, “改变一个键的本来含义“。因为`modify`本来就是修改的意思。 在term里输入命令`xmodmap`,会出现以下内容 - - shift Shift_L (0×32), Shift_R (0×3e) lock control Control_R (0×25), Caps_Lock (0×42), Control_R (0×69) mod1 Alt_L (0×40), Alt_R (0×6c), Meta_L (0xcd) mod2 Num_Lock (0×4d) mod3 mod4 Super_L (0×85), Super_R (0×86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0×5c), Mode_switch (0xcb) 左边那一列,就是系统中所有的`modifier`。 系统会把一些默认的keysym解释为modifier,比如,默认情况下,你按下Shift + s, 屏幕上出现大写的S,整个过程其实是: - - 系统收到Shift键和s键的keycode - 系统处理 keycode–>keysym 的映射: shift的keycode被映射到`SHIFT_L`这个keysym;s的keycode被映射到`s`这个keysym - 系统发现,SHIFT_L这个keysym被定义为shfit这个modifier。 - `s`被shift这个modifier给修饰了,修饰的结果是变成了大写的S。 - -基本概念讲完了,那么,`xmodmap`是如何帮我们实现`改键`的呢? 可以看到,从按下一个键到最后,有两个层次的映射过程: - - 第一层: keycode–>keysym - 第二层: keysym –> modifier - -因此,我们可以通过两种方法来实现改键。以 -第一步: -目标:把键盘上的s和b键交换位置 - -先查询keycode: keycode(s) = 37 keycode(b) = 56 - - xmodmap -e "keycode 37 = b" xmodmap -e "keycode 56 = s" 这样,就交换了 s/b 这两个键的位置了! 注意,在你执行了第一条语句之后,s立刻被重新映射到b了,那么你第二条语句中的`s`怎么打出来呢? 两个方法: i) 从别处粘贴一个过来 ii)见最后的`xmodmap执行命令的三种方式` 注意:这个方法只能交换一般的keysym,那些定义为Modifier的键,就不能简单地用这个方式交换。因为: 当一个keysym被定义为modifier,那么,本质上是在 keycode–>modifier之间建立起了一个映射。因此,即使你改变了它的keycode–>keysym关系,也不起作用! 也就是说:当你要把一个键定义一个modifier时,你只能把它的keycode对应的keysym定义为modifier,从而达到目的。但这之后,即使keycode映射到别的keysym了,这个keycode仍然是一个modifier。 因此,如果要交换CapsLock和Ctrl这两个键,只需要做两件事: - - 把`Caps_Lock`这个keysym定义为`control`这个modifer - 把`Control_L`这个keysym定义为`Caps_Lock`这个modifier (Control_L是左Ctrl键的默认keysym) - -第二步: 交换 Caps_Lock和 左边的Ctrl - -先把CapsLock这个keysym映射到control这个modifier: - - xmodmap -e "remove lock = Caps_Lock" xmodmap -e "add control = Caps_Lock" 因为一个keysym不能同时映射到两个modifier,因此,我们需要先用remove,把Caps_Lock这个keysym与lock这个modifier的映射关系删除。然后,再把Caps_Lock这个keysym映射到Control这个modifier。 remove和add的的语法是: - - remove/add modifier_name = keysym_name 此时,你可以试一下,看看是否已经产生效果了? 同样,再把左边的Ctrl键映射到CapsLock: - - xmodmap -e "remove control = Control_L" xmodmap -e "add Caps_Lock = Control_L" xmodmap执行命令的三种方式: 1) xmodmap -e "do somthing" 是让xmodmap执行后面的一条句子。但这样一次只能执行一条。 2) 你也可以先输入 `xmodmap -`,然后回车,然后输入任意多句子,每输入一条就用回车分隔,最后用Ctrl+D结束输入。 3) 把remove xxx = yyy 这些句子都写到一个文件里。一般是~/.Xmodmap。然后用 `xmodmap ~/.Xmodmap`执行。 这样的好处是,在启动时的某个脚本里加一行命令,就不用每次重启都手动地改键了。 第三层:可逆的改键: 不难看出,运行了上面方法二中的四句命令之后,如果想要改回来的话,还需要另外写四句。以下六句可以实现这 样的效果,第一次运行,是交换CapsLock和Ctrl_L,第二次运行,又会再交换回来。 - - remove lock = Caps_Lock remove control = Control_L keysym Caps_Lock = Control_L keysym Control_L = Caps_Lock add lock = Caps_lock add control = Control_L 为什么会有这个效果呢?是因为多了中间两句话。 - - keysym Caps_Lock = Control_L –keycode 66 = Control_L keysym Control_L = Caps_Lock –keycode 37 = Caps_Lock “keysym A = B” 这个句子相当于: 把所有原来映射到A的keycode重新映射到 B。比如,有一个键Q,他的keycode原来对应的keysym是A,那么,在执行了上面语句之后,这个键Q的keycode对应的keysym就是B 因此, keysym Caps_Lock = Control_L –把Cap键映射到Control_L这个keysym keysym Control_L = Caps_Lock –把Ctrl键映射到Caps_Locks这个keysym - -转载请注明出处。 可能有不正确的 地方,本文不负任何责任。 diff --git a/Zim/Utils/键盘布局和按键映射.txt b/Zim/Utils/键盘布局和按键映射.txt new file mode 100644 index 0000000..f9c65bd --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射.txt @@ -0,0 +1,7 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T19:07:10+08:00 + +====== 键盘布局和按键映射 ====== +Created Monday 19 November 2012 + diff --git a/Zim/Utils/键盘布局和按键映射/keymaps.txt b/Zim/Utils/键盘布局和按键映射/keymaps.txt new file mode 100644 index 0000000..2b17c72 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/keymaps.txt @@ -0,0 +1,323 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T16:13:12+08:00 + +====== keymaps ====== +Created Monday 19 November 2012 + +KEYMAPS(5) KEYMAPS(5) + +===== NAME ===== + keymaps - keyboard table descriptions for **loadkeys** and **dumpkeys** + +===== DESCRIPTION ===== + These files are used by loadkeys(1) to modify the __translation tables__ + used by the __kernel keyboard driver__ and generated by **dumpkeys(1)** from + those translation tables. + + The format of these files is vaguely similar to the one accepted by + **xmodmap(1).** The file consists of charset or key or string definition + lines interspersed with comments. + + Comments are introduced with ! or # characters and continue to the end + of the line. Anything following one of these characters on that line is + ignored. Note that comments need not begin from column one as with + xmodmap(1). + + The syntax of keymap files is line oriented; a complete definition must + fit on a single logical line. Logical lines can, however, be split into + multiple physical lines by ending each subline with the backslash char‐ + acter (\). + +===== INCLUDE FILES ===== + A keymap can include other keymaps using the syntax + + include "pathname" + +===== CHARSET DEFINITIONS ===== + A character set definition line is of the form: + + charset "iso-8859-x" + + It defines how following **keysyms** are to be interpreted. For example, + in iso-8859-1 the symbol mu (or micro) has code 0265, while in + iso-8859-7 the letter mu has code 0354. + +===== COMPLETE KEYCODE DEFINITIONS ===== + Each complete key definition line is of the form: + + keycode keynumber = keysym keysym keysym... + + **keynumber** is the internal identification number of the key, roughly + equivalent to the __scan code__ of it. keynumber can be given in decimal, + octal or hexadecimal notation. Octal is denoted by a leading zero and + hexadecimal by the prefix 0x. + 在虚拟终端模式下,可以通过__showkey命令__来查看某个按键的keycode。通过 + __dumpkeys__(不加任何参数,或-f参数)来查看当前keycode与keysym的绑定。 + + Each of the keysyms represent **keyboard actions**, of which up to __256__ can + be bound to a single key. The actions available include outputting + character codes or character sequences, switching consoles or keymaps, + booting the machine etc. (The complete list can be obtained from dump‐ + keys(1) by saying __dumpkeys -l__ .) + keyboard actions包括打印字符、切换终端、命令行编辑、启动系统等,具体 + 可以使用 dumpkeys -l命令来查看 + + Each keysym may be prefixed by a '+' (plus sign), in wich case this + keysym is treated as a "letter" and therefore affected by the "Cap‐ + sLock" the same way as by "Shift" (to be correct, the CapsLock __inverts__ + the Shift state). The ASCII letters ('a'-'z' and 'A'-'Z') are made + CapsLock'able by default. If Shift+CapsLock should not produce a lower + case symbol, put lines like + + keycode 30 = +a A + + in the map file. + + Which of the actions bound to a given key is taken when it is pressed + depends on __what modifiers are in effect__ at that moment. The keyboard + driver supports **9 modifiers**. These modifiers are labeled (completely + arbitrarily) Shift, AltGr, Control, Alt, ShiftL, ShiftR, CtrlL, CtrlR + and CapsShift. Each of these modifiers has an associated weight of + power of two according to the following table: + + modifier weight + + Shift + 1 + AltGr + 2 + Control + 4 + Alt + 8 //实际使用时,不使用16-256,故不区分L和R,只有Shift, Ctrl和Alt。 + ShiftL + 16 + ShiftR + 32 + CtrlL + 64 + CtrlR 128 + CapsShift 256 + + The effective action of a key is found out by __adding up the weights of__ +__ all the modifiers in effect__. By default, no modifiers are in effect, so + action number **zero**, i.e. the one in the first column in a key defini‐ + tion line, is taken when the key is pressed or released. When e.g. + Shift and Alt modifiers are in effect, action number nine (from the + 10th column) is the effective one. + + Changing the state of what modifiers are in effect can be achieved by + __binding appropriate key actions to desired keys(将keycode与key actions绑定)__. + For example, binding + the symbol Shift to a key sets the Shift modifier in effect when that + key is pressed and cancels the effect of that modifier when the key is + released. (也就是说将Shift与某个keycode代表的按键绑定。)Binding + AltGr_Lock to a key sets AltGr in effect when the key + is pressed and cancels the effect when the key is pressed again. (__By__ +__ default Shift, AltGr, Control and Alt are bound to the keys that bear a__ +__ similar label; AltGr may denote the right Alt key.__)。缺身情况下,Shift,Control + Alt分别于键盘上同一个标示的按键绑定。 + + Note that you should be very careful when binding the modifier keys, + otherwise you can end up with an unusable keyboard mapping. If you for + example define a key to have Control in its first column and leave the + rest of the columns to be VoidSymbols, you're in trouble. This is + because pressing the key puts Control modifier in effect and the fol‐ + lowing actions are looked up from the fifth column (see the table + above). So, when you release the key, the action from the fifth column + is taken. It has VoidSymbol in it, so nothing happens. This means that + the **Control modifier is still in effect, although you have released the** +** key.** Re-pressing and releasing the key has no effect. To avoid this, + __you should always define all the columns to have the same modifier sym‐__ + __ bol.__ There is a handy short-hand notation for this, see below. + + keysyms can be given in decimal, octal, hexadecimal, unicode or sym‐ + bolic notation. 最常用同时也最具可移植性的是**符号化代表**(symbolic notation),这些 + 符号名称可以被loadkeys命令识别。 + The numeric notations use the same format as with + keynumber. Unicode notation is "U+" followed by four hexadecimal dig‐ + its. The __symbolic notation__ resembles that used by xmodmap(1). Notable + differences are the number symbols. The numeric symbols '0', ..., '9' + of xmodmap(1) are replaced with the corresponding words 'zero', 'one', + ... 'nine' to avoid confusion with the numeric notation. + + It should be noted that using numeric notation for the keysyms is + highly unportable as the key action numbers may vary from one kernel + version to another and the use of numeric notations is thus strongly + discouraged. They are intended to be used only when you know there is a + supported keyboard action in your kernel for which your current version + of loadkeys(1) has no symbolic name. + + There is a number of short-hand notations to add readability and reduce + typing work and the probability of typing-errors. + + First of all, you can give __a map specification line__, of the form + + keymaps 0-2,4-5,8,12 + + to indicate that the lines of the keymap will not specify all 256 col‐ + umns, but only the indicated ones. (In the example: only the plain, + Shift, AltGr, Control, Control+Shift, Alt and Control+Alt maps, that + is, 7 columns instead of 256.这意味着Conrolt_L, Control_R等不再使用。 + 具体可以参考/usr/share/kbd/keymaps/i386/qwerty/us.map.gz) + When no such line is given, the keymaps 0-M will be defined, where M+1 is the maximum number of entries found + in any definition line. + + Next, you can leave off any __trailing__ VoidSymbol entries from a key def‐ + inition line. __注意必须是尾部的VoidSymbol.__ VoidSymbol denotes a keyboard + action which produces no + output and has no other effects either. For example, to define key num‐ + ber 30 to output **'a' unshifted**, 'A' when pressed with Shift and do + nothing when pressed with AltGr or other modifiers, you can write + + keycode 30 = a A + + instead of the more verbose + + keycode 30 = a A VoidSymbol VoidSymbol \ + VoidSymbol VoidSymbol VoidSymbol ... + + For added convenience, you can usually get off with still more terse + definitions. **If you enter a key definition line with only and exactly** +** one action code after the equals sign, it has **__a special__** meaning.** + **也就是说,当按键定义行只指定了一个action code时,该action是有特殊含义的。** +** 如果该action code代表非字符,则该action会被默认在所有column上重复(这也是** + pe**rsonal.map文件中的用法 **__keycode 56 = Control__**)。但是如果** +** 该action是字符,则相应column对应的action由modifier确定。** If the + code (numeric or symbolic) is not an ASCII letter, it means the code is + __implicitly replicated__ through all columns being defined. If, on the + other hand, the action code is an ASCII character in the range 'a', + ..., 'z' or 'A', ..., 'Z' in the ASCII collating sequence, the follow‐ + ing definitions are made for the different modifier combinations, pro‐ + vided these are actually being defined. (The table lists the two pos‐ + sible cases: either the single action code is a lower case letter, + denoted by 'x' or an upper case letter, denoted by 'Y'.) + + modifier symbol + + none x (小写字符) Y(大写字符) + Shift X y + AltGr x Y + Shift+AltGr X y + Control Control_x Control_y + Shift+Control Control_x Control_y + AltGr+Control Control_x Control_y + Shift+AltGr+Control Control_x Control_y + Alt Meta_x Meta_Y + Shift+Alt Meta_X Meta_y + AltGr+Alt Meta_x Meta_Y + Shift+AltGr+Alt Meta_X Meta_y + Control+Alt Meta_Control_x Meta_Control_y + Shift+Control+Alt Meta_Control_x Meta_Control_y + AltGr+Control+Alt Meta_Control_x Meta_Control_y + Shift+AltGr+Control+Alt Meta_Control_x Meta_Control_y + +===== SINGLE MODIFIER DEFINITIONS ===== + All the previous forms of key definition lines always define __all__ the + M+1 possible modifier combinations being defined, whether the line + actually contains that many action codes or not(loadkeys会自动补充没有指定的column). + There is, however, a variation of the definition syntax for __defining only single actions to__ + __ a particular modifier combination of a key.__ This is especially useful, + if you load a keymap which doesn't match your needs in only some modi‐ + fier combinations, like AltGr+function keys. You can then make a small + local file redefining only those modifier combinations and loading it + after the main file. The syntax of this form is: + + { plain | } keycode keynumber = keysym + + , e.g., + **plain** keycode 14 = BackSpace + control alt keycode 83 = Boot + alt keycode 105 = Decr_Console + alt keycode 106 = Incr_Console + Using "plain" will define only the base entry of a key (i.e. the one + with no modifiers in effect) without affecting the bindings of other + modifier combinations of that key. + +===== STRING DEFINITIONS ===== + In addition to comments and key definition lines, a keymap can contain + string definitions. These are used to define what each __function key(如F1-F12,__ + 可以参考dumpkeys命令的输出__)__ + action code sends. The syntax of string definitions is: + + string keysym = "text" + + text can contain literal characters, octal character codes in the for‐ + mat of backslash followed by up to three octal digits, and the three + escape sequences \n, \\, and \", for newline, backslash and quote, + respectively. + +===== COMPOSE DEFINITIONS(获得注音字符,很少使用) ===== + Then there may also be compose definitions. They have syntax + + compose 'char' 'char' to 'char' + and describe how two bytes are combined to form a third one (when a + dead accent or compose key is used). This is used to get accented let‐ + ters and the like on a standard keyboard. + +===== ABBREVIATIONS ===== + Various abbreviations can be used with kbd-0.96 and later. + + __strings as usual__ + Defines the usual values of the strings (but not the keys they + are bound to). + + compose as usual for "iso-8859-1" + Defines the usual compose combinations. + + To find out what __keysyms__ there are available for use in keymaps, use + the command + + dumpkeys --long-info //打印keymaps文件中可以使用的符号名称。 + + Unfortunately, there is currently no description of what each symbol + does. It has to be guessed from the name or figured out from the kernel + sources. + +===== EXAMPLES ===== + (Be careful to use a keymaps line, like the first line of `dumpkeys`, + or "keymaps 0-15" or so.) + + The following entry exchanges the left Control key and the Caps Lock + key on the keyboard: + + keycode 58 = Control + keycode 29 = Caps_Lock + + Key number 58 is normally the Caps Lock key, and key number 29 is nor‐ + mally the Control key. + + The following entry sets the Shift and Caps Lock keys to behave more + nicely, like in older typewriters. That is, pressing Caps Lock key once + or more sets the keyboard in CapsLock state and pressing either of the + Shift keys releases it. + + keycode 42 = Uncaps_Shift + keycode 54 = Uncaps_Shift + keycode 58 = Caps_On + + The following entry sets the layout of the edit pad in the enhanced + keyboard to be more like that in the VT200 series terminals: + + keycode 102 = Insert + keycode 104 = Remove + keycode 107 = Prior + shift keycode 107 = Scroll_Backward + keycode 110 = Find + keycode 111 = Select + control alt keycode 111 = Boot + control altgr keycode 111 = Boot + + Here's an example to bind the string "du\ndf\n" to the key AltGr-D. We + use the "spare" action code F100 not normally bound to any key. + + altgr keycode 32 = F100 + string F100 = "du\ndf\n" + +===== SEE ALSO ===== + loadkeys(1), dumpkeys(1), showkey(1), xmodmap(1) + + + + 24 April 1998 KEYMAPS(5) diff --git a/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys.txt b/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys.txt new file mode 100644 index 0000000..fd92f81 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys.txt @@ -0,0 +1,482 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T16:45:20+08:00 + +====== dumpkeys ====== +Created Monday 19 November 2012 + +**#dumpkeys** //打印当前kernel终端驱动程序使用的键盘映射表,注意:配置文件为__/etc/vconsole.conf,__下面的输出的内容其配置来源于该文件。 +__// $cat /etc/vconsole.conf__ +__// KEYMAP=personal__ +__//而personal是位于/usr/share/kbd/keymaps/i386/qwerty/personal.map.gz文件。__ +keymaps 0-2,4-6,8-9,12 //每个按键(keycode)最多绑定9个keysyms. +//根据**dumpkeys -l**的如下输出: + Recognized modifier names and their column numbers: + shift 1 + altgr 2 + control 4 + alt 8 + shiftl 16 + shiftr 32 + ctrll 64 + ctrlr 128 + capsshift 256 +//可知kernel没有使用16以后的modifier,所以__不区分shiftl, shiftr,统一使用shift(ctrl类似)__。 +keycode 1 = Escape + alt keycode 1 = Meta_Escape + shift alt keycode 1 = Meta_Escape + control alt keycode 1 = Meta_Escape +keycode 2 = one exclam + alt keycode 2 = Meta_one + shift alt keycode 2 = Meta_exclam +keycode 3 = two at at nul nul + alt keycode 3 = Meta_two + shift alt keycode 3 = Meta_at + control alt keycode 3 = Meta_nul +keycode 4 = three numbersign + control keycode 4 = Escape + alt keycode 4 = Meta_three + shift alt keycode 4 = Meta_numbersign +keycode 5 = four dollar dollar Control_backslash + alt keycode 5 = Meta_four + shift alt keycode 5 = Meta_dollar + control alt keycode 5 = Meta_Control_backslash +keycode 6 = five percent currency Control_bracketright + alt keycode 6 = Meta_five + shift alt keycode 6 = Meta_percent +keycode 7 = six asciicircum + control keycode 7 = Control_asciicircum + alt keycode 7 = Meta_six + shift alt keycode 7 = Meta_asciicircum +keycode 8 = seven ampersand braceleft Control_underscore + alt keycode 8 = Meta_seven + shift alt keycode 8 = Meta_ampersand + control alt keycode 8 = Meta_Control_underscore +keycode 9 = eight asterisk bracketleft Delete + alt keycode 9 = Meta_eight + shift alt keycode 9 = Meta_asterisk + control alt keycode 9 = Meta_Delete +keycode 10 = nine parenleft bracketright + alt keycode 10 = Meta_nine + shift alt keycode 10 = Meta_parenleft +keycode 11 = zero parenright braceright + alt keycode 11 = Meta_zero + shift alt keycode 11 = Meta_parenright +keycode 12 = minus underscore backslash Control_underscore Control_underscore + alt keycode 12 = Meta_minus + shift alt keycode 12 = Meta_underscore + control alt keycode 12 = Meta_Control_underscore +keycode 13 = equal plus + alt keycode 13 = Meta_equal + shift alt keycode 13 = Meta_plus +keycode 14 = Delete + alt keycode 14 = Meta_Delete + shift alt keycode 14 = Meta_Delete + control alt keycode 14 = Meta_Delete +keycode 15 = Tab + shift keycode 15 = Meta_Tab + alt keycode 15 = Meta_Tab + control alt keycode 15 = Meta_Tab +keycode 16 = q +keycode 17 = w +keycode 18 = e +keycode 19 = r +keycode 20 = t +keycode 21 = y +keycode 22 = u +keycode 23 = i +keycode 24 = o +keycode 25 = p +keycode 26 = bracketleft braceleft + control keycode 26 = Escape + alt keycode 26 = Meta_bracketleft + shift alt keycode 26 = Meta_braceleft +keycode 27 = bracketright braceright asciitilde Control_bracketright + alt keycode 27 = Meta_bracketright + shift alt keycode 27 = Meta_braceright + control alt keycode 27 = Meta_Control_bracketright +keycode 28 = Return + alt keycode 28 = Meta_Control_m +__keycode 29 = Alt__ +//注意:通过showkeys可以查处__keycode 29 对应空格左边的Alt,而keycode 100 对应空格__ +//右边的Alt,通过将它们都与Alt绑定,是这两个键具有相同功能。Ctrl和Shift类似。(这其实 +是personal.map.gz文件配置的) + keycode 30 = a +keycode 31 = s +keycode 32 = d +keycode 33 = f +keycode 34 = g +keycode 35 = h +keycode 36 = j +keycode 37 = k +keycode 38 = l +keycode 39 = semicolon colon + alt keycode 39 = Meta_semicolon + shift alt keycode 39 = Meta_colon +keycode 40 = apostrophe quotedbl + control keycode 40 = Control_g + alt keycode 40 = Meta_apostrophe + shift alt keycode 40 = Meta_quotedbl +keycode 41 = grave asciitilde + control keycode 41 = nul + alt keycode 41 = Meta_grave + shift alt keycode 41 = Meta_asciitilde +__keycode 42 = Shift__ +keycode 43 = backslash bar + control keycode 43 = Control_backslash + alt keycode 43 = Meta_backslash + shift alt keycode 43 = Meta_bar +keycode 44 = z +keycode 45 = x +keycode 46 = +c +C cent Control_c Control_c Control_c Meta_c Meta_C Meta_Control_c +keycode 47 = v +keycode 48 = b +keycode 49 = n +keycode 50 = m +keycode 51 = comma less + alt keycode 51 = Meta_comma + shift alt keycode 51 = Meta_less +keycode 52 = period greater + alt keycode 52 = Meta_period + shift alt keycode 52 = Meta_greater +keycode 53 = slash question + control keycode 53 = Control_underscore + shift control keycode 53 = Delete + alt keycode 53 = Meta_slash + shift alt keycode 53 = Meta_question +__keycode 54 = Shift__ +keycode 55 = KP_Multiply +__keycode 56 = Control__ +keycode 57 = space + control keycode 57 = nul + alt keycode 57 = Meta_space + shift alt keycode 57 = Meta_space + control alt keycode 57 = Meta_nul +keycode 58 = Caps_Lock +keycode 59 = F1 F13 Console_13 F25 + alt keycode 59 = Console_1 + control alt keycode 59 = Console_1 +keycode 60 = F2 F14 Console_14 F26 + alt keycode 60 = Console_2 + control alt keycode 60 = Console_2 +keycode 61 = F3 F15 Console_15 F27 + alt keycode 61 = Console_3 + control alt keycode 61 = Console_3 +keycode 62 = F4 F16 Console_16 F28 + alt keycode 62 = Console_4 + control alt keycode 62 = Console_4 +keycode 63 = F5 F17 Console_17 F29 + alt keycode 63 = Console_5 + control alt keycode 63 = Console_5 +keycode 64 = F6 F18 Console_18 F30 + alt keycode 64 = Console_6 + control alt keycode 64 = Console_6 +keycode 65 = F7 F19 Console_19 F31 + alt keycode 65 = Console_7 + control alt keycode 65 = Console_7 +keycode 66 = F8 F20 Console_20 F32 + alt keycode 66 = Console_8 + control alt keycode 66 = Console_8 +keycode 67 = F9 F21 Console_21 F33 + alt keycode 67 = Console_9 + control alt keycode 67 = Console_9 +keycode 68 = F10 F22 Console_22 F34 + alt keycode 68 = Console_10 + control alt keycode 68 = Console_10 +keycode 69 = Num_Lock +keycode 70 = Scroll_Lock Show_Memory Show_Registers Show_State + alt keycode 70 = Show_Registers +keycode 71 = KP_7 + alt keycode 71 = Ascii_7 +keycode 72 = KP_8 + alt keycode 72 = Ascii_8 +keycode 73 = KP_9 + alt keycode 73 = Ascii_9 +keycode 74 = KP_Subtract +keycode 75 = KP_4 + alt keycode 75 = Ascii_4 +keycode 76 = KP_5 + alt keycode 76 = Ascii_5 +keycode 77 = KP_6 + alt keycode 77 = Ascii_6 +keycode 78 = KP_Add +keycode 79 = KP_1 + alt keycode 79 = Ascii_1 +keycode 80 = KP_2 + alt keycode 80 = Ascii_2 +keycode 81 = KP_3 + alt keycode 81 = Ascii_3 +keycode 82 = KP_0 + alt keycode 82 = Ascii_0 +keycode 83 = KP_Period + control alt keycode 83 = Boot +keycode 84 = Last_Console +keycode 85 = +keycode 86 = less greater bar + alt keycode 86 = Meta_less + shift alt keycode 86 = Meta_greater +keycode 87 = F11 F23 Console_23 F35 + alt keycode 87 = Console_11 + control alt keycode 87 = Console_11 +keycode 88 = F12 F24 Console_24 F36 + alt keycode 88 = Console_12 + control alt keycode 88 = Console_12 +keycode 89 = +keycode 90 = +keycode 91 = +keycode 92 = +keycode 93 = +keycode 94 = +keycode 95 = +keycode 96 = KP_Enter +__keycode 97 = Control__ +keycode 98 = KP_Divide +keycode 99 = Compose + control keycode 99 = Control_backslash + alt keycode 99 = Control_backslash + control alt keycode 99 = Meta_Control_backslash +__keycode 100 = Alt__ +keycode 101 = Break +keycode 102 = Find +keycode 103 = Up + alt keycode 103 = KeyboardSignal +keycode 104 = Prior + shift keycode 104 = Scroll_Backward +keycode 105 = Left + alt keycode 105 = Decr_Console +keycode 106 = Right + alt keycode 106 = Incr_Console +keycode 107 = Select +keycode 108 = Down +keycode 109 = Next + shift keycode 109 = Scroll_Forward +keycode 110 = Insert +keycode 111 = Remove + control alt keycode 111 = Boot +keycode 112 = Macro + altgr control keycode 112 = VoidSymbol + shift alt keycode 112 = VoidSymbol +keycode 113 = F13 + altgr control keycode 113 = VoidSymbol + shift alt keycode 113 = VoidSymbol +keycode 114 = F14 + altgr control keycode 114 = VoidSymbol + shift alt keycode 114 = VoidSymbol +keycode 115 = Help + altgr control keycode 115 = VoidSymbol + shift alt keycode 115 = VoidSymbol +keycode 116 = Do + altgr control keycode 116 = VoidSymbol + shift alt keycode 116 = VoidSymbol +keycode 117 = F17 + altgr control keycode 117 = VoidSymbol + shift alt keycode 117 = VoidSymbol +keycode 118 = KP_MinPlus + altgr control keycode 118 = VoidSymbol + shift alt keycode 118 = VoidSymbol +keycode 119 = Pause +keycode 120 = +keycode 121 = +keycode 122 = +keycode 123 = +keycode 124 = +keycode 125 = +keycode 126 = +keycode 127 = +keycode 128 = nul + altgr control keycode 128 = VoidSymbol + shift alt keycode 128 = VoidSymbol +keycode 129 = nul + altgr control keycode 129 = VoidSymbol + shift alt keycode 129 = VoidSymbol +keycode 130 = nul + altgr control keycode 130 = VoidSymbol + shift alt keycode 130 = VoidSymbol +keycode 143 = VoidSymbol +keycode 144 = nul +string F1 = "\033[[A" +string F2 = "\033[[B" +string F3 = "\033[[C" +string F4 = "\033[[D" +string F5 = "\033[[E" +string F6 = "\033[17~" +string F7 = "\033[18~" +string F8 = "\033[19~" +string F9 = "\033[20~" +string F10 = "\033[21~" +string F11 = "\033[23~" +string F12 = "\033[24~" +string F13 = "\033[25~" +string F14 = "\033[26~" +string F15 = "\033[28~" +string F16 = "\033[29~" +string F17 = "\033[31~" +string F18 = "\033[32~" +string F19 = "\033[33~" +string F20 = "\033[34~" +string Find = "\033[1~" +string Insert = "\033[2~" +string Remove = "\033[3~" +string Select = "\033[4~" +string Prior = "\033[5~" +string Next = "\033[6~" +string Macro = "\033[M" +string Pause = "\033[P" +compose '`' 'A' to U+00c0 //注音字符 +compose '`' 'a' to U+00e0 +compose '\'' 'A' to U+00c1 +compose '\'' 'a' to U+00e1 +compose '^' 'A' to U+00c2 +compose '^' 'a' to U+00e2 +compose '~' 'A' to U+00c3 +compose '~' 'a' to U+00e3 +compose '"' 'A' to U+00c4 +compose '"' 'a' to U+00e4 +compose '-' 'a' to U+00aa +compose '-' 'A' to U+00aa +compose 'O' 'A' to U+00c5 +compose 'o' 'a' to U+00e5 +compose '0' 'A' to U+00c5 +compose '0' 'a' to U+00e5 +compose 'A' 'A' to U+00c5 +compose 'a' 'a' to U+00e5 +compose '°' 'A' to U+00c5 +compose '°' 'a' to U+00e5 +compose 'A' 'E' to U+00c6 +compose 'a' 'e' to U+00e6 +compose ',' 'C' to U+00c7 +compose ',' 'c' to U+00e7 +compose '^' 'C' to U+00c7 +compose '^' 'c' to U+00e7 +compose '`' 'E' to U+00c8 +compose '`' 'e' to U+00e8 +compose '\'' 'E' to U+00c9 +compose '\'' 'e' to U+00e9 +compose '^' 'E' to U+00ca +compose '^' 'e' to U+00ea +compose '"' 'E' to U+00cb +compose '"' 'e' to U+00eb +compose '`' 'I' to U+00cc +compose '`' 'i' to U+00ec +compose '\'' 'I' to U+00cd +compose '\'' 'i' to U+00ed +compose '^' 'I' to U+00ce +compose '^' 'i' to U+00ee +compose '"' 'I' to U+00cf +compose '"' 'i' to U+00ef +compose '-' 'D' to U+00d0 +compose '-' 'd' to U+00f0 +compose '^' 'D' to U+00d0 +compose '^' 'd' to U+00f0 +compose '~' 'N' to U+00d1 +compose '~' 'n' to U+00f1 +compose '^' 'N' to U+00d1 +compose '^' 'n' to U+00f1 +compose '`' 'O' to U+00d2 +compose '`' 'o' to U+00f2 +compose '\'' 'O' to U+00d3 +compose '\'' 'o' to U+00f3 +compose '^' 'O' to U+00d4 +compose '^' 'o' to U+00f4 +compose '~' 'O' to U+00d5 +compose '~' 'o' to U+00f5 +compose '"' 'O' to U+00d6 +compose '"' 'o' to U+00f6 +compose '/' 'O' to U+00d8 +compose '/' 'o' to U+00f8 +compose '-' 'o' to U+00ba +compose '-' 'O' to U+00ba +compose '`' 'U' to U+00d9 +compose '`' 'u' to U+00f9 +compose '\'' 'U' to U+00da +compose '\'' 'u' to U+00fa +compose '^' 'U' to U+00db +compose '^' 'u' to U+00fb +compose '"' 'U' to U+00dc +compose '"' 'u' to U+00fc +compose '\'' 'Y' to U+00dd +compose '\'' 'y' to U+00fd +compose 'T' 'H' to U+00de +compose 't' 'h' to U+00fe +compose 's' 's' to U+00df +compose '"' 'y' to U+00ff +compose 's' 'z' to U+00df +compose 'n' 'n' to U+00f1 +compose 'n' 'h' to U+00f1 +compose 'N' 'Y' to U+00d1 +compose 'N' 'N' to U+00d1 +compose 'N' 'H' to U+00d1 +compose 'N' 'y' to U+00d1 +compose 'N' 'n' to U+00d1 +compose 'N' 'h' to U+00d1 +compose '-' 'L' to U+00a3 +compose '<' '<' to U+00ab +compose '>' '>' to U+00bb +compose '?' '?' to U+00bf +compose '^' '?' to U+00bf +compose '!' '!' to U+00a1 +compose '^' '!' to U+00a1 +compose '^' '1' to U+00b9 +compose '^' '2' to U+00b2 +compose '^' '3' to U+00b3 +compose '+' '-' to U+00b1 +compose 'c' '=' to U+00a2 +compose 'c' '/' to U+00a2 +compose '/' 'c' to U+00a2 +compose '-' 'c' to U+00a2 +compose '-' 'C' to U+00a2 +compose '|' 'c' to U+00a2 +compose '|' 'C' to U+00a2 +compose 'L' '=' to U+00a3 +compose '-' 'L' to U+00a3 +compose '-' 'l' to U+00a3 +compose '^' '*' to U+00d7 +compose '^' 'x' to U+00d7 +compose 'x' 'x' to U+00d7 +compose '^' '.' to U+00b7 +compose '.' '.' to U+00b7 +compose '^' '/' to U+00f7 +compose '^' ':' to U+00f7 +compose '-' ':' to U+00f7 +compose ':' '-' to U+00f7 +compose 'Y' '=' to U+00a5 +compose '=' 'Y' to U+00a5 +compose '-' 'Y' to U+00a5 +compose '-' 'l' to U+00a5 +compose '(' 'c' to U+00a9 +compose '"' 'c' to U+00a9 +compose 'O' 'C' to U+00a9 +compose '(' 'C' to U+00a9 +compose 'C' ')' to U+00a9 +compose '-' 'a' to U+00aa +compose '-' 'A' to U+00aa +compose '-' 'o' to U+00ba +compose '-' 'O' to U+00ba +compose '(' 'r' to U+00ae +compose '"' 'r' to U+00ae +compose 'O' 'R' to U+00ae +compose '(' 'R' to U+00ae +compose 'R' ')' to U+00ae +compose 'm' 'u' to U+00b5 +compose 'P' 'P' to U+00b6 +compose '1' '4' to U+00bc +compose '1' '2' to U+00bd +compose '3' '4' to U+00be +compose 'e' '=' to U+00a4 +compose '-' 'e' to U+00a4 +compose '-' 'E' to U+00a4 +compose '=' 'E' to U+00a4 +compose 'v' 'S' to U+00a6 +compose '^' 'S' to U+00a6 +compose 'v' 's' to U+00a8 +compose '^' 's' to U+00a8 +compose 'v' 'Z' to U+00b4 +compose '^' 'Z' to U+00b4 +compose 'v' 'z' to U+00b8 +compose '^' 'z' to U+00b8 +compose 'O' 'E' to U+00bc +compose 'O' 'e' to U+00bc +compose 'o' 'e' to U+00bd +compose '"' 'Y' to U+00be +compose 'i' 'j' to U+00ff +compose 'I' 'J' to U+00be diff --git a/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys_-l.txt b/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys_-l.txt new file mode 100644 index 0000000..26fa9d5 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/keymaps/dumpkeys_-l.txt @@ -0,0 +1,878 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T16:23:23+08:00 + +====== dumpkeys -l ====== +Created Monday 19 November 2012 + +$ dumpkeys -l __//打印loadkeys可以识别的symbols及其value,它们可以用在personal.map文件中。__ +keycode range supported by kernel: 1 - 255 //kernel的终端驱动,支持一个key绑定255个keyboard actions。 +max number of actions bindable to a key: 256 +number of keymaps in actual use: 9 //实际上将一个key绑定9个actions,具体可以参考/usr/share/kbd/keymaps/i386/qwerty/us.map.gz +of which 2 dynamically allocated +ranges of action codes supported by kernel: +number of function keys supported by kernel: 256 +max nr of compose definitions: 256 +nr of compose definitions in actual use: 158 +Symbols recognized by dumpkeys: +(numeric value, symbol) //number value只是序号,而非keycode + +0x0000 nul +0x0001 Control_a +0x0002 Control_b +0x0003 Control_c +0x0004 Control_d +0x0005 Control_e +0x0006 Control_f +0x0007 Control_g +0x0008 BackSpace +0x0009 Tab +0x000a Linefeed +0x000b Control_k +0x000c Control_l +0x000d Control_m +0x000e Control_n +0x000f Control_o +0x0010 Control_p +0x0011 Control_q +0x0012 Control_r +0x0013 Control_s +0x0014 Control_t +0x0015 Control_u +0x0016 Control_v +0x0017 Control_w +0x0018 Control_x +0x0019 Control_y +0x001a Control_z +0x001b Escape +0x001c Control_backslash +0x001d Control_bracketright +0x001e Control_asciicircum +0x001f Control_underscore +0x0020 space +0x0021 exclam +0x0022 quotedbl +0x0023 numbersign +0x0024 dollar +0x0025 percent +0x0026 ampersand +0x0027 apostrophe +0x0028 parenleft +0x0029 parenright +0x002a asterisk +0x002b plus +0x002c comma +0x002d minus +0x002e period +0x002f slash +0x0030 zero +0x0031 **one** +0x0032 two +0x0033 three +0x0034 four +0x0035 five +0x0036 six +0x0037 seven +0x0038 eight +0x0039 nine +0x003a colon +0x003b semicolon +0x003c less +0x003d equal +0x003e greater +0x003f question +0x0040 at +0x0041 A +0x0042 B +0x0043 C +0x0044 D +0x0045 E +0x0046 F +0x0047 G +0x0048 H +0x0049 I +0x004a J +0x004b K +0x004c L +0x004d M +0x004e N +0x004f O +0x0050 P +0x0051 Q +0x0052 R +0x0053 S +0x0054 T +0x0055 U +0x0056 V +0x0057 W +0x0058 X +0x0059 Y +0x005a Z +0x005b bracketleft +0x005c backslash +0x005d bracketright +0x005e asciicircum +0x005f underscore +0x0060 grave +0x0061 a +0x0062 b +0x0063 c +0x0064 d +0x0065 e +0x0066 f +0x0067 g +0x0068 h +0x0069 i +0x006a j +0x006b k +0x006c l +0x006d m +0x006e n +0x006f o +0x0070 p +0x0071 q +0x0072 r +0x0073 s +0x0074 t +0x0075 u +0x0076 v +0x0077 w +0x0078 x +0x0079 y +0x007a z +0x007b braceleft +0x007c bar +0x007d braceright +0x007e asciitilde +0x007f Delete +0x00a0 nobreakspace +0x00a1 exclamdown +0x00a2 cent +0x00a3 sterling +0x00a4 currency +0x00a5 yen +0x00a6 brokenbar +0x00a7 section +0x00a8 diaeresis +0x00a9 copyright +0x00aa ordfeminine +0x00ab guillemotleft +0x00ac notsign +0x00ad hyphen +0x00ae registered +0x00af macron +0x00b0 degree +0x00b1 plusminus +0x00b2 twosuperior +0x00b3 threesuperior +0x00b4 acute +0x00b5 mu +0x00b6 paragraph +0x00b7 periodcentered +0x00b8 cedilla +0x00b9 onesuperior +0x00ba masculine +0x00bb guillemotright +0x00bc onequarter +0x00bd onehalf +0x00be threequarters +0x00bf questiondown +0x00c0 Agrave +0x00c1 Aacute +0x00c2 Acircumflex +0x00c3 Atilde +0x00c4 Adiaeresis +0x00c5 Aring +0x00c6 AE +0x00c7 Ccedilla +0x00c8 Egrave +0x00c9 Eacute +0x00ca Ecircumflex +0x00cb Ediaeresis +0x00cc Igrave +0x00cd Iacute +0x00ce Icircumflex +0x00cf Idiaeresis +0x00d0 ETH +0x00d1 Ntilde +0x00d2 Ograve +0x00d3 Oacute +0x00d4 Ocircumflex +0x00d5 Otilde +0x00d6 Odiaeresis +0x00d7 multiply +0x00d8 Ooblique +0x00d9 Ugrave +0x00da Uacute +0x00db Ucircumflex +0x00dc Udiaeresis +0x00dd Yacute +0x00de THORN +0x00df ssharp +0x00e0 agrave +0x00e1 aacute +0x00e2 acircumflex +0x00e3 atilde +0x00e4 adiaeresis +0x00e5 aring +0x00e6 ae +0x00e7 ccedilla +0x00e8 egrave +0x00e9 eacute +0x00ea ecircumflex +0x00eb ediaeresis +0x00ec igrave +0x00ed iacute +0x00ee icircumflex +0x00ef idiaeresis +0x00f0 eth +0x00f1 ntilde +0x00f2 ograve +0x00f3 oacute +0x00f4 ocircumflex +0x00f5 otilde +0x00f6 odiaeresis +0x00f7 division +0x00f8 oslash +0x00f9 ugrave +0x00fa uacute +0x00fb ucircumflex +0x00fc udiaeresis +0x00fd yacute +0x00fe thorn +0x00ff ydiaeresis +0x0100 F1 +0x0101 F2 +0x0102 F3 +0x0103 F4 +0x0104 F5 +0x0105 F6 +0x0106 F7 +0x0107 F8 +0x0108 F9 +0x0109 F10 +0x010a F11 +0x010b F12 +0x010c F13 +0x010d F14 +0x010e F15 +0x010f F16 +0x0110 F17 +0x0111 F18 +0x0112 F19 +0x0113 F20 +0x0114 Find +0x0115 Insert +0x0116 Remove +0x0117 Select +0x0118 Prior +0x0119 Next +0x011a Macro +0x011b Help +0x011c Do +0x011d Pause +0x011e F21 +0x011f F22 +0x0120 F23 +0x0121 F24 +0x0122 F25 +0x0123 F26 +0x0124 F27 +0x0125 F28 +0x0126 F29 +0x0127 F30 +0x0128 F31 +0x0129 F32 +0x012a F33 +0x012b F34 +0x012c F35 +0x012d F36 +0x012e F37 +0x012f F38 +0x0130 F39 +0x0131 F40 +0x0132 F41 +0x0133 F42 +0x0134 F43 +0x0135 F44 +0x0136 F45 +0x0137 F46 +0x0138 F47 +0x0139 F48 +0x013a F49 +0x013b F50 +0x013c F51 +0x013d F52 +0x013e F53 +0x013f F54 +0x0140 F55 +0x0141 F56 +0x0142 F57 +0x0143 F58 +0x0144 F59 +0x0145 F60 +0x0146 F61 +0x0147 F62 +0x0148 F63 +0x0149 F64 +0x014a F65 +0x014b F66 +0x014c F67 +0x014d F68 +0x014e F69 +0x014f F70 +0x0150 F71 +0x0151 F72 +0x0152 F73 +0x0153 F74 +0x0154 F75 +0x0155 F76 +0x0156 F77 +0x0157 F78 +0x0158 F79 +0x0159 F80 +0x015a F81 +0x015b F82 +0x015c F83 +0x015d F84 +0x015e F85 +0x015f F86 +0x0160 F87 +0x0161 F88 +0x0162 F89 +0x0163 F90 +0x0164 F91 +0x0165 F92 +0x0166 F93 +0x0167 F94 +0x0168 F95 +0x0169 F96 +0x016a F97 +0x016b F98 +0x016c F99 +0x016d F100 +0x016e F101 +0x016f F102 +0x0170 F103 +0x0171 F104 +0x0172 F105 +0x0173 F106 +0x0174 F107 +0x0175 F108 +0x0176 F109 +0x0177 F110 +0x0178 F111 +0x0179 F112 +0x017a F113 +0x017b F114 +0x017c F115 +0x017d F116 +0x017e F117 +0x017f F118 +0x0180 F119 +0x0181 F120 +0x0182 F121 +0x0183 F122 +0x0184 F123 +0x0185 F124 +0x0186 F125 +0x0187 F126 +0x0188 F127 +0x0189 F128 +0x018a F129 +0x018b F130 +0x018c F131 +0x018d F132 +0x018e F133 +0x018f F134 +0x0190 F135 +0x0191 F136 +0x0192 F137 +0x0193 F138 +0x0194 F139 +0x0195 F140 +0x0196 F141 +0x0197 F142 +0x0198 F143 +0x0199 F144 +0x019a F145 +0x019b F146 +0x019c F147 +0x019d F148 +0x019e F149 +0x019f F150 +0x01a0 F151 +0x01a1 F152 +0x01a2 F153 +0x01a3 F154 +0x01a4 F155 +0x01a5 F156 +0x01a6 F157 +0x01a7 F158 +0x01a8 F159 +0x01a9 F160 +0x01aa F161 +0x01ab F162 +0x01ac F163 +0x01ad F164 +0x01ae F165 +0x01af F166 +0x01b0 F167 +0x01b1 F168 +0x01b2 F169 +0x01b3 F170 +0x01b4 F171 +0x01b5 F172 +0x01b6 F173 +0x01b7 F174 +0x01b8 F175 +0x01b9 F176 +0x01ba F177 +0x01bb F178 +0x01bc F179 +0x01bd F180 +0x01be F181 +0x01bf F182 +0x01c0 F183 +0x01c1 F184 +0x01c2 F185 +0x01c3 F186 +0x01c4 F187 +0x01c5 F188 +0x01c6 F189 +0x01c7 F190 +0x01c8 F191 +0x01c9 F192 +0x01ca F193 +0x01cb F194 +0x01cc F195 +0x01cd F196 +0x01ce F197 +0x01cf F198 +0x01d0 F199 +0x01d1 F200 +0x01d2 F201 +0x01d3 F202 +0x01d4 F203 +0x01d5 F204 +0x01d6 F205 +0x01d7 F206 +0x01d8 F207 +0x01d9 F208 +0x01da F209 +0x01db F210 +0x01dc F211 +0x01dd F212 +0x01de F213 +0x01df F214 +0x01e0 F215 +0x01e1 F216 +0x01e2 F217 +0x01e3 F218 +0x01e4 F219 +0x01e5 F220 +0x01e6 F221 +0x01e7 F222 +0x01e8 F223 +0x01e9 F224 +0x01ea F225 +0x01eb F226 +0x01ec F227 +0x01ed F228 +0x01ee F229 +0x01ef F230 +0x01f0 F231 +0x01f1 F232 +0x01f2 F233 +0x01f3 F234 +0x01f4 F235 +0x01f5 F236 +0x01f6 F237 +0x01f7 F238 +0x01f8 F239 +0x01f9 F240 +0x01fa F241 +0x01fb F242 +0x01fc F243 +0x01fd F244 +0x01fe F245 +0x01ff F246 +0x0200 VoidSymbol +**0x0201 Return** +0x0202 Show_Registers +0x0203 Show_Memory +0x0204 Show_State +**0x0205 Break** +0x0206 Last_Console +__0x0207 Caps_Lock__ +0x0208 Num_Lock +0x0209 Scroll_Lock +0x020a Scroll_Forward +0x020b Scroll_Backward +**0x020c Boot //没有使用。** +0x020d Caps_On +0x020e Compose +0x020f SAK +0x0210 Decr_Console +0x0211 Incr_Console +0x0212 KeyboardSignal +0x0213 Bare_Num_Lock +0x0300 KP_0 +0x0301 KP_1 +0x0302 KP_2 +0x0303 KP_3 +0x0304 KP_4 +0x0305 KP_5 +0x0306 KP_6 +0x0307 KP_7 +0x0308 KP_8 +0x0309 KP_9 +0x030a KP_Add +0x030b KP_Subtract +0x030c KP_Multiply +0x030d KP_Divide +0x030e KP_Enter +0x030f KP_Comma +0x0310 KP_Period +0x0311 KP_MinPlus +0x0400 dead_grave +0x0401 dead_acute +0x0402 dead_circumflex +0x0403 dead_tilde +0x0404 dead_diaeresis +0x0405 dead_cedilla +0x0500 Console_1 +0x0501 Console_2 +0x0502 Console_3 +0x0503 Console_4 +0x0504 Console_5 +0x0505 Console_6 +0x0506 Console_7 +0x0507 Console_8 +0x0508 Console_9 +0x0509 Console_10 +0x050a Console_11 +0x050b Console_12 +0x050c Console_13 +0x050d Console_14 +0x050e Console_15 +0x050f Console_16 +0x0510 Console_17 +0x0511 Console_18 +0x0512 Console_19 +0x0513 Console_20 +0x0514 Console_21 +0x0515 Console_22 +0x0516 Console_23 +0x0517 Console_24 +0x0518 Console_25 +0x0519 Console_26 +0x051a Console_27 +0x051b Console_28 +0x051c Console_29 +0x051d Console_30 +0x051e Console_31 +0x051f Console_32 +0x0520 Console_33 +0x0521 Console_34 +0x0522 Console_35 +0x0523 Console_36 +0x0524 Console_37 +0x0525 Console_38 +0x0526 Console_39 +0x0527 Console_40 +0x0528 Console_41 +0x0529 Console_42 +0x052a Console_43 +0x052b Console_44 +0x052c Console_45 +0x052d Console_46 +0x052e Console_47 +0x052f Console_48 +0x0530 Console_49 +0x0531 Console_50 +0x0532 Console_51 +0x0533 Console_52 +0x0534 Console_53 +0x0535 Console_54 +0x0536 Console_55 +0x0537 Console_56 +0x0538 Console_57 +0x0539 Console_58 +0x053a Console_59 +0x053b Console_60 +0x053c Console_61 +0x053d Console_62 +0x053e Console_63 +0x0600 Down +0x0601 Left +0x0602 Right +0x0603 Up +__0x0700 Shift //在后面可以看到ShiftL, ShiftR是Shift的同义词。__ +__0x0701 AltGr__ +__0x0702 Control__ +__0x0703 Alt__ +**0x0704 ShiftL** +**0x0705 ShiftR** +**0x0706 CtrlL** +**0x0707 CtrlR** +0x0708 CapsShift +0x0800 Meta_nul +0x0801 Meta_Control_a +0x0802 Meta_Control_b +0x0803 Meta_Control_c +0x0804 Meta_Control_d +0x0805 Meta_Control_e +0x0806 Meta_Control_f +0x0807 Meta_Control_g +0x0808 Meta_BackSpace +0x0809 Meta_Tab +0x080a Meta_Linefeed +0x080b Meta_Control_k +0x080c Meta_Control_l +0x080d Meta_Control_m +0x080e Meta_Control_n +0x080f Meta_Control_o +0x0810 Meta_Control_p +0x0811 Meta_Control_q +0x0812 Meta_Control_r +0x0813 Meta_Control_s +0x0814 Meta_Control_t +0x0815 Meta_Control_u +0x0816 Meta_Control_v +0x0817 Meta_Control_w +0x0818 Meta_Control_x +0x0819 Meta_Control_y +0x081a Meta_Control_z +0x081b Meta_Escape +0x081c Meta_Control_backslash +0x081d Meta_Control_bracketright +0x081e Meta_Control_asciicircum +0x081f Meta_Control_underscore +0x0820 Meta_space +0x0821 Meta_exclam +0x0822 Meta_quotedbl +0x0823 Meta_numbersign +0x0824 Meta_dollar +0x0825 Meta_percent +0x0826 Meta_ampersand +0x0827 Meta_apostrophe +0x0828 Meta_parenleft +0x0829 Meta_parenright +0x082a Meta_asterisk +0x082b Meta_plus +0x082c Meta_comma +0x082d Meta_minus +0x082e Meta_period +0x082f Meta_slash +0x0830 Meta_zero +0x0831 Meta_one +0x0832 Meta_two +0x0833 Meta_three +0x0834 Meta_four +0x0835 Meta_five +0x0836 Meta_six +0x0837 Meta_seven +0x0838 Meta_eight +0x0839 Meta_nine +0x083a Meta_colon +0x083b Meta_semicolon +0x083c Meta_less +0x083d Meta_equal +0x083e Meta_greater +0x083f Meta_question +0x0840 Meta_at +0x0841 Meta_A +0x0842 Meta_B +0x0843 Meta_C +0x0844 Meta_D +0x0845 Meta_E +0x0846 Meta_F +0x0847 Meta_G +0x0848 Meta_H +0x0849 Meta_I +0x084a Meta_J +0x084b Meta_K +0x084c Meta_L +0x084d Meta_M +0x084e Meta_N +0x084f Meta_O +0x0850 Meta_P +0x0851 Meta_Q +0x0852 Meta_R +0x0853 Meta_S +0x0854 Meta_T +0x0855 Meta_U +0x0856 Meta_V +0x0857 Meta_W +0x0858 Meta_X +0x0859 Meta_Y +0x085a Meta_Z +0x085b Meta_bracketleft +0x085c Meta_backslash +0x085d Meta_bracketright +0x085e Meta_asciicircum +0x085f Meta_underscore +0x0860 Meta_grave +0x0861 Meta_a +0x0862 Meta_b +0x0863 Meta_c +0x0864 Meta_d +0x0865 Meta_e +0x0866 Meta_f +0x0867 Meta_g +0x0868 Meta_h +0x0869 Meta_i +0x086a Meta_j +0x086b Meta_k +0x086c Meta_l +0x086d Meta_m +0x086e Meta_n +0x086f Meta_o +0x0870 Meta_p +0x0871 Meta_q +0x0872 Meta_r +0x0873 Meta_s +0x0874 Meta_t +0x0875 Meta_u +0x0876 Meta_v +0x0877 Meta_w +0x0878 Meta_x +0x0879 Meta_y +0x087a Meta_z +0x087b Meta_braceleft +0x087c Meta_bar +0x087d Meta_braceright +0x087e Meta_asciitilde +0x087f Meta_Delete +0x0900 Ascii_0 +0x0901 Ascii_1 +0x0902 Ascii_2 +0x0903 Ascii_3 +0x0904 Ascii_4 +0x0905 Ascii_5 +0x0906 Ascii_6 +0x0907 Ascii_7 +0x0908 Ascii_8 +0x0909 Ascii_9 +0x090a Hex_0 +0x090b Hex_1 +0x090c Hex_2 +0x090d Hex_3 +0x090e Hex_4 +0x090f Hex_5 +0x0910 Hex_6 +0x0911 Hex_7 +0x0912 Hex_8 +0x0913 Hex_9 +0x0914 Hex_A +0x0915 Hex_B +0x0916 Hex_C +0x0917 Hex_D +0x0918 Hex_E +0x0919 Hex_F +0x0a00 Shift_Lock __//_Lock表示,Caps Lock键先被按下。__ +0x0a01 AltGr_Lock +0x0a02 Control_Lock +0x0a03 Alt_Lock +0x0a04 ShiftL_Lock +0x0a05 ShiftR_Lock +0x0a06 CtrlL_Lock +0x0a07 CtrlR_Lock +0x0a08 CapsShift_Lock +0x0c00 SShift +0x0c01 SAltGr +0x0c02 SControl +0x0c03 SAlt +0x0c04 SShiftL +0x0c05 SShiftR +0x0c06 SCtrlL +0x0c07 SCtrlR +0x0c08 SCapsShift +0x0e00 Brl_blank +0x0e01 Brl_dot1 +0x0e02 Brl_dot2 +0x0e03 Brl_dot3 +0x0e04 Brl_dot4 +0x0e05 Brl_dot5 +0x0e06 Brl_dot6 +0x0e07 Brl_dot7 +0x0e08 Brl_dot8 +0x0e09 Brl_dot9 +0x0e0a Brl_dot10 + +The following synonyms (同义)are recognized: + +Control_h for BackSpace +Control_i for Tab +Control_j for Linefeed +Home for Find +End for Select +PageUp for Prior +PageDown for Next +multiplication for multiply +pound for sterling +pilcrow for paragraph +Oslash for Ooblique +**Shift_L for ShiftL** +**Shift_R for ShiftR** +**Control_L for CtrlL** +**Control_R for CtrlR** +**AltL for Alt** +**AltR for AltGr** +**Alt_L for Alt** +**Alt_R for AltGr** +**AltGr_L for Alt** +**AltGr_R for AltGr** +AltLLock for Alt_Lock +AltRLock for AltGr_Lock +SCtrl for SControl +Spawn_Console for KeyboardSignal +Uncaps_Shift for CapsShift +lambda for lamda +Lambda for Lamda +xi for ksi +Xi for Ksi +chi for khi +Chi for Khi +tilde for asciitilde +circumflex for asciicircum +dead_ogonek for dead_cedilla +dead_caron for dead_circumflex +dead_breve for dead_tilde +dead_doubleacute for dead_tilde +Idotabove for Iabovedot +dotlessi for idotless +no-break_space for nobreakspace +paragraph_sign for section +soft_hyphen for hyphen +bielorussian_cyrillic_capital_letter_i for ukrainian_cyrillic_capital_letter_i +cyrillic_capital_letter_kha for cyrillic_capital_letter_ha +cyrillic_capital_letter_ge for cyrillic_capital_letter_ghe +cyrillic_capital_letter_ia for cyrillic_capital_letter_ya +cyrillic_capital_letter_iu for cyrillic_capital_letter_yu +cyrillic_capital_letter_yeri for cyrillic_capital_letter_yeru +cyrillic_capital_letter_reversed_e for cyrillic_capital_letter_e +cyrillic_capital_letter_ii for cyrillic_capital_letter_i +cyrillic_capital_letter_short_ii for cyrillic_capital_letter_short_i +bielorussian_cyrillic_small_letter_i for ukrainian_cyrillic_small_letter_i +cyrillic_small_letter_kha for cyrillic_small_letter_ha +cyrillic_small_letter_ge for cyrillic_small_letter_ghe +cyrillic_small_letter_ia for cyrillic_small_letter_ya +cyrillic_small_letter_iu for cyrillic_small_letter_yu +cyrillic_small_letter_yeri for cyrillic_small_letter_yeru +cyrillic_small_letter_reversed_e for cyrillic_small_letter_e +cyrillic_small_letter_ii for cyrillic_small_letter_i +cyrillic_small_letter_short_ii for cyrillic_small_letter_short_i +rightanglequote for guillemotright + +Recognized modifier names and their column numbers: +shift 1 +altgr 2 +control 4 +alt 8 +shiftl 16 +shiftr 32 +ctrll 64 +ctrlr 128 +capsshift 256 diff --git a/Zim/Utils/键盘布局和按键映射/keymaps/personal.map.txt b/Zim/Utils/键盘布局和按键映射/keymaps/personal.map.txt new file mode 100644 index 0000000..8fa1072 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/keymaps/personal.map.txt @@ -0,0 +1,68 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T17:08:03+08:00 + +====== personal.map ====== +Created Monday 19 November 2012 +本文件是在us.map的基础上修改的,功能是将Ctrl和Alt相互调换,同时不区分左右Alt。 +可以先用**showkey命令**查看键盘上各按键对应的keycode,然后修改该文件。 +注意:keymaps只适合于虚拟终端环境,对于X app,可以使用xmodmap命令。 + +# us.map +keymaps 0-2,4-6,8-9,12 +**alt_is_meta** +include "qwerty-layout" +**include "linux-with-two-alt-keys" //为emacs使用,目的是不区分左右Alt。 from:archlinux wiki:KEYMAPS** +include "compose.latin1" +include "euro1.map" +strings as usual + +keycode 1 = Escape +keycode 2 = one exclam +keycode 3 = two at at nul nul +keycode 4 = three numbersign +control keycode 4 = Escape +keycode 5 = four dollar dollar Control_backslash +keycode 6 = five percent +control keycode 6 = Control_bracketright +keycode 7 = six asciicircum +control keycode 7 = Control_asciicircum +keycode 8 = seven ampersand braceleft Control_underscore +keycode 9 = eight asterisk bracketleft Delete +keycode 10 = nine parenleft bracketright +keycode 11 = zero parenright braceright +keycode 12 = minus underscore backslash Control_underscore Control_underscore +keycode 13 = equal plus +keycode 14 = Delete +keycode 15 = Tab +shift keycode 15 = Meta_Tab +keycode 26 = bracketleft braceleft +control keycode 26 = Escape +keycode 27 = bracketright braceright asciitilde Control_bracketright +keycode 28 = Return +alt keycode 28 = Meta_Control_m +__#keycode 29 = Control //29对应的的是空格左边的Control按键,现在将其与绑定到Alt modifier。__ +__keycode 29 = Alt__ +keycode 39 = semicolon colon +keycode 40 = apostrophe quotedbl +control keycode 40 = Control_g +keycode 41 = grave asciitilde + control keycode 41 = nul +keycode 42 = Shift +keycode 43 = backslash bar + control keycode 43 = Control_backslash +keycode 51 = comma less +keycode 52 = period greater +keycode 53 = slash question + control keycode 53 = Control_underscore + control shift keycode 53 = Delete +keycode 54 = Shift +__#keycode 56 = Alt //56对应的是空格左边的Alt按键,现在将其绑定到Control modifier。__ +__keycode 56 = Control__ +keycode 57 = space + control keycode 57 = nul +keycode 58 = Caps_Lock +keycode 86 = less greater bar +__keycode 97 = Control //空格右边的Control和Alt键不用修改。__ +keycode 100 = Alt + diff --git a/Zim/Utils/键盘布局和按键映射/wiki_KEYMAPS.txt b/Zim/Utils/键盘布局和按键映射/wiki_KEYMAPS.txt new file mode 100644 index 0000000..725dc32 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/wiki_KEYMAPS.txt @@ -0,0 +1,72 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T19:12:45+08:00 + +====== wiki KEYMAPS ====== +Created Monday 19 November 2012 +https://wiki.archlinux.org/index.php/KEYMAP + +===== KEYMAP ===== +The **KEYMAP** variable is specified in the __/etc/vconsole.conf__ file. It defines what keymap the keyboard is in the virtual consoles. Keytable files are provided by the **kbd** package. + +===== Keyboard layouts ===== +This is the list of known keymap settings to work for the corresponding **keyboard layouts**. Most keymaps can be found in the **/usr/share/kbd/keymaps/i386**/layout (__layout=qwerty, azerty, dvorak, etc__.) directory. + +Less common but nonetheless useful keymaps for Arch Linux are found in the /usr/share/kbd/keymaps/architecture (architecture=mac, sun, etc.) directory. +Note: In an X session, you can use setxkbmap to instantly apply keyboard layout: setxkbmap -layout dvorak + +Note: If these keymaps do not work for you, make sure the keymap file exists in /usr/share/kbd/keymaps/ using find: find /usr/share/kbd/keymaps/ -name "*[your desired keymap]*" + +**Keyboard Keymap setting** +Belgian KEYMAP=be-latin1 +Brazilian Portuguese KEYMAP=br-abnt2 +Canadian-French KEYMAP=cf +Canadian Multilingual (in AUR) KEYMAP=ca_multi +Colemak (US) KEYMAP=colemak +Croatian KEYMAP=croat +Czech KEYMAP=cz-lat2 +Dvorak KEYMAP=dvorak +French KEYMAP=fr-latin1 +German KEYMAP=de-latin1 +German (no dead keys) KEYMAP=de-latin1-nodeadkeys +Italian KEYMAP=it +Lithuanian (qwerty) KEYMAP=lt.baltic +Norwegian KEYMAP=no-latin1 +Polish KEYMAP=pl +Portuguese KEYMAP=pt-latin9 +Romanian KEYMAP=ro_win +Russian KEYMAP=ru4 +Singapore KEYMAP=sg-latin1 +Slovene KEYMAP=slovene +Swedish KEYMAP=sv-latin1 +Swiss-French KEYMAP=fr_CH-latin1 +Swiss-German KEYMAP=de_CH-latin1 +Spanish KEYMAP=es +Spanish Latinoamerican KEYMAP=la-latin1 +Turkish KEYMAP=tr_q-latin5 +Ukrainian KEYMAP=ua +United Kingdom KEYMAP=gb or KEYMAP=uk in the installer. + +===== Configuring the Console Keymap ===== + +1. cd to /usr/share/kbd/keymaps/i386/qwerty + +2. Copy your default keymap (us.map.gz) to a new file personal.map.gz + +3. gunzip the new map file + +4. Edit personal.map using your favorite editor. Examples: + __Make the Right Alt key same as Left Alt key (Emacs)__ + change the line include "linux-with-alt-and-altgr" to include "linux-with-two-alt-keys" + Swap CapsLock with Escape (Vim) + make keycode 1 = Caps_Lock and keycode 58 = Escape + Make CapsLock another Control key + change the line keycode 58 = Caps_Lock to keycode 58 = Control + Swap CapsLock with Left Control key + make keycode 29 = Caps_Lock and keycode 58 = Control +注意:可以使用showkey命令查看,虚拟终端环境中某个按键的keycode(对于X 环境可以使用xev命令)。 + +5. gzip the map file +Change the default keyboard layout file that will be used by editing /etc/vconsole.conf (you might have to create this file) and changing the line that says KEYMAP=us to KEYMAP=personal + +6. Reboot to use your keymap the way nature intended (or run "__loadkeys personal__") diff --git a/Zim/Utils/键盘布局和按键映射/wiki_xmodmap.txt b/Zim/Utils/键盘布局和按键映射/wiki_xmodmap.txt new file mode 100644 index 0000000..101a214 --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/wiki_xmodmap.txt @@ -0,0 +1,88 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T19:58:36+08:00 + +====== wiki xmodmap ====== +Created Monday 19 November 2012 +https://wiki.archlinux.org/index.php/Xmodmap + +===== Summary ===== +A general overview of modifying **keymaps and pointer** mappings with xmodmap. + +===== Introduction ===== +The Linux kernel generates a code each time a key is pressed on a keyboard. That code is compared to __a table of keycodes__ defining a figure that is then displayed. + +This process is complicated by **Xorg**, which starts its own table of keycodes. __Each keycode can belong to a keysym__. A keysym is like a function, started by typing a key. Xmodmap allows you to edit these keycode-keysym relations. + +===== Keymap table ===== +Print the current keymap table **formatted into expressions**: +$ xmodmap -pke +keycode 57 = n N + +Each keymap is followed by the keysyms it is mapped to. The above example indicates that the keycode 57 is mapped to the lowercase n, while the uppercase N is mapped to keycode 57 and Shift. + +**xmodmap文件的语法格式与keymaps相似,具体格式可以参考:**[[keymaps]] 。**内核可以识别的所有keysyms可以在虚拟终端中用dumpkeys -l命令查看。** +Each keysym column in the table corresponds to a particular key combination: + 1. Key + 2. Shift+Key + 3. mode_switch+Key + 4. mode_switch+Shift+Key + 5. AltGr+Key + 6. AltGr+Shift+Key +Not all keysyms have to be set, but if you want to assign a latter keysym without assigning earlier ones set them to **NoSymbol**. +You can check which keymap corresponds to a key on your keyboard with __xev__. +Tip: There are predefined descriptive keycodes that make mapping additional keys easier (e.g. XF86AudioMute, XF86Mail). Those keycodes can be found in: /usr/include/X11/XF86keysym.h + +===== Custom table ===== +You can create your own map and store it in your home directory (i.e. ~/.Xmodmap). Print the current keymap table into a configuration file: + __xmodmap -pke > ~/.Xmodmap__ +Make the desired changes to ~/.Xmodmap and then test the new configuration with: + xmodmap ~/.Xmodmap +To activate your custom table when starting Xorg add the following: + ~/.xinitrc + if [ -f $HOME/.Xmodmap ]; then + /usr/bin/xmodmap $HOME/.Xmodmap + fi +Alternatively, edit the global startup script /etc/X11/xinit/xinitrc. + +===== Test changes ===== +You can also make temporary changes for the current session. For example: + xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" + xmodmap -e "keysym a = e E" + + +===== Special keys/signals ===== +You can also also edit the keys: Shift, Ctrl, Alt and Super (there always exists a left and a right one (__Alt_R=AltGr__)) + +At first you have to delete/clear the signals that should be edited. In the beginning of your ~/.Xmodmap: + !clear Shift + !clear Lock + clear Control + !clear Mod1 + !clear Mod2 + !clear Mod3 + clear Mod4 + !clear Mod5 + keycode 8 = + ... +Remember, ! is a comment so only Control and Mod4 (Standard: Super_L Super_R) get cleared. +Write the new signals at the end of ~/.Xmodmap + keycode 255 = + !add Shift = Shift_L Shift_R + !add Lock = Caps_Lock + add Control = Super_L Super_R + !add Mod1 = Alt_L Alt_R + !add Mod2 = Mode_switch + !add Mod3 = + add Mod4 = Control_L Control_R + !add Mod5 = +The Super keys have now been exchanged with the Ctrl keys. + +===== Reverse Scrolling ===== +The natural scrolling feature available in OS X Lion can be mimicked with xmodmap. Since the synaptics driver uses the buttons 4/5/6/7 for up/down/left/right scrolling, you simply need to swap the order of how the buttons are declared in ~/.Xmodmap. +Open ~/.Xmodmap and append the following line to the file: +pointer = 1 2 3 5 4 7 6 8 9 10 11 12 +Note how the 4 and 5 have been reversed. +Then update xmodmap: +xmodmap ~/.Xmodmap +To return to regular scrolling simply reverse the order of the 4 and 5 or delete the line altogether. For more information check Peter Hutterer's post, Natural scrolling in the synaptics driver, or the Reverse scrolling direction ala Mac OS X Lion? forum thread. diff --git a/Zim/Utils/键盘布局和按键映射/xmodmap.txt b/Zim/Utils/键盘布局和按键映射/xmodmap.txt new file mode 100644 index 0000000..a38844d --- /dev/null +++ b/Zim/Utils/键盘布局和按键映射/xmodmap.txt @@ -0,0 +1,133 @@ +Content-Type: text/x-zim-wiki +Wiki-Format: zim 0.4 +Creation-Date: 2012-11-19T11:27:20+08:00 + +====== xmodmap ====== +Created Monday 19 November 2012 +http://lins05.mysmth.net/2011/04/24/67/ + +注意:xmodmap修改键盘布局的方法只适用于X client app,对于虚拟终端应用,需要修改keymaps文件,可以参考:[[wiki KEYMAPS]] + +这是一篇介绍xmodmap工具的简单教程,适合于以下童鞋: +* Emacs用户,需要交换 CapsLock 和 left Ctrl的人,或者和我一样交换Alt_L和Control_L。 +* 其他有改键需要的人。 +* 喜欢瞎折腾的人。 +读了这篇帖子,你会发现在linux下修改键盘布局是如此的简单(我替你们做了功课:花二十分钟通读了xmodmap的man手册)。 + +===== 提出问题: ===== +如何交换CapsLock和左边的Ctrl键? + +答: +# xmodmap -e "remove lock = Caps_Lock" +# xmodmap -e "remove control = Control_L" +# xmodmap -e "add control = Caps_Lock" +# xmodmap -e "add lock = Control_L" + +后面的内容是具体的教程,前面是提供给只需要一个做法而不需要了解具体的原理的。如果你属于此类,完全可以不看后面的内容了。 不过原理很简单,而且一旦学会,改键就跟grep一个正则表达式差不多简单。 + +===== 分析问题: ===== +看到这里的人,应该是有耐心理解下面三个概念的: keycode/keysym/modifier 这三个概念是键盘相关的、层次从低到高的三个名词。 + +===== keycode– ===== +一般的键盘上有102或者105键,每一个键被按下时会产生一个特有类型、主板能够分辨的电信号,传输给主板,主板给不同的电信号定下不同的编号,这就是所谓的keycode。 这些电信号是在生产键盘时就定死了的,比如左边的Ctrl键产生的keycode是37。CapsLock键产生的keycode是66。 要查找某个按键的keycode,可以在term中用__`xev`__程序来查看。xev使用很简单,它运行时,你按下一个键,term中就会显示这个键的许多信息,其中就有keycode。 这些keycode是硬件决定的,你我无法改变。总之记住,一个按键产生的keycode是不可能在软件中改变的。 + +===== keysym– ===== +操作系统按照统一的规范,给不同的keycode映射为不同的含义,这个映射后的含义的术语就叫做keysym。比如你在emacs中打字时按下一个s键。屏幕上出现一个`s`,而不是出现一个`b`,是因为:系统接收到s的keycode–我用xev查了下,keycode(s) = 39, 按照默认的标准,39对应于字母`s`,于是就这个`s`显示在屏幕上。 (当然,更严谨地、更准确地说,应该是把`s`这个字母作为输入传递给Emacs,emacs再把这个字母插入到当前的文件中的。) 这里,keycode是39,其对应的符号,术语叫keysym,即`key symbol`,就是字母`s`。 同理你按下键盘上的’b'(keycode(b) = 56),它的(默认的)keysym就是字母`b`。 系统给一个keycode分配的keysym不只一个。对于一个字母键,至少两个。第一个是单独按下这个键时对应的一,第二个是shift和这个键同时按下时的keysym。 键盘上,还有另外一类按键,它们单独按下时,一般没有任何意义,只有与其他的按照一直按下时是,才会产生一些特殊的效果,比如Ctrl、Shift、win键;它们实现的效果,称为modifier。 + +===== Modifier–修饰符 ===== +“修饰符”的修饰二字很好解释,你按下s,是打一个字母s,你按下Ctrl+s,大部分软件里,会保存当前文件;你按下Shift+s,是打另一个字母S。总之是 “改变一个键的本来含义“。因为`modify`本来就是修改的意思。 在term里输入命令`xmodmap`,会出现以下内容 +┌─[geekard @ kb310]─[16:27]─[~]─[326] +└─[$] xmodmap +xmodmap: up to 4 keys per modifier (keycodes in parentheses): +shift Shift_L (0x32) Shift_R (0x3e) +lock Caps_Lock (0x42) +control Control_L (0x40) Control_R (0x69) +mod1 Alt_L (0x25) Alt_R (0x6c) Alt_L (0xcc) Meta_L (0xcd) +mod2 Num_Lock (0x4d) +mod3 +mod4 Super_L (0x85) Super_R (0x86) Super_L (0xce) Hyper_L (0xcf) +mod5 ISO_Level3_Shift (0x5c) Mode_switch (0xcb) + +左边那一列,就是系统中所有的`modifier`。 系统会把一些默认的keysym解释为modifier,比如,默认情况下,你按下Shift + s, 屏幕上出现大写的S整个过程其实是: +* 系统收到Shift键和s键的keycode +* 系统处理 keycode–>keysym 的映射: shift的keycode被映射到`SHIFT_L`这个keysym;s的keycode被映射到`s`这个keysym +* 系统发现,SHIFT_L这个keysym被定义为shfit这个modifier。 +* `s`被shift这个modifier给修饰了,修饰的结果是变成了大写的S。 + +基本概念讲完了,那么,`xmodmap`是如何帮我们实现`改键`的呢? 可以看到,从按下一个键到最后,有两个层次的映射过程: +第一层: keycode–>keysym +第二层: keysym –> modifier +因此,我们可以通过两种方法来实现改键。 + +===== 目标1:把键盘上的s和a键交换位置 ===== +先查询s和a对应的keycode,方法还是使用`xev'程序。例如我的输出如下: + +KeyPress event serial 39 synthetic NO window 0x3200001 + root 0xb7 subw 0x0 time 14363110 (97129) root:(99152) + state 0x10 keycode 39 (keysym 0x73 s) same_screen YES + XLookupString gives 1 bytes: (73) "s" + XmbLookupString gives 1 bytes: (73) "s" + XFilterEvent returns: False +...... +KeyPress event serial 39 synthetic NO window 0x3200001 + root 0xb7 subw 0x0 time 14364150 (97129) root:(99152) + state 0x10 keycode 38 (keysym 0x61 a) same_screen YES + XLookupString gives 1 bytes: (61) "a" + XmbLookupString gives 1 bytes: (61) "a" + XFilterEvent returns: False + +===== 交换s/a的位置: ===== +# xmodmap -e "keycode 39 = a" +# xmodmap -e "keycode 38 = s" + +这样,就交换了 s/a 这两个键的位置了! 注意,在你执行了第一条语句之后,s立刻被重新映射到a了,那么你第二条语句中的`s`怎么打出来呢? +两个方法: i) 从别处粘贴一个过来 ii)见最后的`xmodmap执行命令的三种方式` + +注意:这个方法只能交换一般的keysym,那些定义为Modifier的键,就不能简单地用这个方式交换。 +因为: 当一个keysym被定义为modifier,那么,__本质上是在 keycode–>modifier之间建立起了一个映射__。因此,即使你改变了它的keycode–>keysym关系,也不起作用! 也就是说:当你要把一个键定义一个modifier时,你只能把它的keycode对应的keysym定义为modifier,从而达到目的。但这之后,即使keycode映射到别的keysym了,这个keycode仍然是一个modifier。 因此,如果要交换CapsLock和Ctrl这两个键,只需要做两件事: +* 把`Caps_Lock`这个keysym定义为`control`这个modifer +* 把`Control_L`这个keysym定义为`Caps_Lock`这个modifier (Control_L是左Ctrl键的默认keysym) + +===== 目标2: 交换 Caps_Lock和 左边的Ctrl ===== +先把CapsLock这个keysym映射到control这个modifier: +# xmodmap -e "remove lock = Caps_Lock" +# xmodmap -e "add control = Caps_Lock" + +__因为一个keysym不能同时映射到两个modifier__,因此,我们需要先用remove把Caps_Lock这个keysym与lock这个modifier的映射关系删除(当前的modifier与keysymb的关系可以用xmodmap -pkm命令查看。)。然后,再把Caps_Lock这个keysym映射到Control这个modifier。 remove和add的的语法是: +复制代码 +remove/add modifier_name = keysym_name + +此时,你可以试一下,看看是否已经产生效果了? +同样,再把左边的Ctrl键映射到CapsLock: +# xmodmap -e "remove control = Control_L" +# xmodmap -e "add Caps_Lock = Control_L" + +===== 目标3:交换左侧的Ctrl和Alt,同时将右侧的Alt映射到Esc(这样可以支持命令行编辑) ===== +1. 先用xmodmap -pm查看当前的modifier与哪些keycode绑定(间接通过keysyms) +$ xmodmap -pm +xmodmap: up to 4 keys per modifier, (keycodes in parentheses): + +shift Shift_L (0x32), Shift_R (0x3e) +lock Caps_Lock (0x42) +control Control_L (0x40), Control_R (0x69) +mod1 Alt_L (0x25), Escape (0x6c), Alt_L (0xcc), Meta_L (0xcd) +mod2 Num_Lock (0x4d) +mod3 +mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) +mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb) + +2. 然后编辑~/.xmodmap文件: +!swithc alt and ctl +remove Mod1 = Alt_L +remove Control = Control_L +keycode 37= Alt_L +keycode 64 = Control_L +!Right Alt maps to Esc +keycode 108 = Escape +add Control = Control_L +add Mod1 = Alt_L + +xmodmap执行命令的三种方式: +1) xmodmap -e "do somthing" 是让xmodmap执行后面的一条句子。但这样一次只能执行一条。 +2) 你也可以先输入 `xmodmap -`,然后回车,然后输入任意多句子,每输入一条就用回车分隔,最后用Ctrl+D结束输入。 +3) 把remove xxx = yyy 这些句子都写到一个文件里。一般是~/.Xmodmap。然后用 `xmodmap ~/.Xmodmap`执行。 这样的好处是,在启动时的某个脚本里加一行命令,就不用每次重启都手动地改键了。