Как я могу открыть временный буфер
В течение очень долгого времени я сделал: Cx b, а затем какое-то "уникальное" имя, например xbxb
, Поэтому я использую switch-to-buffer
с несуществующим буфером. Вы можете представить, что мне показывает Cx Cb: много таких имен. xbxb
, xbxbxxx
.... Это действительно раздражает через некоторое время (неделю или около того), так как я обнаружил, что уже использовал все хорошие имена.
Есть ли более канонический способ открытия нового буфера? Если я хочу запустить оболочку еще раз, я говорю Cu Mx shell. Что-то по этой линии было бы идеально.
8 ответов
Ты можешь использовать make-temp-name
генерировать имя для файла или буфера со случайным постфиксом. Исходя из этого, вы можете написать что-то вроде этого:
(defun generate-buffer ()
(interactive)
(switch-to-buffer (make-temp-name "scratch")))
где "царапина" может быть заменена любым префиксом, который вы хотите.
Сделай это так:
(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)))
Я подписался только для того, чтобы ответить на этот вопрос (потому что я часто использую эту функцию, поэтому я подумал, что было бы полезно поделиться ею здесь):
(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 "*"))))
(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)
Я использую ловкость для быстрого создания заметок, но иногда я знаю, что мне не понадобится контент, но мне нужен буфер в режиме Org. За это он мне хорошо служил. Нажмите F7 еще раз, чтобы создать буфер с похожим именем, *temp*<2>
в моем случае, согласно Uniquify.
Кстати, вот команда для запуска нового буфера с новым файлом deft, если вам интересно. F6, чтобы запустить его.
(defun yashi/deft-new-file ()
(interactive)
(let ((deft-filter-regexp nil))
(deft-new-file)))
(bind-key "<f6>" 'yashi/deft-new-file)
Я не совсем уверен, что вы хотите. Вы говорите: "Я обнаружил, что я уже использовал все хорошие имена", поэтому позволить Emacs генерировать имена не будет ничего хорошего, но если вы собираетесь указать имя самостоятельно, оно не станет более каноническим чем Cxb name
RET.
В противном случае, одна из функций, уже предложенных, позволила вам ввести строку и использовать ее с каким-то шаблоном "tmp buffer" для создания нового имени, что показалось бы разумным.
Или scratch.el может оказаться полезным, если на самом деле вам нужен только один временный буфер для основного режима.
Вы почти наверняка выиграете от привязки CxCb к ibuffer
и использование фильтров и / или групп для отделения временных буферов от более важных. Это будет иметь дело с тем, что список будет загроможден.
Вы кажетесь странным противником написания новой функции? Даже если что-то встроено, нет ничего плохого в использовании пользовательских функций - обычно вы настраиваете Emacs по своему вкусу.
Я использую это, чтобы открыть временный буфер. Хорошая вещь? Помогает мне отследить, какие буферы я открыл и когда.
`` `
(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")))))
`` `
Я искал решение, для которого у меня есть свобода дать имя или оно генерирует имя случайным образом. Я объединил ответ @dotemacs и ответ RP Dillon . Я n00b в elisp, поэтому мне потребовалось около получаса, чтобы исправить некоторые из моих глупых ошибок.
(defun mm/generate-temp-buffer (buf)
"A function to generate temprory buffers using either
a random name or given name"
(interactive "sNew temp buffer name: ")
(switch-to-buffer
(get-buffer-create
(concat "*tmp*"
(if (equal buf "")
(make-temp-name "")
buf)
"*")
)))
Вот как это работает:
- вы запускаете функцию (
M-x mm/generate-temp-buffer
) - вас просят назвать имя. 2.1. если вы что-то наберете, он создаст буфер с именем
*tmp*YOUR_STRING*
2.2. если вы не дадите ввод и просто нажмете RET, он создаст буфер с именем что-то вроде*tmp*o8f4Mf*
Надеюсь, это будет полезно другим и сэкономит чье-то время.
Вам предоставлен доступ к чужому Emacs, и вы хотите открыть новый буфер. Если вам повезет, этот кто-то установил enable-recursive-minibuffers
в t
, Если нет, вы можете временно выполнить M-: для оценки этого выражения Emacs Lisp (не забудьте восстановить этот параметр позже):
(setq enable-recursive-minibuffers t)
Теперь вы открываете новый буфер:
- Cxb запрашивает имя буфера
CuM-: вычислит и выведет результат выражения в подсказку минибуфера:
(random)
Это дает вам случайное число во всем диапазоне представимых целых чисел (включая отрицательные), которое вряд ли будет уже взято. Нажмите Return, чтобы завершить, чтобы переключиться на новый буфер.