Abrir arquivo de dired na mesma janela - usando o mouse


7

Como você configura o emacs para abrir um arquivo na janela atual - usando o mouse - quando ele é selecionado em um diredbuffer?

Ou seja, quando abro um diretório e, em seguida, seleciono um arquivo com o mouse, desejo que o arquivo seja exibido na mesma janela que exibiu o diredbuffer.


Você quer dizer "Como abrir um arquivo na mesma janela de onde você clicou em um diredbuffer"?
precisa saber é o seguinte

Sim, é isso que estou perguntando.
Jim

Se eu usar o cursor e a tecla Enter, ela abrirá na mesma janela. O uso do mouse para selecioná-lo abre em outra janela (divide a janela se apenas uma janela estiver aberta).
21715 Jim

11
Confira isto: emacswiki.org/emacs/DiredReuseDirectoryBuffer Eu não tive a chance de experimentá-lo.
precisa

Respostas:


4

Se você realmente quer isso, basta definir seu próprio comando para fazê-lo. Você pode copiar o código para o que mouse-2já está vinculado a dired-mouse-find-file-other-window, e apenas alterar a ocorrência de find-file-other-windowpara find-file. Em seguida, vincule seu comando a mouse-2, no lugar de dired-mouse-find-file-other-window.

As únicas alterações que fiz aqui são (1) o nome do comando e (2) em find-file-other-windowvez 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)

E se você quiser também substituir (matar) o buffer Dired, use em find-alternate-filevez de find-file.


Devo apenas poder adicionar este código ao meu arquivo .emacs? Isso não deu certo.
21715 Jim

@ Jim Apenas para cobrir todos os motivos, você reiniciou o emacs depois disso? Se sim, e se ainda não funcionar, o que você vê quando faz C-h co clique do meio do mouse em um buffer * Dired *? mouse-2é clique do meio.
precisa

Não sei - não sei o que está no seu arquivo init. ;-) Experimente emacs -Q(sem arquivo init). Se isso funcionar (funciona para mim), divida o seu arquivo de inicialização recursivamente para descobrir o que está interferindo. Se não funcionar emacs -Q, então pode ser a sua versão do Emacs - o que M-x emacs-versiondiz a você?
Tirou

@kaushalmodi - eu reiniciei o emacs. Ch c <mouse-2> = "... nesse local executa o comando dired-mouse-find-file-ot.her-window." Então, suponho que isso significa que a ligação de chave não está sendo reconhecida.
21415 Jim

@ Jim eu acho que sim .. certifique-se de colocar (require 'dired)no início do código que Drew postou. Salve o arquivo e fazer M-x eval-buffere depois ver o que C-h c <mouse-2>faz ..
Kaushal Modi

2

A resposta de Drew não está certa, não funciona para diretórios, apenas para arquivos. Eu acho que o outro caminho é melhor (dir aberto na mesma janela e arquivos abertos na outra janela).

Se você também deseja abrir arquivos na mesma janela, altere find-file-other-window para find-file.

O código de trabalho:

(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. A questão era abrir um arquivo (não um diretório). 2. Eu disse que se você também deseja abrir um diretório na mesma janela, basta usar em find-alternate-filevez de find-file. 3. O OP não deseja abrir o arquivo (ou dir) em uma janela diferente. Você pode preferir esse comportamento, mas ele não responde ao OP.
Tirou

0

Essa linha de código deve ser suficiente. Mais detalhes podem ser vistos aqui .

(put 'dired-find-alternate-file 'disabled nil)
(add-hook 'dired-mode-hook (lambda () (local-set-key (kbd "<mouse-2>") #'dired-find-alternate-file)))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.