Як змусити натискання <RET> у файлах helm-find-файлів відкрити каталог?


25

Коли я запускаю #'helm-find-filesта переміщую точку до каталогу, натискаючи <ret>результати на відкриття цього каталогу в переведеному режимі. Потрібно натиснути, C-jщоб увійти до цього каталогу в Helm.

Я хотів би <RET>діяти так, як C-jтут, але не обов’язково скрізь. Я перевірив, і C-jприв’язаний до #'helm-maybe-exit-minibuffer, тоді <RET>як прив’язаний до #'helm-execute-persistent-action. Прив'язка <RET>до #'helm-maybe-exit-minibufferробіт для цього випадку, але перерви інших випадків: наприклад, штурвал автозаповнення в describe-function.

Отже, коли я використовую Helm для пошуку файлу, як я можу зробити натискання <RET>відкрити цей каталог у Helm?


1
@TuDo Я звик ido-mode, коли натискання <RET>вибирає папку, щоб знайти файли всередині неї. Я думаю, що це найбільш послідовна поведінка при спробі знайти файл - те, що ви хочете зробити, коли ви знайшли файл, відкрийте його; те, що ви хочете зробити, коли ви знайшли папку, - це зайти всередину неї, щоб ви могли знайти файл.
zck

2
Helm має протилежну поведінку - коли у файлі <RET>автоматично завершується і вибирається. Вам не доведеться натискати, <tab>щоб закінчити заповнення імені файлу. Але ми сперечаємось щодо уподобань - я просто хочу "ввести", щоб означати "вибрати річ в точці". І для мене це не означає "відкритий". Якби я був у шкаралупі, я очікую різної поведінки.
zck

4
У мене тут zck, м'язова пам’ять є після багатьох років використання ido (і найочікуваніша дія - свердління), і це було головним больовим моментом під час звикання до керма. З тих пір я перейшов на використання клавіші зі стрілкою вправо , щоб розгорнути (зайняло близько тижня , щоб звикнути до)
Устун

1
Я також з zck. Навігація в ido набагато більш інтуїтивно зрозуміла, ніж стандартна поведінка керма. Особливо клавішу зворотної області. Він видаляє знак пошуку з пошуку або стрибає назад у папку, якщо нічого не вставлено. Чи є спосіб переключити ключі, щоб отримати цю функціональність?
Fu86

1
Що стосується Helm 2.6.1, типова поведінка - це типова.
amitp

Відповіді:


19

Я також використав ido-modeу багато і навчив свою м'язову пам'ять :) Я думаю , що idoстиль більш інтуїтивний , ніж helmпідхід. Я шукаю речі (вводячи деякі символи) і здійснюю пошук (хіт RET), як і рядок пошуку / адреси мого веб-браузера. Якщо виділення - це каталог, я ввожу цей каталог і починаю знову шукати в цьому каталозі. Мені це здається природним, тому я написав невелику пораду навколо, helm-execute-persistent-actionщоб змусити цього механіка.

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

Я також backspaceтрохи оптимізував ключ. Якщо я щось набираю і хочу зробити виправлення, я натискаю на зворотну простір. Це видалить один символ. Якщо я перебуваю на початку каталогу і знову натискаю назад, я переходжу на один рівень вгору. Це різко прискорює навігацію!

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

Щоб видалити непотрібне .і ..на самому початку, ви можете додати його до helm-boring-file-regexp-listзмінної конфігурації.


1
Підхід Helm, find-fileоднак, відповідає запасу . І те, .і ..не дуже даремно, коли ви хочете відкрити Dired в поточному або батьківському каталозі. І я знаходжу C-lце швидше, ніж натискання backspace.
Tu Do

Я кружляю назад, щоб трохи більше налаштувати цю поведінку - чи є причина, коли ви тут користуєтесь порадами, а не прив'язуєте файли fu / helm-find-files-navigate-forward безпосередньо (kbd "<return>")? Здається, трохи чистішим є лише виклик helm-Execute-persistent-action безпосередньо всередині нової функції.
zck

На жаль, це не працює для мене. Перш за все, я отримую Symbol's value as variable is void: helm-find-files-map. Коли я ставлю (helm-mode 1)після (require 'helm), я не отримую такої помилки, але вона також не працює. Якась ідея, чого я можу бракувати? Ось мій повний init.el: pastebin.com/drFZsDxW Emacs версія 24.4.1 (i686-pc-mingw32)
Geier

Не працювало для мене. Навіть з define-key, якщо я спробую C-h k RETminibuffer find-file, він все одно відображатиметься helm-confirm-and-exit-minibufferяк пов'язаний.
Рафаель Ібраїм

@RafaelIbraim спробуйте користуватися (kbd "RET")
netawater

0

Я не можу коментувати відповідь Fu86 через реп, але я підпилюю це (вибачте, якщо це не нормальний протокол). Я отримав функцію недійсності, використовуючи його відповідь через "helm-find-files-map". Мені вдалося використати натомість карту клавіш "helm-map". Поки що немає конфліктів, і це була поведінка, яку я шукав.

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


-1

Я не міг отримати відповідь @ Fu86, щоб працювати, але мені працювало наступне:

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

дивіться також: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

Редагувати

Моє рішення працює в helm-20141112.946, але в helm-20160211.934 воно не працює, і відповідь @ Fu86 - це рішення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.