Configuración de alias de E-Shell

7

En mi archivo de alias de emacs ubicado en .emacs.d / eshell / alias , tengo lo siguiente:

alias mv mv -v $*

Cada vez que ejecuto el alias en eshell, por ejemplo: mv from_here.txt to_here.textobtengo el error:

mv: falta el directorio o el archivo de destino

¿Cómo se puede solucionar este problema de alias? Gracias.

Ari
fuente

Respuestas:

5

Al principio un comentario sobre tu alias. Si bien la página emacswiki sugiere que alias mv 'mv -v $*'es correcto, la página del manual oficial correspondiente dice que debe usar alias mv mv -ven su lugar. A continuación, supongo que la página del manual es correcta.

Parece que eshell-maybe-replace-by-aliastiene errores (al menos en emacs 25.2.1).

La implementación actual es

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

El throwformulario reemplaza el comando a ejecutar. En eshell-parse-commandel alias se reemplaza pero se pierden los argumentos.

Mi eshell muestra el aliascomportamiento esperado si agrego argsa eshell-parse-commandtravés de la siguiente anulación:

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

Tenga en cuenta que ya envié un informe de error a[email protected] .

Gracias por solucionar este problema en la rama maestra de emacs va a Noam Postavsky: http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e66e81679c3c91d6bf8f62c7abcd968430b4d1fe

Tobias
fuente