Mở tệp từ được chuyển hướng trong cùng một cửa sổ - sử dụng chuột


7

Làm cách nào để định cấu hình emacs để mở tệp trong cửa sổ hiện tại - sử dụng chuột - khi tệp được chọn từ diredbộ đệm?

Đó là, khi tôi mở một thư mục và sau đó chọn một tệp bằng chuột, tôi muốn tệp được hiển thị trong cùng một cửa sổ hiển thị diredbộ đệm.


Bạn có nghĩa là "Làm thế nào để mở một tệp trong cùng một cửa sổ từ nơi bạn nhấp vào nó trong diredbộ đệm"?
Kaushal Modi

Vâng, đó là những gì tôi đang yêu cầu.
Jim

Nếu tôi sử dụng con trỏ và nhập phím, nó sẽ mở trong cùng một cửa sổ. Sử dụng chuột để chọn nó sẽ mở nó trong một cửa sổ khác (tách cửa sổ nếu chỉ có một cửa sổ được mở).
Jim

1
Hãy xem điều này: emacswiki.org/emacs/DiredReuseDirectoryBuffer Tôi đã không có cơ hội để thử nó mặc dù.
Kaushal Modi

Câu trả lời:


4

Nếu bạn thực sự muốn điều đó, chỉ cần xác định lệnh của riêng bạn để làm điều đó. Bạn có thể sao chép mã cho những gì mouse-2đã được liên kết với, dired-mouse-find-file-other-windowvà chỉ cần thay đổi sự xuất hiện của find-file-other-windowđể find-file. Sau đó ràng buộc lệnh của bạn mouse-2, thay cho dired-mouse-find-file-other-window.

Những thay đổi duy nhất tôi đã thực hiện ở đây là (1) tên của lệnh và (2) find-file-other-windowthay vì find-file:

(defun dired-mouse-find-file (event)
  "In Dired, visit the file or directory name you click on."
  (interactive "e")
  (let (window pos file)
    (save-excursion
      (setq window (posn-window (event-end event))
            pos (posn-point (event-end event)))
      (if (not (windowp window))
          (error "No file chosen"))
      (set-buffer (window-buffer window))
      (goto-char pos)
      (setq file (dired-get-file-for-visit)))
    (if (file-directory-p file)
        (or (and (cdr dired-subdir-alist)
                 (dired-goto-subdir file))
            (progn
              (select-window window)
              (dired-other-window file)))
      (select-window window)
      (find-file (file-name-sans-versions file t)))))

(define-key dired-mode-map [mouse-2] 'dired-mouse-find-file)

Và nếu bạn cũng muốn thay thế (giết) bộ đệm Dired thì hãy sử dụng find-alternate-filethay thế find-file.


Tôi có thể thêm mã này vào tệp .emacs không? Điều đó đã không làm việc.
Jim

@Jim Chỉ để bao gồm tất cả các căn cứ, bạn đã khởi động lại emacs sau đó? Nếu có, và nếu nó vẫn không hoạt động, bạn sẽ thấy gì khi bạn làm C-h ctheo sau bằng cách nhấp chuột giữa trong bộ đệm * Dired *? mouse-2là nhấp chuột giữa.
Kaushal Modi

Dunno - dunno những gì trong tập tin init của bạn. ;-) Hãy thử từ emacs -Q(không có tệp init). Nếu nó hoạt động (nó hoạt động với tôi) thì đệ quy chia đôi tệp init của bạn để tìm hiểu những gì đang can thiệp. Nếu nó không hoạt động từ emacs -Qmột trong hai thì đó có thể là phiên bản Emacs của bạn - điều gì M-x emacs-versionnói với bạn?
vẽ

@kaushalmodi - Tôi đã khởi động lại emacs. Ch c <mouse-2> = "... tại điểm đó chạy lệnh dired-mouse-find-file-ot.her-window." Vì vậy, tôi cho rằng điều đó có nghĩa là ràng buộc chính không được công nhận.
Jim

@Jim Tôi đoán vậy .. hãy chắc chắn rằng bạn đã đặt (require 'dired)ngay phần đầu của mã mà Drew đã đăng. Lưu tập tin và làm M-x eval-buffervà sau đó xem những gì C-h c <mouse-2>không ..
Kaushal Modi

2

Câu trả lời của Drew là không đúng, nó không hoạt động cho các thư mục, chỉ hoạt động cho các tệp. Tôi nghĩ rằng cách khác là tốt hơn (mở dir trong cùng một cửa sổ và mở các tệp trong cửa sổ khác).

Nếu bạn cũng muốn mở tệp trong cùng một cửa sổ, hãy thay đổi find-file-other-window thành find-file.

Mã làm việc:

(require 'dired)
(defun dired-mouse-find-file (event)
  "In Dired, visit the file or directory name you click on."
  (interactive "e")
  (let (window pos file)
    (save-excursion
      (setq window (posn-window (event-end event))
            pos (posn-point (event-end event)))
      (if (not (windowp window))
          (error "No file chosen"))
      (set-buffer (window-buffer window))
      (goto-char pos)
      (setq file (dired-get-file-for-visit)))
    (if (file-directory-p file)
        (or (and (cdr dired-subdir-alist)
                 (dired-goto-subdir file))
            (progn
              (select-window window)
              (dired file)))
      (select-window window)
      (find-file-other-window (file-name-sans-versions file t)))))

(define-key dired-mode-map [mouse-2] 'dired-mouse-find-file)

1. Câu hỏi là về việc mở một tập tin (không phải là một thư mục). 2. Tôi đã nói rằng nếu bạn cũng muốn mở một thư mục trong cùng một cửa sổ thì chỉ cần sử dụng find-alternate-filethay vì find-file. 3. OP không muốn mở tệp (hoặc dir) trong một cửa sổ khác. Bạn có thể thích hành vi đó, nhưng nó không đáp ứng với OP.
Drew

0

Dòng mã này là đủ. Thông tin chi tiết có thể được nhìn thấy ở đây .

(put 'dired-find-alternate-file 'disabled nil)
(add-hook 'dired-mode-hook (lambda () (local-set-key (kbd "<mouse-2>") #'dired-find-alternate-file)))
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.