Cómo abrir archivos en eshell con comodines

8

Estoy muy acostumbrado a escribir en un shell algo así como:

emacsclient **/Threshold.java

¿Dónde Threshold.javaestá un archivo profundamente anidado en un directorio y solo quiero abrirlo por su nombre?

Cuando intento lo mismo en eshell, obtengo (ec es un alias para find-file):

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

¿Cómo puedo hacer que esto funcione en eshell?

Lee H
fuente

Respuestas:

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

luego use my-find-file **/Threshold.javade Eshell, si también desea my-find-fileadmitir un patrón no global (por ejemplo my-find-file Threshold.java), intente lo siguiente:

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

Prueba esto:

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

Esto solo funciona si se **/Threshold.javaexpande exactamente a un archivo. De lo contrario, el segundo archivo se abrirá a través de una ruta relativa, pero en función del directorio del primer archivo en lugar del directorio donde se ejecutó el comando.

legoscia
fuente
La clave es que para eshell el comodín se convierte en doble *
Yu Shen
1

Escribí esta útil función:

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

Observe el manejo del directorio. Luego puede llamar, por ejemplo for-each find-file **/Threshold.java OtherFileToo.java,.

Para abrir archivos de eshell utilizo este: alias ff for-each find-file $*.

Omar
fuente