Làm cách nào để tôi nhấn <RET> trong tệp helm-find-mở thư mục?


25

Khi tôi chạy #'helm-find-filesvà di chuyển điểm đến một thư mục, nhấn <ret>kết quả trong việc mở thư mục đó ở chế độ dired. Người ta phải nhấn C-jđể vào thư mục đó trong Helm.

Tôi muốn có <RET>hành động như C-jở đây, nhưng không nhất thiết phải ở mọi nơi khác. Tôi đã kiểm tra, và C-jbị ràng buộc #'helm-maybe-exit-minibuffer, trong khi <RET>bị ràng buộc #'helm-execute-persistent-action. Liên kết <RET>để #'helm-maybe-exit-minibufferhoạt động cho trường hợp này, nhưng phá vỡ các trường hợp khác: ví dụ, helm autocomplete in describe-function.

Vì vậy, khi sử dụng Helm để tìm tệp, làm cách nào tôi có thể nhấn <RET>mở thư mục đó trong Helm?


1
@TuDo Tôi đã quen ido-mode, trong đó nhấn <RET>chọn thư mục để tìm tệp bên trong nó. Tôi nghĩ rằng đây là hành vi nhất quán khi cố gắng tìm một tệp - những gì bạn muốn làm khi bạn tìm thấy tệp đang mở nó; những gì bạn muốn làm khi bạn tìm thấy một thư mục nằm trong đó để bạn có thể tìm thấy tập tin.
zck

2
Helm có hành vi ngược lại - khi trên một tệp, <RET>cả tự động hoàn thành chọn. Bạn không cần phải nhấn <tab>để hoàn thành tên tệp. Nhưng chúng tôi đang tranh cãi về sở thích - Tôi chỉ muốn "nhập" có nghĩa là "chọn điều tại điểm". Và đối với tôi, điều đó không có nghĩa là "mở dired". Nếu tôi ở trong một cái vỏ, tôi mong đợi hành vi khác nhau.
zck

4
Tôi với zck ở đây, bộ nhớ cơ ở đó sau nhiều năm sử dụng ido (và hành động được mong đợi nhất là khoan xuống) và đây là điểm đau chính trong khi làm quen với helm. Kể từ đó, tôi đã chuyển sang sử dụng phím mũi tên phải để xem chi tiết (mất khoảng một tuần để làm quen)
ustun

1
Tôi cũng với zck. Điều hướng trong ido trực quan hơn rất nhiều so với hành vi tiêu chuẩn của helm. Đặc biệt là phím backspace. Nó xóa một char khỏi tìm kiếm hoặc nhảy trở lại thư mục nếu không có gì được chèn vào. Có cách nào để tua lại các phím để có được chức năng này không?
Fu86

1
Kể từ Helm 2.6.1 , hành vi bạn muốn là mặc định.
amitp

Câu trả lời:


19

Tôi cũng đã sử dụng ido-modemột nhiều và rèn luyện trí nhớ cơ bắp của tôi :) Tôi nghĩ rằng idophong cách là trực quan hơn các helmcách tiếp cận. Tôi tìm kiếm nội dung (nhập một số ký tự) và cam kết tìm kiếm (nhấn RET), giống như thanh tìm kiếm / địa chỉ của trình duyệt web của tôi. Nếu lựa chọn là một thư mục, tôi vào thư mục này và bắt đầu tìm kiếm lại trong thư mục này. Điều này có vẻ tự nhiên đối với tôi, vì vậy tôi đã viết một lời khuyên nhỏ xung quanh helm-execute-persistent-actionđể buộc người thợ này.

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

Tôi cũng đã tối ưu hóa backspacephím một chút. Nếu tôi gõ một cái gì đó và muốn sửa, tôi nhấn backspace. Điều này sẽ xóa một ký tự. Nếu tôi ở phần đầu của thư mục và nhấn backspace một lần nữa, tôi sẽ điều hướng lên một cấp. Điều này tăng tốc độ điều hướng đáng kể!

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

Để loại bỏ những thứ vô dụng ...ngay từ đầu, bạn có thể thêm nó vào helm-boring-file-regexp-listbiến cấu hình.


1
Cách tiếp cận Helm phù hợp với chứng khoán find-filemặc dù. Và ...không thực sự vô dụng khi bạn muốn mở Dired trong thư mục mẹ hoặc hiện tại. Và tôi thấy rằng C-lnhanh hơn nhấn backspace.
Từ Đô

Tôi quay lại để tùy chỉnh hành vi này thêm một chút nữa - có lý do gì bạn sử dụng lời khuyên ở đây và không liên kết trực tiếp fu / helm-find-files-navigation-Forward (kbd "<return>")không? Có vẻ sạch sẽ hơn một chút khi chỉ cần gọi helm-exec-continent-action trực tiếp bên trong hàm mới.
zck

Thật không may, điều này không làm việc cho tôi. Trước hết, tôi nhận được Symbol's value as variable is void: helm-find-files-map. Khi tôi đặt (helm-mode 1)sau (require 'helm), tôi không gặp phải lỗi đó, nhưng nó cũng không hoạt động. Bất cứ ý tưởng những gì tôi có thể thiếu? Đây là init.el hoàn chỉnh của tôi: pastebin.com/drFZsDxW Phiên bản Emacs là 24.4.1 (i686-pc-mingw32)
Geier

Không làm việc cho tôi. Ngay cả với define-key, nếu tôi thử C-h k RETtrên máy thu nhỏ tập tin tìm kiếm, nó vẫn hiển thị helm-confirm-and-exit-minibuffernhư bị ràng buộc.
Rafael Ibraim

@RafaelIbraim hãy thử sử dụng (kbd "RET")
netawater

0

Tôi không thể nhận xét về câu trả lời của Fu86 do đại diện nhưng tôi rất ủng hộ nó (xin lỗi nếu đây không phải là giao thức bình thường). Tôi có một hàm void bằng cách sử dụng câu trả lời của anh ấy do "helm-find-files-map". Thay vào đó, nó hoạt động với tôi để sử dụng bản đồ chính "helm-map". Không có xung đột cho đến nay và đó là hành vi tôi đang tìm kiếm.

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


-1

Tôi không thể làm cho câu trả lời của @ Fu86 hoạt động nhưng những điều sau đây có hiệu quả với tôi:

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

xem thêm: /programming/27652371/how-can-i-change-emacs-mus-find-file-default-action-on-directory-to-be-go-insid

Chỉnh sửa

Giải pháp của tôi hoạt động trong helm-20141112.946 nhưng trong helm-20160211.934 thì nó không hoạt động và câu trả lời @ Fu86 là giải pháp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.