Если я случайно закрыл рабочий буфер в Emacs, как мне создать новый рабочий буфер?
Если я случайно закрыл рабочий буфер в Emacs, как мне создать новый рабочий буфер?
Ответы:
Просто заново создать буфер, переключаясь на него: C-x b *scratch* RET. Начиная с Emacs 21.2, если вы создаете буфер с именем *scratch*, он автоматически переводится в режим взаимодействия с Lisp .
*scratch*а затем переключусь обратно, он автоматически переключится в режим lisp-взаимодействия.
.emacs).
Возможно, лучше *scratch*автоматически заново создавать буфер всякий раз, когда он удаляется, и избегать повторного ввода его имени.
(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)
Привязки по умолчанию для GNU Emacs:
C-xb*scratch*
или, более многословно
switch-to-buffer *scratch**scratch*Буфер представляет собой буфер , выбранный при запуске, и имеет основной режим лисповского взаимодействия . Примечание: режим для *scratch*буфера управляется переменной initial-major-mode.
В общем, вы можете создать столько «чистых» буферов, сколько захотите, и называть их по своему выбору.
C-x bNAME
переключается в буфер NAME, создавая его, если он не существует. Новый буфер не связан с файлом на диске, пока вы не используете C-xC-w(или M-xwrite-file), чтобы выбрать файл, в котором он должен быть сохранен.
M-xtext-mode изменяет основной режим текущего буфера на текстовый режим.
Чтобы найти все доступные режимы (то есть, не требуя каких-либо новых пакетов), вы можете получить список, набрав:
apropos-command-mode$ Мне нравится использовать скретч-буферы для одноразовых вещей. Имея только один, это несколько ограничивает, поэтому у меня есть scratchинтерактивная команда для открытия нового чистого буфера (независимо от того, сколько уже существует):
(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
M-x recover-sessionчто не восстанавливает их. Кто-нибудь изменил это, чтобы использовать что-то вроде make-temp-file?
Могу ли я предложить создать пустой буфер? Интересно то, что вы сначала создаете буфер, а потом сохраняете его, если действительно хотите.
(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)))
Вам нужно будет установить initial-major-mode на lisp в вашем файле инициализации, и вы должны привязать my-empty-buffer к ярлыку, подобному C-n.
Предоставлено ergoemacs