2012-06-27 18 views
5

Tôi thích sử dụng C-j đến eval-last-sexp nhưng chế độ paredit (mà tôi muốn) ghi đè số này lên paredit-newline. Nhìn vào tài liệu chế độ paredit Tôi không thấy bất cứ điều gì giống như một paredit-mode-hook được xác định nơi tôi có thể add-hook để gọi local-set-key hoặc một chức năng tương tự.Có móc móc parac Emacs có sẵn để tôi có thể xác định lại C-j không?

Bất cứ ai có đề xuất?

Cập nhật Sau khi thử hai câu trả lời dưới đây và không có nhiều thành công, tôi nghĩ vấn đề có thể liên quan đến thực tế là paredit đang được tải trong một vài ngữ cảnh khác nhau? Để wit, tôi đang mở cả hai Lisp thường, Clojure và Emacs Lisp tập tin, tất cả đều có thể sử dụng paredit. Đáng buồn thay, các hình thức khác nhau của eval-last-sexp có tên hơi khác nhau trong mỗi chế độ, vì vậy tôi không thể xác định khóa một lần cho mọi thứ. Thay vào đó, tôi cần phải ràng buộc khóa dựa trên chế độ chính mà tôi cũng đang ở. Hy vọng rằng thêm một điểm dữ liệu hữu ích.

Trả lời

10

Không cần phải sử dụng móc, giống như sau nên làm việc:

(eval-after-load "paredit" 
    #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp)) 

Ngoài ra, nếu vì một lý do nào đó không làm việc, hoặc bạn chỉ đơn giản là thích việc sử dụng lưỡi câu, bạn có thể thêm trên define-key gọi đến móc của các chế độ chính mà paredit được kích hoạt.

+0

Cảm ơn! Điều này làm việc như một say mê. – bitops

6

Mọi chế độ được xác định bởi một trong các macro define-*-mode sẽ tự động chạy tương ứng MODE-hook.

Tôi thấy chế độ paredit là chế độ phụ được xác định bằng (define-minor-mode paredit-mode ...) và do đó nó sẽ chạy paredit-mode-hook.

Bạn có thể gõ M-xfind-functionRETdefine-minor-modeRET và tìm kiếm run-hooks để xem nơi hành vi này được xác định.

Sửa (dựa trên Ngoài câu hỏi):

Họ đều sử dụng C-x C-e như một mặc định bắt buộc đối với các chức năng eval-cuối-sexp chế độ cụ thể, bởi bất kỳ cơ hội? Điều đó có vẻ giống như một điều nhất quán để họ làm, và nếu vậy thì bạn có thể sử dụng cách tiếp cận sau:

+1

+1. Không bao giờ nhận ra rằng Emacs tự động hóa hành vi này ngay cả khi biến móc không được xác định rõ ràng bởi chế độ được đề cập. –

2

Có một chế độ paredit-hook. Bạn không nhìn thấy nó cho đến khi bạn thêm một cái gì đó cho nó. Lạ lùng, nhưng đây là cách móc hoạt động.

Tuy nhiên, trong trường hợp của bạn, phương pháp tốt nhất có thể để xóa paredit bắt buộc đối với C-j:

(eval-after-load 'paredit 
    #'(define-key paredit-mode-map (kbd "C-j") nil)) 

Và sau đó thiết lập của riêng bạn qua địa phương-set-chủ chốt trong mỗi móc lớn-mode.

Các vấn đề liên quan