Emacsify OSX xuyên suốt: chuyển tiếp từ (⌥ + F) và từ lùi (+ B) thay vì 'ký tự đặc biệt'?


8

Có, OSX đã hỗ trợ + + để di chuyển con trỏ từ lùi và chuyển tiếp từ, nhưng việc tiếp cận các phím mũi tên thật khó chịu. Vì vậy, tại sao không có + B+ Flàm điều này? Ý tôi là, chưa một lần tôi (cố ý) viết dấu tích phân ∫ với + B(ngoài bây giờ).

Nói tóm lại, tôi muốn có hành vi giống như Emacs (không chỉ, nói, ^+ Fcho chuyển tiếp nhân vật) trong suốt OSX.


Câu hỏi liên quan: Dừng sử dụng Tùy chọn bàn phím Mac làm công cụ sửa đổi thành ký tự

Câu trả lời:


7

DefaultKeyBinding.dict

Tạo ~/Library/KeyBindings/và lưu danh sách tài sản như thế này như ~/Library/KeyBindings/DefaultKeyBinding.dict:

{
  "^ " = setMark:;
  "^/" = undo:;
  "^l" = selectParagraph:;
  "^u" = deleteToBeginningOfParagraph:;
  "^w" = deleteToMark:;
  "^x" = {
    "^x" = swapWithMark:;
    "^m" = selectToMark:;
  };
  "^V" = pageDownAndModifySelection:;
  "~@" = selectWord:;
  "~b" = moveWordBackward:;
  "~c" = (capitalizeWord:, moveForward:, moveForward:);
  "~d" = deleteWordForward:;
  "~f" = moveWordForward:;
  "~l" = (lowercaseWord:, moveForward:, moveForward:);
  "~r" = centerSelectionInVisibleArea:;
  "~u" = (uppercaseWord:, moveForward:, moveForward:);
  "~v" = pageUp:;
  "~w" = (deleteToMark:, setMark:, yank:, swapWithMark:);
  "~B" = moveWordForwardAndModifySelection:;
  "~F" = moveWordForwardAndModifySelection:;
  "~V" = pageUpAndModifySelection:;
}

DefaultKeyBinding.dictkhông hoạt động trong một số ứng dụng như Xcode hoặc Firefox. Các phương thức sử dụng vòng khử loại bỏ định dạng khỏi văn bản có định dạng. Các tổ hợp phím nhập trạng thái phím chết (như tùy chọn-u trong bố trí bàn phím ở Hoa Kỳ) không thể được chỉ định lại.

Xem thêm http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Opt%20Bindings.dict . transposeWords:không hoạt động trong hầu hết các ứng dụng. openDocument:saveDocument:không hoạt động trong các ứng dụng sử dụng tự động lưu và performClose:cũng không hoạt động ở mọi nơi.

Xem http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html hoặc http://osxnotes.net/keybindings.html để biết thêm thông tin.

KeyRemap4MacBook

Một tùy chọn là bật cài đặt trong nhóm chế độ Emacs được xác định trước :

Một tùy chọn khác là lưu một tệp như thế này như ~/Library/Application Support/KeyRemap4MacBook/private.xml:

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>EMACSMODEIGNORE</appname>
    <equal>com.gnu.Emacs</equal>
    <equal>com.apple.Terminal</equal>
    <equal>com.googlecode.iterm2</equal>
    <equal>com.vmware.fusion</equal>
    <prefix>com.vmware.proxyApp.</prefix>
  </appdef>
  <item>
    <name>emacs</name>
    <identifier>private.emacs</identifier>
    <not>EMACSMODEIGNORE</not>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_UP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_DOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::D, VK_OPTION | ModifierFlag::NONE, KeyCode::FORWARD_DELETE, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | ModifierFlag::NONE, KeyCode::PAGEUP</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEUP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEDOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::U, VK_CONTROL | ModifierFlag::NONE, KeyCode::DELETE, VK_COMMAND</autogen>
  </item>
</root>

Sau đó mở ứng dụng KeyRemap4MacBook, nhấn nút ReloadXML và bật cài đặt.

Thay đổi mã khóa nếu bạn sử dụng bố trí bàn phím như Dvorak hoặc Colemak.

Xem https://pqrs.org/macosx/keyremap4macbook/xml.html.en hoặc http://osxnotes.net/keyremap4macbook.html để biết thêm thông tin.


Kinh ngạc. Thay đổi hành vi tương đối thấp và rất dễ dàng. Một bước nhảy gần hơn đến một thiên đường hệ điều hành. Hy vọng rằng thậm chí còn tốt hơn, giải pháp làm việc 100%, nếu không đây là câu trả lời.
Blaz

Như bạn nói, nó không hoạt động trong tất cả các ứng dụng. Xcode, đối với một, sẽ không nhúc nhích với điều này .dict(nhưng điều đó có thể được "giải quyết" bằng cách bấm phím tùy chỉnh, giả sử, ⌘ + B và ⌘ + F). Tuy nhiên, rất mạnh mẽ để có hành vi giống như Emacs (gần như) trong toàn bộ HĐH.
Blaz

KeyRemap4MacBook có nhóm chế độ emacs thay đổi, ví dụ ⌥F thành ⌥ →, nhưng không phải khi Terminal hoặc Emacs ở phía trước. Bạn có thể tùy chỉnh nó bằng cách tạo ra một private.xml dựa trên nó. Tôi nghĩ rằng giải pháp thực sự là chỉ cần lấy một bàn phím với các phím mũi tên và phím bổ trợ ở các vị trí tốt hơn.
Lri

1
@courteous Chế độ emacs trong KeyRemap4MacBook thực hiện điều đó. Không thể có trong tệp keylayout hoặc với DefaultKeyBinding.dict.
Lri

1
@courteous Tôi cũng đã thêm vào câu trả lời. Tôi có "~w" = selectWord:;trong DefaultKeyBinding.dict .
Lri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.