Como faço para pressionar <RET> em helm-find-files abrir o diretório?

25

Quando executo #'helm-find-filese movo o ponto para um diretório, pressionar <ret>resulta na abertura desse diretório no modo direcionado. É preciso pressionar C-jpara entrar nesse diretório no Helm.

Eu gostaria de <RET>agir como C-jfaz aqui, mas não necessariamente em qualquer outro lugar. Eu verifiquei e estou C-jvinculado a #'helm-maybe-exit-minibuffer, enquanto <RET>vinculado a #'helm-execute-persistent-action. Vinculativo <RET>para #'helm-maybe-exit-minibufferobras para este caso, mas breaks outros casos: por exemplo, o autocomplete leme no describe-function.

Portanto, ao usar o Helm para encontrar um arquivo, como posso pressionar para <RET>abrir esse diretório no Helm?

zck
fonte
1
@TuDo Estou acostumado ido-mode, onde pressionar <RET>seleciona a pasta para encontrar arquivos dentro dela. Eu acho que esse é o comportamento mais consistente ao tentar encontrar um arquivo - o que você quer fazer quando encontra o arquivo é abri-lo; o que você quer fazer quando encontra uma pasta está dentro dela, para que você possa encontrar o arquivo.
Zck
2
Helm tem o comportamento oposto - quando em um arquivo, <RET>o preenchimento automático e o seleto. Você não precisa pressionar <tab>para concluir o nome do arquivo. Mas estamos discutindo sobre as preferências - só quero que "enter" signifique "selecione a coisa em questão". E para mim, isso não significa "abrir dired". Se eu estivesse em uma concha, espero um comportamento diferente.
Zck
4
Estou com o zck aqui, a memória muscular existe depois de anos de uso do ido (e a ação mais esperada é a perfuração) e esse foi o principal ponto de dor ao se acostumar com o leme. Tenho visto que passou a usar a seta para a direita para perfurar para baixo (levou cerca de uma semana para se acostumar a)
Ustun
1
Eu também estou com zck. Navegar no ido é muito mais intuitivo do que o comportamento padrão do leme. Especialmente a tecla backspace. Exclui um caracter da pesquisa ou volta à pasta se nada for inserido. Existe uma maneira de religar as teclas para obter essa funcionalidade?
Fu86 01/02
1
No Helm 2.6.1, o comportamento que você deseja é o padrão.
Amitp 6/09

Respostas:

19

Eu também usou ido-modeum monte e treinados minha memória muscular :) Eu acho que o idoestilo é mais intuitiva do que a helmabordagem. Eu procuro coisas (digitando alguns caracteres) e me comprometo com a busca (ocorrência RET), assim como a barra de pesquisa / endereço do meu navegador. Se a seleção for um diretório, insiro esse diretório e começo a pesquisar novamente nesse diretório. Isso parece natural para mim, então escrevi um pequeno conselho helm-execute-persistent-actionpara forçar esse mecânico.

(require 'helm)
(defun fu/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (and (equal "Find Files" (assoc-default 'name (helm-get-current-source)))
           (equal args nil)
           (stringp (helm-get-selection))
           (not (file-directory-p (helm-get-selection))))
      (helm-maybe-exit-minibuffer)
    (apply orig-fun args)))
(advice-add 'helm-execute-persistent-action :around #'fu/helm-find-files-navigate-forward)
(define-key helm-find-files-map (kbd "<return>") 'helm-execute-persistent-action)

Também otimizei a backspacechave levemente. Se eu digitar algo e quiser fazer uma correção, pressione backspace. Isso excluirá um caractere. Se eu estiver no início do diretório e pressionar backspace novamente, navegarei um nível acima. Isso acelera a navegação dramaticamente!

(defun fu/helm-find-files-navigate-back (orig-fun &rest args)
  (if (= (length helm-pattern) (length (helm-find-files-initial-input)))
      (helm-find-files-up-one-level 1)
    (apply orig-fun args)))
(advice-add 'helm-ff-delete-char-backward :around #'fu/helm-find-files-navigate-back)

Para remover o inútil .e ..no início, você pode adicioná-lo à helm-boring-file-regexp-listvariável de configuração.

Fu86
fonte
1
A abordagem Helm é consistente com o estoque find-file. E o .e ..não é realmente inútil quando você deseja abrir o Dired no diretório atual ou pai. E acho que C-lé mais rápido do que pressionar backspace.
Tu Do
Estou voltando para personalizar um pouco mais esse comportamento - existe algum motivo para você usar conselhos aqui e não vincular diretamente fu / helm-find-files-navigate-forward (kbd "<return>")? Parece um pouco mais limpo chamar a ação helm-execute-persistent-action diretamente dentro da nova função.
Zck
Infelizmente, isso não funciona para mim. Primeiro de tudo, eu entendo Symbol's value as variable is void: helm-find-files-map. Quando coloco (helm-mode 1)depois (require 'helm), não recebo esse erro, mas também não funciona. Alguma idéia do que posso estar perdendo? Aqui está o meu init.el completo: pastebin.com/drFZsDxW A versão do Emacs é 24.4.1 (i686-pc-mingw32)
Geier
Não funcionou para mim. Mesmo com o define-key, se eu tentar C-h k RETo minibuffer de arquivo de localização, ele ainda aparece helm-confirm-and-exit-minibuffercomo vinculado.
Rafael Ibraim
@RafaelIbraim try use (kbd "RET")
netawater 29/04
0

Eu não posso comentar sobre a resposta do Fu86 devido à repetição, mas estou recuando (desculpe se este não é um protocolo normal). Eu recebi uma função nula usando sua resposta devido a "helm-find-files-map". Funcionou para mim usar o mapa de teclas "helm-map". Até agora, não há conflitos e é o comportamento que eu estava procurando.

... (define-key helm-map (kbd "<return>") 'helm-execute-persistent-action) ...

Iceback
fonte
-1

Não consegui que a resposta do @ Fu86 funcionasse, mas o seguinte funcionou para mim:

(defun jkf/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (file-directory-p (helm-get-selection)) 
      (helm-execute-persistent-action)
    (apply orig-fun args)))
(advice-add 'helm-confirm-and-exit-minibuffer 
   :around #'jkf/helm-find-files-navigate-forward)

consulte também: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

Editar

Minha solução funciona no leme-20141112.946, mas no leme-20160211.934 não funciona e a resposta @ Fu86 é a solução

Jason Furtney
fonte