Reabrir * scratch * buffer

26

Si accidentalmente cerré el buffer de scratch en Emacs, ¿cómo creo un nuevo buffer de scratch?

Luke
fuente
No haga preguntas solo con el fin de responder a sus propias preguntas, especialmente si son fáciles de responder.
Edgar Aroutiounian
8
@EdgarAroutiounian ¡ Está bien preguntar y responder tu propia pregunta ! Sin embargo, hacer preguntas fáciles debe evitarse durante la beta privada: la beta privada establece el tono para el sitio.
Gilles 'SO- deja de ser malvado'
1
@Gilles Por supuesto, responder sus propias preguntas está bien, pero es bastante sospechoso cuando hace 3 preguntas seguidas, cada una con una respuesta inmediatamente después de hacer la pregunta.
Edgar Aroutiounian
2
@EdgarAroutiounian, Jon Ericson quiere que respondamos las simples preguntas de AZ. Bienvenido
Luke
2
Creo que es bastante justo: para un usuario nuevo, a menudo no es obvio que no hay nada particularmente especial en el búfer de memoria virtual , y la respuesta de @ Sigma es bastante clara.
Mark Aufflick

Respuestas:

29

Sólo volver a crear el buffer por el cambio a que: C-x b *scratch* RET. Desde Emacs 21.2, si crea un búfer llamado *scratch*, se pone automáticamente en modo de interacción Lisp .

Gilles 'SO- deja de ser malvado'
fuente
¿Por qué necesitas una función especial? Para mí, si mato *scratch*y luego vuelvo a él, está configurado en modo de interacción lisp automáticamente.
Tikhon Jelvis
@TikhonJelvis Ah, de hecho. Tengo esta función porque no lo hizo en versiones anteriores (el cambio es de 21.2, que no es reciente en términos absolutos sino más reciente que la mayor parte de mi .emacs).
Gilles 'SO- deja de ser malvado'
Sí. Emacs 21.2 se lanzó cuando utilicé una computadora por primera vez . Esa es una diferencia absoluta bastante grande;).
Tikhon Jelvis
7

Podría decirse que es mejor volver a crear el *scratch*búfer automáticamente cada vez que se elimine, y evitar tener que volver a escribir su nombre.

(defun prepare-scratch-for-kill ()
  (save-excursion
    (set-buffer (get-buffer-create "*scratch*"))
    (add-hook 'kill-buffer-query-functions 'kill-scratch-buffer t)))

(defun kill-scratch-buffer ()
  (let (kill-buffer-query-functions)
    (kill-buffer (current-buffer)))
  ;; no way, *scratch* shall live
  (prepare-scratch-for-kill)
  ;; Since we "killed" it, don't let caller try too
  nil)

(prepare-scratch-for-kill)
Sigma
fuente
4

Enlaces predeterminados de GNU Emacs:

C-xb*scratch*

o, más verbosamente

  1. M-xswitch-to-buffer
  2. Mecanografía: *scratch*
  3. Y luego RETpresionando la tecla.

El *scratch*búfer es el búfer seleccionado al inicio y tiene el modo principal Interacción Lisp . Nota: el modo para el *scratch*búfer está controlado por la variable initial-major-mode.


En general, puede crear tantos buffers de "scratch" como desee, y nombrarlos como quiera.

C-x bNAME

cambia al búfer NAME, creándolo si no existe. Un nuevo búfer no está asociado con un archivo en el disco hasta que use C-xC-w(o M-xwrite-file) para elegir un archivo donde debe guardarse.


M-xtext-mode cambia el modo principal del búfer actual al modo Texto.

Para encontrar todos los modos disponibles (es decir, sin requerir ningún paquete nuevo), puede obtener una lista escribiendo:

  1. M-xapropos-command
  2. Luego escriba: -mode$
  3. Y luego presione RET
Luke
fuente
2

Me gusta usar tampones de cero para cosas descartables. Sin embargo, tener solo uno es algo limitante, por lo tanto, tengo scratchun comando interactivo para abrir un nuevo búfer de memoria virtual (no importa cuántos ya existan):

(defun scratch ()
  "create a new scratch buffer to work in. (could be *scratch* - *scratchX*)"
  (interactive)
  (let ((n 0)
        bufname)
    (while (progn
             (setq bufname (concat "*scratch"
                                   (if (= n 0) "" (int-to-string n))
                                   "*"))
             (setq n (1+ n))
             (get-buffer bufname)))
  (switch-to-buffer (get-buffer-create bufname))
  (if (= n 1) initial-major-mode))) ; 1, because n was incremented

adoptado de: http://everything2.com/index.pl?node_id=1038451

pimenton
fuente
He estado usando esto durante seis semanas. Es genial, gracias! Pero ... Anoche, mi computadora con Windows se reinició. Perdí datos de mis buffers de memoria virtual, porque M-x recover-sessionno los recupero. ¿Alguien ha modificado esto para usar algo como make-temp-file?
daveloyall
1

¿Puedo sugerir crear un búfer vacío? Lo interesante es que primero crea el búfer y lo guarda después, si realmente lo desea.

(defun my-empty-buffer () 
  "Open a new empty buffer."
  (interactive)
  (let ((buf (generate-new-buffer "untitled")))
    (switch-to-buffer buf)
    (funcall (and initial-major-mode))
    (setq buffer-offer-save t)))

Tendrá que configurar el modo inicial-principal para que celebre en su archivo init y debe vincular my-empty-buffer a un acceso directo como C-n.

Cortesía de ergoemacs.

Nsukami _
fuente