So öffnen Sie Dateien in Eshell mit Platzhaltern

8

Ich bin es sehr gewohnt, eine Shell einzugeben wie:

emacsclient **/Threshold.java

Wo Threshold.javaist eine Datei tief in einem Verzeichnis verschachtelt und ich möchte sie nur mit Namen öffnen.

Wenn ich das gleiche in eshell versuche, bekomme ich (ec ist ein Alias ​​für find-file):

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

Wie kann ich das in eshell zum Laufen bringen?

Lee H.
quelle

Antworten:

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

my-find-file **/Threshold.javaWenn Sie dann von Eshell aus auch my-find-fileNicht-Glob-Muster unterstützen möchten (z. B. my-find-file Threshold.java), versuchen Sie Folgendes:

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

Versuche dies:

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

Dies funktioniert nur, wenn es **/Threshold.javaauf genau eine Datei erweitert wird. Andernfalls wird die zweite Datei über einen relativen Pfad geöffnet, jedoch basierend auf dem Verzeichnis der ersten Datei anstelle des Verzeichnisses, in dem der Befehl ausgeführt wurde.

Legoscia
quelle
Der Schlüssel ist, dass für eshell die Wildcard doppelt wird *
Yu Shen
1

Ich habe diese praktische Funktion geschrieben:

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

Beachten Sie die Verzeichnisbehandlung. Sie können dann beispielsweise anrufen for-each find-file **/Threshold.java OtherFileToo.java.

Um Dateien von eshell zu öffnen, benutze ich Folgendes : alias ff for-each find-file $*.

Omar
quelle