Подтвердить что ты не робот

Как открыть временный буфер

В течение очень долгого времени я сделал: C-x b, а затем некоторое "уникальное" имя, например xbxb. Поэтому я использую switch-to-buffer с несуществующим буфером. Вы можете себе представить, что мне показывает C-x C-b: Множество таких имен. xbxb, xbxbxxx.... Это действительно раздражает через некоторое время (неделя или около того), так как я обнаружил, что я уже использовал все хорошие имена.

Есть ли более канонический способ открытия нового буфера? Если я хочу запустить оболочку еще раз, я скажу C-u M-x shell. Что-то по этой линии было бы идеальным.

4b9b3361

Ответ 1

Вы можете использовать make-temp-name для создания имени файла или буфера со случайным постфиксным кодом. С этим в качестве основы вы можете написать примерно так:

(defun generate-buffer ()
  (interactive)
  (switch-to-buffer (make-temp-name "scratch")))

где "scratch" может быть заменен любым префиксом, который вам нужен.

Ответ 2

сделайте так:

(defun new-scratch ()
  "open up a guaranteed new scratch buffer"
  (interactive)
  (switch-to-buffer (loop for num from 0
                          for name = (format "blah-%03i" num)
                          while (get-buffer name)
                          finally return name)))

Ответ 3

Я подписался, чтобы ответить на этот вопрос (потому что я много использую эту функцию, поэтому я подумал, что было бы полезно поделиться ею здесь):

(defun tmpbuf (buf)
  "open a buffer,
if it doesn't exist, open a new one"
  (interactive "sBuffer name: ")
  (switch-to-buffer
   (get-buffer-create (concat "*" buf "*"))))

Ответ 4

Я не совсем уверен, чего вы хотите. Вы говорите, что "я обнаружил, что я уже использовал все хорошие имена", поэтому позволить Emacs генерировать имена не будет хорошим, но если вы собираетесь указывать имя самостоятельно, оно больше не будет каноническим чем C-x b name RET.

В противном случае одна из функций, которые уже предложены, чтобы позволить вам ввести строку и использовать ее с каким-то шаблоном "tmp buffer", чтобы создать новое имя, казалось бы разумным.

Или scratch.el может оказаться полезным, если то, что вы действительно хотели, было единственным временным буфером для основного режима.

Вы почти наверняка извлекли выгоду из привязки C-x C-b к ibuffer и использования фильтров и/или групп для выделения временных буферов из более важных. Это будет иметь дело с переполнением списка.

Вы казались странно стойкими к написанию новой функции? Даже если бы что-то было встроено, нет ничего плохого в использовании пользовательских функций, - как правило, вы настраиваете Emacs по своему вкусу.

Ответ 5

(defun yashi/new-scratch-buffer-in-org-mode ()
  (interactive)
  (switch-to-buffer (generate-new-buffer-name "*temp*"))
  (org-mode))
(bind-key "<f7>" 'yashi/new-scratch-buffer-in-org-mode)

Я использую deft для быстрого заметок, но иногда я знаю, что мне не нужен контент, но нужен буфер в режиме Org. Для этого он служил мне хорошо. Хит F7 снова создаст буфер с похожим именем *temp*<2> в моем случае, согласно Uniquify.

Кстати, вот вам команда запуска нового буфера с новым ловким файлом, если вы заинтересованы. F6, чтобы запустить его.

(defun yashi/deft-new-file ()
  (interactive)
  (let ((deft-filter-regexp nil))
    (deft-new-file)))
(bind-key "<f6>" 'yashi/deft-new-file)

Ответ 6

Я использую это, чтобы открыть временный буфер. Хорошая вещь? Помогает мне отслеживать, какие буферы я открывал, и когда.

`` `

(defun tmp-buffer()
  "Make a temporary buffer and switch to it - Like C-n for Sublime etc"
  (interactive)
  (switch-to-buffer (get-buffer-create (concat "tmp-" (format-time-string "%m.%dT%H.%M.%S")))))

`` `

Ответ 7

Вам предоставляется доступ к чужой Emacs, и вы хотите открыть новый буфер. Если вам повезет, этот человек установил enable-recursive-minibuffers в t. Если нет, вы можете временно сделать M-: для выражения этого выражения Emacs Lisp (не забудьте восстановить этот параметр позже):

(setq enable-recursive-minibuffers t)

Теперь вы открываете новый буфер:

  • C-x b запрашивает имя буфера
  • C-u M-: будет eval и распечатать результат выражения в приглашении минибуфера:

    (random)
    
  • Это дает вам случайное число во всем диапазоне представляемых целых чисел (включая отрицательные), что очень маловероятно. Нажмите Return, чтобы перейти к новому буферу.