mac comandos emacs

comandos - En Emacs, ¿cómo insertar el nombre del archivo en shell-command?



emacs ubuntu (3)

A continuación se explica cómo solucionar la solución de huaiyuan:

(define-key minibuffer-local-map [f3] (lambda() (interactive) (insert (buffer-file-name (nth 1 (buffer-list))))))

Probablemente deberías agregar algún tipo de comprobación de errores en caso de que el "otro" búfer no tenga un nombre de archivo establecido y (buffer-file-name) devuelva nil.

Utilizo mucho el comando-shell (predeterminado enlazado a M-!), Pero a menudo hago cosas en el búfer que estoy editando actualmente. En lugar de escribir el nombre del búfer (y no hay ningún nombre de archivo disponible en shell-command, ¡ay!), Sería bueno tener una tecla de método abreviado, digamos f3, para insertar ese nombre cada vez que presiono la tecla.

El problema es que no quiero vincular la clave de forma global (utilizo f3 para otras cosas en otro contexto), solo en minibúfer cuando el comando de shell está solicitando. Es fácil escribir una función lisp para insertar el nombre del buffer actual, pero ¿qué mapa de teclas del modo debo modificar para vincular una clave a esa función?

Alternativamente, ¿hay algún código / paquete de lisp que proporcione la finalización del nombre de archivo en shell-command, similar a cómo lo hace bash? Sé que la shell Mx normal se completa, pero es difícil abandonar la conveniencia de ingresar un comando en minibúfer;)

Editar:

esto es lo que quería, tomado de la respuesta de huaiyuan con algunas correcciones inspiradas / robadas de http://osdir.com/ml/emacs.sources/2002-04/msg00022.html

(define-key minibuffer-local-map [f3] (lambda () (interactive) (insert (buffer-name (current-buffer-not-mini))))) (defun current-buffer-not-mini () "Return current-buffer if current buffer is not the *mini-buffer* else return buffer before minibuf is activated." (if (not (window-minibuffer-p)) (current-buffer) (if (eq (get-lru-window) (next-window)) (window-buffer (previous-window)) (window-buffer (next-window)))))


(define-key minibuffer-local-map [f3] (lambda () (interactive) (insert (buffer-name))))

Editar:

Como se señaló en la sección de comentarios y en otros lugares, el fragmento de código anterior no funciona. (Lo siento, debería haberlo probado antes de publicarlo :) Se han publicado algunas correcciones; aquí está otro:

(define-key minibuffer-local-map [f3] (lambda () (interactive) (insert (buffer-name (window-buffer (minibuffer-selected-window))))))

En cuanto a la finalización del nombre de archivo mientras se emite shell-command , quizás este kludge funcionaría (me funciona en Emacs 23.0.60):

(require ''shell) (define-key minibuffer-local-map (kbd "C-i") ''comint-dynamic-complete)