Org-mode Emacs как перестать верить в GUI
Мои заметки на полях.

orgmode_c_precents.png

Удивительная вещь, в основном я пользуюсь для управления заданиями GNOME GTG синхронизированный через Dropbox(бойся облаков) и моё желание покопаться в org-mode было чисто из-за того, что GNOME GTG неудобен для мелких заданий, скорее для крупных… в день длинной. Но чем больше я узнавал про org-mode тем больше в нем зависал, списки, код, чекбоксы, создание таблиц и графиков.

Главный принцип - никаких сложных форматов и бинарных частей, все в plain-text и это подкупает.

Содержание

1 Введение и сбор литературы

Краткая справка по командам а также основной сайт со всеми инструкциями.

Статьи на русском:

Org-mode всеобъемлящий и уместить все его возможности в одной статье не выйдет. При всем огромно объеме всем я например не пользуюсь. Поэтому из того чем пользуюсь разобью на две части, это Язык разметки - т.е. применение org-mode для оформления текста, сложнее и с большими возможностями чем в Markdown но меньше загружено кодом по сранению с LaTeX. Вторая часть это Органайзер т.е. назначение заданий, календарь, напоминания.

2 Язык разметки

Зачем ,написание статей, как эта и публикация их. Содержание персональной wiki org-wiki. Литературное программирование и администрирование. итак кратко язык разметки.

2.1 Заголовки и уровни

Ну тут и рассказывать, ставиш * в начале строки, после неё пишешь название, чем больше звездочек, тем больше глубина списка

* Главный уровень
** Подуровень
*** Подподуровень
# комментарий

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

Управляющие слова, поэкспериментируйте с ними поставив в начале вашего org файла:

#+STARTUP:  showall
#+STARTUP: indent
#+STARTUP: hidestars

2.2 Выделение текста

*жирный* 
/курсив/
 _подчеркнутый_ 
=выровненный текст= 
+зачеркнутый+
~import кода текст~

Ну их довольно много жирный, курсив подчеркнутый , выровненный текст зачеркнутый import кода текст

2.3 Врезки

Есть специальная конструкция #+BEGIN_QUOTE .. #+END_QUOTE

Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system cite:dominik2003-org.

2.4 Ссылки в документе

Ну вот ссылка на статью по теме , формат указан ниже, также можно заметить что интернет ссылки, подхватываются автоматически, а ссылки на файлы дожны начинаться с заветного слова file:

[[ссылка][описание]]       или альтернативно           [[ссылка]]
[[file:адрес абсолютный или относительный]] 

2.5 Вставка картинок

Попробуем вставить сюда картинку.

#+CAPTION: This is Science Bastard
#+LABEL: fig:SED-AVATAR
[[file://../../avatar/docsleepless.jpg]]

Ссылка на метку(label) в [[fig:SED-AVATAR][тексте]].

а отобразить её в Emacs можно с помощью включения M-x iimage-mode

docsleepless.jpg

Рис. 2.: This is Science Bastard

Метка Label нужна для ссылок при экспорте, наример при экспорте в LaTeX.

Ссылка на метку(label) в тексте.

2.6 Чекбоксы

Состоят из - [] ,иногда для количественной оценки вставляют [/] или для процентой [%], вставляют сразу перед списком чекбоксов.

*** Обычные(пример чикбоксов) [0/3]
 - [ ] Инна
 - [ ] Маша
 - [ ] Даша

Простановка нужного чекбокса осуществляется клавишами C-c C-c в данной строке.

*** Процентные чекбоксы:[75%]
 - [X] 1
 - [X] 2
 - [X] 3
 - [ ] 4

2.6.1 Помыть посуду [2/3]:

  • [ ] F
  • [X] G
  • [X] O

2.7 Вставка LaTeX фрагментов

Это очень круто, надо поставить только пакет CDLaTeX1, а дальше все просто, для экспорта в html используется mathjax Θ Вот и вставили символ посреди текста, моё мнение что это лучше чем генерация картинок из формул, хотя такая опция тоже есть.

GUI Emacs может автоматически преобразовывать формулы и символы после ввода комбинации C-c C-x \, повторный ввод, отменяет этот режим.

  Одна формула
  \begin{equation}
   \frac{1}{f}=\sqrt[3]{\mu RT}
  \end{equation}
  Две формулы

  #+NAME: eqn:1
  \begin{eqnarray}
   pV&=\frac{m}{\mu} RT\\
   pV&=\frac{m}{\mu} RT
  \end{eqnarray}

Мало же он знает уравнение,только это [\[eqn:1]]

Одна формула

\begin{equation} \frac{1}{f}=\sqrt[3]{\mu RT} \end{equation}

Две формулы

\begin{eqnarray} pV&=\frac{m}{\mu} RT\\ pV&=\frac{m}{\mu} RT \end{eqnarray}

Конструкция #+NAME работает также с кодовыми блоками.

2.7.1 TODO Ссылки на формулы в тексте

увы по ним нельзя прыгать как в LaTeX \ref(конструкция)

2.7.2 Экспорт формул в Wordpress

этот кусок нужен для экспорта в данный блог

#+HTML: [lаtex]
код
#+HTML: [/lаtex]

2.7.3 Автоматическое преобразование и экранирование символов

Согласно справке следующие символы '^','_','{}' автоматически подвергаются преобразованию.

Локальное решение поместить в начале org файла

# это полностью отключит преобразование
#+OPTIONS: ^:nil
#+OPTIONS: _:nil

# это будет преобразовывать все что в скобках
#+OPTIONS: ^:{}
#+OPTIONS: _:{}

W^T_F W^{T}_{F}

W^T_F W^{T}_{F}

для радикальных мер можно задать эти параметры в управляющем файле настроек (например .emacs)

(setq org-export-with-sub-superscripts nil)
(setq org-use-sub-superscripts '{})

Ручное экранирование, например в блоках кода описывающих сам org-mode. Пример C-c '
:

*C-c '\\*

Документация http://orgmode.org/manual/Special-symbols.html

2.8 Вставка таблиц

Это отдельный мир, с отдельным меню Tbl, при вставке, таблица автоматически выравнивает поля и в отличии от LaTeX вполне читабельна,хотя наверное слишком сложные вещи лучше делать в calc.

Как видно в примере ниже, поддерживается LaTeX синтаксис формул, а также поддерживается непосредственно вычисление формул:

#+CAPTION: Table Caption
| \(N\) | \(N^2\) | \(N^3\) | \(N^4\) | \(\sqrt n\) | \(\sqrt[4]N\) |
|-------+---------+---------+---------+-----------+-----------------|
|     1 |       1 |       1 |       1 |         1 |               1 |
|     2 |       4 |       8 |      16 |    1.4142 |          1.1892 |
|     3 |       9 |      27 |      81 |    1.7321 |          1.3161 |
|-------+---------+---------+---------+-----------+-----------------|
#+TBLFM: $2=$1^2::$3=$1^3::$4=$1^4::$5=sqrt($1)::$6=sqrt(sqrt(($1)))

Таблица 1.: Table Caption
\(N\) \(N^2\) \(N^3\) \(N^4\) \(\sqrt n\) \(\sqrt[4]N\)
1 1 1 1 1 1
2 4 8 16 1.4142 1.1892
3 9 27 81 1.7321 1.3161

2.9 Вставка программного кода и его подсветка

Собственно проще простого.

http://orgmode.org/manual/Working-With-Source-Code.html#Working-With-Source-Code

#+begin_src python
import os
a=5
print "Hello Megan"
#+end_src

Получаем

import os
a=5
print "Hello Megan"

Как видно org-mode самостоятельно разбирается с подсветкой синтаксиса

Немного разобрался как вставлять код самого org-mode это конструкция begin\end_src org , но помогает не всегда Поэтому иногда я прятал код в конструкции begin\end_example.

Полезное сочетание, переместив курсор в область с кодом нажмите C-c '
. Вы переместитесь в отдельный буфер только с вашим кодом и в нем будет работать mode для указанного языка программирования. Повторное сочетание клавиш вернет вас обратно.

2.9.1 Проблема экспорта темы в HTML

Важным также будет заметить, что без настроек org-mode использует для экспорта ТЕКУЩУЮ подсветку синтаксиса, при этом не перенося фон и как результат темные темы экспортируются в невидимое нечто.

Есть два пути решения этой проблемы, первый отключает вставку css настроек в вашем экспорте, ожидая что все они описаны в подключенном css файле.

(use-package htmlize
  :custom
  (org-html-htmlize-output-type 'css)
  (org-html-htmlize-font-prefix "org-"))

Второй добавляет, почему-то пропущенные настройки фона и шрифта, в ваш экспорт по умолчанию.

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let ((my-pre-bg (face-background 'default)) (my-pre-fg (face-foreground 'default)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head
            (format "<style type=\"text/css\">\n pre{color: %s; background-color: %s;}</style>\n" my-pre-fg my-pre-bg)))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

2.10 Исполнение кода вставка графов и диаграмм

По мимо того что можно вставлять код, также можно его и выполнять, на вашей, или благодаря TRAMP на удаленной, машине. За этот функционал отвечает Babel.

Например получать графы http://doc.norang.ca/org-mode.html#Graphviz прописать в настройках.

;; этот кусок конфига отвечает за 
;; выполнение кода и генерацию изображений
;; в org-mode
(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))))

при экспорте(С-c C-e) система спросить Вас выполнять ей код или нет, пока пробовал только графы , хотя есть опции работы с UML диаграммами, Gnuplot и прочим. а ditaa вообще бездонный океан.

Пример кода

#+begin_src dot :file ../pics/some_dot_filename.png :cmdline -Kdot -Tpng
digraph G {
  size="8,6"
  ratio=expand
  edge [dir=both]
  plcnet [shape=box, label="PLC Network"]
  subgraph cluster_wrapline {
    label="Wrapline Control System"
    color=purple
    subgraph {
    rank=same
    exec
    sharedmem [style=filled, fillcolor=lightgrey, shape=box]
    }
    edge[style=dotted, dir=none]
    exec -> opserver
    exec -> db
    plc -> exec
    edge [style=line, dir=both]
    exec -> sharedmem
    sharedmem -> db
    plc -> sharedmem
    sharedmem -> opserver
  }
  plcnet -> plc [constraint=false]
  millwide [shape=box, label="Millwide System"]
  db -> millwide

  subgraph cluster_opclients {
    color=blue
    label="Operator Clients"
    rankdir=LR
    labelloc=b
    node[label=client]
    opserver -> client1
    opserver -> client2
    opserver -> client3
  }
}
#+end_src

Самого кода вы не увидите лишь результат его выполнения ниже:

2.10.1 Литературное программирование

2.11 Сноски

Сноска разделана на две части собственна метка и описание сноски.

  • C-c C-x f поставить сноску.
  • Поместить курсор на сноску С-с С-с прыгнуть к описанию или обратно.
  • Поместить курсор на сноску С-с '
    отредактировать описание сноски в отдельном окне и вернуться

2.12 Экспорт и публикация

Экспорт ваших файлов в внешний мир. Простой способ это нажать C-c C-e и в выбранном меню найти тот формат что Вам нужен. Но помните ,тот же LaTex ODT и Mardown будут требовать внешние программы.

На практике для статей использую экспорт в HTML. Но хотелось бы те же статьи экспортировать и в LaTex. Как и все универсальное лучше оно будет работать с управляющими костыликами, например:

#+HTML: [lаtex]
код
#+HTML: [/lаtex]

эта конструкция добавляет указанный код при экспорте в HTML, также есть флаги #_HTML_HEAD: они отвечают за например подключение своего CSS или какого-нибудь javascript-а. Аналогично в LaTeX.

Для LaTeX экспорта есть отдельные настройки, если вы решитесь использовать класс beamer отвечающий за создание презентаций2.

Также можно экспортировать ваши заметки в различные, форматы документации, texinfo, man. Для любителей README.md , можно сказать что github поддерживает и парсит org файлы.

2.12.1 Публикация через webrpc используя org2blog

Из плюсов, можно развернуть на вордпрессе и не париться с CSS, тэгами, категориями, меню, добавлением функционала.

Из минусов постоянные вставки чего-то дополнительного в ваш org файл, постоянная правка xml-rpc.el, после обновления. Возможное прекращение поддержки webrpc как уязвимого протокола. Ну и поддержка wordpress это как плюс так и минус.

2.12.2 Публикация средствами самого org-mode

Если один файл можно экспортировать в HTML. То отдельная настройка позволяющая публиковать и связывать большие проекты из множества org файлов, составлять index и экспортировать готовые html(?) файлы и изображения в указанные папки.

Подробнее можно почитать здесь, а примером использования является этот сайт.

3 Органайзер

Помните для органайзера не важно содержание пунктов, ему важен только заголовок ну и управляющие слова подвергаются и рядом с ним.

Пакеты которые могут вас заинтересовать.

org-journal пакет отвечает за ведение дневников, по одному файлу в день.

orgzly приложение для android для повседневных заметок и напоминаний сохраняющее свои данные в org формате. В связи с особенностями андроида не взаимодействует с другими календарями, но выглядит лучше MobileOrg и обладает собственным виджетом.

3.1 Назначение заданий

Всё делается комбинацией C-c C-t, помещаете курсор на заголовок и нажимаете, с начала устанавливается TODO, после повторного нажатия, задача считается закрытой(DONE). Следующее нажатие C-c C-t вернет все на круги своя. Это комбинация настраивается в ней три положение только по умолчанию.

** DONE Проверить возможность назначения и выполнения заданий
CLOSED: [2013-07-31 Ср. 22:40]

Назначение собственных ключевых слов для пометки состояний делается через переменную #+TODO: в начале файла и описано здесь,также все это можно задать глобально в ваших настройках.

3.1.1 Проверить почему не ставиться дата окончания задания

Потому как надо прописать в ваших настройках следующую строку.

;;Временная метка при закрытии задания
(setq org-log-done t)

3.1.2 Назначение заданий по календарю

Делается с помощью нажатия C-c C-s перемещение по календарю осуществляется стрелками при зажатой клавише Shift,а предел выполнения по комбинации C-c C-d

*** Пример назначенного задания
SCHEDULED: <2013-04-07 Вс.>

3.2 Тэги :tags.work:

Перемещаемся на заголовок и жмем C-c C-c, на предлагают ввести тэги вводим tags,work

3.2.1 TODO Плохо отображаются в css и содержании

3.3 Архивация

Когда у вас в файле накапливаются сделанные дела вы можете, удалить их или заархивировать.

Указав в начале файла #+ARCHIVE путь/имя.org-файла Поместите курсор на нужный заголовок или дерево(т.е. несколько вложенных заголовков) и нажмите C-c C-x C-a ,указанная задача переедет в указанный архивный файл и получит свойства, пример ниже:

Archived entries from file /home/user/org/tutorial-org-mode.org


 * DONE Архивированная задача
  :PROPERTIES:
  :ARCHIVE_TIME: 2018-08-29 Ср 00:06
  :ARCHIVE_FILE: ~/org/tutorial-org-mode.org
  :ARCHIVE_OLPATH: Органайзер/Agenda
  :ARCHIVE_CATEGORY: tutorial-org-mode
  :ARCHIVE_TODO: DONE
  :END:

Также есть возможность переносить все выполненные задачи с дерева C-u C-x C-a C-s.

Также указав в свойствах(PROPERTIES) корня дерева, :ARCHIVE: файлархив.org, это позволит всем записям входящим в этот корень архивироваться в этот файл.

3.4 Приоритет

Странная дополнительная особенность, можно установить с помощью стрелок Shift-Up/Down

3.5 Agenda

Agenda это менеджер вашего органайзера, есть переменная org-agenda-files, а также возможность добавлять туда файлы через С-с [ и удалять С-с ].

Итого у вас есть список с разбросанными файлами и заданиями и тэгами в них, набираем M-x org-agenda и вуаля. Перед нами меню:

С кучей опций:

  • a тэгами показать задачи с указанными флагами
  • t только TODO задачи
  • s поиск по regexp
  • n показать сразу и всё , советую пока использовать эту опцию.

и.т.д. , дальше agenda сформирует специальный буфер, где будут отфильтрованные под ваш запрос задачи; из этого буфера вы сможете их закрывать обычным сочетание С-c С-t, после этого нажав в этом буфере s, вы сохраните изменения в исходных файлах. Ну и конечно выбрав задачу в agenda и нажав Enter, вы переместитесь в исходный org файл.

Также можно создавать собственные настроенные agenda buffer и экспортировать agenda views(опять же стандартные или ваши буферы, куда нибудь в тот же гугло календарь через пакет.) Можно архивировать , удалять и перемещать(refile) между файлов ваши задачи.

Сноски:

2

https://orgmode.org/worg/exporters/beamer/tutorial.html описание создание презентации в org-mode

Дата: 2019-02-22 Пт 23:38

Автор: valber

Created: 2019-08-26 Пн 00:06

Validate