Chuỗi khóa dài nhất được biết đến trong Emacs là gì?


14

Qt hỗ trợ các phím bấm kiểu Emacs , tuy nhiên chỉ có tối đa bốn phím. Để làm rõ lý do tại sao nên tăng giới hạn này, sẽ hữu ích khi hiển thị các ví dụ về các phím bấm kiểu Emacs với nhiều phím hơn thế. Có bất kỳ ví dụ nào được biết cho điều này hoặc thậm chí có thể là một cách để lập trình tìm các chuỗi khóa dài được xác định trong các keymap của Emacs không?

chỉnh sửa: Tôi nghĩ rằng đây là kiến ​​thức phổ biến, nhưng một chuỗi khóa là một tập hợp các khóa như được đọc bởi read-key-sequence. Hãy thử F1 kcho ứng cử viên của bạn và xem liệu nó mô tả lệnh của bạn hoặc một lệnh không liên quan trước nó.


Những thứ duy nhất tôi có thể nghĩ ra khỏi đỉnh đầu là các chuyển đổi từ các chuỗi thoát cuối, không áp dụng cho Qt. Đi trên 3 chìa khóa thật là bất thường.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn bạn đã cung cấp bối cảnh / lý do cho câu hỏi và liên kết. Ngay từ cái nhìn đầu tiên - trước khi đọc nó, tôi đã đoán không chính xác rằng câu hỏi có thể lạc đề và không hữu ích cho bất cứ ai.
vẽ

Vấn đề với câu hỏi này là không ai có thể trả lời chắc chắn. Mọi người chỉ có thể trả lời nó cho cấu hình emacs của mình. Nó không dựa trên ý kiến ​​nhưng nó là loại chủ quan.
Tobias

1
Điều này bao gồm các đối số tiền tố? Nếu tôi muốn đi một ngàn dòng xuống, tôi có thể nói C-u 1 0 0 0 C-nđó là sáu phím.
Stig Hemmer

1
@StigHemmer Không. Làm F1 k C-u 1 0 0 0 C-nvà xem đó C-ulà một chuỗi chính.
wasamasa

Câu trả lời:


23

Tôi đã thử nghiệm với kịch bản sau đây,

(key-description
 (car
  (sort
   (let (keyseqs)
     (mapatoms
      (lambda (sym)
        (when (commandp sym)
          (let ((where (where-is-internal sym nil nil t)))
            (when where
              (setq keyseqs (append keyseqs where)))))))
     keyseqs)
   (lambda (a b) (< (length b) (length a))))))

Và lâu nhất tôi nhận được với tôi .emacs.dC-x c C-x r imột số lệnh helm, và với emacs -qtôi nhận được C-x a i lmà chạy lệnh inverse-add-mode-abbrev.


12
Hà. Hãy cho tôi C-x M-c M-b u t t e r f l y:) Tôi đã quên rằng tôi đã làm điều đó ...
phils

where-is-internalbằng cách chi phối thời gian của CPU ở đây, nhưng bạn vẫn có thể dễ dàng cạo một vài chu kỳ bằng cách hủy bỏ một cách triệt để danh sách ngắn hơn để dài hơn thông qua (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil

1
@phils Tôi nhận ra tài liệu tham khảo, nhưng chính xác thì bạn đã đặt lệnh đó để làm gì?
Dan Neely

@DanNeely, tôi đoán bạn chưa từng thấy M-x butterfly? Tôi chỉ ràng buộc nó với lệnh đó để tăng tính xác thực :)
phils

6

Tôi không thể trả lời về những gì lâu nhất có thể ở ngoài đó, nhưng đây là một chút thông tin có thể giúp ích.

  1. Tôi có một số thư viện cung cấp một tập hợp các lệnh liên quan được ràng buộc với các khóa trong sơ đồ khóa mà tôi liên kết với khóa tiền tố.

    Bởi vì tôi không muốn đồng khóa các khóa người dùng, v.v., tôi thường liên kết một khóa tiền tố như vậy bên dưới, nói C-xhoặc, cho other-windowcác lệnh, dưới C-x 4(sơ đồ bàn phím ctl-x-4-map).

  2. Những cân nhắc tương tự áp dụng cho các nhóm lệnh trong sơ đồ phím như vậy: đôi khi chúng có sơ đồ riêng. Và cứ thế, đệ quy.

  3. Tôi hy vọng rằng ít nhất một số người dùng có thể muốn buộc lại bất kỳ keymap nào (ở bất kỳ cấp độ nào) thành các khóa tiền tố, ngắn hơn của riêng họ hoặc họ có thể muốn liên kết các lệnh cụ thể với các chuỗi khóa ngắn hơn. Nhưng rõ ràng tôi không muốn làm điều đó trong thư viện.

Đây là một ví dụ về một khóa khá dài như vậy: C-x 4 j t . % *(bảy tổ hợp phím), được ràng buộc để ra lệnh icicle-bookmark-file-this-dir-all-tags-regexp-other-windowtrong Bookmark + .

Giải phẫu học:

  • Trên C-x 4khóa tiền tố ( ctl-x-4-map).

  • Trên jkhóa tiền tố, dành cho tất cả các lệnh để chuyển đến dấu trang .

  • Trên tkhóa tiền tố, dành cho tất cả các lệnh để chuyển đến dấu trang được gắn thẻ theo một cách nào đó.

  • Trên .khóa tiền tố, dành cho tất cả các lệnh để chuyển đến dấu trang dành cho các tệp trong thư mục hiện tại được gắn thẻ theo một cách nào đó.

  • Trên %chính tiền tố, mà là cho tất cả các lệnh để nhảy vào bookmark đó là cho những thứ trong thư mục hiệnthẻphù hợp với một regexp bạn đang nhắc.

  • Trên *khóa, dành cho tất cả các lệnh để chuyển đến dấu trang dành cho những thứ trong thư mục hiện tạithẻ , TẤT CẢ các lệnh này khớp với biểu thức chính quy mà bạn được nhắc. (Ngược lại, C-x 4 j t . % +là dành cho dấu trang MỘT SỐ thẻ có khớp với biểu thức chính quy.)

Tất cả điều đó là thông thường trong Bookmark + (và một số trong đó tương ứng với các quy ước Dired, BTW): jdành cho các lệnh nhảy , tđược gắn thẻ , .dành cho thư mục hiện tại , %dành cho regrec*dành cho tất cả ( +dành cho một số ).


(Ồ, và sử dụng sexp của @ mkcms, tôi nhận được C-x 4 j t f % *, nó cũng dài bằng nhau. Là fviết tắt của tệp . Giống như C-x 4 j t . % *, nhưng dấu trang ứng cử viên để hoàn thành đều là dấu trang của tệp, không chỉ là dấu cho tệp trong thư mục hiện tại ( .).).


0

Magitthêm các chuỗi dài vì nó cho phép các tùy chọn được bật. Ví dụ: khi bạn yêu cầu nhật ký, bạn có thể chọn các tùy chọn ngắn hoặc dài, nếu bạn muốn các nhánh từ xa hay không, nếu bạn muốn hiển thị đồ họa của các nhánh, v.v. Yêu cầu cơ bản cho một bản ghi chỉ là một vài tổ hợp phím từ magit-statusbộ đệm nhưng bạn có thể thêm nhiều hơn nữa.

Điều tương tự cũng áp dụng cho cam kết, hai tổ hợp phím cho một cam kết cơ bản, nhưng rất nhiều bổ sung tùy chọn.

Vì vậy, câu hỏi được chỉ định, bạn chỉ đang xem xét một stock(bất kể điều đó có nghĩa là) emacs?


1
Xa nó, tôi chấp nhận các ví dụ đến từ bất cứ đâu. Những gì bạn mô tả là một tập hợp các chuỗi khóa mặc dù, với mỗi chuỗi khóa thực hiện một lệnh. Để có được ý tưởng về chuỗi khóa là gì, hãy thử sử dụng F1 kvà xem bạn có thể nhập bao nhiêu khóa cho đến khi mô tả lệnh.
wasamasa
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.