← All posts tagged Emacs

hatred
Emacs memo org artist ditaa ditaa — DIagrams Through Ascii Art — "компилятор" для ASCII диаграмм, на выходе создаёт достаточно приятные для глаза диаграммки:
Официальный сайт: ditaa.sourceforge.net
Demo: ditaa.org — сервис, можно посмотреть на возможности программки и посоздавать свои
Дополнения: ditaa-addons.sourceforge.net

Ditaa дружит с org-babel в emacs org-mode, так что можно создавать диаграммы прямо в режиме заметки в Org mode.

Для начала, нужно добавить в .emacs (или .emacs.d/init.el) следующее:
~~~~~~~~~~~~~~~~
;;
;; Org Babel
;;
(require 'ob-tangle)
(setq org-ditaa-jar-path "/usr/share/emacs/site-lisp/org_contrib/scripts/ditaa.jar")
;(setq org-plantuml-jar-path "~/java/plantuml.jar")

(defun bh/display-inline-images ()
(condition-case nil
(org-display-inline-images)
(error nil)))
(add-hook 'org-babel-after-execute-hook 'bh/display-inline-images 'append)


; Make babel results blocks lowercase
(setq org-babel-results-keyword "results")


(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote ((emacs-lisp . t)
(dot . t)
(ditaa . t)
(R . t)
(python . t)
(ruby . t)
(gnuplot . t)
(clojure . t)
(sh . t)
(ledger . t)
(org . t)
(plantuml . t)
(latex . t))))

; Do not prompt to confirm evaluation
; This may be dangerous — make sure you understand the consequences
; of setting this — see the docstring for details
(setq org-confirm-babel-evaluate nil)
~~~~~~~~~~~~~~~~

С моей версией emacs-org-mode из AUR ditaa уже идёт комплекте. Если нет, скачайте с домашнего сайта и укажите путь до него.

само рисование осуществляется в блоке кода:
~~~~~~~~~~~~~~~~
#+begin_src ditaa :file out.png
...
...
...
#+end_src
~~~~~~~~~~~~~~~~

Теперь небольшой хинт. Есть в штатной поставке emacs 24 такой минорный режим, как artist-mode — позволяет рисовать в ASCII, его-то можно использовать для рисования диаграмм, далее вспоминаем про такую штуку как narrowing (ну хоть убейте — не знаю как перевести, а если кратко: то можно выделить блок текста, так, что бы все изменения были только с ним, а остальные части документа вообще бы никак не могли быть доступны для изменения). Посему:
Шаг 1: жмем сколько нужно RET (в народе — Enter) в блоке #+begin_src/#+end_src — выделяем себе пространство для дальнейшего манёвра
Шаг 2: выделяем весь этот блок и жмем 'C-x n n' (если включен CUA mode, то вместе C-x нужно нажимать или C-x C-x или S-C-x, я использую второе) — тем самым мы перейдём к редактированию только этого блока
Шаг 3: выключаем artist-mode: M-x artist-mode
Шаг 4: рисуем диаграмму
Шаг 5: выключаем artist-mode: M-x artist-mode
Шаг 6: убираем выделение региона: 'C-x n w'
Шаг 7: Жмем 'C-c C-c' находясь внутри блоке #+begin_src/#+end_src — запустится ditta и картинка покажется ниже блока кода.

Для себя, включение и выключение Artist mode я повесил на клавиатурную комбинацию 'C-x a', а выбор инструмента рисования в режиме Artist mode на C-s (инкрементный поиск тут не нужен)

И на последок, скрин-каст про artist mode: cinsk.org
hatred
Emacs org-mode ditaa а есть способ как-то рисовать диаграммы прямо в emacs, что бы получилась эдакая смесь OrgTbl и ArtistMode?

пока рисую в ArtistMode, но очень хотелось бы, что бы, к примеру, блок динамически изменял размеры, при вводе текста в нём, аналогично, как делается в TblMode
hatred
Emacs ? help что пять лет назад, что сейчас мучаюсь вопросом: как сделать так, что бы при скроле окна мышкой (колесом ли или за скролл бар), курсов оставался на той строчке, где я его оставил, даже если текущая строка стала out-of-current-view.

профит? при наличии paren-mode просмотреть бегло блок кода межу открывающими-закрывающими скобками, особенно в легаси коде где поехало форматирование (не, ну можно конечно для начала переформатировать весь текст, вот только большие патчи имеют слабую тенденцию приниматься).

В общем реально ли нечто подобное сделать?

PS но вот такие записи наводят тоску: compgroups.net