Öffnen Sie die Datei von dired im selben Fenster - mit der Maus

7

Wie konfiguriere ich Emacs so, dass eine Datei im aktuellen Fenster mit der Maus geöffnet wird, wenn sie aus einem diredPuffer ausgewählt wird?

Das heißt, wenn ich ein Verzeichnis öffne und dann mit der Maus eine Datei auswähle, soll die Datei in demselben Fenster angezeigt werden, in dem der diredPuffer angezeigt wird .

Jim
quelle
Meinen Sie "Wie öffne ich eine Datei im selben Fenster, von dem aus Sie in einem diredPuffer darauf geklickt haben "?
Kaushal Modi
Ja, das frage ich.
Jim
Wenn ich den Cursor und die Eingabetaste benutze, wird er im selben Fenster geöffnet. Wenn Sie es mit der Maus auswählen, wird es in einem anderen Fenster geöffnet (teilt das Fenster, wenn nur ein Fenster geöffnet ist).
Jim
1
Schauen Sie sich das an: emacswiki.org/emacs/DiredReuseDirectoryBuffer Ich hatte jedoch keine Gelegenheit, es zu versuchen.
Kaushal Modi

Antworten:

4

Wenn Sie das wirklich wollen, definieren Sie einfach Ihren eigenen Befehl, um es zu tun. Sie können den Code für das kopieren, an das mouse-2bereits gebunden ist dired-mouse-find-file-other-window, und einfach das Auftreten von find-file-other-windowto ändern find-file. Binden Sie dann Ihren Befehl an mouse-2anstelle von dired-mouse-find-file-other-window.

Die einzigen Änderungen, die ich hier vorgenommen habe, sind (1) der Name des Befehls und (2) find-file-other-windowanstelle von 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)

Und wenn Sie auch den Dired-Puffer ersetzen (töten) möchten, verwenden Sie find-alternate-filestattdessen anstelle von find-file.

Drew
quelle
Sollte ich diesen Code nur zu meiner .emacs-Datei hinzufügen können? Das hat nicht funktioniert.
Jim
@ Jim Hast du Emacs danach neu gestartet, um alle Gründe abzudecken? Wenn ja, und wenn es immer noch nicht funktioniert, was sehen Sie, wenn Sie einen C-h cmittleren Mausklick in einen * Dired * -Puffer ausführen? mouse-2ist mittlerer Klick.
Kaushal Modi
Keine Ahnung - keine Ahnung, was in Ihrer Init-Datei enthalten ist. ;-) Probieren Sie es aus emacs -Q(keine Init-Datei). Wenn das funktioniert (es funktioniert bei mir), halbieren Sie Ihre Init-Datei rekursiv, um herauszufinden, was stört. Wenn es auch nicht funktioniert emacs -Q, könnte es Ihre Emacs-Version sein - was sagt M-x emacs-versionIhnen das?
Drew
@kaushalmodi - Ich habe Emacs neu gestartet. Ch c <mouse-2> = "... an dieser Stelle wird der Befehl dired-mouse-find-file-ot.her-window ausgeführt." Ich gehe also davon aus, dass die Schlüsselbindung nicht erkannt wird.
Jim
@ Jim, ich habe es erraten. Stellen Sie sicher, dass Sie (require 'dired)ganz am Anfang des Codes stehen, den Drew gepostet hat. Speichern Sie die Datei und tun Sie M-x eval-bufferund sehen Sie dann, was C-h c <mouse-2>tut ..
Kaushal Modi
2

Drews Antwort ist nicht richtig, sie funktioniert nicht für Verzeichnisse, sondern nur für Dateien. Ich denke, der andere Weg ist besser (öffne dir im selben Fenster und öffne Dateien im anderen Fenster).

Wenn Sie Dateien auch im selben Fenster öffnen möchten, ändern Sie find-file-other-window in find-file.

Der Arbeitscode:

(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)
Liang Zou
quelle
1. Die Frage betraf das Öffnen einer Datei (kein Verzeichnis). 2. Ich sagte, wenn Sie auch ein Verzeichnis im selben Fenster öffnen möchten, verwenden Sie einfach find-alternate-fileanstelle von find-file. 3. Das OP möchte die Datei (oder das Verzeichnis) nicht in einem anderen Fenster öffnen. Möglicherweise bevorzugen Sie dieses Verhalten, es reagiert jedoch nicht auf das OP.
Drew
0

Diese Codezeile sollte ausreichen. Weitere Details finden Sie hier .

(put 'dired-find-alternate-file 'disabled nil)
(add-hook 'dired-mode-hook (lambda () (local-set-key (kbd "<mouse-2>") #'dired-find-alternate-file)))
Matthew Zeng
quelle