Comment faire en appuyant sur <RET> dans les fichiers helm-find pour ouvrir le répertoire?

25

Lorsque je cours #'helm-find-fileset que je déplace le point vers un répertoire, une pression sur les <ret>résultats ouvre ce répertoire en mode dirigé. Il faut appuyer sur C-jpour entrer dans ce répertoire dans Helm.

J'aimerais <RET>agir comme C-jici, mais pas nécessairement partout ailleurs. J'ai vérifié, et C-jest lié à #'helm-maybe-exit-minibuffer, tandis que <RET>est lié à #'helm-execute-persistent-action. La liaison <RET>à #'helm-maybe-exit-minibufferfonctionne pour ce cas, mais casse d'autres cas: par exemple, la saisie semi-automatique de la barre dans describe-function.

Ainsi, lorsque vous utilisez Helm pour rechercher un fichier, comment puis-je faire en appuyant sur <RET>ce répertoire dans Helm?

zck
la source
1
@TuDo Je suis habitué ido-mode, où appuyer sur <RET>sélectionne le dossier pour trouver des fichiers à l'intérieur. Je pense que c'est le comportement le plus cohérent lorsque vous essayez de trouver un fichier - ce que vous voulez faire lorsque vous avez trouvé le fichier c'est l'ouvrir; ce que vous voulez faire lorsque vous avez trouvé un dossier, c'est y aller pour que vous puissiez trouver le fichier.
zck
2
Helm a le comportement opposé - lorsqu'il est sur un fichier, à la <RET>fois la saisie semi - automatique et la sélection. Vous n'avez pas besoin de cliquer <tab>pour terminer le nom du fichier. Mais nous nous disputons sur les préférences - je veux juste que "entrer" signifie "sélectionner la chose au point". Et pour moi, cela ne signifie pas "ouvert dired". Si j'étais dans un shell, j'attends un comportement différent.
zck
4
Je suis avec zck ici, la mémoire musculaire est là après des années d'utilisation de ido (et l'action la plus attendue est de forer) et c'était le principal problème de la douleur en s'habituant à la barre. Depuis, je suis passé à l'utilisation de la touche fléchée droite pour explorer (il a fallu environ une semaine pour s'y habituer)
ustun
1
Je suis aussi avec zck. La navigation dans ido est beaucoup plus intuitive que le comportement standard de la barre. Surtout la touche de retour arrière. Il supprime un caractère de la recherche ou revient sur le dossier si rien n'est inséré. Existe-t-il un moyen de recâbler les touches pour obtenir cette fonctionnalité?
Fu86
1
Depuis Helm 2.6.1, le comportement souhaité est celui par défaut.
amitp

Réponses:

19

Je l' ai aussi utilisé ido-modeun grand nombre et formé ma mémoire musculaire :) Je pense que le idostyle est plus intuitif que l' helmapproche. Je recherche des trucs (en tapant certains caractères) et je m'engage à la trouver (hit RET), tout comme la barre de recherche / d'adresse de mon navigateur Web. Si la sélection est un répertoire, j'entre dans ce répertoire et recommence la recherche dans ce répertoire. Cela me semble naturel, j'ai donc écrit un petit conseil helm-execute-persistent-actionpour forcer ce mécanicien.

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

J'ai également backspacelégèrement optimisé la clé. Si je tape quelque chose et que je veux faire une correction, je retourne en arrière. Cela supprimera un caractère. Si je suis au début du répertoire et que je retourne en arrière, je monte d'un niveau. Cela accélère considérablement la navigation!

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

Pour supprimer l'inutile .et ..au tout début, vous pouvez l'ajouter à la helm-boring-file-regexp-listvariable de configuration.

Fu86
la source
1
L'approche Helm est cependant cohérente avec le stock find-file. Et le .et ..n'est pas vraiment inutile lorsque vous voulez soudainement ouvrir Dired dans le répertoire courant ou parent. Et je trouve que C-lc'est plus rapide que d'appuyer backspace.
Tu Do
Je reviens en arrière pour personnaliser un peu plus ce comportement - y a-t-il une raison pour laquelle vous utilisez des conseils ici et ne liez pas directement fu / helm-find-files-naviguer-en avant (kbd "<return>")? Il semble un peu plus propre d'appeler simplement helm-execute-persistent-action directement à l'intérieur de la nouvelle fonction.
zck
Malheureusement, cela ne fonctionne pas pour moi. Tout d'abord, je comprends Symbol's value as variable is void: helm-find-files-map. Quand je mets (helm-mode 1)après (require 'helm), je n'obtiens pas une telle erreur, mais cela ne fonctionne pas non plus. Une idée de ce que je pourrais manquer? Voici mon init.el complet: pastebin.com/drFZsDxW La version Emacs est 24.4.1 (i686-pc-mingw32)
Geier
Ça n'a pas marché pour moi. Même avec le define-key, si j'essaie C-h k RETle mini-tampon de recherche, il apparaît toujours helm-confirm-and-exit-minibuffercomme lié.
Rafael Ibraim
@RafaelIbraim try use (kbd "RET")
netawater
0

Je ne peux pas commenter la réponse de Fu86 en raison de la représentation, mais je la soutiens (désolé si ce n'est pas le protocole normal). J'ai obtenu une fonction void en utilisant sa réponse en raison de "helm-find-files-map". Cela a fonctionné pour moi d'utiliser la carte clé "helm-map" à la place. Aucun conflit jusqu'à présent et c'est le comportement que je recherchais.

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

Iceback
la source
-1

Je n'ai pas pu obtenir la réponse de @ Fu86 au travail, mais ce qui suit a fonctionné pour moi:

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

voir aussi: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

modifier

Ma solution fonctionne dans helm-20141112.946 mais dans helm-20160211.934 cela ne fonctionne pas et la réponse @ Fu86 est la solution

Jason Furtney
la source