¿Cómo hago para presionar <RET> en helm-find-files para abrir el directorio?

25

Cuando ejecuto #'helm-find-filesy muevo el punto a un directorio, presionar los <ret>resultados al abrir ese directorio en modo directo. Hay que presionar C-jpara ingresar a ese directorio en Helm.

Me gustaría que <RET>actuara como lo C-jhace aquí, pero no necesariamente en todas partes. Lo comprobé y estoy C-jobligado a hacerlo #'helm-maybe-exit-minibuffer, mientras <RET>que sí #'helm-execute-persistent-action. Enlazar <RET>a #'helm-maybe-exit-minibufferfunciona para este caso, pero rompe otros casos: por ejemplo, el timón se autocompleta describe-function.

Entonces, cuando uso Helm para encontrar un archivo, ¿cómo puedo hacer presionar para <RET>abrir ese directorio en Helm?

zck
fuente
1
@TuDo estoy acostumbrado ido-mode, donde presionar <RET>selecciona la carpeta para encontrar archivos dentro de ella. Creo que este es el comportamiento más consistente cuando se trata de encontrar un archivo: lo que desea hacer cuando lo encuentra es abrirlo; lo que quiere hacer cuando haya encontrado una carpeta es ir dentro de ella para que pueda encontrar el archivo.
zck
2
Helm tiene el comportamiento opuesto: cuando está en un archivo, <RET>ambos se autocompletan y seleccionan. No tiene que presionar <tab>para terminar de completar el nombre del archivo. Pero estamos discutiendo sobre las preferencias: solo quiero que "enter" signifique "seleccionar la cosa en el punto". Y para mí, eso no significa "abierto directo". Si estaba en una concha, espero un comportamiento diferente.
zck
44
Estoy con zck aquí, la memoria muscular está allí después de años de usar ido (y la acción más esperada allí es la perforación) y este fue el principal punto de dolor mientras me acostumbraba al timón. Desde entonces, he cambiado a usar la tecla de flecha derecha para profundizar (
tardé
1
También estoy con zck. Navegar en ido es mucho más intuitivo que el comportamiento estándar del timón. Especialmente la tecla de retroceso. Elimina un carácter de la búsqueda o vuelve a la carpeta si no se inserta nada. ¿Hay alguna manera de volver a cablear las teclas para obtener esta funcionalidad?
Fu86
1
A partir de Helm 2.6.1, el comportamiento que desea es el predeterminado.
amitp

Respuestas:

19

También he utilizado ido-modeuna gran cantidad y entrenado a mi memoria muscular :) Creo que el idoestilo es más intuitivo que el helmenfoque. Busco cosas (escribiendo algunos caracteres) y me comprometo a buscar (presionar RET), al igual que la barra de búsqueda / dirección de mi navegador web. Si la selección es un directorio, entro en este directorio y comienzo a buscar nuevamente en este directorio. Esto me parece natural, así que escribí un pequeño consejo helm-execute-persistent-actionpara forzar esta mecánica.

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

También he optimizado la backspaceclave ligeramente. Si escribo algo y quiero hacer una corrección, presiono la tecla de retroceso. Esto eliminará un carácter. Si estoy al principio del directorio y presiono la tecla de retroceso nuevamente, navego un nivel hacia arriba. ¡Esto acelera la navegación dramáticamente!

(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 eliminar lo inútil .y ..al principio, puede agregarlo a la helm-boring-file-regexp-listvariable de configuración.

Fu86
fuente
1
Sin find-fileembargo, el enfoque de Helm es consistente con el stock . Y el .y ..no es realmente inútil cuando de repente quieres abrir Dired en el directorio actual o principal. Y me parece que C-les más rápido que presionar backspace.
Tu Do
Estoy dando vueltas para personalizar este comportamiento un poco más: ¿hay alguna razón por la que use consejos aquí y no se una directamente a fu / helm-find-files-navigation-forward (kbd "<return>")? Parece un poco más limpio simplemente llamar a helm-execute-persistent-action directamente dentro de la nueva función.
zck
Lamentablemente, esto no funciona para mí. En primer lugar, entiendo Symbol's value as variable is void: helm-find-files-map. Cuando pongo (helm-mode 1)después (require 'helm), no obtengo ese error, pero tampoco funciona. ¿Alguna idea de lo que me podría estar perdiendo? Aquí está mi init.el completo: pastebin.com/drFZsDxW La versión de Emacs es 24.4.1 (i686-pc-mingw32)
Geier
No funciono para mi. Incluso con el define-key, si pruebo C-h k RETel minibúfer find-file, todavía se muestra helm-confirm-and-exit-minibuffercomo enlazado.
Rafael Ibraim
@RafaelIbraim intente usar (kbd "RET")
netawater
0

No puedo comentar sobre la respuesta de Fu86 debido al representante, pero estoy retrocediendo (perdón si este no es el protocolo normal). Obtuve una función nula usando su respuesta debido a "helm-find-files-map". Me funcionó usar el mapa de teclas "helm-map" en su lugar. No hay conflictos hasta ahora y es el comportamiento que estaba buscando.

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

Iceback
fuente
-1

No pude obtener la respuesta de @ Fu86 para trabajar, pero lo siguiente funcionó para mí:

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

ver también: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

Editar

Mi solución funciona en helm-20141112.946 pero en helm-20160211.934 no funciona y la respuesta @ Fu86 es la solución

Jason Furtney
fuente