Como abrir arquivos no eshell com curingas

8

Estou muito acostumado a digitar em um shell algo como:

emacsclient **/Threshold.java

Onde Threshold.javaestá um arquivo profundamente aninhado em um diretório e eu só quero abri-lo pelo nome.

Quando tento a mesma coisa no eshell, recebo (ec é um alias para find-file):

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

Como posso fazer isso funcionar no eshell?

Lee H
fonte

Respostas:

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

use a my-find-file **/Threshold.javapartir do Eshell, se você também deseja my-find-fileoferecer suporte a padrões não globais (por exemplo my-find-file Threshold.java), tente o seguinte:

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

Tente o seguinte:

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

Isso só funciona se for **/Threshold.javaexpandido para exatamente um arquivo. Caso contrário, o segundo arquivo será aberto por um caminho relativo, mas com base no diretório do primeiro arquivo, e não no diretório em que o comando foi executado.

legoscia
fonte
A chave é que, para o eshell, o curinga se torna duplo *
Yu Shen
1

Eu escrevi esta função útil:

(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 a manipulação do diretório. Você pode ligar, por exemplo for-each find-file **/Threshold.java OtherFileToo.java,.

Para abrir ficheiros de eshell Eu uso este: alias ff for-each find-file $*.

Omar
fonte