Bagaimana cara saya menekan <RET> di file helm-find-open direktori?

25

Ketika saya menjalankan #'helm-find-files, dan memindahkan titik ke direktori, menekan <ret>hasil membuka direktori itu dalam mode dired. Kita harus menekan C-juntuk masuk ke direktori itu di Helm.

Saya ingin <RET>bertindak seperti di C-jsini, tetapi tidak harus di tempat lain. Saya memeriksa, dan C-jterikat #'helm-maybe-exit-minibuffer, sedangkan <RET>terikat #'helm-execute-persistent-action. Mengikat <RET>untuk #'helm-maybe-exit-minibufferbekerja untuk kasus ini, tapi istirahat kasus lain: misalnya, helm autocomplete di describe-function.

Jadi, ketika menggunakan Helm untuk menemukan file, bagaimana saya bisa membuat menekan <RET>membuka direktori itu di Helm?

kawan
sumber
1
@TuDo Saya sudah terbiasa ido-mode, di mana menekan <RET>memilih folder untuk menemukan file di dalamnya. Saya pikir ini adalah perilaku yang paling konsisten ketika mencoba menemukan file - apa yang ingin Anda lakukan ketika Anda menemukan file itu buka; apa yang ingin Anda lakukan ketika Anda menemukan folder masuk ke dalamnya sehingga Anda dapat menemukan file.
Zck
2
Helm memiliki perilaku yang berlawanan - saat berada di file, <RET>baik pelengkapan otomatis dan pemilihan. Anda tidak perlu menekan <tab>untuk menyelesaikan menyelesaikan nama file. Tapi kami berdebat tentang preferensi - saya hanya ingin "masuk" berarti "pilih yang tepat". Dan bagi saya, itu tidak berarti "open dired". Jika saya di shell, saya mengharapkan perilaku yang berbeda.
Zck
4
Saya dengan Zck di sini, memori otot ada di sana setelah bertahun-tahun menggunakan ido (dan tindakan yang paling diharapkan ada pengeboran) dan ini adalah titik sakit utama saat terbiasa dengan helm. Sejak itu saya beralih menggunakan tombol panah kanan untuk menelusuri (butuh sekitar satu minggu untuk membiasakan diri)
ustun
1
Saya juga dengan zck. Menavigasi di ido jauh lebih intuitif daripada perilaku standar kemudi. Terutama tombol backspace. Ini menghapus char dari pencarian atau melompat kembali ke folder jika tidak ada yang dimasukkan. Apakah ada cara untuk mengatur ulang kunci untuk mendapatkan fungsi ini?
Fu86
1
Pada Helm 2.6.1 perilaku yang Anda inginkan adalah default.
amitp

Jawaban:

19

Saya juga telah menggunakan ido-modesebuah banyak dan dilatih memori otot saya :) Saya pikir idogaya lebih intuitif dibandingkan dengan helmpendekatan. Saya mencari hal-hal (mengetik beberapa karakter) dan berkomitmen untuk menemukan (klik RET), seperti bilah pencarian / alamat browser web saya. Jika pilihannya adalah direktori, saya masuk ke direktori ini dan mulai mencari lagi di direktori ini. Ini tampak alami bagi saya, jadi saya telah menulis sedikit saran helm-execute-persistent-actionuntuk memaksa mekanik ini.

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

Saya juga backspacesedikit mengoptimalkan kunci. Jika saya mengetik sesuatu dan ingin melakukan koreksi, saya menekan backspace. Ini akan menghapus satu karakter. Jika saya berada di awal direktori dan menekan backspace lagi, saya menavigasi satu tingkat ke atas. Ini mempercepat navigasi secara dramatis!

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

Untuk menghapus yang tidak berguna .dan ..di awal, Anda dapat menambahkannya ke helm-boring-file-regexp-listvariabel konfigurasi.

Fu86
sumber
1
Pendekatan Helm konsisten dengan stok find-filesekalipun. Dan .dan ..tidak benar-benar tidak berguna ketika Anda ingin membuka Dired di direktori saat ini atau orang tua. Dan saya menemukan itu C-llebih cepat daripada menekan backspace.
Tu Do
Saya berputar kembali untuk menyesuaikan perilaku ini sedikit lebih - apakah ada alasan Anda menggunakan saran di sini, dan tidak mengikat fu / helm-find-files-navigasikan langsung ke (kbd "<return>")? Tampaknya sedikit lebih bersih untuk hanya memanggil helm-execute-persistent-action langsung di dalam fungsi baru.
Zck
Sayangnya, ini tidak berhasil untuk saya. Pertama-tama, saya mengerti Symbol's value as variable is void: helm-find-files-map. Ketika saya lakukan (helm-mode 1)setelah (require 'helm), saya tidak mendapatkan kesalahan seperti itu, tetapi tidak berhasil juga. Ada ide apa yang mungkin saya lewatkan? Inilah init.el lengkap saya: pastebin.com/drFZsDxW Versi Emacs adalah 24.4.1 (i686-pc-mingw32)
Geier
Tidak bekerja untuk saya. Bahkan dengan define-key, jika saya mencoba C-h k RETpada minibuffer find-file itu masih menunjukkan helm-confirm-and-exit-minibufferterikat.
Rafael Ibraim
@RafaelIbraim coba gunakan (kbd "RET")
netawater
0

Saya tidak dapat mengomentari jawaban Fu86 karena rep tapi saya celengan mundur (maaf jika ini bukan protokol normal). Saya mendapat fungsi batal menggunakan jawabannya karena "helm-find-file-map". Ini berhasil bagi saya untuk menggunakan peta kunci "helm-peta" sebagai gantinya. Tidak ada konflik sejauh ini dan itu adalah perilaku yang saya cari.

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

Iceback
sumber
-1

Saya tidak bisa mendapatkan jawaban @ Fu86 untuk bekerja tetapi yang berikut ini berhasil bagi saya:

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

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

Edit

Solusi saya berfungsi di helm-20141112.946 tetapi di helm-20160211.934 tidak berhasil dan @ Fu86 jawabannya adalah solusinya

Jason Furtney
sumber