Definindo o alias do E-Shell

7

No meu arquivo de alias do emacs, localizado em .emacs.d / eshell / alias , tenho o seguinte:

alias mv mv -v $*

Sempre que executo o alias no eshell, por exemplo:, mv from_here.txt to_here.textrecebo o erro:

mv: arquivo ou diretório de destino ausente

Como esse problema de alias pode ser corrigido? Obrigado.

Ari
fonte

Respostas:

5

No início, um comentário sobre seu apelido. Enquanto a página do emacswiki sugere que alias mv 'mv -v $*'está correta, a página do manual oficial correspondente diz que você deve usá-lo alias mv mv -v. A seguir, assumo que a página do manual está correta.

Parece que eshell-maybe-replace-by-aliasé um buggy (pelo menos no emacs 25.2.1).

A implementação atual é

(defun eshell-maybe-replace-by-alias (command args)
  "If COMMAND has an alias definition, call that instead using ARGS."
  (unless (and eshell-prevent-alias-expansion
           (member command eshell-prevent-alias-expansion))
    (let ((alias (eshell-lookup-alias command)))
      (if alias
      (throw 'eshell-replace-command
         `(let ((eshell-command-name ',eshell-last-command-name)
                        (eshell-command-arguments ',eshell-last-arguments)
                        (eshell-prevent-alias-expansion
                         ',(cons command eshell-prevent-alias-expansion)))
                    ,(eshell-parse-command (nth 1 alias))))))))

O throwformulário substitui o comando a ser executado. No eshell-parse-commandalias é substituído, mas os argumentos são perdidos.

Meus eShell mostra o esperado aliascomportamento se eu adicionar argsa eshell-parse-commandvia a seguinte substituição:

(defun eshell-maybe-replace-by-alias-bugfix-25.2.1 (command args)
  "If COMMAND has an alias definition, call that instead using ARGS."
  (unless (and eshell-prevent-alias-expansion
           (member command eshell-prevent-alias-expansion))
    (let ((alias (eshell-lookup-alias command)))
      (if alias
      (throw 'eshell-replace-command
         `(let ((eshell-command-name ',eshell-last-command-name)
                        (eshell-command-arguments ',eshell-last-arguments)
                        (eshell-prevent-alias-expansion
                         ',(cons command eshell-prevent-alias-expansion)))
                    ,(eshell-parse-command (nth 1 alias) args)))))))

(advice-add #'eshell-maybe-replace-by-alias :override #'eshell-maybe-replace-by-alias-bugfix-25.2.1)

Observe que eu já enviei um relatório de erro para[email protected] .

Obrigado por corrigir esse problema no ramo principal do emacs, vá para Noam Postavsky: http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e66e81679c3c91d6bf8f62c7abcd968430b4d1fe

Tobias
fonte