2011年12月27日 星期二

[設定] 在 Mac 上自訂 Windows 按鍵習慣 - Part III Home/End|Page Up/Down 鍵

本文承接自上一篇文章「在 Mac 上自訂 Windows 按鍵習慣 - Part I 基本設定」,補充全尺寸鍵盤的相關設定:


雖然全尺寸鍵盤有 USB 線,不是無線的,但由於 Apple 的無線鍵盤上下左右方向鍵只有一半高度,長期文書編輯或寫程式會造成右手酸痛,我還是比較推薦這個全尺寸鍵盤。

(Mac 採用 Emacs 按鍵,不管哪個程式,都可以用 Ctrl+p/n/b/f 來上下左右移動游標,不需移動右手去點方向鍵,我猜這是 Apple 採用比較小的方向鍵的原因吧。)

全尺寸鍵盤多提供了 home/end/page up/page down 鍵,這些按鍵在 VMWare/PD 或 BootCamp 跑 Windows 時,跟 PC 鍵盤的功能是相同的,但在 Mac OS 內的用法略有不同,接下來討論如何調整他們的功能:

調整 home/end 鍵

在 Windows 中的 Home/End 鍵分別是移到一行的開頭及結尾,Ctrl+Home/End 則是移到整頁的最前面或最後面,在 Mac 中 Home/End 的功能就跟 Windows 中按住 Control 鍵再按 Home/End 的效果是一樣的。

Mac 中採用 Command+左/右/上/下可達到類似 Windows Home/End/Ctrl+Home/Ctrl+End 的功能,但由於某些 Javascript RichText Editor 的限制,Command+左/右的功能會在某些網頁中失效 (特別是 Google 旗下的網站),這時可以用 Ctrl+A/E 來取代 (Emacs 按鍵)。

在 KeyRemap4MacBook 原作者幫忙下,XML 設定如下 (如何設定 XML 請參考 Part I):


注:若沒有像 Part I 中將 Control/Command 兩鍵對調,需要修改下面的 XML)

  <item>
    <name>Make Home/End work like Windows</name>
    <appendix>(Home/End move to beg/end of line, Ctl/Cmd+Home/End move to beg/end of page)</appendix>
    <identifier>private.remap.home_end_ctrl_a_e</identifier>
    <not>REMOTEDESKTOPCONNECTION,VIRTUALMACHINE,EMACS,IPHOTO</not>
   <autogen>--KeyToKey--
     FROMKEYCODE_HOME, VK_COMMAND,
     KeyCode::CURSOR_UP,   ModifierFlag::COMMAND_L</autogen>
   <autogen>--KeyToKey--
     FROMKEYCODE_END,  VK_COMMAND,
     KeyCode::CURSOR_DOWN, ModifierFlag::COMMAND_L</autogen>

   <autogen>--KeyToKey--
     FROMKEYCODE_HOME, VK_SHIFT,
     KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L | ModifierFlag::SHIFT_L</autogen>
   <autogen>--KeyToKey--
     FROMKEYCODE_END,  VK_SHIFT,
     KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L | ModifierFlag::SHIFT_L</autogen>

   <autogen>--KeyToKey--
     FROMKEYCODE_HOME,
     KeyCode::A, ModifierFlag::CONTROL_L</autogen>
   <autogen>--KeyToKey--
     FROMKEYCODE_END,
     KeyCode::E, ModifierFlag::CONTROL_L</autogen>

  </item>


我試了一些 Mac 程式像是 Araxis Merge, 文字編輯, 便條紙,Home/End、Ctrl+Home/End、Shift+Home/End 功能都跟 Windows 一樣,但有一些限制:
  • iPhoto 可以用 Home/End 移到相簿前後,所以在 XML 中把 iPhoto 列為例外。
    • 如果想自行新增其他例外,可至 KeyRemap4MacBook 網站上下載 Source Code,然後搜尋 checkbox.xml,有非常多範例。
  • Emacs 可以在 .emacs 中去設定 (請見 Part II) ,所以在 XML 中也把 Emacs 列為例外。
  • 在 Firefox/Safari/Chrome 中,要改用 Ctrl+Home/End 來移到整個頁面的最前面跟最後面。
  • 已知 bug: Firefox 在 Google 網站內 (如 gmail) Shift+Home/End 會失效。
    • 但在 Safari/Chrome 中沒問題
    • Firefox 在非 google 的網站往往也沒問題
    • 這可能是因為 Google 與 Firefox 間 Javascript 處理上有些衝突,目前我還無法解決。

調整 page up/page down 鍵

在 Mac 中的 page up/page down 跟 Windows 上的功能大致相同,但我喜歡仿照 Windows 下 Firefox 的按鍵習慣,在 Safari/Firefox/Chrome 中可用 Ctrl+PgUp/PgDown 左右切換不同的分頁標籤

  <item>
    <name>Firefox-like hotkey (Cmd+PgUp/PgDown) to switch tabs in Safari</name>
    <identifier>private.remap.firefox_style_tab_switching_in_safari</identifier>
    <only>SAFARI, FIREFOX, GOOGLE_CHROME</only>
    <autogen>--KeyToKey-- KeyCode::PAGEDOWN, VK_COMMAND, KeyCode::TAB, ModifierFlag::CONTROL_L</autogen>

    <autogen>--KeyToKey-- KeyCode::PAGEUP, VK_COMMAND, KeyCode::TAB, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L</autogen>    


    <autogen>--KeyToKey-- KeyCode::CURSOR_DOWN, VK_COMMAND | ModifierFlag::FN, KeyCode::TAB, ModifierFlag::CONTROL_L</autogen>
    <autogen>--KeyToKey-- KeyCode::CURSOR_UP, VK_COMMAND | ModifierFlag::FN, KeyCode::TAB, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L</autogen>
  </item>

另外因為筆電鍵盤沒有 PgUp/PgDown 鍵,在 BootCamp 中,Firefox 需要用 Ctrl+Fn+Up/Down 來模擬 Ctrl+PgUp/PgDown 的功能,這邊也把  Ctrl+Fn+Up/Down 設定為切換分頁。

如果鍵盤上沒有這幾個鍵呢?

對於 MacBook 鍵盤及無線鍵盤,可以用 Mac 預設的組合鍵取代 Home/End/Page Up/Page Down 這幾個鍵
  • Fn + 上 : page up
  • Fn + 下 : page down
  • Fn + 左 : 移到行首
  • Fn + 右 : 移到行尾
  • Command + 上 : 移到全頁面最前面 (類似 Windows 的 Ctrl+Home)
  • Command + 下 : 移到全頁面最後面 (類似 Windows 的 Ctrl+End)

2 則留言:

  1. 不好意思,想請問一下
    我mac air的鍵盤L鍵壞掉了
    目前是用螢幕小鍵盤替代使用
    但請問是否可以設定取代鍵?
    例如按 fn+隨便一個按鍵
    之類的可以是輸入L的意思?
    麻煩你專業解惑了,感謝 ^ ^

    回覆刪除
  2. 請在 private.xml 中加上下面這一個 item
    --KeyToKey-- KeyCode::SEMICOLON, ModifierFlag::FN, KeyCode::L
    就可以把 Fn 同時按 ; 這個按鍵 (L 的右邊) 當做 L 鍵用。

    組合鍵也可使用,比如 Fn+Shift+; 以及 Command+Fn+; 效果也跟 Shift+L, Command+L 效果相同。

    因為這個 blog 沒辦法在留言中輸入 XML 的 tag,如果你不知道怎樣修改 XML 來增加這一項,請把你的 email 給我。我再寄 XML 給你。

    回覆刪除