Pregunta:
Siempre que ejecuto Mx shell
, aparece un búfer casi al azar en algún lugar, dividiendo las ventanas actuales como mejor le parezca. No puedo entender la lógica detrás de esto.
La cadena de documentos dice:
(shell &optional BUFFER)
Si BUFFER existe pero el proceso de shell no se está ejecutando, cree un nuevo shell.
Si BUFFER existe y el proceso de shell se está ejecutando, simplemente cambie a BUFFER.
Esto solo me dice que abrirá un shell si ya existe; de lo contrario, iniciará uno nuevo.
Solo me importa la posición del búfer. Si tengo la configuración de la ventana configurada como la necesito, ejecutar shell generalmente arruina esa configuración.
Investigué la fuente tanto como pude, pero no estoy lo suficientemente familiarizado con el eLisp subyacente.
Me gustaría tener una función que divida la ventana actual, abra un búfer de shell, realizo una operación corta, luego puedo cerrar la ventana recién creada, restaurando la configuración de la ventana anterior exactamente como estaba.
Tengo esto funcionando para eshell
, que le robé a Howard Abrams. Se parece a esto:
(defun eshell-here ()
"Opens up a new shell in the directory associated with the
current buffer's file. The eshell is renamed to match that
directory to make multiple eshell windows easier."
(interactive)
(let* ((parent (if (buffer-file-name)
(file-name-directory (buffer-file-name))
default-directory))
(height (/ (window-total-height) 3))
(name (car (last (split-string parent "/" t)))))
(split-window-vertically (- height))
(other-window 1)
(eshell "new")
(rename-buffer (concat "*eshell: " name "*"))
(insert (concat "ls"))
(eshell-send-input)))
Y la función para cerrar el nuevo búfer:
(defun eshell-close ()
"Closes the window created by the function 'eshell-here'"
(interactive)
(insert "exit")
(eshell-send-input)
(delete-window))
Primero intenté simplemente reemplazar eshell
con shell
, pero eso llevó a posiciones de búfer aleatorias.
Respuesta:
Esto es lo que tengo para esto. Abre un caparazón en la ventana actual.
(add-to-list 'display-buffer-alist
'("^\\*shell\\*$" . (display-buffer-same-window)))