Можно ли создать буфер «режим нуля» *?

13

Работая над документом в emacs, я часто открываю новый буфер, что-то делаю в режиме org, копирую содержимое режима org и вставляю его в мой документ. Я использовал для создания нового документа в режиме org каждый раз, когда мне нужно было сделать это. Теперь у меня есть файл, ~/.scratch.orgгде я храню эту работу.

Можно ли создать *org-scratch*буфер, который будет вести себя аналогично *scratch*буферу?

Брайан Фицпатрик
источник
3
Есть ли что-то неудобное в работе, M-x org-modeкогда вы находитесь в *scratch*буфере?
xji
1
@XiangJi Даже не думал об этом. Это отличная идея.
Брайан Фитцпатрик

Ответы:

11

Первоначальный мажорный режим для *Scratch*буфера контролируется переменной initial-major-mode- значение должно быть символом (что в терминах непрофессионала означает поставить одинарную кавычку перед именем мажорного режима): http: //www.gnu. орг / программное обеспечение / Emacs / ручной / html_node / Elisp / Auto-Major-Mode.html

(setq initial-major-mode 'org-mode)

РЕДАКТИРОВАТЬ : на основе комментария оригинального постера, вот пример функции для создания буферов, не посещающих файлы в последовательном порядке с основным режимом org-mode:

(defun my-scratch-buffer ()
"Create a new scratch buffer -- \*hello-world\*"
(interactive)
  (let ((n 0)
        bufname buffer)
    (catch 'done
      (while t
        (setq bufname (concat "*hello-world"
          (if (= n 0) "" (int-to-string n))
            "*"))
        (setq n (1+ n))
        (when (not (get-buffer bufname))
          (setq buffer (get-buffer-create bufname))
          (with-current-buffer buffer
            (org-mode))
          ;; When called non-interactively, the `t` targets the other window (if it exists).
          (throw 'done (display-buffer buffer t))) ))))
lawlist
источник
Так возможно ли будет иметь два *Scratch*буфера?
Брайан Фитцпатрик
Я добавил пример функции, которая создает новые не-файловые буферы в числовом порядке, и я добавил org-modeобозначение. Имя может быть изменено с hello-worldлюбого на то, что пользователь желает, который распознается операционной системой - например, Windows не любит астриски.
юрист
Очень круто. Спасибо за просмотр!
Брайан Фитцпатрик
Я счастлив, что смог помочь. Я решил бросить результат и показать буфер одним махом - функциональность такая же, но функция выглядит немного более компактной в этом смысле. :)
юрист
11

Называется расширение scratch, которое позволяет создавать специфичные для режима рабочие буферы. Он доступен от MELPA, поэтому вы сможете легко установить его.

С установленным пакетом, когда вы находитесь в org-modeбуфере, вы можете запустить, M-xscratchчтобы получить чистый буфер org-mode.

Если вы дадите префиксный аргумент, вы получите возможность выбрать режим (вместо выбора текущего активного основного режима).

Франсуа Февотт
источник
Я пробовал это, но я думаю, что рабочий буфер удаляется после выхода из Emacs. Оригинальный буфер очистки не делает этого, он также автоматически сохраняет себя. Это правильно или я что-то упустил?
Виви
1
Если вы не сделаете что-то особенное, исходный *scratch*буфер не сохраняется между сеансами и не сохраняется при выходе из emacs. Попробуйте запустить, emacs -qчтобы получить стандартное поведение, не измененное вашим файлом инициализации.
Франсуа Февот
Интересно, я этого не знал. Я только что исследовал это, и я обнаружил, что это особенность Aquamacs. Я также обнаружил, что Aquamacs поставляется с комбинацией клавиш Command-N для создания новой царапины в другом кадре (этот не сохраняется во время сеансов).
Виви
2
Кстати, в MELPA есть пакет с именем persistent-scratch, который утверждает, что создает постоянные чистые буферы.
Виви
5

Я думаю, что один простой способ добиться этого - просто запустить, M-x org-modeкогда вы находитесь в *snatch*буфере, и, таким образом, включить org-modeнапрямую. Это может быть применено для включения любого основного режима.

xji
источник
Самый простой способ на сегодняшний день.
user2699
Это, безусловно, полезно. Мне нравится иметь чистый буфер, предназначенный исключительно для режима org, так как я часто использую чистый буфер для других вещей.
Брайан Фитцпатрик
2

Попробуй это:

  1. Cx b (введите имя для вашего нового буфера очистки, например, «asdf»)
  2. Mx org-mode (изменить основной режим буфера "asdf")

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

undostres
источник