Provided by: manpages-zh_1.6.4.0-1_all bug

NAME

       keymaps - 對鍵盤對映檔案的描述

描述 (DESCRIPTION)

       loadkeys(1) 能夠 透過 調入 指定的 檔案 修改 鍵盤翻譯表, 鍵盤翻譯表 通常 用於 核心的 鍵盤驅
       動程式; 另外 dumpkeys(1) 可以 根據 鍵盤翻譯表 產生 這些檔案.

       這些檔案 的 結構 大體上 和 xmodmap(1) 的 輸入檔案  類似.  檔案  由  字符集(charset),  鍵定
       義(key), 和 串定義 組成, 可以 包含 註釋.

       註釋行 以 !# 字元 開始, 到 行尾 結束, 忽略 其中 任何 字元.  注意, 註釋行 不需要 從 第
       一列 開始, 而 xmodmap(1) 有 這個 要求.

       鍵盤對映(keymap)檔案 是 面向行 定義 的; 一個 完整的定義 必須 在 一個 邏輯行 上 闡明.  不過
       邏輯行 可以 分割 在 多個 物理行 上, 只需 在 各個 物理行尾 新增 一個 反斜槓 (\) 即可.

包含檔案 (INCLUDE FILES)

       一個 鍵盤對映表 可以 包含 其他 鍵盤對映表, 就象這樣:

              include "pathname"

字符集定義 (CHARSET DEFINITIONS)

       字符集 定義 的 格式 是:

              charset "iso-8859-x"

       它  指出  如何 解釋 後面的 keysym.  例如, 在 iso-8859-1 中, 符號 mu (或 micro) 的 程式碼是
       0265, 而 iso-8859-7 中的 mu 是 0354.

鍵值的完整定義 (COMPLETE KEYCODE DEFINITIONS)

       鍵值(keycode) 的 完整定義 形式 如下:

              keycode keynumber = keysym keysym keysym...

       keynumber 是 按鍵的 內部 標識值, 大致 相當於 它的 掃描碼(scan code).  keynumber 可以 用 十
       進位制數,  八進位制數, 或 十六進位制數 表示.  八進位制數 以 零 開始, 十六進位制數 以 0x 開
       始.

       keysym 表示 鍵盤 動作(action), 單個 按鍵 可以 編聯(bind) 多至 256 個 動作.  動作  指  輸出
       Latin1  字元  或  字元序列,  切換  控制檯  或  鍵盤對映,  以及  重啟動  機器  等. (可以 用
       dumpkeys(1) 獲得 完整的 列表, 如  dumpkeys -l .)

       在 keysym 前面 加上 字首 '+' (加號) 表明 這個 keysym 是 字元, 因而 能夠 受到 CapLock 的 影
       響,  就象  Shift 的 作用 一樣 (CapLock 反轉 Shift 的 狀態).  預設情況下, 配合 CapLock 能夠
       產生 ASCII 字母 'a'-'z' 和 'A'-'Z'.  如果 Shift+CapsLock 無法 產生 小寫字母, 試在 對映檔案
       中 加入

              keycode 30 = +a  A

       當 一個 按鍵 按下時, 發生 什麼 事件 取決於 當時 哪個 修飾鍵(modifier) 起作用. 鍵盤驅動程式
       支援 8 個 修飾鍵, 它們是 (任意順序) Shift, AltGr, Control, Alt, ShiftL, ShiftR,  CtrlL  和
       CtrlR.  下面 的 表格 列出 各個 修飾鍵 對應的 權值, 權值 是 2 的 指數:

              修飾鍵                  權值

              Shift
                                        1
              AltGr
                                        2
              Control
                                        4
              Alt
                                        8
              ShiftL
                                       16
              ShiftR
                                       32
              CtrlL
                                       64
              CtrlR                   128

       按鍵  的  有效動作 透過 加權值 獲得, 加權值 是 有效修飾鍵 的 權值和.  預設情況下 沒有 使用
       修飾鍵, 對應的 動作程式碼 是 0, 也就是說, 當一個鍵 按下 或 彈起 時, 相應 動作 位於  鍵定義
       行  的 第一列. 又如, 如果 Shift 和 Alt 鍵 處於 有效狀態, 產生的 動作程式碼 是 9 (對應 第十
       列).

       透過 編聯 適當的 動作, 我們 可以 改變 有效的 修飾鍵.  例如, 如果  對  某個鍵  編聯了  名稱
       Shift, 當 這個鍵 按下 時, shift 修飾鍵 就 生效, 當 這個鍵 彈起 時, shift 修飾鍵 狀態 就 解
       除.  如果 對 某個鍵 編聯了 名稱 AltGr_Lock, 當 按下 這個鍵 時, AltGr 修飾鍵 就 生效,  再次
       按下  這個鍵  就 解除 AltGr 修飾鍵 狀態.  (預設情況下, Shift, AltGr, Control 和 Alt 編聯到
       同名 按鍵 上; AltGr 指 右側 Alt 鍵.)

       注意, 編聯 修飾鍵 時 應該 非常 小心, 否則 鍵盤對映 可能 無法 使用.  例如, 如果  某個鍵  的
       第一列  定義為  Control,  其他列  定義為  VoidSymbol, 你 就 有麻煩 了. 因為 按下 這個鍵 使
       Control 修飾鍵 生效, 隨後 的 動作 應該 來自 第五列 (見上表). 因此 當 這個鍵 彈起 時,  第五
       列 的 動作 被 採用, 但 這裡 是 VoidSymbol, 什麼 都 不發生. 這意味著 儘管 你 已經 鬆開了 這
       個鍵, 可是 Control 修飾鍵 仍然 有效. 反覆 敲擊 這個鍵 也 無濟於事. 要 避免 這樣  的  事情,
       你 應該 把 所有的 列 定義為 相同的 修飾符, 為此 後面 將要 介紹 一個 常用的 縮寫.

       keysym  可以  採用 十進位制數, 八進位制數, 十六進位制數 或者 符號表示法.  數字表示 的 形式
       和 keynumber 一樣, 而 符號表示 類似於 xmodmap(1) 中 用的. 需要注意 數字符號 的 區別.  數字
       符號  '0', ..., '9' 在 xmodmap(1) 中 被換成 對應的 單詞 'zero', 'one', ... 'nine', 防止 和
       數字表示法 混淆.

       在 keysym 中 使用 數字表示法 非常 不利於 移植, 這是 因為 不同 的 核心版本 之間, 各鍵 的 動
       作程式碼  可能 不一樣, 因此 不鼓勵 使用 數字表示法, 除非 核心 支援的 某項 鍵盤動作 在 當前
       的 loadkeys(1) 中 沒有 對應的 符號名稱.

       下面 介紹 一些 縮寫 標記, 它們 能夠 增加 可讀性, 減少 輸入量, 同時 也能 減少 輸入錯誤.

       首先, 你 可以 給出 一個 對映說明行, 如

              keymaps 0-2,4-5,8,12

       表明 鍵定義行 並不 使用 全部的 256 列, 而 只用 指定的 列.   (本例為:  對映  plain,  Shift,
       AltGr,  Control, Control+Shift, Alt 和 Control+Alt, 只有 7 列, 而非 256 列.)  如果 沒有 定
       義 這樣的 對映說明行, 將 產生 預設 定義 keymaps 0-M, 此處的 M+1 是 所有 鍵定義行  中  發現
       的 最大項數.

       其次, 鍵定義行尾 的 VoidSymbol 項 可以 不出現. VoidSymbol 表示 一個 鍵盤動作, 它 不產生 輸
       出, 也不出現 其他 效果. 例如, 把 30 號鍵 定義為 輸出 'a', 按下 Shift 時 輸出 'A', 按下  其
       他 修飾鍵 如 AltGr 之類 則 什麼都 不做, 你 可以 寫成

              keycode  30 = a     A

       來 代替 冗長的

              keycode  30 = a     A    VoidSymbol     VoidSymbol \
                        VoidSymbol VoidSymbol VoidSymbol ...

       為了方便, 你 可以 用 更簡潔 的 定義. 如果 鍵定義行 中, 等號 後面 只有 一個 動作碼, 它 就可
       以 擁有 額外的 含義. 如果 這個 動作碼 (數字 或 符號 形式) 不是 一個 ASCII 字元, 這  意味著
       該  動作碼 在 所有 定義了的 行 上 有效.  反過來, 如果 動作碼 是 ASCII 字元, 位於 'a', ...,
       'z' 或 'A', ..., 'Z' 之間, 對於 不同的 修飾鍵組合, 有 如下 定義 (下表 列出 兩種  可能情況:
       動作碼 是 一個 小寫字母, 表示為 'x', 或者是 一個 大寫字母, 表示為 '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)

       上述  鍵定義行  的 格式 總要 定義 全部 M+1 個 可能的 組合, 無論 該行 是不是 真的 有 那麼多
       動作. 然而 還有 另一種 語法定義, 用來說明 只產生 一個 動作 的 特定鍵組合. 如果 你的 鍵盤對
       映  只有  少數 不符合 需要, 如 AltGr+function 鍵, 這個 功能 就特別 有用. 你 可以 製作 一個
       小型檔案, 在 調入 鍵盤對映檔案 後 重定義 所需的 對映. 這種 形式 的 語法 是:

       { plain | <modifier sequence> } keycode keynumber = keysym

       例如:
              plain keycode 14 = BackSpace
              control alt keycode 83 = Boot
              alt keycode 105 = Decr_Console
              alt keycode 106 = Incr_Console
       這裡的 "plain" 指 該鍵的 基本動作 (就是說, 沒有 使用 修飾鍵 時), 不影響 該鍵 的 其他  修飾
       鍵 組合.

字串定義 (STRING DEFINITIONS)

       除了  註釋  和  鍵定義行,  鍵盤對映表 還包含 字串定義. 它們 用於 定義 各個 功能鍵(function
       key) 的 動作碼 輸出 些 什麼. 字串定義 的 語法 是:

              string keysym = "text"

       text 包括 文字字元, 八進位制字元, 或者 三個 escape 序列: \n, \\, 和 \", 分別 代表 換行, 反
       斜槓, 和 引號. 八進位制字元 的 格式 是 反斜槓 後面 列出的 八進位制數字, 最多 三個 八進位制
       數字.

組合定義 (COMPOSE DEFINITIONS)

       組合(鍵)定義 的 語法 是:

              compose 'char' 'char' to 'char'
       描述 兩個 位元組 怎樣 組合成 第三者 (當 使用 少見的 聲調符 或 組合鍵 時).  它 常用來 在 標
       準鍵盤 上 輸入 聲調符 之類.

縮寫 (ABBREVIATIONS)

       從 kbd-0.96 開始 可以 使用 多種 縮寫.

       strings as usual
              定義 常用 字串 (而不是 它們 編聯的 鍵).

       compose as usual for "iso-8859-1"
              定義 常用 compose 組合.

       如果 想要 知道 哪些 keysym 能夠 用在 鍵盤對映表 中, 請 使用

              dumpkeys --long-info

       遺憾的是, 目前 仍然 沒有 對 各個 符號 的 說明. 您 可以 從 符號名稱 上 推測, 或者 參考 核心
       源程式.

示例 (EXAMPLES)

       (小心 使用 keymaps 行, 如 `dumpkeys` 顯示的 第一行, 或者 "keymaps 0-15" 之類)

       下面的 輸入項 交換 左側 Control 鍵 和 Caps Lock 鍵 的 功能:

              keycode  58 = Control
              keycode  29 = Caps_Lock

       正常的時候, 鍵值 58 是 Caps Lock, 鍵值 29 是 Control 鍵.

       下面的 輸入項 使 Shift 鍵 和 CapsLock 鍵 更好用 一點, 象 老式 打字機.  就是說,  按下  Caps
       Lock 鍵 (一次 多次 皆可) 使 鍵盤 進入 CapsLock 狀態, 按 任一 Shift 鍵 解除 該 狀態:

              keycode  42 = Uncaps_Shift
              keycode  54 = Uncaps_Shift
              keycode  58 = Caps_On

       下面的 輸入項 設定 增強形鍵盤 的 編輯鍵, 使 它 更象是 VT200 系列 終端:

              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

       下面是 一個 示範, 將 字串 "du\ndf\n" 和 AltGr-D 編聯. 我們 使用了 "空閒的" 動作碼 F100, 通
       常 它 沒有被 使用:

              altgr keycode 32 = F100
              string F100 = "du\ndf\n"

另見 (SEE ALSO)

       loadkeys(1), dumpkeys(1), showkey(1), xmodmap(1)

[中文版維護人]

       徐明 <xuming@users.sourceforge.net>

[中文版最新更新]

       2003/05/13

《中國Linux論壇man手冊頁翻譯計劃》

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

                                          24 April 1998                                KEYMAPS(5)