Cara membuka file di eshell dengan wildcard

8

Saya sangat terbiasa mengetikkan shell sesuatu seperti:

emacsclient **/Threshold.java

Di mana Threshold.javafile sangat bersarang di direktori dan saya hanya ingin membukanya dengan nama.

Ketika saya mencoba hal yang sama di eshell, saya mendapatkan (ec adalah alias untuk find-file):

ec **/Threshold.java
Wrong type argument: stringp, ("src/main/java/org/elasticsearch/shield/admin/Threshold.java")

Bagaimana saya bisa membuatnya bekerja di eshell?

Lee H
sumber

Jawaban:

8
(defun eshell/my-find-file (pattern)
  (mapc #'find-file (mapcar #'expand-file-name pattern)))

lalu gunakan my-find-file **/Threshold.javadari Eshell, jika Anda juga ingin my-find-filemendukung pola non-glob (misalnya, my-find-file Threshold.java), coba ikuti langkah berikut:

(defun eshell/my-find-file (pattern)
  (if (stringp pattern)
      (find-file pattern)
    (mapc #'find-file (mapcar #'expand-file-name pattern))))
xuchunyang
sumber
4

Coba ini:

mapcar #'find-file **/Threshold.java

Ini hanya berfungsi jika **/Threshold.javamengembang dengan tepat satu file. Jika tidak, file kedua akan dibuka melalui jalur relatif, tetapi didasarkan pada direktori file pertama, bukan direktori tempat perintah dijalankan.

legoscia
sumber
Kuncinya adalah bahwa untuk eshell wildcard menjadi dobel *
Yu Shen
1

Saya menulis fungsi praktis ini:

(defun eshell/for-each (cmd &rest args)
    (let ((fn (intern cmd))
          (dir default-directory))
      (dolist (arg (eshell-flatten-list args))
        (let ((default-directory dir))
          (funcall fn arg)))))

Perhatikan penanganan direktori. Anda kemudian dapat memanggil, misalnya for-each find-file **/Threshold.java OtherFileToo.java,.

Untuk membuka file dari eshell saya gunakan ini: alias ff for-each find-file $*.

Omar
sumber