vscode sublime portable para opencobol open change atom emacs

emacs - sublime - opencobol para windows



Cómo ejecutar múltiples shells en Emacs (7)

Después de más de cuatro años, veo que algunas personas todavía están mirando este problema a veces, así que publicaré una función rápida que escribí para cargar un caparazón y preguntarle su nombre. De esta forma, puede nombrar un shell "sort-files" si está dedicado a ordenar archivos y otro "colmena" si está dedicado a ejecutar consultas de colmena. Lo uso todos los días (en emacs 24):

(defun create-shell () "creates a shell with a given name" (interactive);; "Prompt/n shell name:") (let ((shell-name (read-string "shell name: " nil))) (shell (concat "*" shell-name "*"))))

Estoy usando Emacs 23.3.1 en Windows 7. Sé que puedo ejecutar shell desde emacs usando Mx shell. Me gustaría tener varias ventanas de shell al mismo tiempo, pero escribir Mx shell por segunda vez me abre la misma ventana de shell.

¿Hay alguna manera de tener diferentes ventanas de shell?


Esto abrirá un nuevo shell cada vez que invoque la función y le cambiará el nombre automáticamente si es necesario. El plus añadido es si está editando archivos de forma remota (dired / vagabundo ...), esto abrirá un shell en el host remoto y lo cambiará de nombre automáticamente con el nombre de host remoto:

(defun ggshell (&optional buffer) (interactive) (let* ( (tramp-path (when (tramp-tramp-file-p default-directory) (tramp-dissect-file-name default-directory))) (host (tramp-file-name-real-host tramp-path)) (user (if (tramp-file-name-user tramp-path) (format "%s@" (tramp-file-name-user tramp-path)) "")) (new-buffer-nameA (format "*shell:%s*" host)) (new-buffer-nameB (generate-new-buffer-name new-buffer-nameA)) (currentbuf (get-buffer-window (current-buffer))) ) (generate-new-buffer new-buffer-nameB) (set-window-dedicated-p currentbuf nil) (set-window-buffer currentbuf new-buffer-nameB) (shell new-buffer-nameB) ))


Esto generará automáticamente una nueva instancia de shell en cualquier búfer que esté usando; vincularlo a MS o algo así y la alegría instantánea:

(defun new-shell () (interactive) (let ( (currentbuf (get-buffer-window (current-buffer))) (newbuf (generate-new-buffer-name "*shell*")) ) (generate-new-buffer newbuf) (set-window-dedicated-p currentbuf nil) (set-window-buffer currentbuf newbuf) (shell newbuf) ) )

Muchas gracias a phils por recomendar una reescritura usando let, aunque el resultado es aún más horrible paréntesis ...: /


Mira MultiTerm , hace que administrar múltiples terminales en Emacs sea mucho más fácil.


Puede cambiar el nombre del buffer de su shell con Mx rename-buffer . Entonces podrás lanzar un segundo caparazón.


También podría ser útil utilizar una interfaz tipo pantalla para tus proyectiles. He escrito el mío, pero hay otros por ahí, como EmacsScreen .


Cu Mx shell lo hará.

Le pedirá un nombre para el nuevo intérprete de comandos, simplemente pulse return para el valor predeterminado (que será algo así como *shell*<2> .

También funciona con eshell.

Otro truco, si usas eshell: así como Mx eshell te lleva de regreso a *eshell* (en lugar de comenzar una nueva eshell), si usas un argumento de prefijo numérico te llevará a ese búfer de eshell. Por ejemplo, C-3 Mx eshell lo llevará a *eshell*<3> . Lamentablemente, si usas shell (en lugar de eshell), este truco no parece funcionar (en mi Emacs 24.0.50.1 al menos).