Liên kết Cx Cj cho dired-jump ngừng hoạt động


7

Tôi đã từng có một phím tắt cho hành động sau:

"Mở thư mục chứa tệp này trong Dired + và đặt điểm (con trỏ) trên tệp"

Tôi tin là như C-x C-jvậy và tôi không nhớ là đã thiết lập thủ công. Dường như đã biến mất. Những thay đổi gần đây của Dired + có lẽ đã thay đổi điều này?

Dù bằng cách nào, có bất kỳ chức năng tương tác Dired hoặc Dired + tích hợp nào mà tôi có thể sử dụng cho việc này không? Nếu không, làm thế nào tôi có thể đi về việc xây dựng một?

Tôi có thể chạy M-x dired-jump. Vấn đề dường như là keybinding đã biến mất. Khi tôi làm C-h k C-x C-j RET, tôi thấy C-x C-j RET (translated from C-x C-j <return>) is undefined.


2
Bạn có sử dụng jabber?
Malabarba

@Malabarba Tôi thực sự đã cài đặt Jabber (nhưng tôi không trực tiếp tải nó trong Emacs). Nó vẫn có thể là vấn đề? Tôi sẽ kiểm tra.
Amelio Vazquez-Reina

1
jabber liên kết Cx Cj làm tiền tố. Nó có thể được tải mà không nhận ra bạn. Hãy thử gỡ cài đặt (chỉ cần di chuyển nó đến một thư mục khác, bạn có thể di chuyển nó trở lại sau).
Malabarba

1
FWIW: Thư viện được chuyển hướng + .el không thay đổi dired-jumphoặc bất kỳ khóa nào ràng buộc với nó. dired-jumpthậm chí không được đề cập trong Dired + .
vẽ

2
Trong trường hợp như thế này ("X ngừng hoạt động"): (1) Cố gắng repro từ emacs -Q. (2) Nếu bạn không thể repro từ emacs -Qđó sau đó chia đôi tệp init của bạn, để xem phần nào gây ra sự cố. Để làm điều đó, hãy bình luận 1/2, rồi 3/4, rồi 7/8 ... Bạn có thể sử dụng comment-regionđể làm điều đó (không có sự cố C-u). Sau khi thử tất cả những điều đó, nếu bạn cần thêm trợ giúp (và có thể bạn sẽ không), hãy hỏi tại đây.
vẽ

Câu trả lời:


8

Vấn đề

jabber.eldired-xkhông may xung đột trên keybind này. Jabber sử dụng C-x C-jlàm tiền tố cho tất cả các khóa của nó, trong khi dired đặt nó cho người bạn yêu thích dired-jump(đó có thể là lý do tại sao cái sau được tạo tùy chọn thông qua dired-bind-jumpbiến).

Đừng phức tạp hóa mọi thứ hơn nữa, nếu Jabber được cài đặt với package.el nó liên kết khóa này hai lần! Đầu tiên khi khởi động Emacs, sau đó khi tải jabber.el.

Giải pháp

Ràng buộc dired-jumpcả trước và sau khi Jabber đã được tải. Hãy chắc chắn rằng điều này xảy ra sau (package-initialize)trong tệp init của bạn (nếu bạn sử dụng nó).

(global-set-key (kbd "C-x C-j") #'dired-jump)
(eval-after-load 'jabber-keymap
  '(global-set-key (kbd "C-x C-j") #'dired-jump))

Hoặc, nếu bạn đang sử dụng Emacs 24.4, thì những điều sau đây được ưu tiên hơn một chút:

(global-set-key (kbd "C-x C-j") #'dired-jump)
(with-eval-after-load 'jabber-keymap
  (global-set-key (kbd "C-x C-j") #'dired-jump))

Để tiếp tục sử dụng sơ đồ phím jabber, bạn có thể liên kết nó với một chuỗi khóa khác, như trong

(global-set-key (kbd "C-c C-j") jabber-global-keymap)

Những gì #trước khi 'dired-jumpbiểu thị? Tôi cũng đã thấy nó được sử dụng khi thêm chức năng vào hook.
Kaushal Modi

5
@kaushalmodi Đó là một functiontrích dẫn. Nó gần giống như một trích dẫn thông thường, nhưng nó nói với trình biên dịch byte biểu tượng này là một hàm (mà nó có thể sử dụng để đưa ra các cảnh báo hữu ích). Nó không liên quan trong tệp init của bạn, nhưng nó có liên quan trong các gói nên tôi cố gắng thúc đẩy thực hành tốt.
Malabarba

4

Như những người khác đã lưu ý, bạn đang nghĩ về chức năng dired-jump, được cung cấp bởi Dired-x (không phải Dired +) và bị ràng buộc C-x C-jkhi thư viện Dired-x được tải. (Bạn có thể tắt liên kết này bằng cách đặt dired-bind-jumpthành niltrước khi Dired-x được tải.)

Cho rằng C-x C-jlàm một cái gì đó, thay vì phàn nàn không C-x C-jđược xác định, những gì đang xảy ra là một cái gì đó khác đã xác định một ràng buộc cho nó. Bất cứ ai xác định ràng buộc cuối cùng chiến thắng.

Vì vậy, bạn cần theo dõi những gói khác mà bạn đang tải đang ghi đè C-x C-j. Gói đó được tải sau Dired-x, vì vậy nếu bạn đang tải dired-xtrong tệp init của mình, thì đó là thứ bạn đang tải thêm hoặc thứ gì đó được tự động tải vào một lúc nào đó.

C-x C-jkhông tự làm bất cứ điều gì, nhưng đợi một phím khác được nhấn, đó là một khóa tiền tố. Nhấn C-x C-j C-hđể xem danh sách các ràng buộc bắt đầu với tiền tố này. Điều này sẽ cung cấp cho bạn một ý tưởng tốt về gói thủ phạm. Giả thuyết của Malabarba rằng chế độ Jabber là hợp lý. Khi bạn đã xác định một chuỗi khóa bắt đầu bằng tiền tố C-x C-j, hãy nhấn C-h ktheo sau đó là chuỗi khóa đó. Điều này sẽ hiển thị văn bản trợ giúp cho lệnh đó và gói cung cấp lệnh. Có khả năng gói cung cấp lệnh là cùng gói xác định ràng buộc.

Không chắc là bạn sẽ cần phải đi xa đến thế, nhưng chỉ trong trường hợp, nếu có một số ràng buộc chính nào đó bạn không thể theo dõi, hãy xem Làm thế nào tôi có thể tìm ra trong đó sơ đồ phím bị ràng buộc?

Nếu bạn muốn tải gói đó ghi đè C-x C-j, nhưng bạn không muốn nó chiếm lấy ràng buộc đó, hãy xem liệu nó có tùy chọn bỏ qua ràng buộc đó không. Nếu không, bạn có thể lấy lại ràng buộc: sắp xếp để chạy (global-set-key "\C-x\C-j" 'dired-jump)sau khi gói vi phạm được tải. Nó có thể là đủ để đặt nó vào cuối tập tin init của bạn. Nếu không, bạn có thể sử dụng

(eval-after-load " NAME-OF-THE-OFFENDING-PACKAGE " '(toàn cầu-set-key "\ Cx \ Cj"' dired-jump))

2

Bạn thấy gì khi bạn làm gì C-hkC-xC-jRET?

Bạn sẽ thấy rằng nó bị ràng buộc dired-jump. Nếu không thì bạn hoặc chưa thực hiện requirecủa dired-xhoặc bạn / một số gói overrode khác mà ràng buộc với cái gì khác.

Nếu bạn có thể làm M-x dired-jumpvà chỉ cần ràng buộc đó, thì bạn có thể làm

(global-set-key (kbd "C-x C-j") 'dired-jump)

Nhưng nếu dired-bind-jumptvà nếu bạn có (require 'dired-x), thì gói đó sẽ đặt ràng buộc đó cho bạn.


Cảm ơn - Tôi thấy C-x C-j RET (translated from C-x C-j <return>)là không xác định.
Amelio Vazquez-Reina

Bạn có thể làm được M-x dired-jumpkhông Nếu không, thì bạn đã không dired-xtải gói.
Kaushal Modi

Cảm ơn @kaushalmodi - Có, tôi có thể làm được M-x dired-jump. Quên đề cập đến điều đó trong OP
Amelio Vazquez-Reina

Cho rằng lệnh ở đó và vấn đề là các ràng buộc của tôi bị rối, có lẽ tôi nên hỏi điều này trong một câu hỏi khác "Làm thế nào tôi có thể gỡ lỗi một ràng buộc bàn phím bị mất?" hoặc tương tự?
Amelio Vazquez-Reina

1
Sự ràng buộc đó sẽ hoạt động như mong đợi nếu bạn khởi chạy emacs -Qvà thực hiện (require 'dired-x). Nếu điều đó hoạt động, sau đó dần dần dân số của bạn init.elcho đến khi ràng buộc đó biến mất một lần nữa; Bằng cách đó, bạn sẽ tìm ra thủ phạm. Một cách khác là thực hiện grep / ag / ack đệ quy C\-x\s+C\-jtrong thư mục .emacs.d của bạn.
Kaushal Modi

1

Tôi sử dụng điều này thường xuyên. Chỉ cần thử nghiệm với nó emacs -Q, đây là tất cả những gì bạn cần:

(require 'dired-x)

Các chức năng được cung cấp bởi dired-x, khác với dired+. Cái trước được vận chuyển với lõi Emacs, cái sau là thư viện mở rộng của bên thứ 3.


Cũng đảm bảo rằng dired-bind-jumpđược đặt thành giá trị mặc định của nó t.
Legoscia

Cảm ơn @legoscia tôi mới kiểm tra và dired-bind-jumpđược t. Tôi cũng đang tải (require 'dired-x). Lạ
Amelio Vazquez-Reina
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.