Come faccio ad aprire la directory premendo <RET> in helm-find-files?


25

Quando corro #'helm-find-filese mi sposto verso una directory, premendo i <ret>risultati si apre quella directory in modalità diretta. Bisogna premere C-jper accedere a quella directory in Helm.

Mi piacerebbe <RET>agire come C-jqui, ma non necessariamente altrove. Ho controllato ed C-jè vincolato a #'helm-maybe-exit-minibuffer, mentre <RET>è vincolato a #'helm-execute-persistent-action. Rilegatura <RET>di #'helm-maybe-exit-minibufferopere per questo caso, ma le pause gli altri casi: per esempio, il completamento automatico timone describe-function.

Quindi, quando uso Helm per trovare un file, come posso fare premendo per <RET>aprire quella directory in Helm?


1
@TuDo sono abituato ido-mode, dove premendo si <RET>seleziona la cartella per trovare i file al suo interno. Penso che questo sia il comportamento più coerente quando provi a trovare un file: cosa vuoi fare quando hai trovato il file è aprirlo; quello che vuoi fare quando hai trovato una cartella è andare al suo interno in modo da poter trovare il file.
zck,

2
Helm ha un comportamento opposto: quando si trova su un file, <RET>sia i completamenti automatici che quelli selezionati. Non è necessario premere <tab>per completare il completamento del nome file. Ma stiamo discutendo delle preferenze: voglio solo "invio" per dire "seleziona la cosa al punto". E per me questo non significa "open dired". Se fossi in una shell, mi aspetto un comportamento diverso.
zck,

4
Sono con zck qui, la memoria muscolare è lì dopo anni di utilizzo di ido (e l'azione più attesa è il drill down) e questo è stato il principale punto di dolore mentre ci si abitua al timone. Da allora sono passato all'utilizzo del tasto freccia destra per eseguire il drill down (ci sono voluti circa una settimana per abituarmi)
ustun

1
Sono anche con Zck. Navigare in ido è molto più intuitivo del comportamento standard del timone. Soprattutto il tasto backspace. Elimina un carattere dalla ricerca o torna alla cartella se non viene inserito nulla. C'è un modo per ricollegare i tasti per ottenere questa funzionalità?
Fu86,

1
A partire da Helm 2.6.1 il comportamento desiderato è quello predefinito.
entro il

Risposte:


19

Ho anche usato ido-modeun sacco e addestrato la mia memoria muscolare :) Credo che lo idostile è più intuitivo rispetto al helmmetodo. Cerco roba (digitando alcuni caratteri) e mi impegno a trovare (hit RET), proprio come la barra di ricerca / indirizzo del mio browser web. Se la selezione è una directory, entro in questa directory e ricomincio a cercare in questa directory. Questo mi sembra naturale, quindi ho scritto un piccolo consiglio helm-execute-persistent-actionper forzare questo meccanico.

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

Ho anche ottimizzato backspaceleggermente la chiave. Se scrivo qualcosa e voglio fare una correzione, premo backspace. Ciò eliminerà un carattere. Se sono all'inizio della directory e premo di nuovo backspace, salgo di livello. Questo accelera notevolmente la navigazione!

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

Per rimuovere l'inutile .e ..all'inizio, è possibile aggiungerlo alla helm-boring-file-regexp-listvariabile di configurazione.


1
L'approccio Helm è tuttavia coerente con lo stock find-file. E il .e ..non è davvero inutile quando vuoi aprire Dired nella directory corrente o parent. E trovo che C-lsia più veloce della pressione backspace.
Ma Do

Sto tornando indietro per personalizzare un po 'di più questo comportamento - c'è un motivo per cui usi i consigli qui e non leghi direttamente a fu / helm-find-files-navigate-forward (kbd "<return>")? Sembra un po 'più semplice chiamare helm-execute-persistent-action direttamente all'interno della nuova funzione.
zck,

Sfortunatamente, questo non funziona per me. Prima di tutto, capisco Symbol's value as variable is void: helm-find-files-map. Quando lo metto (helm-mode 1)dopo (require 'helm), non ricevo questo errore, ma non funziona neanche. Qualche idea su cosa potrei perdere? Ecco il mio completo init.el: pastebin.com/drFZsDxW La versione di Emacs è 24.4.1 (i686-pc-mingw32)
Geier,

Non ha funzionato per me. Anche con il define-key, se provo C-h k RETsul minibuffer find-file, viene comunque visualizzato helm-confirm-and-exit-minibuffercome associato.
Rafael Ibraim,

@RafaelIbraim try use (kbd "RET")
netawater

0

Non posso commentare la risposta di Fu86 a causa del rappresentante, ma mi sto fermando (scusate se questo non è un protocollo normale). Ho ottenuto una funzione nulla usando la sua risposta grazie a "helm-find-files-map". Invece, ha funzionato usando la mappa dei tasti "helm-map". Nessun conflitto finora ed è il comportamento che stavo cercando.

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


-1

Non sono riuscito a far funzionare la risposta di @ Fu86, ma per me ha funzionato:

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

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

modificare

La mia soluzione funziona in helm-20141112.946 ma in helm-20160211.934 non funziona e la risposta @ Fu86 è la soluzione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.