Ponownie otwórz bufor * scratch *

26

Jeśli przypadkowo zamknąłem bufor scratch w Emacsie, jak mogę utworzyć nowy bufor scratch?

Luke
źródło
Proszę nie zadawać pytań wyłącznie w celu udzielenia odpowiedzi na własne pytania, zwłaszcza jeśli są one łatwe do udzielenia odpowiedzi.
Edgar Aroutiounian
8
@EdgarAroutiounian Można zadać i odpowiedzieć na własne pytanie ! Należy jednak unikać zadawania prostych pytań podczas prywatnej wersji beta: prywatna wersja beta nadaje ton witrynie.
Gilles „SO- przestań być zły”
1
@Gilles Oczywiście udzielanie odpowiedzi na własne pytania jest w porządku, ale jest dość podejrzane, gdy zadajesz 3 pytania jeden po drugim, każde z odpowiedzią natychmiast po zadaniu pytania.
Edgar Aroutiounian
2
@EdgarAroutiounian, Jon Ericson chce, abyśmy odpowiedzieli na proste pytania AZ. Powitanie
Łukasz
2
Myślę, że to dość sprawiedliwe - dla nowego użytkownika często nie jest oczywiste, że w buforze scratch nie ma nic szczególnego , a odpowiedź @ Sigmy jest całkiem fajna.
Mark Aufflick

Odpowiedzi:

29

Wystarczy odtworzyć bufor poprzez przełączenie do niego: C-x b *scratch* RET. Od Emacsa 21.2, jeśli utworzysz bufor o nazwie *scratch*, to automatycznie przejdzie on w tryb interakcji Lisp .

Gilles „SO- przestań być zły”
źródło
Dlaczego potrzebujesz specjalnej funkcji? Dla mnie, jeśli zabiję, *scratch*a następnie wrócę do niego, to automatycznie przejdzie w tryb interakcji lisp.
Tikhon Jelvis,
@TikhonJelvis Ah, rzeczywiście. Mam tę funkcję, ponieważ nie zrobiła tego w starszych wersjach (zmiana pochodzi z 21.2, która nie jest nowa w wartościach bezwzględnych, ale nowsza niż większość moich .emacs).
Gilles „SO- przestań być zły”
Tak. Emacs 21.2 został wydany mniej więcej wtedy, gdy po raz pierwszy użyłem komputera . To całkiem duża różnica absolutna;).
Tikhon Jelvis
7

Prawdopodobnie lepiej jest *scratch*automatycznie utworzyć bufor automatycznie za każdym razem, gdy zostanie usunięty, i unikać konieczności ponownego wpisywania jego nazwy.

(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
źródło
4

Domyślne wiązania GNU Emacs:

C-xb*scratch*

lub bardziej szczegółowo

  1. M-xswitch-to-buffer
  2. Pisanie na maszynie: *scratch*
  3. A następnie uderzenie w RETklawisz.

*scratch*Bufor jest wybrany podczas ładowania, bufor, i jest główną trybu Lisp interakcji . Uwaga: tryb *scratch*bufora jest kontrolowany przez zmienną initial-major-mode.


Zasadniczo możesz utworzyć dowolną liczbę buforów „scratch” i nazwać je, jak chcesz.

C-x bNAME

przełącza się na bufor NAME, tworząc go, jeśli nie istnieje. Nowy bufor nie jest powiązany z plikiem na dysku, dopóki nie użyjesz C-xC-w(lub M-xwrite-file), aby wybrać plik, w którym powinien zostać zapisany.


M-xtext-mode zmienia tryb główny bieżącego bufora na tryb tekstowy.

Aby znaleźć wszystkie dostępne tryby (to znaczy, nie wymagając żadnych nowych pakietów), możesz uzyskać listę, wpisując:

  1. M-xapropos-command
  2. Następnie wpisz: -mode$
  3. A następnie naciśnij RET
Luke
źródło
2

Lubię używać buforów scratch do wyrzucania rzeczy. Posiadanie tylko jednego jest nieco ograniczające, dlatego mam scratchjako interaktywne polecenie do otwierania nowego bufora scratch (bez względu na to, ile już istnieje):

(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

przyjęte z: http://everything2.com/index.pl?node_id=1038451

papryka
źródło
Używam tego od sześciu tygodni. To wspaniale, dzięki! Ale ... Ostatniej nocy mój komputer z systemem Windows zrestartował się. Straciłem dane ze swoich buforów scratch, ponieważ M-x recover-sessionich nie odzyskuję. Czy ktoś zmodyfikował to, aby użyć czegoś takiego make-temp-file?
daveloyall
1

Czy mogę zasugerować utworzenie pustego bufora? Interesujące jest to, że najpierw tworzysz bufor, a następnie zapisujesz go, jeśli naprawdę chcesz.

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

Będziesz musiał ustawić tryb początkowy-główny na seplenienie w swoim pliku init i powinieneś powiązać mój pusty bufor z skrótem jak C-n.

Dzięki uprzejmości ergoemacs

Nsukami _
źródło