Jak sprawić, aby naciśnięcie <RET> w plikach sterów-otwierania otworzyło katalog?

25

Po uruchomieniu #'helm-find-filesi przejściu do katalogu naciśnięcie <ret>powoduje otwarcie tego katalogu w trybie dired. Trzeba nacisnąć, C-jaby wejść do tego katalogu w Helm.

Chciałbym <RET>działać tak C-jjak tutaj, ale niekoniecznie wszędzie indziej. Sprawdziłem i jestem C-jzobowiązany #'helm-maybe-exit-minibuffer, ale jestem <RET>zobowiązany #'helm-execute-persistent-action. Wiązanie <RET>do #'helm-maybe-exit-minibufferdziała w tym przypadku, ale psuje inne przypadki: na przykład autouzupełnianie steru w describe-function.

Tak więc, kiedy używasz Helma do znalezienia pliku, jak mogę naciskać <RET>otworzyć ten katalog w Helmie?

zck
źródło
1
@TuDo Jestem przyzwyczajony do tego ido-mode, że naciśnięcie <RET>wybiera folder, aby znaleźć pliki w nim zawarte. Myślę, że jest to najbardziej spójne zachowanie podczas próby znalezienia pliku - co chcesz zrobić, gdy znajdziesz plik, otwórz go; co chcesz zrobić, gdy znajdziesz folder, wejdź do niego, aby znaleźć plik.
zck
2
Hełm ma odwrotne zachowanie - w przypadku pliku <RET>zarówno autouzupełnianie , jak i zaznaczanie. Nie musisz naciskać, <tab>aby zakończyć uzupełnianie nazwy pliku. Ale spieramy się o preferencje - chcę tylko, aby „enter” oznaczało „wybierz rzecz w punkcie”. A dla mnie nie oznacza to „otwartej skóry”. Gdybym był w skorupce, oczekuję innego zachowania.
zck
4
Jestem tutaj z ZKK, pamięć mięśni jest tam po latach używania ido (i najbardziej oczekiwanego działania, które się wierci) i to był główny problem podczas przyzwyczajania się do steru. Od tego czasu przerzuciłem się na używanie klawisza strzałki w prawo do drążenia w dół (przyzwyczaiłem się do około tygodnia)
ustun
1
Jestem też z Zck. Nawigacja w ido jest o wiele bardziej intuicyjna niż standardowe zachowanie steru. Zwłaszcza klawisz Backspace. Usuwa znak z wyszukiwania lub przeskakuje z powrotem do folderu, jeśli nic nie jest wstawione. Czy istnieje sposób ponownego połączenia kluczy, aby uzyskać tę funkcjonalność?
Fu86
1
Od wersji Helm 2.6.1 pożądane zachowanie jest domyślne.
amitp

Odpowiedzi:

19

Ja również wykorzystywane ido-modedo dużo i przeszkolony moją pamięć mięśniową :) Myślę, że idostyl jest bardziej intuicyjne niż helmpodejścia. Szukam rzeczy (wpisując niektóre znaki) i zatwierdzam wyszukiwanie (hit RET), podobnie jak pasek wyszukiwania / adresu mojej przeglądarki internetowej. Jeśli zaznaczony jest katalog, wchodzę do tego katalogu i ponownie zaczynam wyszukiwanie w tym katalogu. Wydaje mi się to naturalne, dlatego napisałem krótką radę, helm-execute-persistent-actionaby zmusić tego mechanika.

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

backspaceLekko zoptymalizowałem klucz. Jeśli coś wpisuję i chcę dokonać korekty, uderzam w backspace. Spowoduje to usunięcie jednego znaku. Jeśli jestem na początku katalogu i ponownie uderzę w backspace, przechodzę o jeden poziom wyżej. To znacznie przyspiesza nawigację!

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

Aby usunąć bezużyteczne .i ..na samym początku, możesz dodać je do helm-boring-file-regexp-listzmiennej konfiguracyjnej.

Fu86
źródło
1
Podejście steru jest jednak zgodne z zapasem find-file. A .i ..nie jest tak naprawdę bezużyteczne, gdy nie chcesz otwierać Dired w bieżącym lub nadrzędnym katalogu. I uważam, że C-ljest to szybsze niż naciskanie backspace.
Tu Do
Wracam, aby jeszcze bardziej dostosować to zachowanie - czy jest powód, dla którego skorzystasz z porady tutaj i nie powiążesz bezpośrednio plików fu / helm-find-files-navigate-forward (kbd "<return>")? Wydaje się trochę czystsze, aby wywołać helm-execute-persistent-action bezpośrednio wewnątrz nowej funkcji.
zck 16.04.15
Niestety to nie działa dla mnie. Po pierwsze rozumiem Symbol's value as variable is void: helm-find-files-map. Kiedy kładę (helm-mode 1)po (require 'helm), mam takiego nie błąd, ale to nie działa albo. Masz pomysł, czego mi brakuje? Oto mój kompletny init.el: pastebin.com/drFZsDxW Emacs to wersja 24.4.1 (i686-pc-mingw32)
Geier
Nie działało dla mnie. Nawet define-keyjeśli spróbuję użyć C-h k RETminibufora znajdującego plik, nadal będzie on wyświetlany helm-confirm-and-exit-minibufferjako związany.
Rafael Ibraim
@RafaelIbraim spróbuj użyć (kbd „RET”)
netawater
0

Nie mogę skomentować odpowiedzi Fu86 z powodu rep, ale jestem świński, że się wycofuję (przepraszam, jeśli to nie jest normalny protokół). Otrzymałem funkcję void, używając jego odpowiedzi z powodu „helm-find-files-map”. Zamiast tego zadziałało użycie mapy kluczy „mapa sterów”. Jak dotąd żadnych konfliktów, a takiego zachowania szukałem.

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

Iceback
źródło
-1

Nie mogłem uzyskać odpowiedzi @ Fu86 do pracy, ale następujące działały dla mnie:

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

patrz także: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

Edytować

Moje rozwiązanie działa w helm-20141112.946, ale w helm-20160211.934 nie działa, a odpowiedź @ Fu86 jest rozwiązaniem

Jason Furtney
źródło