.\" @(#)keymaps.5 1.10 940130 aeb .TH KEYMAPS 5 "24 April 1998" .SH NAME keymaps \- 對鍵盤映射文件的描述 .SH "描述 (DESCRIPTION)" \" .IX "keymaps" "" "\fLkeymaps\fR \(em keyboard table descriptions for loadkeys and dumpkeys" "" \" .IX "loadkeys" "keyboard table descriptions" "\fLloadkeys\fR" "keyboard table descriptions" \" .IX "dumpkeys" "keyboard table descriptions" "\fLdumpkeys\fR" "keyboard table descriptions" \" .IX keyboard "table descriptions for loadkeys and dumpkeys" keyboard "table descriptions for \fLloadkeys\fR and \fLdumpkeys\fR" \" .IX "translation tables" .LP .BR loadkeys (1) 能夠 通過 調入 指定的 文件 修改 鍵盤翻譯表, 鍵盤翻譯表 通常 用於 內核的 鍵盤驅動程序; 另外 .BR dumpkeys (1) 可以 根據 鍵盤翻譯表 產生 這些文件. .LP 這些文件 的 結構 大體上 和 .BR xmodmap (1) 的 輸入文件 類似. 文件 由 字符集(charset), 鍵定義(key), 和 串定義 組成, 可以 包含 註釋. .LP 註釋行 以 .B ! 或 .B # 字符 開始, 到 行尾 結束, 忽略 其中 任何 字符. 注意, 註釋行 不需要 從 第一列 開始, 而 .BR xmodmap (1) 有 這個 要求. .LP 鍵盤映射(keymap)文件 是 面向行 定義 的; 一個 完整的定義 必須 在 一個 邏輯行 上 闡明. 不過 邏輯行 可以 分割 在 多個 物理行 上, 只需 在 各個 物理行尾 添加 一個 反斜槓 (\\) 即可. .SH "包含文件 (INCLUDE FILES)" 一個 鍵盤映射表 可以 包含 其他 鍵盤映射表, 就象這樣: .LP .RS include "pathname" .RE .SH "字符集定義 (CHARSET DEFINITIONS)" 字符集 定義 的 格式 是: .LP .RS charset "iso-8859-x" .RE .LP 它 指出 如何 解釋 後面的 keysym. 例如, 在 iso-8859-1 中, 符號 mu (或 micro) 的 代碼是 0265, 而 iso-8859-7 中的 mu 是 0354. .SH "鍵值的完整定義 (COMPLETE KEYCODE DEFINITIONS)" 鍵值(keycode) 的 完整定義 形式 如下: .LP .RS .nf .BI keycode " keynumber " = " keysym keysym keysym" \fR... .fi .RE .LP .I keynumber 是 按鍵的 內部 標識值, 大致 相當於 它的 掃描碼(scan code). .I keynumber 可以 用 十進制數, 八進制數, 或 十六進制數 表示. 八進制數 以 零 開始, 十六進制數 以 .B 0x 開始. .LP .I keysym 表示 鍵盤 動作(action), 單個 按鍵 可以 編聯(bind) 多至 256 個 動作. 動作 指 輸出 Latin1 字符 或 字符序列, 切換 控制檯 或 鍵盤映射, 以及 重啓動 機器 等. (可以 用 dumpkeys(1) 獲得 完整的 列表, 如 .BI " dumpkeys -l" \&.) .LP 在 .I keysym 前面 加上 前綴 '+' (加號) 表明 這個 keysym 是 字符, 因而 能夠 受到 CapLock 的 影響, 就象 Shift 的 作用 一樣 (CapLock 反轉 Shift 的 狀態). 缺省情況下, 配合 CapLock 能夠 產生 ASCII 字母 'a'-'z' 和 'A'-'Z'. 如果 Shift+CapsLock 無法 產生 小寫字母, 試在 映射文件 中 加入 .LP .RS .nf .BI "keycode 30 = +a A" .fi .RE .LP 當 一個 按鍵 按下時, 發生 什麼 事件 取決於 當時 哪個 修飾鍵(modifier) 起作用. 鍵盤驅動程序 支持 8 個 修飾鍵, 它們是 (任意順序) Shift, AltGr, Control, Alt, ShiftL, ShiftR, CtrlL 和 CtrlR. 下面 的 表格 列出 各個 修飾鍵 對應的 權值, 權值 是 2 的 指數: .LP .RS .TP 24 .I 修飾鍵 .I 權值 .TP 24 Shift 1 .PD 0 .TP 24 AltGr 2 .TP 24 Control 4 .TP 24 Alt 8 .TP 24 ShiftL 16 .TP 24 ShiftR 32 .TP 24 CtrlL 64 .TP 24 CtrlR 128 .PD .RE .LP 按鍵 的 有效動作 通過 加權值 獲得, 加權值 是 有效修飾鍵 的 權值和. 缺省情況下 沒有 使用 修飾鍵, 對應的 動作代碼 是 0, 也就是說, 當一個鍵 按下 或 彈起 時, 相應 動作 位於 鍵定義行 的 第一列. 又如, 如果 Shift 和 Alt 鍵 處於 有效狀態, 產生的 動作代碼 是 9 (對應 第十列). .\" (譯註: 作者 對 修飾鍵 狀態 一直 使用 有效(in effect) 一詞, 譯者 的 理解 是, .\" 修飾鍵 不能 簡單的 以 按下和彈起 確定 其 狀態, 鍵盤驅動程序 能夠 重定義 .\" 修飾鍵 行爲, 例如, 按 一下 表示 生效, 再按 一下 表示 解除) .LP 通過 編聯 適當的 動作, 我們 可以 改變 有效的 修飾鍵. 例如, 如果 對 某個鍵 編聯了 名稱 Shift, 當 這個鍵 按下 時, shift 修飾鍵 就 生效, 當 這個鍵 彈起 時, shift 修飾鍵 狀態 就 解除. 如果 對 某個鍵 編聯了 名稱 AltGr_Lock, 當 按下 這個鍵 時, AltGr 修飾鍵 就 生效, 再次 按下 這個鍵 就 解除 AltGr 修飾鍵 狀態. (缺省情況下, Shift, AltGr, Control 和 Alt 編聯到 同名 按鍵 上; AltGr 指 右側 Alt 鍵.) .LP 注意, 編聯 修飾鍵 時 應該 非常 小心, 否則 鍵盤映射 可能 無法 使用. 例如, 如果 某個鍵 的 第一列 定義爲 Control, 其他列 定義爲 VoidSymbol, 你 就 有麻煩 了. 因爲 按下 這個鍵 使 Control 修飾鍵 生效, 隨後 的 動作 應該 來自 第五列 (見上表). 因此 當 這個鍵 彈起 時, 第五列 的 動作 被 採用, 但 這裏 是 VoidSymbol, 什麼 都 不發生. 這意味着 儘管 你 已經 鬆開了 這個鍵, 可是 Control 修飾鍵 仍然 有效. 反覆 敲擊 這個鍵 也 無濟於事. 要 避免 這樣 的 事情, 你 應該 把 所有的 列 定義爲 相同的 修飾符, 爲此 後面 將要 介紹 一個 常用的 縮寫. .LP .I keysym 可以 採用 十進制數, 八進制數, 十六進制數 或者 符號表示法. 數字表示 的 形式 和 .IR keynumber 一樣, 而 符號表示 類似於 .BR xmodmap (1) 中 用的. 需要注意 數字符號 的 區別. 數字符號 '0', ..., '9' 在 .BR xmodmap (1) 中 被換成 對應的 單詞 'zero', 'one', ... 'nine', 防止 和 數字表示法 混淆. .LP 在 .I keysym 中 使用 數字表示法 非常 不利於 移植, 這是 因爲 不同 的 內核版本 之間, 各鍵 的 動作代碼 可能 不一樣, 因此 不鼓勵 使用 數字表示法, 除非 內核 支持的 某項 鍵盤動作 在 當前的 .BR loadkeys (1) 中 沒有 對應的 符號名稱. .LP 下面 介紹 一些 縮寫 標記, 它們 能夠 增加 可讀性, 減少 輸入量, 同時 也能 減少 輸入錯誤. .LP 首先, 你 可以 給出 一個 映射說明行, 如 .LP .RS keymaps 0-2,4-5,8,12 .RE .LP 表明 鍵定義行 並不 使用 全部的 256 列, 而 只用 指定的 列. (本例爲: 映射 plain, Shift, AltGr, Control, Control+Shift, Alt 和 Control+Alt, 只有 7 列, 而非 256 列.) 如果 沒有 定義 這樣的 映射說明行, 將 產生 缺省 定義 keymaps 0-M, 此處的 M+1 是 所有 鍵定義行 中 發現 的 最大項數. .LP 其次, 鍵定義行尾 的 VoidSymbol 項 可以 不出現. VoidSymbol 表示 一個 鍵盤動作, 它 不產生 輸出, 也不出現 其他 效果. 例如, 把 30 號鍵 定義爲 輸出 'a', 按下 Shift 時 輸出 'A', 按下 其他 修飾鍵 如 AltGr 之類 則 什麼都 不做, 你 可以 寫成 .LP .RS .nf keycode 30 = a A .fi .RE .LP 來 代替 冗長的 .LP .RS .nf keycode 30 = a A VoidSymbol VoidSymbol \\ VoidSymbol VoidSymbol VoidSymbol ... .fi .RE .LP 爲了方便, 你 可以 用 更簡潔 的 定義. 如果 鍵定義行 中, 等號 後面 只有 一個 動作碼, 它 就可以 擁有 額外的 含義. 如果 這個 動作碼 (數字 或 符號 形式) 不是 一個 ASCII 字符, 這 意味着 該 動作碼 在 所有 定義了的 行 上 有效. 反過來, 如果 動作碼 是 ASCII 字符, 位於 'a', ..., 'z' 或 'A', ..., 'Z' 之間, 對於 不同的 修飾鍵組合, 有 如下 定義 (下表 列出 兩種 可能情況: 動作碼 是 一個 小寫字母, 表示爲 'x', 或者是 一個 大寫字母, 表示爲 'Y'.) .LP .RS 4 .TP 24 .I modifier .I symbol .TP 24 none x Y .PD 0 .TP 24 Shift X y .TP 24 AltGr x Y .TP 24 Shift+AltGr X y .TP 24 Control Control_x Control_y .TP 24 Shift+Control Control_x Control_y .TP 24 AltGr+Control Control_x Control_y .TP 24 Shift+AltGr+Control Control_x Control_y .TP 24 Alt Meta_x Meta_Y .TP 24 Shift+Alt Meta_X Meta_y .TP 24 AltGr+Alt Meta_x Meta_Y .TP 24 Shift+AltGr+Alt Meta_X Meta_y .TP 24 Control+Alt Meta_Control_x Meta_Control_y .TP 24 Shift+Control+Alt Meta_Control_x Meta_Control_y .TP 24 AltGr+Control+Alt Meta_Control_x Meta_Control_y .TP 24 Shift+AltGr+Control+Alt Meta_Control_x Meta_Control_y .PD .RE .LP .SH "單一修飾鍵定義 (SINGLE MODIFIER DEFINITIONS)" 上述 鍵定義行 的 格式 總要 定義 全部 M+1 個 可能的 組合, 無論 該行 是不是 真的 有 那麼多 動作. 然而 還有 另一種 語法定義, 用來說明 只產生 一個 動作 的 特定鍵組合. 如果 你的 鍵盤映射 只有 少數 不符合 需要, 如 AltGr+function 鍵, 這個 功能 就特別 有用. 你 可以 製作 一個 小型文件, 在 調入 鍵盤映射文件 後 重定義 所需的 映射. 這種 形式 的 語法 是: .LP .BR "" { " plain " "| } " keycode .I keynumber .B = .I keysym .LP 例如: .RS .nf plain keycode 14 = BackSpace control alt keycode 83 = Boot alt keycode 105 = Decr_Console alt keycode 106 = Incr_Console .fi .RE 這裏的 "plain" 指 該鍵的 基本動作 (就是說, 沒有 使用 修飾鍵 時), 不影響 該鍵 的 其他 修飾鍵 組合. .SH "字符串定義 (STRING DEFINITIONS)" 除了 註釋 和 鍵定義行, 鍵盤映射表 還包含 字符串定義. 它們 用於 定義 各個 功能鍵(function key) 的 動作碼 輸出 些 什麼. 字符串定義 的 語法 是: .LP .RS .B string .I keysym .B = .BI "text" .RE .LP .I text 包括 文本字符, 八進制字符, 或者 三個 escape 序列: \fB\\n\fP, \fB\\\\\fP, 和 \fB\\"\fP, 分別 代表 換行, 反斜槓, 和 引號. 八進制字符 的 格式 是 反斜槓 後面 列出的 八進制數字, 最多 三個 八進制數字. .SH "組合定義 (COMPOSE DEFINITIONS)" 組合(鍵)定義 的 語法 是: .LP .RS .BI "compose '" char "' '" char "' to '" char "'" .RE 描述 兩個 字節 怎樣 組合成 第三者 (當 使用 少見的 聲調符 或 組合鍵 時). 它 常用來 在 標準鍵盤 上 輸入 聲調符 之類. .SH "縮寫 (ABBREVIATIONS) 從 kbd-0.96 開始 可以 使用 多種 縮寫. .TP .B "strings as usual" 定義 常用 字符串 (而不是 它們 編聯的 鍵). .TP \fBcompose as usual for "iso-8859-1"\fP 定義 常用 compose 組合. .LP 如果 想要 知道 哪些 .I keysym 能夠 用在 鍵盤映射表 中, 請 使用 .LP .RS .nf .B dumpkeys --long-info .fi .RE .LP 遺憾的是, 目前 仍然 沒有 對 各個 符號 的 說明. 您 可以 從 符號名稱 上 推測, 或者 參考 內核源程序. .LP .SH "示例 (EXAMPLES)" (小心 使用 keymaps 行, 如 `dumpkeys` 顯示的 第一行, 或者 "keymaps 0-15" 之類) .LP 下面的 輸入項 交換 左側 Control 鍵 和 Caps Lock 鍵 的 功能: .LP .RS .nf keycode 58 = Control keycode 29 = Caps_Lock .fi .RE .LP 正常的時候, 鍵值 58 是 Caps Lock, 鍵值 29 是 Control 鍵. .LP 下面的 輸入項 使 Shift 鍵 和 CapsLock 鍵 更好用 一點, 象 老式 打字機. 就是說, 按下 Caps Lock 鍵 (一次 多次 皆可) 使 鍵盤 進入 CapsLock 狀態, 按 任一 Shift 鍵 解除 該 狀態: .LP .RS .nf keycode 42 = Uncaps_Shift keycode 54 = Uncaps_Shift keycode 58 = Caps_On .fi .RE .LP 下面的 輸入項 設置 增強形鍵盤 的 編輯鍵, 使 它 更象是 VT200 系列 終端: .LP .RS .nf 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 .fi .RE .LP 下面是 一個 示範, 將 字符串 "du\\ndf\\n" 和 AltGr-D 編聯. 我們 使用了 "空閒的" 動作碼 F100, 通常 它 沒有被 使用: .LP .RS .nf altgr keycode 32 = F100 string F100 = "du\\ndf\\n" .LP .SH "另見 (SEE ALSO)" .BR loadkeys (1), .BR dumpkeys (1), .BR showkey (1), .BR xmodmap (1) .SH "[中文版維護人]" .B 徐明 .SH "[中文版最新更新]" .BR 2003/05/13 .SH "《中國Linux論壇man手冊頁翻譯計劃》" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR