É possível criar um buffer de modo org * scratch *?

13

Enquanto trabalhava em um documento no emacs, muitas vezes me vejo abrindo um novo buffer, fazendo algo no modo organizacional, copiando o conteúdo do modo organizacional e colando-o no meu documento. Eu costumava criar um novo documento em modo organizacional toda vez que precisava fazer isso. Agora eu tenho um arquivo ~/.scratch.orgonde mantenho meu trabalho.

Seria possível criar um *org-scratch*buffer que se comportasse de forma análoga ao *scratch*buffer?

Brian Fitzpatrick
fonte
3
Existe algo inconveniente em fazer M-x org-modequando você está no *scratch*buffer?
Xj6
1
@XiangJi Nem sequer pensou em fazer isso. Essa é uma ótima ideia.
Brian Fitzpatrick

Respostas:

11

O modo principal principal do *Scratch*buffer é controlado pela variável initial-major-mode- o valor precisa ser um símbolo (o que, em termos leigos, significa colocar uma aspas simples antes do nome do modo principal): http: //www.gnu. org / software / emacs / manual / html_node / elisp / Auto-Major-Mode.html

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

EDIT : Com base em um comentário do pôster original, aqui está uma função de exemplo para criar buffers que não visitam arquivos em ordem sequencial com o modo principal de 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))) ))))
lista de leis
fonte
Então seria possível ter dois *Scratch*buffers então?
Brian Fitzpatrick
Adicionei uma função de exemplo que cria novos buffers que não visitam arquivos em ordem numérica e incluí uma org-modedesignação. O nome pode ser alterado hello-worldpara qualquer coisa que o usuário desejar que seja reconhecida pelo sistema operacional - por exemplo, o Windows não gosta de astrisks.
lawlist
Muito legal. Obrigado por olhar para isso!
Brian Fitzpatrick
Estou feliz por ter sido capaz de ajudar. Decidi lançar o resultado e exibir o buffer de uma só vez - a funcionalidade é a mesma, mas a função parece um pouco mais compacta dessa maneira. :)
lawlist
11

Existe uma extensão chamada scratch, que permite a criação de buffers de rastreio específicos ao modo. Está disponível no MELPA, portanto você deve poder instalá-lo facilmente.

Com este pacote instalado, quando você estiver em um org-modebuffer, poderá executar M-xscratchpara obter um buffer temporário org-mode.

Se você der um argumento de prefixo, terá a oportunidade de escolher o modo (em vez de selecionar o modo principal atualmente ativo).

François Févotte
fonte
Eu tentei isso, mas acho que o buffer temporário é excluído depois que você sai do emacs. O buffer de arranhão original não, ele se salva automaticamente também. Isso está certo ou eu perdi alguma coisa?
Vivi
1
A menos que você faça algo especial, o *scratch*buffer original não persiste entre as sessões, nem é salvo quando você sai do emacs. Tente executar emacs -qpara obter o comportamento padrão, não modificado pelo seu arquivo init.
François Févotte
Interessante, eu não sabia disso. Acabei de investigar isso e descobri que é uma característica do Aquamacs. Também descobri que o Aquamacs vem com o Command-N para vinculação de teclas para criar um novo arranhão em outro quadro (este não é persistente nas sessões).
Vivi
2
A propósito, existe um pacote no MELPA chamado persistent-scratch que afirma criar buffers de scratch persistentes.
Vivi
5

Eu acho que uma maneira simples de conseguir isso é simplesmente executar M-x org-modequando você estiver no *snatch*buffer e, assim, ativar org-modediretamente. Isso pode ser aplicado para ativar qualquer modo principal.

xji
fonte
A maneira mais simples de longe.
user2699
Isso é certamente útil. Eu gosto de ter um buffer de rascunho dedicado exclusivamente ao modo organizacional, já que geralmente uso o buffer de rascunho para outras coisas.
Brian Fitzpatrick
2

Tente o seguinte:

  1. Cx b (digite um nome para seu novo buffer temporário, por exemplo "asdf")
  2. Mx org-mode (alterar o modo principal do buffer "asdf")

Ao fechar esse buffer, você não receberá uma consulta para salvar seu conteúdo. Ou seja, você obtém um buffer zero adequado. E o *scratch*buffer permanece intacto.

undostres
fonte