.\" @(#)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