¿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?


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.


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


-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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.