Краткая предыстория: несколько лет назад искал простую программу, способную организовать данные в дереве. Как и двумерная таблица, дерево — универсальная структура, очень удобная для хранения многих видов данных. Таким образом случайно нашел leo.
Привлекло что leo написан на python (я немного неравнодушен к этому языку), но первое впечатление оказалось неоднозначным. Тогда leo имел единственный графический интерфейс, сделанный с использованием Tkinter. Его вид был, мягко говоря, не особо привлекателен. Видевшие tk-8.4 на Linux поймут. Еще не зная практически ничего о программе, почему-то сразу же сложилась мысль что она умеет не только то, что мне надо, но гораздо больше. К счастью, оказалось что интуиция сработала правильно. Такого эстетического шока в процессе изучения функционала я не испытывал с момента знакомства с vim.
Такие программы как leo называют общим понятием outliner, а документ в leo называют outline. Несколько скриншотов можно увидеть тут.
Основа leo — дерево. Оно состоит из узлов (nodes). У каждого узла есть заголовок (header) и тело (body). Узлы можно создавать, удалять, передвигать внутри дерева. Функционально это больше чем дерево, потому что узлы еще можно клонировать. Клон узла — это его «близнец». При изменении заголовка или тела узла изменения происходят во всех его клонах. Если удалить клон, его близнецы останутся. Информация будет сохраняться пока есть хотя бы один клон. В терминологии файловых систем клон — это hard link.
В leo также есть командная строка, называемая mini-buffer. Насколько мне известно, идея взята из emacs. Набор команд очень большой, их можно цеплять на горячие клавиши.
leo позволяет выполнить тело любого узла как скрипт на python. Для этого надо выделить нужный узел и нажать кнопку «script-button». После этого на панели кнопок появится новая кнопка. При выполнении скрипта ему становятся доступны практически все «внутренности» leo — его DOM и API. Это открывает огромные возможности, позволяя, например, изменять данные в дереве программно.
Для leo написали интерфейс на PyQt4, который уже некоторое время считается основным. Старый интерфейс на Tkinter остается рабочим, но начинает отставать, так как некоторые новые вещи обратно на него не портируются.
У leo есть коллекция плагинов для разных специфических задач. Особенно хочется отметить cleo и его эквивалент для qt интерфейса, который называется просто todo. Этот плагин позволяет использовать leo в качестве TODO менеджера.
В leo удобно писать документацию на RST, есть предварительный просмотр.
Наконец, leo можно использовать как IDE для программирования и для изучения чужого кода. Есть элементарная подсветка (code highlight). Еще в контексте программирования с применением leo можно часто встретить понятие literate programming, введенное всеми любимым и уважаемым Дональдом Кнутом.
Можно импортировать исходники, содержащие код на разных языках программирования, при этом leo с определенным успехом и правильностью даже разобьет файлы на древовидную структуру. Для «плоского» файла, содержащего модуль на python, при импортировании получится такая структура:
Обычно вся информация о структуре данных и сами данные узлов хранятся в outline. Но есть возможность подключать внешние файлы (external files). Чтобы хранить информацию о структуре, во внешних файлах используются специальные строки, называемые sentinels. В файлах, содержащих код, они находятся внутри комментариев, поэтому на функционале, реализованном в коде, их присутствие никак не отражается. Наличие этих строк заставляет некоторых людей морщиться, но как минимум их можно скрыть удачно выбранными цветами хайлайта в текстовом редакторе или CSS-магией в браузере.
Еще в работе с leo есть такое понятие как теневой файл (shadow file). Это попытка сделать код, написанный с его помощью, более привлекательным для людей которые будут смотреть его текстовым редактором и морщиться при виде sentinels. Так для каждого «чистого» внешнего файла (без sentinels) создается его скрытая локальная копия, в котором sentinels есть.
В итоге пользуюсь leo уже несколько лет ежедневно. Он стал для меня незаменимым инструментом. Вот как я его применяю:
Если сравнивать leo с такими «монстрами» как vim и emacs, в нем, пожалуй, еще нет такой законченности. Но он еще «растет» и развивается, потенциал у него огромный. Текстовые редакторы работают с «плоскими» текстовыми файлами, leo вносит в них новое измерение. Я вижу пользу от этого, но не настолько этим восхищаюсь, чтобы тыкать каждому в лицо. Меня устраивает относительно маленькое и уютное community вокруг leo, в котором мне интересно общаться с умными людьми, где практически нет троллинга, где никто никого не минусует и где не льют друг на друга помои ведрами. Если вас заинтересовала эта универсальная программа, но поначалу она покажется вам громоздкой, посмотрите этот смешной и добрый ролик. Аналогия будет для вас очевидной: «плоские» текстовые файлы — это свитки, а outline с которыми работает leo — это книги.
leo — самый примечательный, но далеко не единственный outliner, с которым мне пришлось столкнуться. Многие пользователи emacs используют orgmode. С некоторого времени еще использую VOoM (автор признается что некоторые фичи в нем «подсмотрел» в leo) — на серверах где нет графической оболочки. Еще упомяну хорошо послуживший мне в прошлом hnb.
Привлекло что leo написан на python (я немного неравнодушен к этому языку), но первое впечатление оказалось неоднозначным. Тогда leo имел единственный графический интерфейс, сделанный с использованием Tkinter. Его вид был, мягко говоря, не особо привлекателен. Видевшие tk-8.4 на Linux поймут. Еще не зная практически ничего о программе, почему-то сразу же сложилась мысль что она умеет не только то, что мне надо, но гораздо больше. К счастью, оказалось что интуиция сработала правильно. Такого эстетического шока в процессе изучения функционала я не испытывал с момента знакомства с vim.
Такие программы как leo называют общим понятием outliner, а документ в leo называют outline. Несколько скриншотов можно увидеть тут.
Основа leo — дерево. Оно состоит из узлов (nodes). У каждого узла есть заголовок (header) и тело (body). Узлы можно создавать, удалять, передвигать внутри дерева. Функционально это больше чем дерево, потому что узлы еще можно клонировать. Клон узла — это его «близнец». При изменении заголовка или тела узла изменения происходят во всех его клонах. Если удалить клон, его близнецы останутся. Информация будет сохраняться пока есть хотя бы один клон. В терминологии файловых систем клон — это hard link.
В leo также есть командная строка, называемая mini-buffer. Насколько мне известно, идея взята из emacs. Набор команд очень большой, их можно цеплять на горячие клавиши.
leo позволяет выполнить тело любого узла как скрипт на python. Для этого надо выделить нужный узел и нажать кнопку «script-button». После этого на панели кнопок появится новая кнопка. При выполнении скрипта ему становятся доступны практически все «внутренности» leo — его DOM и API. Это открывает огромные возможности, позволяя, например, изменять данные в дереве программно.
Для leo написали интерфейс на PyQt4, который уже некоторое время считается основным. Старый интерфейс на Tkinter остается рабочим, но начинает отставать, так как некоторые новые вещи обратно на него не портируются.
У leo есть коллекция плагинов для разных специфических задач. Особенно хочется отметить cleo и его эквивалент для qt интерфейса, который называется просто todo. Этот плагин позволяет использовать leo в качестве TODO менеджера.
В leo удобно писать документацию на RST, есть предварительный просмотр.
Наконец, leo можно использовать как IDE для программирования и для изучения чужого кода. Есть элементарная подсветка (code highlight). Еще в контексте программирования с применением leo можно часто встретить понятие literate programming, введенное всеми любимым и уважаемым Дональдом Кнутом.
Можно импортировать исходники, содержащие код на разных языках программирования, при этом leo с определенным успехом и правильностью даже разобьет файлы на древовидную структуру. Для «плоского» файла, содержащего модуль на python, при импортировании получится такая структура:
@file module.py
class Class1
method1
method2
...
class Class2
method1
method2
...
Обычно вся информация о структуре данных и сами данные узлов хранятся в outline. Но есть возможность подключать внешние файлы (external files). Чтобы хранить информацию о структуре, во внешних файлах используются специальные строки, называемые sentinels. В файлах, содержащих код, они находятся внутри комментариев, поэтому на функционале, реализованном в коде, их присутствие никак не отражается. Наличие этих строк заставляет некоторых людей морщиться, но как минимум их можно скрыть удачно выбранными цветами хайлайта в текстовом редакторе или CSS-магией в браузере.
Еще в работе с leo есть такое понятие как теневой файл (shadow file). Это попытка сделать код, написанный с его помощью, более привлекательным для людей которые будут смотреть его текстовым редактором и морщиться при виде sentinels. Так для каждого «чистого» внешнего файла (без sentinels) создается его скрытая локальная копия, в котором sentinels есть.
В итоге пользуюсь leo уже несколько лет ежедневно. Он стал для меня незаменимым инструментом. Вот как я его применяю:
- дневник и TODO менеджер
- менеджер закладок
- персональная «книга мелких заклинаний» — куча мелких HOWTO, рассортированных по тэгам, которые записываются и благополучно забываются, чтобы освободить голову для новой информации, а в нужный момент вернуться и «подсмотреть» :-)
- база данных зависимостей между сторонними пакетами для дистрибутива Linux, которым я пользуюсь (адептов дистрибутивов с огромными репозиториями попрошу воздержаться, рано или поздно возникает необходимость собрать что-то, чего нет в репозитории)
- справочник по шахматным дебютам и анализ шахматных партий
- написание RST документации
- программирование по мелочи, преимущественно на python
Если сравнивать leo с такими «монстрами» как vim и emacs, в нем, пожалуй, еще нет такой законченности. Но он еще «растет» и развивается, потенциал у него огромный. Текстовые редакторы работают с «плоскими» текстовыми файлами, leo вносит в них новое измерение. Я вижу пользу от этого, но не настолько этим восхищаюсь, чтобы тыкать каждому в лицо. Меня устраивает относительно маленькое и уютное community вокруг leo, в котором мне интересно общаться с умными людьми, где практически нет троллинга, где никто никого не минусует и где не льют друг на друга помои ведрами. Если вас заинтересовала эта универсальная программа, но поначалу она покажется вам громоздкой, посмотрите этот смешной и добрый ролик. Аналогия будет для вас очевидной: «плоские» текстовые файлы — это свитки, а outline с которыми работает leo — это книги.
leo — самый примечательный, но далеко не единственный outliner, с которым мне пришлось столкнуться. Многие пользователи emacs используют orgmode. С некоторого времени еще использую VOoM (автор признается что некоторые фичи в нем «подсмотрел» в leo) — на серверах где нет графической оболочки. Еще упомяну хорошо послуживший мне в прошлом hnb.