Abra el archivo desde dired en la misma ventana, usando el mouse

7

¿Cómo se configura emacs para abrir un archivo en la ventana actual, usando el mouse, cuando se selecciona desde un diredbúfer?

Es decir, cuando abro un directorio y luego selecciono un archivo con el mouse, quiero que el archivo se muestre en la misma ventana que muestra el diredbúfer.

Jim
fuente
¿Quiere decir "Cómo abrir un archivo en la misma ventana desde donde hizo clic en un diredbúfer"?
Kaushal Modi
Sí, eso es lo que estoy preguntando.
Jim
Si uso el cursor y la tecla Intro se abre en la misma ventana. Usar el mouse para seleccionarlo lo abre en otra ventana (divide la ventana si solo hay una ventana abierta).
Jim
1
Mira esto: emacswiki.org/emacs/DiredReuseDirectoryBuffer Sin embargo, no tuve la oportunidad de probarlo.
Kaushal Modi

Respuestas:

4

Si realmente quieres eso, solo define tu propio comando para hacerlo. Puede copiar el código de lo mouse-2que ya está vinculado a dired-mouse-find-file-other-window, y simplemente cambiar la aparición de find-file-other-windowa find-file. Luego, vincula tu comando a mouse-2, en lugar de dired-mouse-find-file-other-window.

Los únicos cambios que hice aquí son (1) el nombre del comando y (2) en find-file-other-windowlugar de 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)

Y si también desea reemplazar (matar) el búfer Dired, use en find-alternate-filelugar de find-file.

Dibujó
fuente
¿Debería poder agregar este código a mi archivo .emacs? Eso no funcionó.
Jim
@ Jim Solo para cubrir todos los motivos, ¿reiniciaste emacs después de eso? En caso afirmativo, y si aún no funciona, ¿qué ves cuando lo haces C-h cseguido de un clic con el botón central del mouse en un búfer * Dired *? mouse-2Es clic medio.
Kaushal Modi
No : no sé qué hay en su archivo de inicio. ;-) Pruébelo desde emacs -Q(sin archivo de inicio). Si eso funciona (funciona para mí), bisecte recursivamente su archivo de inicio para descubrir qué está interfiriendo. Si tampoco funciona desde emacs -Qentonces, podría ser su versión de Emacs, ¿qué le M-x emacs-versiondice?
Dibujó
@kaushalmodi - Reorganicé emacs. Ch c <mouse-2> = "... en ese punto ejecuta el comando dired-mouse-find-file-ot.her-window". Así que supongo que eso significa que no se reconoce la asociación de teclas.
Jim
@Jim Supuse que sí ... asegúrate de ponerlo (require 'dired)al principio del código que publicó Drew. Guarde el archivo y haga M-x eval-buffery luego vea qué C-h c <mouse-2>hace ...
Kaushal Modi
2

La respuesta de Drew no es correcta, no funciona para directorios, solo funciona para archivos. Creo que la otra forma es mejor (abrir directorio en la misma ventana y abrir archivos en la otra ventana).

Si también desea abrir archivos en la misma ventana, cambie find-file-other-window a find-file.

El código de trabajo:

(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
fuente
1. La pregunta era sobre abrir un archivo (no un directorio). 2. Dije que si también desea abrir un directorio en la misma ventana, simplemente use en find-alternate-filelugar de find-file. 3. El OP no quiere abrir el archivo (o directorio) en una ventana diferente. Es posible que prefiera ese comportamiento, pero no responde al OP.
Drew
0

Esta línea de código debería ser suficiente. Más detalles se pueden ver aquí .

(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
fuente