Emaranhado de origem organizacional de uma linha

7

Às vezes, especialmente ao fazer anotações, um arquivo organizacional alfabetizado pode conter blocos de origem de uma linha, da seguinte maneira:

* Taking notes
:PROPERTIES:
:tangle: whatever.pl
:comments: org
:END:

Perl set command
#+BEGIN_SRC perl
set $random_var=1;
#+END_SRC

Perl unset command (just making it up... :P)
#+BEGIN_SRC perl
unset $random_var;
#+END_SRC

Para tais aplicações, o #+BEGIN_SRC...#+END_SRCpragma parece ser um exagero. Modelos fáceis reduzem a digitação, mas o documento organizacional ainda parece um pouco exagerado.

Existe uma maneira fácil de fazer isso? Eu sei que uma linha que começa com a :chega ao texto literal automaticamente. Existe uma maneira de fazer algo semelhante com org-emaranhado?

Estou procurando uma solução parecida com esta, ou pelo menos próxima a essas linhas, mantendo as facilidades de realce e emaranhamento da fonte no modo pai:

* Taking notes
:PROPERTIES:
:tangle: whatever.pl
:comments: org
:mode: perl
:END:

Perl set command
: set $random_var=1;

Perl unset command (just making it up... :P)
: unset $random_var;

É mais limpo, fácil de olhar e, IMHO, um pouco menos barulhento.

Todas as sugestões serão apreciadas. Desde já, obrigado!

DJ
fonte
Que tal um comando de ocultar / mostrar para o arquivo inteiro o início e o fim dos blocos de código-fonte, deixando o que estiver entre eles? O início eo fim teria ...em vez disso, ou você pode usar qualquer taquigrafia você gosta para indicar texto oculto (por exemplo, um rosto sorridente ), ou você pode ter nenhum indicador qualquer para as linhas ocultas
lawlist
@lawlist Não consigo entender seu exemplo ... você pode mostrar uma demonstração?
deejay
11
Em um buffer que contém seu primeiro exemplo, avalie o seguinte trecho para ocultar o texto: (save-excursion (goto-char (point-max)) (while (re-search-backward "#\\+BEGIN_SRC\\|#\\+END_SRC" nil t) (let ((ov (make-overlay (line-beginning-position) (1+ (line-end-position))))) (overlay-put ov 'invisible t)))) Ao concluir o teste, avalie (remove-overlays). Este é apenas um exemplo simples de como ocultar texto. Você pode criar marcadores de posição para o texto oculto que parece ...ou o que quiser - por exemplo hidden text lies here,. Avaliar código comM-x eval-expression
lawlist
@lawlist thanks. que limpa o buffer significativamente. Eu teria ficado mais ansioso pela solução de modo organizacional proposta acima, no entanto. Uma pergunta: I tentou envolver seu código em uma função: (defun clean-org-buffer() (save-excursion (goto-char (point-max)) (while (re-search-backward "#\\+BEGIN_SRC\\|#\\+END_SRC" nil t) (let ((ov (make-overlay (line-beginning-position) (1+ (line-end-position))))) (overlay-put ov 'invisible t)))))No entanto, avaliar esta função resulta em erro da seguinte forma: Wrong type argument: commandp, clean-org-buffer. Você pode sugerir como ajudar isso?
deejay
11
Você pode usar M-x eval-expression RET (clean-org-buffer) RET(sem nenhuma modificação no snippet) e / ou adicionar um (interactive)pouco antes do snippet no meu comentário anterior (2 parágrafos acima) para que ele possa ser usado de forma interativa M-x clean-org-buffer.
lawlist

Respostas:

4

From (org) Estrutura dos blocos de código :

Os blocos de código ativo também podem ser especificados em linha usando

src_<language>{<body>}

ou

src_<language>[<header arguments>]{<body>}

Portanto, você deve poder usar em src_perl{set $random_var=1;}vez do bloco completo.

Tyler
fonte
11
Isso não parece funcionar. 1) O realce da sintaxe desapareceu, 2) O código emaranhado vem como um comentário - não como uma declaração no arquivo de saída (seja o que for .pl, neste caso). Estou fazendo errado?
deejay