Helm-find-files'de <RET> tuşuna basarak dizini açabilirim?


25

Çalıştığımda #'helm-find-filesve noktayı bir dizine taşıdığımda, <ret>bu dizini yönetmeli modda açarken sonuçlara basmak . C-jHelm'de bu dizine girmek için basılması gerekiyor.

Burada <RET>olduğu gibi davranmak isterdim C-j, ama mutlaka başka hiçbir yerde değil. Kontrol ettim ve C-jbağlı olduğu #'helm-maybe-exit-minibuffer, oysa <RET>bağlıdır #'helm-execute-persistent-action. Bu durum <RET>için #'helm-maybe-exit-minibufferçalışmalara bağlanma , ancak diğer vakaları da bozma: örneğin, dümen otomatik olarak tamamlandı describe-function.

Öyleyse, bir dosyayı bulmak için Helm'i kullanırken, Helm'deki <RET>o dizini açmaya nasıl basabilirim ?


1
@TuDo alışkınım ido-mode, nerede basılması <RET>içindeki dosyaları bulmak için klasörü seçer. Bunun bir dosya bulmaya çalışırken en tutarlı davranış olduğunu düşünüyorum - dosyayı bulduğunuzda ne yapmak istediğinizi açık; Bir klasör bulduğunda yapmak istediğin şey, içine girip dosyayı bulabilmen için.
22:14 zck

2
Dümen tersi davranışı var - ne zaman bir dosya üzerinde, <RET>autocompletes hem ve seçer. <tab>Dosya adını tamamlamayı bitirmek zorunda değilsin . Ama biz tercihleri ​​tartışıyoruz - sadece "noktada olanı seç" demek "girmek" istiyorum. Ve benim için, bu "açık dired" anlamına gelmez. Bir kabuğum olsaydı, farklı davranışlar beklerdim.
zck

4
Burada zck ile birlikteyim, kas hafızası yıllarca Ido kullandıktan sonra var (ve en çok beklenen eylemi azaltmak) ve bu dümene alışmak için ana ağrı noktasıydı. O zamandan beri aşağı doğru inmek için sağ ok tuşunu kullanmaya başladım (alışması yaklaşık bir hafta sürdü)
ustun

1
Ben de zck ile birlikteyim. İdo'da gezinmek dümen standart davranışından çok daha sezgiseldir. Özellikle de geri alma tuşu. Bir arama karakterini siler veya hiçbir şey girilmezse klasöre geri atlar. Bu işlevselliği elde etmek için anahtarları yeniden yapılandırmanın bir yolu var mı?
Fu86

1
İtibariyle Helm 2.6.1 istediğiniz davranış varsayılan değerdir.
amitp

Yanıtlar:


19

Ben de kullandım ido-modebir sürü ve benim kas hafızası eğitimli :) Bence idotarzı daha sezgisel helmbir yaklaşım. Bir şeyler ararım (bazı karakterleri yazarak) ve RETweb tarayıcımın arama / adres çubuğundaki gibi bulmayı (isabet ) kabul ederim. Seçim bir dizinse, bu dizine girip bu dizinde yeniden aramaya başladım. Bu benim için doğal görünüyor, bu yüzden helm-execute-persistent-actionbu tamirciyi zorlamak için küçük bir tavsiye yazdım .

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

Ayrıca backspacebiraz da anahtarı optimize ettim . Bir şey yazıp düzeltme yapmak istersem geri aldım. Bu bir karakteri siler. Eğer dizinin başlangıcındaysam ve tekrar geri tıklarsam, bir seviye yukarı giderim. Bu, navigasyonu önemli ölçüde hızlandırır!

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

İşe yaramaz .ve ..en baştan kaldırmak için , bunu helm-boring-file-regexp-listyapılandırma değişkenine ekleyebilirsiniz .


1
Dümen yaklaşımı find-fileolsa stok ile uyumludur . Ve .ve ..geçerli veya üst dizinde dired açmak istediğiniz suddent zaman gerçekten işe yaramaz değildir. Ve bunu C-lbasmaktan daha hızlı buluyorum backspace.
Tu Do

Bu davranışı birazcık daha özelleştirmek için geri dönüyorum - burada tavsiye kullanmanızın ve fu / helm-find-files-navigate-forward'in doğrudan bağlanmamasının bir nedeni var (kbd "<return>")mı? Doğrudan yeni işlevin içinde sadece dümen yürütme-kalıcı eylemi çağırmak biraz daha temiz görünüyor.
zck

Ne yazık ki, bu benim için çalışmıyor. Her şeyden önce anladım Symbol's value as variable is void: helm-find-files-map. Ben koyduğunuzda (helm-mode 1)sonra (require 'helm), böyle bir hata alıyorum, ama ya çalışmıyor. Herhangi bir fikir ne eksik olabilir? İşte benim init.el tam: pastebin.com/drFZsDxW Emacs sürümü 24.4.1 (i686-pc-mingw32) 'dir
Geier

Benim için işe yaramadı. Hatta ile define-keyDenersem, C-h k RETteh bulmak dosya minibuffer hala gösterileri üzerine helm-confirm-and-exit-minibufferbağlı olarak.
Rafael Ibraim

@RafaelIbraim kullanmayı deneyin (kbd "RET")
netawater

0

Fu86'nın rep nedeniyle verdiği cevap hakkında yorum yapamam, ancak geri adım attığımda domuzcuk yaşıyorum (bu normal protokol değilse üzgünüm). "Helm-find-files-map" nedeniyle cevabını kullanarak geçersiz bir işlev aldım. Bunun yerine "dümen haritası" anahtar haritasını kullanmam için çalıştı. Şimdiye kadar hiçbir çatışma yok ve bu benim aradığım davranış.

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


-1

@ Fu86’nın çalışmasına cevap alamadım ancak aşağıdakiler benim için işe yaradı:

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

ayrıca bakınız: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

Düzenle

Benim çözümüm dümen-20141112.946’da çalışıyor, ancak dümen-20160211.934’de çalışmıyor ve @ Fu86 cevabı çözüm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.