Làm thế nào để liên kết một lệnh với tiền tố Cu với một khóa khác?


7

C-c C-x C-vorg-toggle-inline-imageschức năng gọi . Với khóa tiền tố, nó chuyển một số đối số cho hàm này (không biết cái nào).

Làm thế nào tôi có thể ánh xạ hàm với các đối số vào F12nút để nó thực hiện giống như C-u C-c C-x C-v?

Câu trả lời:


11

C-ulà đối số tiền tố phổ quát. Nó thường được sử dụng cho các lệnh chỉ có hai trạng thái (có và không có đối số), mặc dù nó cũng có thể được hiểu là tiền tố số (4).

Trong trường hợp này, nhìn vào mã nguồn cho org-toggle-inline-imagestôi thấy rằng nó chỉ kiểm tra xem đối số có được đặt hay không để giá trị cụ thể bạn vượt qua không thành vấn đề.

Bạn có thể định nghĩa một hàm gọi (org-toggle-inline-images t). Để làm điều đó với lambda:

(define-key org-mode-map  (kbd "<f12>")
    (lambda () (interactive) (org-toggle-inline-images t)))

Điều này liên kết F12 ở chế độ org, để lại ràng buộc toàn cầu cho các chế độ khác.

Để biết thêm về các ràng buộc chính, đây là một bài đọc tốt: Làm chủ các ràng buộc chính trong Emacs . Và tất nhiên có rất nhiều chi tiết trong hướng dẫn sử dụng Emacs Lisp .


3

Câu trả lời nói chung là nhìn vào mã xác định lệnh. Đặc biệt (nhưng không nhất thiết chỉ) interactivethông số kỹ thuật.

Những gì bạn tìm kiếm là những gì hàm làm với một tiền tố arg. Và sau đó bạn xác định một lệnh làm điều tương tự.

Thông thường, tiền tố arg được sử dụng để xác định một số giá trị sau đó được chuyển trong mã sang hàm khác. Sau đó, bạn chỉ cần gọi hàm kia, truyền cho nó đối số sẽ được cung cấp thông qua tiền tố arg trong lệnh gốc. IOW, bạn thường có thể sử dụng cùng một mã, chỉ cần chuyển một giá trị thay cho giá trị sẽ được xác định từ tiền tố arg.


3
Bạn cũng có thể mô phỏng một C-utiền tố với điều này : (let ((current-prefix-arg '(4))) (call-interactively #'whatever-command)). Điều đó có thể hữu ích nếu bạn không thể tìm ra lệnh bạn đang gọi đang làm gì với đối số của nó.
glucas

@glucas: Điều đó chỉ phù hợp nếu tiền tố cụ thể mà arg sử dụng không quan trọng đối với lệnh đã cho hoặc nếu hành vi bạn muốn từ lệnh là đơn giản C-u. Nó không phải là thích hợp nếu lệnh có hành vi khác nhau tùy thuộc vào việc đơn giản C-uđược sử dụng hay không (ví dụ, phân biệt C--hoặc C-3hoặc C-u C-utừ C-uLời khuyên của tôi là phải luôn luôn kiểm tra như thế nào lệnh thực sự đối xử với một tiền tố arg..
Drew

Đúng, điểm tốt. Chỉ cung cấp nó như là một tùy chọn cho trường hợp cụ thể của "gọi này như thể tôi nhấn Cu trước."
glucas

@glucas: Còn gì nữa, trong trường hợp bạn trích dẫn, bạn thường có thể (nhưng không phải luôn luôn) làm mà không cần sử dụng tương tác hoàn toàn, và chỉ cần chuyển '(4)sang lệnh (mà không cần bận tâm call-interactively). (Nhưng điều đó sẽ không hoạt động, ví dụ: nếu lệnh không có tham số tương ứng với tiền tố arg, mà thay vào đó kiểm tra current-prefix-argtrong thân lệnh.)
vẽ

@glucas: Vâng, thật tốt khi bạn đề cập đến nó.
vẽ
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.