Welcome to OutWiker’s documentation!¶
English documentation¶
English documentation¶
Sources structure¶
План
Describe the sources structure.
Page storing format¶
План
Describe the page storing format
Version History¶
3.0.0¶
- Now you can use any symbols in the notes title.
- New toolbars.
- New design for popup window when clicking on the tag.
- New interface to select notes icons.
- New GUI displayed if the notes tree is not currently open.
- New GUI when selecting the root of the notes tree.
- New GUI to show a page with unknown type.
- Add the ability to select notes position in the notes list.
- Add watching for attached files for selected page.
- Other interface improvements.
- Add German localization.
- New commands for wiki pages to change text color and apply custom styles.
- Add comments to wiki notation.
- Added a new $title variable for the page style files .
- Add a new page style «rifle_green_and_red».
- Change the storage format for certain properties of the notes tree pages.
- Change the way of storing standard icons in notes.
- Change plug-ins format.
- Migrate to Python 3.x and wxPython 4.0.
2.0 (June 2017)¶
- The program now uses wxPython 3.0 library.
- Duplicating the current line via menu or hot key was implemented.
- Deleting the current line via menu or hot key.
- The editor can move lines up/down via menu or hot keys.
- The editor can join lines via menu or hot key.
- The editor can remove the whole word to beginning/end via menu or hot key.
- The editor can decrease nesting level of the list items via menu or hot key.
- Menu items to move cursor in text.
- Menu items to copy / cut the current line to clipboard.
- The «–page, -p» command line parameter to select page when starting.
- The «–normal» command line parameter to disable minimizing when starting.
- The «–debug» command line parameter to run in the debug mode.
- The Swedish translation was added.
- Restored availability the icon in the system tray on Linux.
- Added the ability to add alias to page.
- Changed GUI to set hot keys.
- New setting to change editor margin color was implemented.
- New setting to change background color of the selected text was implemented.
1.9.0 (April 2016)¶
- Icons for notes are separated into groups.
- Now users can complement a standard set of icons for new files.
- Added new icons
- Now in the dialog insert links, you can choose one of the attachments to make reference to it.
- Bug fixes
1.8.1.752 (October 2014)¶
- Bug fixes.
1.8.0.750 (November 2014)¶
- Added the ability to customize keyboard shortcuts.
- Added the ability to refer to a page using unique identifiers.
- Added the ability to navigate through the links to pages with the anchors ({+[=page://bla-bla-bla/#anchor=]+}).
- Added the ability to use relative paths in the links on the pages ({+[=../../page 1/page 2=]+}).
- Added the ability to change the page style for branch of the pages at the same time.
- Added the ability of search and replace on the page.
- Added the buttons «Forward» and «Back» for the return to the previous pages.
- Added the ability to change the editor colors.
- Added the ability to change the behaviour of the Home / End keys id the editor (go to begin / end of the string or the paragraph).
- Added a new tag of the wiki syntax for quoting: [=[>…<]=].
- Added the button and menu item insertion the current date and time
- Added the commands [=(:crdate:) and (:eddate:)=] for insertion the creation and edition dates of the page respectively.
- Added the dialogs for the comands [=(:attachlist:), (:childlist:) and (:include:)=].
- Added the ability to sort child pages for the creation and edition date in the command [=(:childlist:)=].
- On the global search page added the ability to sort child pages for the creation date.
- Added new command line parameter «-r» or «–readonly» for the opening the notes tree readonly.
- Added the popup tooltips for icons in the property dialog for page.
- Added a new styles for page design.
- Added the button and menu item for opening a folder with a attached files in a system file manager.
- Added the saving recent used page style.
- Added the saving cursor position for page before closing.
- Added the Italian localization.
- Now in the attachments panel showed the files icons.
- Changed the hyphenation algorithm („“br““ tags instead of „“p““).
- Now opening the notes tree and global search cunduct in a separate thread.
- Now for every page saved the creation date.
- Now all HTML tags, which the wiki parser create, in a lowercase.
- Now help will be open in a separate window.
- Settings moved from ~/.outwiker more ideologically correct place (depending on the operating system).
- Added new icons for pages.
- Many accelerations.
- Bug fixes and improvments.
1.7.0.684 (December 2012)¶
- Added the ability to open the notes in separate tabs.
- The toolbar is divided into several floating toolbars.
- Saved and displayed date of the last changes in the page.
- Greatly accelerated parsing and coloring of wiki syntax (bacceleration from 2 to 10 times).
- Added interface to insert some elements of wiki syntax.
- Added ability to larger and smaller font on wiki pages.
- Added ability to force rebuilding HTML-code on the wiki notation.
- Fixes in page templates.
- The distribution for Linux adds vector and large icons.
- Changes in the appearance of the search page.
- Created the installler for Windows.
- Fixed a bug where thumbnails were not created to wiki pages if extensions image files was recorded in capital letters.
- Fixed a bug that did not keep the size of internal windows (tree notes, attachments, etc.)
- Fixed other bugs.
- Many small fixes and improvements in the interface
1.6.0.650 (May 2012)¶
- Redesigned properties dialog page.
- Wiki commands for decoration options for users and community livejournal.com removed from the program into a [[plugin -> http://jenyay.net/Outwiker/LivejournalPlugin]].
- Added the wiki syntax coloring in the editor.
- Added ability to change the style pages.
- Now to align text to the wiki pages other than [=%center%=] and [=%right%=] you can use [=%left%=] and [=%justify%=].
- Many small improvements.
1.5.0.627 (February 2012)¶
- Tag cloud added to the main window.
- Added ability to select tags from the cloud of the existing tags.
- New features for the batch add / remove tags.
- Added ability to rename a tags.
- Minor changes in the interface.
1.4.0.601 (December 2011)¶
- Added plugins support.
- Added timer autosave.
- Added check for changing the text notes, third-party programs.
- For HTML-pages added button for enable/disable automatic line break.
- Linux version is now installed in /usr, but not in /opt. Now the program can be invoked from the console with the command „“outwiker““.
- Improved handling of wiki syntax for lists.
- Now search through the pages looking for search phrase in the filename of the attachment and title names.
- Bug fixes and minor interface improvements.
- The program is now being tested only under Python 2.7.
1.3.2.496 (September 2011)¶
- New interface for selecting icons.
- Added new icon from [[http://www.famfamfam.com/lab/icons/silk | famfamfam.com]] and [[http://p.yusukekamiyamane.com/ | yusukekamiyamane.com]] sets.
- New program icon (thanks Alexey Nabrodov).
- In the same page now working anchor.
- New item to add wiki notation anchors.
- Significantly reduced blinking and update the interface.
- Help in English (thanks Ilya Cheshkova for correcting my clumsy translation by Google Translate:)).
- Added keyboard shortcuts for the <PRE> tag on HTML page and for [=[@…@]=] on wiki page.
- Added hot keys and buttons for [=[[<<]]=] on wiki page.
- Added buttons for tags and <code> <blockquote> on HTML page.
- Added the «Update» button on attachment panel.
- Clicking on the icon in the tray, minimized window is unwrapped and deployed now being phased out.
- Fixed: for Windows not working links to pages that are in its path «#» symbol.
- Fixed a bug with corrupted file in the root __page.opt wiki.
- Other bug fixes and translation program.
- Code refactoring.
1.3.1.393 (July 2011)¶
- On Windows, fixed the error due to which the links do not work on the search page.
- On Linux, fixed the error, because of which did not open the page, if the path to them was the „#“.
1.3.0.384 (June 2011)¶
- Now, as HTML-rendering engine is used Internet Explorer for Windows version, WebKit for Linux version.
- Added ability to print notes and their source code.
- Added a new wiki tag [={-…-}=] for the strikethrough text.
- Added a button to strikethrough text on a HTML-page.
- Ability to set the font size when browsing through your notes.
- Ability to install additional CSS styles for notes.
- Changing the shortcut key for switching between code and viewing on the F4.
- Added menu items to the wiki commands [=(:…:)=].
- Pages that are open in «read only», are italics.
- On Windows, the program should now work without install MS Visual C + + 2008 Redistributable Package.
- If you run Windows programs using the exe then error will be output to a file outwiker.log, which will be created in the same folder where the file settings outwiker.ini.
- Fixed error when trying to open wikis, if for some of the notes is not writable.
- Fixed a bug which caused the Windows did not work rendering of formulas, if the OutWiker was installed in a directory containing spaces.
1.2.0.322 (April 2011)¶
- For wiki added the ability to enter formulas in the TeX notation (used mimeTex).
- Link to image in [= [[Attach: xxx.png]] =] or [= [[http://…/xxx.png]] =] on the wiki pages only inserts a link to an image and not the picture itself.
- Added a wiki command [= (: childlist:) =] to insert a list of child notes.
- Added a wiki command [= (: attachlist:) =] to insert a list of attached files
- Added a wiki command [= (: include:) =] for the contents of attached files.
- Added a wiki commands to insert links to users Livejournal.com (command [= (: ljuser :)=]) on LiveJournal Community (command [= (: ljcomm :)=]).
- The menu function is added to convert special characters HTML (<,>, etc.) in their HTML representation.
- Inside the operator [= [@ … @] =] When parsing the wiki notation symbols «<» replaced by «<», and «>» - on «>».
- Added ability to specify a template for a blank wiki page (see Configuration).
- From the wiki notation removed the \, as it completely replaces the command [=[[<<]]=] (line break).
- The tree now shows the root note.
- Sort pages alphabetically was accelerated.
- Improved recognition of the links in a wiki page.
- Improved caching of a wiki page.
- In the title (!!, !!!!, Etc.) can now be used and some other elements of the wiki notation (bold, italics, etc, formulas and wiki commands [=(:. ..:)=]).
- Fixed bugs related to deleting and moving the notes that you can not delete / move due to blockage of their directories.
- Fixed an error that occurred when trying to save the page, the directory is removed by hand during the program.
- Fixed a crash program under Linux if you rename a page containing images that are downloaded from internet.
- Other minor fixes and refactoring.
1.1.0.218 (February 2011)¶
- Rebuild the interface of the main window. Now it is possible to move and to close the panel with wood notes and attachments.
- Added ability to change the order of notes in the tree (shortcut Ctrl + Shift + Up / Ctrl + Shift + Down).
- Added ability to sort the entries forced the alphabetally.
- Added full screen mode.
- Auto-save notes when you switch to another application.
- Added ability to drag files from the windows of investment in other programs.
- New option: Always show icon in system tray.
- New option: the size of tabs in the editor.
- Now when you create a page, type of page is selected by default pages created last time.
- Now when you create a page directory __attach are not created. It is created when the first necessity.
- Reduced blinking of the main window for different actions.
- Bug fixes.
- Minor fixes in the interface.
1.0.0.108 release (December 2010)¶
- Added preferences window.
- Added support for multiple languages (now program has English and Russian interface).
- Added ability to minimize to tray.
- Added ability to automatically open the last time opened wiki at startup.
- Added ability to disable the question before exiting the program.
- Added ability to set the font for the editor.
- Added ability to turn line numbering in the editor window.
- New option: default size for thumbnails of images on wiki pages.
- Added tab to view the HTML code for a wiki page.
- Blank pages are opened by default on the tab for editing.
- If the page is blank, then tab to view a list of attached files (this feature can be disabled)
- New option: main window title. By default, there contain the name of the wiki and open the current page.
- New window «About», added tab «Donate».
- Fixed a bug related to storing the settings in the profile with Russian letters.
- Improved detection of Internet addresses in a wiki notation.
- Double click on the note in the tree to open a dialog with the properties of the page.
- Wiki files, which was opened in «read only» do not added to the list of recently opened files.
- Various minor bug fixes and interface improvements.
1.0 beta 3 (October 2010)¶
- Added a open mode «read only». Help now opens in this mode.
- The ability to store settings in your profile folder, not in the folder with the program (non-portable mode).
- Fixed blinking while switching windows pages.
- Source moved from github to launchpad.net (https://launchpad.net/outwiker). Now, instead git using Bazaar.
- Fix a few bugs in the wiki parser.
1.0 beta 2 (August 2010)¶
- Added ability to move pages in the tree.
- Added ability to rename pages without to call the page properties dialog.
- Added context menu for the tree notes.
- The relative path to pages for links are now case-insensitive.
- Changing the shortcut key to switch between the code and view (it was F2, became F5).
- If the attached file with a name that already exists among the attached files, the dialog is shown with the question «What should I do?»
- Folder with thumbnails of images __thumb now is not shown in the attachments.
- Now, tree notes, saves its state (expanded or closed site).
- Added a status panel that shows the link text when the mouse cursor on it.
- The program now uses absolute paths to folders, so when you run out of source working directory need not be a folder with the source.
- Fixed bugs.
1.0 beta 1 (July 2010)¶
- A new type of page - the page in a wiki notation.
- Added information about the program.
- Added menu item to copy to the clipboard the link to the page.
- Added ability to open wiki, passing the path to the command line.
- Added hot key and menu item to switch between the code and view.
- The toolbar buttons are added to align the text to HTML (center, left justified, etc.)
- The menu item to copy the title page to the clipboard.
- Before you restart the wiki is now the program asks whether you want to save the current page.
- Added menu item Edit (Undo / Redo / Cut / Copy / Paste).
- Fixed copying to clipboard from the view HTML.
- Minor fixes and improvements.
1.0 alpha 3 (June 2010)¶
- Added ability to search by page.
- The buttons for the main tags page HTML.
- Added ability to create links to attached files.
- Added a button to clear checkboxes from all tags in the global search.
- Added new icons for the pages.
- Added ability to attach files to the page by dragging and dropping them into the program.
- Improved output lists in HTML-pages.
- Fixed some bugs.
1.0 alpha 2 (May 2010)¶
- Ability to delete and rename pages.
- The global search for text and tags.
- Added a new page type - search page.
- Added ability to run attached files.
- Added ability to create links between pages.
- Pages in the tree are now always sorted alphabetically.
- Fixed some bugs.
- Minor interface changes.
1.0 alpha 1 (May 2010)¶
- First public version.
Russian documentation¶
Документация на русском языке¶
Часто задаваемые вопросы¶
Настройки программы¶
Где хранятся настройки программы?¶
Все настройки программы находятся в файле outwiker.ini
, который расположен в папке профиля программы. См. раздел Где находится папка профиля программы?. Кроме того, плагины могут создавать дополнительные файлы или папки для хранения данных внутри папки профиля программы.
Где находится папка профиля программы?¶
Папка профиля программы - это папка, в которой расположен файл настроек outwiker.ini
, файл лога работы outwiker.log
, а также папки с плагинами (plugins
), пользовательскими словарями для проверки орфографии (spell
), пользовательскими стилями (styles
) и, возможно, с другими папками, которые используются для хранения пользовательских настроек.
Если программа работает в портабельном режиме (см. раздел Как переключить OutWiker в портабельный режим?), то папка профиля программы - это папка с запускаемым файлом (под Windows это файл outwiker.exe
). Однако по умолчанию папка профиля программы находится внутри папки профиля пользователя операционной системы.
Под Windows 7/8.x/10/11 это папка C:\Users\USERNAME\AppData\Roaming\outwiker
, где «USERNAME» - имя пользователя в операционной системе.
Под Linux расположение папки настроек зависит от настроек операционной системы, но скорее всего это будет папка ~/.config/outwiker
, где «~» обозначает домашнюю папку пользователя.
Как переключить OutWiker в портабельный режим?¶
Портабельным называется режим работы программы, в котором все настройки хранятся в той же папке, где расположен запускаемый файл программы или во вложенных папках. Наиболее часто такой режим используется под Windows. Чтобы переключить OutWiker в портабельный режим, нужно создать файл outwiker.ini
в той же папке, где расположен запускаемый файл (под Windows это файл outwiker.exe
). Чтобы не потерять настройки, сохраненные в обычном (не портабельном) режиме, файл outwiker.ini
можно скопировать из папки профиля пользователя - см. раздел. Где находится папка профиля программы?.
Как установить плагин?¶
Для установки плагина необходимо распаковать архив со скачанным плагином в папку plugins
внутри папки профиля программы (см. раздел Где находится папка профиля программы?). Обратите внимание, что в распакованный плагин представляет собой папку со множеством файлов, поэтому папка plugins
после установки нескольких плагинов будет выглядеть примерно так:
outwiker
├── plugins
│ ├── changepageuid
│ ├── counter
│ ├── datagraph
│ ├── ...
│ ├── ...
│ ├── ...
├── outwiker.ini
└── outwiker.log
Сборка программы¶
Какие пакеты требуются для запуска OutWiker из исходников под Ubuntu?¶
Требуемые пакеты зависят от номера версии Ubuntu.
Для запуска из исходников под Ubuntu требуются следующие пакеты:
- python3-pip
- python3-dev
- debhelper
- devscripts
- debhelper
- devscripts
- p7zip-full
- libssl-dev
- dpkg-dev
- build-essential
- libjpeg-dev
- libtiff-dev
- libpng-dev
- libsdl2-dev
- libnotify-dev
- freeglut3
- ibus-gtk3
- xvfb
- libhunspell-dev
- libgstreamer1.0-0
- libwebkit2gtk-4.0
Известные проблемы¶
В Ubuntu курсор отображается в неправильном месте¶
В Ubuntu Linux есть проблемы с корректным отображением курсора (каретки) в поле ввода заметки с некотоырми шрифтами. Если вы видите, что курсор расположен в одной части строки, а вводимый текст появляется в другой части строки, поменяйте шрифт в окне настроек
. Шрифты меняются в разделе «Редактор - Общее». Данная проблема наблюдается с некоторыми шрифтами.
Разное¶
Планируется ли версия под Android¶
Очень хочется сделать версию под Android, но пока времени на это не хватает. Если кто-то готов взяться за реализацию данного проекта, то готов оказывать всяческую поддержку.
Быстрый старт¶
Для получения исходного кода OutWiker вам понадобится git. Также должны быть установлены Python 3.5 или 3.6 и pip. Рекомендуется Python 3.6.
- Если вы работаете под Linux, то убедитесь, что у вас установлены следующие пакеты:
python3-dev
libssl-dev
dpkg-dev
build-essential
libjpeg-dev
libtiff-dev
libsdl2-dev
libgstreamer-plugins-base1.0-dev
libnotify-dev
freeglut3
freeglut3-dev
libsm-dev
libgtk-3-dev
ibus-gtk3
xvfb
libhunspell-dev
libwebkit2gtk-4.0
libwebkit2gtk-4.0-dev
Данный список составлен на основе имен пакетов в дистрибутиве Ubuntu. В других дистрибутивах имена пакетов могут отличаться.
Данные пакеты требуются для успешной компиляции wxPython при установке зависимостей (требуется wxPython 4.0.x). Более подробно о требуемых зависимостях для wxPython смотрите здесь. Также в этот список включены пакеты, необходимые для сборки deb-пакетов под Linux.
- Чтобы получить исходный код OutWiker выполните в консоли команду:
git clone https://github.com/Jenyay/outwiker
Эта команда создаст папку с именем outwiker
в текущей папке, в которую будут скачены исходные коды программы OutWiker.
- Зайдите в эту папку с помощью команды
cd outwiker
- Для указания зависимостей в OutWiker используется Pipfile, для работы с которым удобнее всего использовать pipenv, который будет автоматически создавать виртуальное окружение (virtualenv) для данного проекта. Устанавливается pipenv с помощью команды
pip install pipenv
- Установите требуемые библиотеки с помощью команд:
pipenv update --dev
В данной команде параметр –dev указывает на то, что кроме минимально необходимого набора библиотек необходимо установить библиотеки, используемые при разработке, но которые не требуются для запуска OutWiker из исходников.
Под Linux установка требуемых бибилиотек может занять достаточно долгое время (больше получаса), т.к. в этот момент происходит компиляция библиотеки wxPython. Под Windows установка библиотек происходит достаточно быстро, т.к. компиляция не требуется.
- Теперь можно запустить виртуальное окружение со всеми необходимыми библиотеками
pipenv shell
- Если все установилось без ошибок, то следующая команда должна запустить программу OutWiker:
fab run
- Также можно запустить тесты (выполнение тестов может занять несколько минут, а под Windows в несколько раз больше времени):
fab test
Получение исходников, сборка и тестирование¶
Как скачать исходные коды OutWiker¶
Для получения актуальной версии исходных кодов потребуется система управления версиями git.
Исходные коды расположены на github. Чтобы скачать последнюю версию исходных кодов, выполните команду
git clone https://github.com/Jenyay/outwiker
git submodule update --init --recursive
В репозитории исходных кодов имеются три «долгоживующие» ветки (branch) в зависимости от степени стабильности версии программы:
- stable
- Исходные коды текущей стабильной версии OutWiker.
- master
- Исходный код, соответствующий текущей нестабильной версии программы.
- dev
- Исходный код, находящиеся в активной разработке. Обычно ветка dev содержит изменения, которые еще не вошли в ветку master. Изменения из ветки dev будут влиты в ветку master перед выкладыванием нестабильной версии программы на сайт. В этой ветке могут проваливаться некоторые тесты.
Разработка происходит следующим образом. Если коммит полностью реализует какую-то возможность или рефакторинг (возможно, после еще придется что-то дополнять, но новая функциональность появляется), то такой коммит отправляется в ветку dev.
Если коммит только приближает реализацию возможности или начинает серию большого рефакторинга, но функциональность еще не появляется, то такой коммит отправляется в новую именованную ветку, ответвленную от dev. После окончательной реализации возможности новая ветка вливается в dev, а старая именованная ветка удаляется.
Для переключения между ветками используется команда:
git checkout имя_ветки
Структура исходных кодов¶
Если вы еще не скачали исходные коды, то см. раздел Как скачать исходные коды OutWiker.
Файлы и папки, расположенные в корне исходных кодов¶
- src
- Самая главная папка, которая содержит исходные коды OutWiker и тестов.
- tests
- Папка содержит unit-тесты, запускаемые с помощью pytest. Подробнее см. в разделе Тестирование OutWiker.
- buildtools
- Эта папка содержит Python-скрипты, используемые при сборке OutWiker под различные операционные системы.
- doc
- Папка с документацией, которую вы сейчас смотрите.
- images
- Папка с изображениями, которые не используются непосредственно в программе, но могут быть полезными при разработке. Например, логотипы OutWiker разных размеров и в разных форматах.
- need_for_build
- Папка с файлами, которые не являются Python-скриптами, но необходимы для сборки под различные операционные системы.
- plugins
- Папка с исходными кодами всех плагинов, которые прилагаются к программе OutWiker.
- profiles
- Файлы, используемые для измерения скорости работы программы OutWiker и отдельных ее частей.
- testdata
- Папка содержит файлы, используемые в тестах.
- build
- Эта папка создается при сборке OutWiker под какую-либо операционную систему и при сборке архивов с плагинами. Эта папка не индексируется git.
- copyright.txt и LICENSE.txt
- Файл с описанием лицензии, под которой распространяется программа (GPL 3) и текст лицензии GPL 3.
- fabfile.py
- Файл для библиотеки fabric. Этот файл нужен для выполнения действий, связанных со сборкой программы под разные операционные системы, запуска тестов, обновления локализаций, выкладывания новых версий программы и плагинов на сайт. По сути это единая «точка входа» для многих действий, которые нужно делать при разработке. Также этот файл заменяет собой Makefile. Подробнее о том, что можно делать через этот файл см. в разделе Выполнение команд Fabric.
- runtests.py
- Скрипт, предназначенный для запуска тестов.
- setup.py
- Скрипт для создания пакета outwiker, чтобы приложение можно было тестировать с помощью unit-тестов.
- README
- Краткое описание программы.
- readme.md
- Более подробное описание программы, которое показывается в качестве описания проекта на сайте github
- Pipfile
- Файл в формате Pipfile, в котором указаны Python-библиотеки, необходимые для запуска OutWiker из исходников и используемые для разработки. Этот файл используется для установки требуемых библиотек с помощью pipenv. Подробнее см. в разделе Инструменты, используемые при разработке.
- requirements_doc.txt
- Файл требуется для сборки документации на сервере readthedocs. В данный момент этот файл пустой.
- appveyor.yml
- Параметры для сервера непрерывного развертывания Appveyor.
- .travis.yml
- Параметры для серверанепрерывного развертывания Travis.
- Makefile
- Скрипт для программы make. Используется для сборки snap-пакета для размещения файлов OutWiker на диске во время установки.
Содержимое папки src¶

- help
- Папка содержит справку по программе на данный момент на двух языках - на русском и на английском.
- iconset
- Папка содержит значки, которые можно установить для страниц заметок в диалоге свойств страницы. Значки могут загружаться не только из этой папки, но и из пользовательских папок со значками. Эта папка содержит вложенные папки, соответствующие группам значков.

- images
- Папка содержит все картинки, которые встречаются в программе (иконки программы и картинки на кнопках). Все иконки взяты из свободно распространяемых коллекций, взятых с сайтов famfamfam, yusukekamiyamane и fatcow.
- locale
- Содержит локализации программы OutWiker. Сюда не входят локализации плагинов, они рсположены в папке каждого плагина. Для локализации используется технология gettext.
- outwiker
- Самая главная папка с исходниками. Именно там содержатся основные классы программы.
- plugins
- Пустая папка, предназначенная для хранения плагинов, если OutWiker запускается в портабельном режиме.
- spell
- Папка содержит встроенные словари для проверки орфографии. К программе прилагаются словари для английского, русского и украинского языков, причем для русского языка есть два словаря: с буквой «Ё» и без нее. Сюда же входит файл
html.dic
- словарь со списком HTML-тегов. - styles
- Папка содержит стили страниц.
Кроме того, папка src
содержит следующие файлы:
- runoutwiker.py
- Основной файл, запускающий OutWiker.
Структура папки src/outwiker¶
Папка src/outwiker представляет собой Python-пакет (содержит файл __init__.py
), в который вложены следующие пакеты:

- actions
- Эта папка содержит так называемые actions - классы, которые привязываются к элементам меню или к кнопкам на панелях инструментов. Все действия, производимые через интерфейс программы работают через actions, что позволяет настраивать горячие клавиши. Подробности см. в Actions (не написано)
- core
- Базовые элементы OutWiker. Здесь содержатся классы, по возможности отделенные от интерфейса программы, например, классы, отвечающие за работу с деревом заметок (файл
tree.py
), классы для чтения файлов настроек (config.py
), классы для работы с плагинами (pluginsloader.py
иpluginbase.py
) и другие. - gui
- В этой папке расположены классы, отвечающие за интерфейс программы. Например, класс главного окна содержится в файле
mainwindow.py
. - pages
- Эта папка содержит пакеты, отвечающие за создание страниц различных типов. В ней содержатся пакеты
text
для работы с простыми текстовыми страницами,html
для работы с HTML-страницами,wiki
для работы с викистраницами иsearch
для работы со страницей глобального поиска. - utilites
- Эта папка содержит скрипты, которые могут быть полезны не только внутри движка OutWiker, но и вне его, например, в системе сборки.
Инструменты, используемые при разработке¶
Утилиты¶
- git
- Используется для управления версиями исходных кодов.
- fabric
- Используется как замена Makefile, для сборки программы под разные операционные системы, запуска тестов (см. Тестирование OutWiker), обновления локализаций, сборки архивов плагинов, закачивания новых версий плагинов и программы на сайт. Подробности см. в разделе Выполнение команд Fabric.
- pipenv
- Используется для работы с файлами в формате Pipfile, который описывает необходимые библиотеки.
- pytest
- Используется для запуска unit-тестов.
- Inno Setup
- Используется для создания инсталятора под Windows.
- 7zip
- Используется для создания архивов в разных операционных системах.
- Sphinx
- Используется для создания документации, которую вы сейчас читаете.
Библиотеки¶
- wxPython
- Используется для создания интерфейса программы.
- PyParsing
- Используется для преобразования викинотации в HTML.
- CyHunspell
- Используется для проверки орфографии.
- Pilow
- Используется для работы с изображениями (создание миниатюр).
- comtypes
- Используется для создания COM-объекта Internet Explorer в операционной системе Microsoft Windows. Под другими операционными системами не требуется.
- PyInstaller
- Используется для сборки запускаемого файла под Windows.
- idna
- Используется для преобразования национальных доменов в ссылках.
Выполнение команд Fabric¶
Содержание
Основы использования Fabric¶
Для многих задач, связанных со сборкой, тестированием и выкладыванием новых версий на сайт, используется Fabric - удобный инструмент, который позволяет автоматизировать многие задачи как на удаленном сервере, так и на локальном компьютере. На русском языке про Fabric можно почитать в статье Основы использования Fabric.
Основная идея использования Fabric состоит в том, что все команды (или задачи) описываются в файле fabfile.py
, расположенном в корневой папке исходных кодов.
Чтобы узнать список имеющихся в данном fabfile.py
команд, выполните к консоли команду:
fab -l
Будет выведен следующий список команд:
Available commands:
apiversion Print current OutWiker API versions
apiversions Print current OutWiker API versions
build Create artefacts for current version.
clear Remove artefacts after all assemblies
create_tree Create wiki tree for the tests
deb Assemble the deb packages
deb_binary Create binary deb package
deb_binary_clear Remove binary deb package
deb_clear Remove the deb packages
deb_install Assemble deb package for current Ubuntu release
deb_single Assemble the deb package for the current Ubuntu release
deb_sources_included Create files for uploading in PPA (including sources)
deploy Upload unstable version to site
doc Build documentation
linux_binary Assemble binary builds for Linux
linux_clear Remove binary builds for Linux
locale Update the localization file (outwiker.pot)
locale_plugin Create or update the localization file for pluginname plug-in
outwiker_changelog Generate OutWiker's changelog for the site
plugin_changelog Generate plugin's changelog for the site
plugin_locale Create or update the localization file for pluginname plug-in
plugins Create an archive with plugins (7z required)
plugins_clear Remove an archive with plugins (7z required)
plugins_list Print plugins list for th site
prepare_virtual Prepare virtual machine
run Run OutWiker from sources
site_versions Compare current OutWiker and plugins versions with versions on the site
sources Create the sources archives
sources_clear Remove the sources archives.
test Run the unit tests
test_build Run the build unit tests
upload_binary Upload unstable version to site
upload_plugin Upload plugin to site
upload_plugins_pack Upload archive with all plugins to site
vm_halt Stop virtual machines for build
vm_linux_binary Create 32- and 64-bit assembly on virtual machines
vm_prepare Prepare virtual machines for build
vm_remove_keys Remove local SSH keys for remote virual machines
vm_run Run virtual machines for build
vm_stop Stop virtual machines for build
vm_update Update the virtual machines
win Build OutWiker for Windows with cx_Freeze
win_clear Remove assemblies under Windows
Все эти команды описаны ниже.
Чтобы выполнить команду, в консоли нужно написать:
fab имя_команды
Некоторые команды могут (или должны) принимать некоторые параметры. Параметры передаются после имени команды и символа «:», как показано ниже:
fab имя_команды:парам1,парам2
Обратите внимание, что после двоеточия и запятой в списке параметров не должно быть пробела. Если параметр должен содержать пробел, то такое значение должно быть заключено в кавычки:
fab имя_команды:"параметр с пробелами"
Примечание
Некоторые команды Fabric принимают булевы параметры. Чтобы в такую задачу передать значение True, в качестве параметра в командной строке нужно передать одно из следующих значений: 1 или true (независимо от регистра). Чтобы передать значение False, нужно передать какое-либо другое значение.
Сборка¶
- build
- Запускает сборку OutWiker под ту операционную систему, в которой запущена данная команда. Под Windows запускается команда сборки win (см. раздел Сборка под Windows), под Linux - vm_linux_binary и deb_sources_included (см. раздел Сборка под Linux). Также под всеми операционными системами запускается команда source для создания архивов с исходными кодами (см. раздел Другие команды) и команда plugins для создания архивов с плагинами (см. раздел Команды, связанные с плагинами).
- win
- Сборка OutWiker под Windows с помощью PyInstaller, а также инсталятор с помощью Inno Setup. Подробнее см. раздел Сборка под Windows.
- win_clear
- Удалить все, что создается с помощью команды win.
- deb
- Создать deb-пакет на основе исходных кодов для всех поддерживаемых версий Ubuntu.
- deb_single
- Создать deb-пакет на основе исходных кодов под ту версию Ubuntu, в которой происходит сборка.
- deb_install
- Создать deb-пакет на основе исходных кодов и установить его в систему.
- deb_clear
- Удалить все артефакты, которые создаются с помощью команды deb.
- deb_sources_included
- Создать deb-пакеты на основе исходных кодов для всех поддерживаемых версий Ubuntu. Используется для закачки на PPA.
- deb_binary
- Создать deb-пакеты на основе бинарной сборки под Linux.
- deb_binary_clear
- Удалить все, что создается с помощью команды deb_binary
- linux_binary
- Создать бинарную сборку под Linux с помощью PyInstaller.
- linux_clear
- Удалить созданную бинарную сборку под Linux.
Команды, связанные с плагинами¶
- plugins
- Создать архивы с плагинами (отдельный архив на каждый плагин и общий архив со всеми плагинами). Эта команда может принимать булево значение. Если оно равно 1, то создаются архивы только для тех плагинов, которые имеют более новые версии по сравнению с теми, что выложены на сайте программы. Общий архив с плагинами создается в любом случае.
- plugins_clear
- Удалить все архивы с плагинами.
Команды, помогающие при разработке¶
- run
- Запустить OutWiker из исходников.
- apiversion или apiversions
- Вывести номера версий встроенных пакетов outwiker (см. раздел Структура папки src/outwiker).
- test
- Запустить интеграционные и юнит-тесты. Подробнее о тестировании см. раздел Тестирование OutWiker.
- test_build
- Запустить тесты, связанные со сборкой. Подробнее о тестировании см. раздел Тестирование OutWiker.
Команды, связанные с локализацией¶
- locale
- Создать файл src/locale/outwiker.pot, используемый для создания файлов локализации.
- locale_plugin или plugin_locale
- Создать файл локализации *.pot для плагина, указанного в качестве параметра команды.
Команды, связанные с развертыванием¶
- deploy
- Команда закачивает бинарные сборки под Windows и Linux на сайт, закачивает deb-пакеты (на основе исходников, не бинарные) на PPA, устанавливает тег в репозитории исходных кодов в соответствии с текущей версией OutWiker. Команда работает для стабильной и нестабильной версий.
- outwiker_changelog
- Вывести список изменений, который нужно будет вставить на сайт. В качестве параметра требуется указать язык: ru или en.
- plugin_changelog
- Вывести список изменений для плагина. В качестве параметров требуется указать имя плагина и язык: ru или en.
- site_versions
- Вывести номера версий OutWiker и всех плагинов. Показываются версии, закачанные на сайт и находящиеся в папке с исходниками.
- upload_plugin
- Закачать плагин или плагины на сайт. Для плагинов требуется предварительно создать архивы с плагинами с помощью команды plugins.
- upload_plugins_pack
- Закачать архив со всеми плагинами на сайт. Архив с плагинами требуется предварительно создать с помощью команды plugins.
- upload_binary
- Закачать бинарные версии OutWiker (под Windows и Linux) на сайт.
- plugins_list
- Создать таблицу со списком плагинов для сайта. Требуется указать язык: ru или en.
Команды для создания бинарных сборок на виртуальных машинах¶
Для создания бинарных сборок под различные версии Linux используются виртуальные машины. Для выполнения этих команд должны быть установлены VirtualBox, Vagrant и Ansible. Подробнее см. раздел Создание сборок с помощью виртуальных машин.
- vm_run
- Запустить все виртуальные машины.
- vm_stop или vm_halt
- Остановить все виртуальные машины.
- vm_prepare
- Запустить виртуальные машины и подготовить их к сборке OutWiker. Эта команда устанавливает все необходимые библиотеки.
- vm_linux_binary
- Создать 32- и 64-битные бинарные сборки под Linux на виртуальных машинах.
- vm_remove_keys
- Удалить ключи SSH из папки .ssh. Нужно выполнять после переустановки виртуальных машин.
Другие команды¶
- clear
- Удалить все, что создано в папке build
- create_tree
- Создать дерево заметок для тестов.
- doc
- Скомпилировать данную документацию.
- prepare_virtual
- Подготовить виртуальную машину с Linux, чтобы в ней можно было бы запустить OutWiker из исходников.
- sources
- Создать архив с исходниками. Подробнее см. раздел Создание архивов с исходниками.
- sources_clear
- Удалить архив с исходниками.
Сборка OutWiker¶
Содержание
Общие моменты, связанные со сборкой¶
В данном разделе предполагается, что были проделаны все операции, описанные в разделе Быстрый старт, т.е. скачаны исходники и установлены все требуемые библиотеки.
Все задачи, связанные со сборкой, создают внутри папки build
папку, имя которой соответствует номеру текущей версии OutWiker в формате x.x.x.xxx
. Например, 3.1.0.896
. Также внутри папки build
создается временная папка tmp
, предназначенная для хранения файлов во время сборки. Данная папка очищается перед каждой сборкой.
Также перед каждой задачей сборки создается папка tmp/src
, которая содержит копию исходников в соответствии с настройками сборщика: собирается стабильная версия или нестабильная. Если собирается нестабильная версия, то после копирования из исходников удаляется файл versions_stable.xml
, остается только файл versions.xml
, описывающий изменения в текущей версии в формате для нестабильной версии.
Если собирается стабильная версия, то после копирования исходников в tmp/src/
исходный файл versions.xml
удаляется, а файл versions_stable.xml
переименовывается в versions.xml
. Подробнее о формате файла versions.xml
см. раздел Хранение номеров версий в OutWiker и плагинах (не написано).
Разные классы сборок могут добавлять дополнительные файлы в папку tmp
.
Описанные возможности реализованы в классе buildtools.builders.base.BuilderBase
.
Сборка осуществляется с помощью команд Invoke (см. раздел Выполнение команд Fabric).
Примечание
Многие команды сборки принимают булевы параметры. Чтобы в такую задачу передать значение True, в качестве параметра в командной строке нужно передать одно из следующих значений: 1 или true (независимо от регистра). Чтобы передать значение False, нужно передать какое-либо другое значение.
Сборка под Windows¶
Для того, чтобы собрать все виды дистрибутивов под Windows как нестабильную версию, используется команда
inv win
Для того, чтобы собрать все виды дистрибутивов под Windows как стабильную версию, используется команда
inv win --is-stable
или
inv win -i
Для нестабильной версии будут созданы следующие артефакты в папке build/{номер версии}/windows
:
- Папка
outwiker_exe
, содержащая все файлы, необходимые для запуска под Windows, включая все плагины в папкеplugins
. outwiker_win_unstable.zip
- zip-архив, содержащий содержимое папкиoutwiker_exe
, но без плагинов во вложенной папкеplugins
.outwiker_win_unstable.7z
- 7z-архив, содержащий содержимое папкиoutwiker_exe
, но без плагинов во вложенной папкеplugins
.outwiker_win_unstable_all_plugins.zip
- zip-архив, содержащий содержимое папкиoutwiker_exe
, включая плагины во вложенной папкеplugins
.outwiker_win_unstable_all_plugins.7z
- 7z-архив, содержащий содержимое папкиoutwiker_exe
, включая плагины во вложенной папкеplugins
.outwiker_win_unstable.exe
- инсталятор, созданный с помощью Inno Setup.versions.xml
- манифест с описанием текущей версии программы OutWiker (см. раздел Хранение номеров версий в OutWiker и плагинах (не написано)).
Для стабильной версии будут созданы следующие артефакты в папке build/{номер версии}/windows
:
- Папка
outwiker_exe
, содержащая все файлы, необходимые для запуска под Windows, включая все плагины в папкеplugins
. outwiker_{x.x.x}_win.zip
- zip-архив, содержащий содержимое папкиoutwiker_exe
, но без плагинов во вложенной папкеplugins
.outwiker_{x.x.x}_win.7z
- 7z-архив, содержащий содержимое папкиoutwiker_exe
, но без плагинов во вложенной папкеplugins
.outwiker_{x.x.x}_win_all_plugins.zip
- zip-архив, содержащий содержимое папкиoutwiker_exe
, включая плагины во вложенной папкеplugins
.outwiker_{x.x.x}_win_all_plugins.7z
- 7z-архив, содержащий содержимое папкиoutwiker_exe
, включая плагины во вложенной папкеplugins
.outwiker_{x.x.x}_win.exe
- инсталятор, созданный с помощью Inno Setup.versions.xml
- манифест с описанием текущей версии программы OutWiker. Этот файл является переименованным файломsrc/versions_stable.xml
(см. раздел Хранение номеров версий в OutWiker и плагинах (не написано)).
Команде inv win
можно передавать следующие дополнительные параметры:
-i или –is-stable - собрать OutWiker как стабильную версию -k или –skipinstaller - при сборке не создавать инсталятор -s или –skiparchives - при сборке не создавать архивы
Чтобы удалить все артефакты, созданные командой inv win
, предназначена команда:
inv win-clear
Все действия, связанные со сборкой под Windows сосредоточены в классе buildtools.builders.windows.BuilderWindows
, который является производным от buildtools.builders.base.BuilderBase
.
В процессе сборки выполняются следующие действия:
Действия, выполняемые классом buildtools.builders.windows.BuilderBase
.
- Создание папки
build
. - Выполняется команда очистки. Для сборки под Windows это равносильно выполнению команды
inv win_clear
. - Удаляется временная папка
build/tmp
, если она существовала. - Создается временная папка
build/tmp
. - Создается папка
build/{номер версии}/windows
, если она не существовала. - Исходники копируются в папку
build/tmp/src
. - В папке
build/tmp/src
удаляется файлversions_stable.xml
, если создается нестабильная версия OutWiker, илиversions_stable.xml
переименовывается вversions.xml
, если создается стабильная версия OutWiker.
Действия, выполняемые классом buildtools.builders.windows.BuilderWindows
.
- В папку
tmp
копируются файлыcopyright.txt
иLICENSE.txt
. - Создается пустая папка для плагинов
tmp/src/plugins
, если она не была создана. - Создается бинарная сборка в
tmp/outwiker_exe
(см. раздел Создание бинарной сборки). - Удаляется и создается заново папка
tmp/outwiker_exe/plugins
. - Создаются архивы с бинарной сборкой в формате zip и 7z без плагинов. Созданные архивы помещаются в
build/{номер версии}/windows
. - На основе файла шаблона
need_for_build/windows/outwiker_setup.iss.tpl
создается файлtmp/outwiker_setup.iss
, используемый для создания инсталятора с помощью Inno Setup. - Создается инсталятор в папке
tmp
. - Созданный инсталятор перемещается в папку
build/{номер версии}/windows
. - Все плагины копируются в папку
tmp/outwiker_exe/plugins
. - Создаются архивы с бинарной сборкой в формате zip и 7z с плагинами. Созданные архивы помещаются в
build/{номер версии}/windows
. - Папка
tmp/outwiker_exe
перемещается вbuild/{номер версии}/windows
.
Самое важное, что делает команды inv win
и inv linux_binary
- это создание запускаемых приложений под Windows и Linux соответственно, чтобы пользователям не требовалось устанавливать интерпретатор Python. Это осуществляется с помощью утилиты cx_Freeze.
В результате выполнения данного скрипта будет создана папка build/version/windows/outwiker_exe
(в Windows) или build/version/outwiker_linux/outwiker_exe
(в Linux), содержащая запускаемый файл outwiker.exe
(в Windows) или outwiker
(в Linux), а также дополнительные файлы, необходимые для работы с библиотеками, и папки, необходимые для работы OutWiker. Все необходимые модули cx_Freeze помещает внутрь запускаемого файла (outwiker.exe
или outwiker
).
Создание архивов с исходниками¶
Для создания архивов с исходниками предназначена команда inv sources
, которая может принимать дополнительный параметр –is-stable (или -i), указывающий, будет создаваться архив исходников в виде стабильной. Если этот параметр не указан, то исходные коды оформляются как для нестабильной версии OutWiker.
Во время сборки архивов с исходниками создается папка build/{номер версии}/sources
, в которую будут помещены архивы. Независимо от выбранного режима сборки создается архив outwiker-src-full-{номер версии}.zip
с полной копией исходников (создается с помощью команды git archive
).
Если создается архив исходников как нестабильной версии, то создается файл outwiker-src-min-{номер версии}-unstable.zip
, который содержит минимально необходимый набор файлов, чтобы запустить OutWiker. Если создается архив стабильной версии, то этот файл будет называться outwiker-src-min-{номер версии}.zip
. Содержимое архивов в двух режимах сборки отличается только текстом файла versions.xml
.
Создание сборок с помощью виртуальных машин¶
Для создания бинарных сборок под Linux используются виртуальные машины, благодаря чему можно создавать сборки как для 32-битных версий Linux, так и для 64-битных. Для работы с виртуальными машинами должны быть установлены VirtualBox, Vagrant и Ansible.
Работа с виртуальными машинами осуществляется через команды Fabric (см. раздел Команды для создания бинарных сборок на виртуальных машинах).
Виртуальная машина запускается в VirtualBox и управляется с помощью Vagrant. Ansible используется для того, чтобы настроить виртуальные машины для работы, закачать по сети на них исходные коды OutWiker, запустить создание бинарной сборки и скачать полученные файлы на целевую машину (на хост).
Для создания бинарных сборок используется Ubuntu 17.04. Для сборки не используется Ubuntu 16.04 LTS, поскольку в этой версии Ubuntu есть проблемы с wxPython, о чем можно прочитать у меня в блоге.
Файлы для работы с виртуальными машинами расположены в папке need_for_build/virtual/build_machines/
исходных кодов. В папке need_for_build/virtual/build_machines/zesty_32
находится Vagrantfile 32-битной версии Ubuntu, а в need_for_build/virtual/build_machines/zesty_64
находится Vagrantfile 64-битной версии Ubuntu.
Прежде чем запускать сборку на виртуальных машинах, нужно создать и подготовить виртуальные машины. Для этого нужно выполнить команду.
fab vm_prepare
Виртуальные машины будут созданы с помощью Vagrant, при этом будет скачан образ виртуальной машины. Этот процесс может занять достаточно много времени (более 10 минут) и скачать большой объем данных (сотни мегабайт). Эту операцию нужно делать только один раз, если вы уже создали виртуальную машину, то подготавливать ее к сборке не требуется, если только вы не удалили виртуальную машину с помощью команды
vagrant destroy
Команду vagrant destroy нужно выполнять в папках need_for_build/virtual/build_machines/zesty_32
и need_for_build/virtual/build_machines/zesty_64
, fab-команды для данной операции пока не создано.
Еще один случай, когда может понадобиться выполнить команду fab vm_prepare - это если для сборки OutWiker понадобится установить какой-то новый пакет в операционную систему.
Для запуска сборки нестабильной версии OutWiker на виртуальных машинах нужно выполнить команду
fab vm_linux_binary
Для запуска сборки стабильной версии OutWiker на виртуальных машинах нужно выполнить команду
fab vm_linux_binary:1
Эта команда сначала запустит виртуальные машины, установит необходимые python-библиотеки из файлов requirements.txt
и file:requirements_dev.txt, закачает на виртуальные машины исходные коды, запустит на них создание бинарных сборок с помощью команды fab linux_binary (см. раздел Сборка под Linux) и скачает полученные файлы с виртуальных машин.
Если все пройдет без ошибок, то в папке build/x.x.x.xxx/linux
появятся файлы:
outwiker_linux_amd64.7z
иoutwiker_linux_amd64.zip
- архивы с 64-битными бинарными сборками, упакованными с помощью архиваторов 7z и zip соответственно.outwiker_linux_i386.7z
иoutwiker_linux_i386.zip
- архивы с 32-битными бинарными сборками, упакованными с помощью архиваторов 7z и zip соответственно.outwiker-x.x.x+xxx_amd64.deb
- deb-пакет с 64-битной бинарной сборкой.outwiker-x.x.x+xxx_i386.deb
- deb-пакет с 32-битной бинарной сборкой.
Для останова всех виртуальных машин используйте команду
fab vm_stop
или
fab vm_halt
Эти две команды аналогичны. После создания бинарных сборок на виртуальных машинах с помощью команды fab vm_linux_binary виртуальные машины не останавливаются и продолжают занимать оперативную память пока вы их не остановите с помощью указанных выше команд.
Тестирование OutWiker¶
Для юнит-тестирования в OutWiker используется стандартный пакет unittest, а также библиотека pytest, которая позволяет удобно запускать тесты. Тесты проверяют работу внутренних компонентов OutWiker, а также элементов графического интерфейса.
Структура тестов¶
Все тесты располагаются в папке tests
. Имена файлов, содержащие тесты, соответствуют маске test_*.py
. Все тесты разделены по темам:
tests/core
- тесты основного ядра программы без тестов графического интерфейса.
tests/actions
- тесты actions (см. раздел Actions (не написано)).
tests/gui
- тесты графического интерфейса.
tests/wikiparser
- тесты википарсера (см. раздел Парсер викинотации (не написано)).
tests/utilites
- тесты для модуля outwiker.utilites.
tests/plugins
- тесты плагинов. Для каждого плагина создана отдельная папка внутри tests/plugins/
. Например, тесты для плагина markdown располагаются в папке tests/plugins/markdown
.
tests/buildtools
- Тесты системы сборки.
Параметры команды fab test¶
Для запуска тестов предназначен скрипт src/runtests.py
, который может принимать параметры из командной строки, чтобы затем передать их в pytest. Для запуска тестов предназначена следующая команда fabfile (см. раздел Выполнение команд Fabric):
fab test
С помощью дополнительных параметров команды fab test можно передать дополнительные параметры для pytest. Например:
fab test:"-v
- более подробный вывод процесса тестирования.
fab test:"-s"
- если тест выводит что-то в stdout, то не подавлять этот вывод.
fab test:"путь_до_тестов"
- запуск тестов из указанной папки.
где путь_до_тестов отсчитывается, начиная с папки src
, т.е. если нужно запустить тесты графического интерфейса, то нужно выполнить команду:
fab test:"tests/gui"
Если нужно выполнить тесты из определенного файла, то:
fab test:"tests/gui/test_actioncontroller.py"
Если нужно выполнить тесты из определенного набора тестов (TestCase), то нужно выполнить команду наподобие:
fab test:"tests/gui/test_actioncontroller.py::ActionControllerTest"
Если нужно запустить определенный тест из определенного набора тестов (TestCase), то можно дополнительно передать имя теста:
fab test:"tests/gui/test_actioncontroller.py::ActionControllerTest::testTitles"
Внутреннее устройство OutWiker¶
Формат хранения страниц¶
Содержание
Структура дерева заметок¶
При создании программы OutWiker был выбран формат хранения заметок, когда каждая страница представлена папкой в файловой системе с некоторыми служебными файлами. Это решение уменьшает вероятность одновременной порчи всех заметок по сравнению со способом хранением всех заметок в одном файле: если какой-нибудь файл, относящийся к заметке попадет на «битый» сектор жесткого диска, то будет испорчена только эта заметка, а не все дерево заметок. Кроме того, поскольку все записи хранятся в текстовом виде, вы можете просматривать их (а при желании и редактировать) даже не имея под рукой OutWiker. Также такой формат хранения позволяет легко организовать «прикрепленные» к заметке файлы, поэтому OutWiker можно использовать и для каталогизации файлов.
Такое хранение заметок подразумевает, что файлы и папки заметок могут быть в любой момент изменены внешними средствами, например, файловыми менеджерами, с помощью них вы можете переносить заметки из одной ветви дерева в другую или даже в другое дерево с заметками, а если вам не хватает возможностей встроенного в OutWiker редактора, то вы можете редактировать заметки с помощью любого текстового редактора, способного открывать и сохранять файлы в кодировке UTF-8, для этого можно воспользоваться плагином ExternalTools.
Однако такой способ хранения, а особенно предположение, что заметки могут изменяться без участия OutWiker, накладывает ряд ограничений. Во-первых, под Windows на данный момент вы ограничены в длине пути до файла, она не может превышать 255 символов (есть пути обхода этого ограничения, возможно, в будущем эта проблема будет преодолена). Во-вторых, поскольку любая заметка может изменяться без участия OutWiker, нет возможности сделать какой-либо кэш с общей информацией обо всех заметках, например, индекс для поиска или информацию о тегах заметок. Поэтому при глобальном поиске приходится каждый раз заново просматривать содержимое каждой заметки, что может занимать достаточно долгое время.
Как уже было сказано, каждая заметка - это просто папка с некоторыми служебными файлами внутри другой папки-заметки, поэтому для создания вложенной заметки достаточно создать папку с именем вложенной заметки, а в ней создать два файла: __page.opt
и __page.text
(этот файл не нужен для страниц глобального поиска). Формат хранения каждого типа заметок может отличаться, но файл __page.opt
должен присутствовать всегда, о его формате будет написано ниже.
При работе с исходниками OutWiker, например, при создании плагина папки и файлы явно создавать не нужно, для создания заметок и работы с прикрепленными файлами существуют специальные классы внутри API OutWiker (классы, предназначенные для работы со страницами содержатся в файле src/outwiker/core/tree.py.
Также в папке с заметкой может храниться значок, установленный для заметки. Файл со значком может записан в различных графических форматах, но рекомендуется использовать формат png. В этом случае файл со значком должен иметь имя __icon.png
. Изображение значка должно иметь размер 16x16 пикселей и может использовать прозрачность. Чтобы внешний вид заметок не зависел от настроек программы OutWiker на различных компьютерах, файл значков копируется в папку с заметкой.
Стиль страниц хранится в файле __style.html
. Если нужно, в папке __style
могут находиться дополнительные файлы. Подразумевается, что основные определения стиля хранятся в __style.html
, а в папке __style
могут находиться рисунки или скрипты на языке JavaScript, необходимые для отображения стиля. Если для страницы устанавливается стиль по умолчанию, то файл __style.html
и папка __style
просто удаляются.
Ограничения на имена заметок¶
На имена заметок накладываются некоторые ограничения. Во-первых, ограничения накладывает файловая система. Если под Linux имя директории не может включать в себя только нулевой символ (0), а в остальном вы не ограничены, то под Windows вы не можете создать папку (и, соответственно, заметку) с символами >, <, |, ?, *, : и «. Если вы работаете под Linux, то при попытке создать заметку, содержащую в имени один из этих символов, вы получите предупреждение, показанное на следующем рисунке, но создать заметку сможете.

Под Windows вам этого сделать не удастся.
Другое ограничение связано со внутренним устройством OutWiker. Все папки внутри папки с заметками, начинающиеся с символов __ (два символа подчеркивания), программа считает служебными директориями и не отображает в дереве заметок. Например, все прикрепленные файлы содержатся в папке __attach
внутри каждой заметки (в случае, если прикрепленные файлы есть). Про хранение вложенных файлов будет сказано ниже.
Также ограничения выражаются в том, что внутри одной заметки не может быть двух вложенных заметок с одинаковыми именами.
Обойти эти ограничения можно с помощью псевдонимов.
Формат файла __page.opt¶
Файл __page.opt
является основным файлом в папке заметки, именно он определяет формат страницы, а также различные ее настройки, но этот файл не содержит содержимое страницы, которое видит пользователь (для этого служит файл __page.text
).
Файл __page.opt
является текстовым и представляет собой ini-файл. То есть в нем содержатся разделы, обозначенные квадратными скобками, а за названием раздела расположены параметры в формате «имя=значение». Файл должен быть записан в кодировке UTF-8. Ниже приведен пример файла __page.opt
, пока не обращайте особого внимания на параметры, мы их рассмотрим ниже.
[General]
type = wiki
tags = html, софт
order = 0
datetime = 2014-04-12 12:46:55.170000
cursorposition = 121
uid = __a07bd7a7-2be3-41f7-a17d-1ec3997ee988
alias = Отображаемое имя страницы
[Tree]
expand = True
[wiki]
md5_hash = cef7664a01cb932d419a203b2e63b568
[Misc]
pageindex = 0
В данном примере содержатся три раздела параметров: General, Tree, wiki и Misc. Количество разделов и настроек внутри них зависит от формата страницы, в этом примере приведены параметры для викистраницы.
Для начала разберем параметры, общие для всех типов страниц. Начнем с раздела [General].
type. Это единственный обязательный параметр среди всех параметров. Именно он определяет тип страницы. На данный момент существуют 4 типа страниц со следующими типами:
- text - простая текстовая страница.
- html - страница в формате HTML.
- wiki - викистраница.
- search - страница глобального поиска.
tags. Этот параметр хранит список меток, которые были применены к странице. Метки перечисляются через запятую (после запятой можно ставить пробел).
order. Задает положение заметки в дереве по сравнению с заметками того же уровня. Чем это значение меньше, тем выше располагается заметка в ветви. Если заметки имеют одинаковое значение параметра order или оно отсутствует, то такие заметки сортируются по алфавиту.
datetime. Дата и время последнего изменения страницы. Дата и время записывается в формате вида «%Y-%m-%d %H:%M:%S.%f». За расшифровкой этих символов можете обратиться к документации Python.
cursorposition. Положение курсора, которое было перед закрытием страницы. Это значение используется для того, чтобы при повторном открытии страницы курсор стоял на том же самом месте, как и в тот момент, когда страница закрывалась.
uid. Уникальынй идентификатор страницы, который используется для ссылок. В приведенном выше примере идентификатор равен __a07bd7a7-2be3-41f7-a17d-1ec3997ee988, это значит, что ссылка на эту страницу будет выглядить как page://__a07bd7a7-2be3-41f7-a17d-1ec3997ee988. При создании заметки странице не присваивается никакой идентификатор, и этот параметр отсутствует, он появляется, когда идентификатор впервые запрашивается, например, при копировании ссылки на страницу в буфер обмена с помощью пункта меню
или одноименного пункта контекстного меню.alias. Псевдоним страницы или отображаемое имя. Если данный параметр не задан, то в программе OutWiker имя заметки отображается по имени папки, которая содержит данную заметку. Однако, как было написано выше, это накладывает некоторые ограничения на имена заметок. С помощью псевдонима можно обойти эти ограничения. Псевдоним - это строка, содержащая любые символы. Если для страницы установлен псевдоним, то псевдоним будет отображаться везде вместо имени заметки. Таким образом, для имени папки сохраняются прежние ограничения, а отобржаемое имя заметки может быть произвольным. В основном интерфейсе программы OutWiker нет указаний на возможность установки псевдонимов, чтобы не запутать пользователей. Однако, если вы уверенный пользователь, то можете воспользоваться плагином HackPage, который среди прочего позволяет устанавливать псевдонимы для страниц.
expand из раздела [Tree]. Этот параметр имеет булевый тип и может принимать значения True или False. Этот параметр обозначает, должна ли быть развернута ветвь дерева, начинающаяся с этого узла (заметки). Этот параметр используется для того, чтобы при следующем открытии дерева сохранялась «развернутость» всех его узлов.
Хранение значка страницы¶
Каждая страница может иметь свой значок, который отображается в дереве заметок рядом с заголовком страницы. Пользователь может устанавливать либо один из стандартных значков, который прилагается к программе, либо свои значки. Пользовательские значки добаляются в диалоге настроек в разделе «Значки пользователя», такие значки хранятся в папке iconset
профиля программы (см. Где находится папка профиля программы?).
Все стандартные значки расположены в папке iconset
в папке программы, а их имена начинаются с префикса __std_.
Если для страницы устновлен один из стандартных значков, то в файл __page.opt
в раздел [General] добавляется параметр icon, значение которого равно относительному пути до файла значка, начиная из папки iconset
. Например, если для страницы установлен значок __std_envelope.png
, которая расположена непосредственно в папке iconset
, то в файле __page.opt
будет такая строка:
[General]
icon = __std_envelope.png
Если для страницы установлен значок __std_batman.png
из группы «people», то в файле __page.opt
будет такая строка:
[General]
icon = people/__std_batman.png
Если для страницы установлен пользовательский значок, то из файла __page.opt
удаляется параметр icon, а в папку заметки будет скопирован пользовательский значок с именем __icon.*
, расширение которого совпадает с расширением пользовательского значка. То есть, если исходный пользовательский значок имеет имя myicon.png
, то в папке заметки будет создан файл __icon.png
.
Такой способ хранения заметок сделан для того, чтобы программа могла бы отображать как стандартные значки, так и пользовательские, которые могут быть не установлены на том компьютере, где открывается дерево заметок.
Хранение вложенных файлов¶
Как уже было сказано выше, прикрепленные к заметке файлы хранятся в папке __attach
, поэтому для добавления новых файлов вы можете не только использовать интерфейс программы, но и копировать файлы в эту папку, используя любой файловый менеджер. Если вы добавляете файл внешними средствами в выбранную в данный момент заметку, не забудьте нажать кнопку «Обновить» в окне «Прикрепленные файлы», чтобы новые файлы появились в окне программы.
Когда новая заметка только была создана, она не имеет папки __attach
, она будет создана только при первой необходимости - когда вы прикрепите какой-нибудь файл, нажмете кнопку «Открыть папку с прикрепленными файлами» в окне «Прикрепленные файлы» или выберете пункт меню :menuselection:»Инструменты –> Копировать путь до прикрепленных файлов».
Внутри папки __attach
могут находиться и вложенные папки, они даже будут показаны в окне «Прикрепленные файлы» но эта особенность программы OutWiker не особо афишируется, поскольку интерфейс для работы с прикрепленными папками пока не очень развит (надо добавить возможность заходить внутрь прикрепленных папок и некоторые другие функции). Но здесь есть одно ограничение - прикрепленные папки не могут начинаться с символов __ (два подчеркивания), поскольку такие папки считаются служебными и не показываются в списке прикрепленных файлов.
Одно из применений таких служебных папок описывается в следующем разделе.
Хранение миниатюр¶
На викистраницах есть возможность создавать уменьшенные копии изображений (миниатюры) с помощью команды %thumb% ... %%
. При использовании этой команды могут быть заданы размеры создаваемых миниатюр. Поскольку миниатюры иногда могут оказаться полезными сами по себе, то они отображаются не просто с помощью тега <img> со ссылкой на оригинальный файл и с атрибутами width и height, задающими размер, а миниатюра создается в виде отдельного файла.
Поскольку в большинстве случаев пользователю незачем видеть созданные миниатюры в списке прикрепленных файлов, а хранить эти файлы где-то надо, для этого в папке __attach
создается вложенная папка __thumb
. Так как ее имя начинается символов __, она не отображается в списке прикрепленных файлов.
Сами миниатюры хранятся в этой папке и имена их файлов однозначно идентифицируют файл картинки, из которого они были созданы, а также размер миниатюры.
Например, если к викистранице прикреплен файл image.png, а на самой странице содержится текст:
%thumb width=200%Attach:image.png%%
%thumb width=400%Attach:image.png%%
%thumb height=200%Attach:image.png%%
%thumb maxsize=200%Attach:image.png%%
то в папке attach/__thumb/
будут созданы следующий файлы:
th_width_200_image.png
th_width_400_image.png
th_height_200_image.png
th_maxsize_200_image.png
Таким же образом создаются миниатюры для каждого размера, и в то же время если в тесте страницы встретится еще одно упоминание миниатюры с тем же размером, то оно не будет создано повторно. К тому же имена миниатюр остаются читабельными, можно легко найти нужную миниатюру и скопировать ее с помощью файлового менеджера в другую папку, если этот файл миниатюр понадобится для других целей.
Формат простых текстовых заметок¶
Формат файла __page.opt
для простых текстовых заметок не имеет каких-то специфических параметров. При этом параметр type в разделе [General] должен иметь значение text.
Текст заметки хранится в файле __page.text
в том виде, в котором он отображается в окне редактирования.
Классы, предназначенные для работы с текстовой страницей расположены в папке src/outwiker/pages/text/.
Формат страниц в формате HTML¶
Страница для заметок в формате HTML должна иметь значение параметра type равным html.
Кроме того, этот тип страниц в разделе [General] имеет дополнительный параметр linewrap булевого типа. Если этот параметр имеет значение True, то для данной заметки будет включен режим «Автоматический перенос строк», и для каждого введенного в окне редактора переноса строк будет добавлен тег <br>.
Если этот параметр имеет значение False, тогда теги <br> добавляться не будут, и пользователь сам должен будет писать теги <br> или <p> для оформления абзацев. В этом случае введенный код HTML будет интерпретироваться точно так, как он введен. Этот режим может быть удобен, например, для подготовки текста для сайта.
Кроме того, у HTML- и викистраниц есть дополнительный параметр pageindex в разделе [Misc], он определяет, какую вкладку на данной странице в последний раз открывал пользователь. Если пользователь завершил работу со страницей на вкладке «HTML», это значение будет равно 0, если на вкладке «Просмотр», то - 1.
При работе с OutWiker пользователь вводит только тело HTML, а именно то, что обычно включается в теги <body>…</body>, после чего программа создает полноценный файл .html, причем есть возможность посмотреть, что же получается в конечном итоге. Результат полного оформления HTML-страницы OutWiker сохраняет в файл __content.html
в папке страницы. Этот файл содержит полностью завершенную HTML-страницу со всеми стилями оформления, добавленными переносами строк <br> (если включен режим «Автоматический перенос строк») и т.д.
Например, для HTML-страницы, содержащей фразу «Hello World», и использующей стиль страницы по умолчанию, файл __content.html
будет выглядеть следующим образом:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<meta http-equiv='content-type' content='text/html; charset=utf-8'/>
<style type='text/css'>
body, div, p, table {
font-size:10pt;
font-family:Verdana;
}
img{border:none}
</style>
</head>
<body>
Hello world!
</body>
</html>
Классы, предназначенные для работы с HTML-страницей расположены в папке src/outwiker/pages/html/.
Формат викистраниц¶
Формат хранения викистраниц во многом напоминает страницы в формате HTML, поскольку в конечном итоге викинотация преобразуется HTML-код, который также сохраняется в файл __content.html
.
Страница, использующая викинотацию, должна иметь значение параметра type равным wiki. Все выше сказанное относительно файла __content.html
относится и к викистраницам с учетом того, что от викинотации к HTML-странице текст проходит более сложный путь, и перенос строк на викистраницах работает по своим правилам (нет режима «Автоматический перенос строк»).
Кроме того, HTML-код викистраниц проходит дополнительную стадию обработки, чтобы сделать полученный HTML-код более читабельным, расставляя дополнительные переносы строк (не путать с тегом <br>) после некоторых тегов (за этот процесс отвечает класс HtmlImprover из файла src/outwiker/core/htmlimprover.py).
Для примера, если викистраница имеет содержимое:
*Hello World!*
||border=1
|| Ячейка таблицы 1 || Ячейка таблицы 2 ||
|| Ячейка таблицы 3 || Ячейка таблицы 4 ||
полученный в итоге код HTML будет выглядеть следующим образом:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<meta http-equiv='content-type' content='text/html; charset=utf-8'/>
<style type='text/css'>
body, div, p, table {
font-size:10pt;
font-family:Verdana;
}
img{border:none}
</style>
</head>
<body>
<b>Hello World!</b><br>
<br>
<table border=1>
<tr>
<td align="center">Ячейка таблицы 1</td>
<td align="center">Ячейка таблицы 2</td>
</tr>
<tr>
<td align="center">Ячейка таблицы 3</td>
<td align="center">Ячейка таблицы 4</td>
</tr>
</table>
</body>
</html>
Плагины, такие как, например, Source или TeXEquation, могут добавлять свои теги между тегами <head> … </head>, а также перед закрывающимся тегом </body>.
Поскольку для очень длинных текстов с викинотацией преобразование в формат HTML может быть сравнительно тяжелой операцией, занимающие единицы секунд, викистраница старается кэшировать полученный результат и не создавать код HTML заново при каждом переключении из вкладки Вики на вкладку Просмотр или «HTML», как это происходит со страницами в формате HTML.
Для того, чтобы определить, изменилась ли страница, OutWiker рассчитывает контрольную сумму по алгоритму MD5 от строки, полученной склеиванием следующих элементов:
- Заголовка страницы.
- Текста страницы.
- Текущего списка установленных плагинов.
- Стиля страницы.
- Списка прикрепленных файлов.
- Списка дочерних страниц.
- Некоторых настроек программы, влияющих на сгенерированный код HTML.
Полученный MD5-хэш записывается в параметр md5_hash в разделе [wiki]. Он может выглядеть, например, следующим образом:
[wiki]
md5_hash = dd03106a9e3705caeba5ac75a83ce518
Этот параметр не является обязательным, в случае его отсутствия или, если в нем записана неверная строка, ничего страшного не произойдет, просто данная страница при следующем открытии вкладки «Просмотр» или «HTML» заново создаст файл __content.html
, после чего в данный параметр будет записана новая контрольная сумма MD5.
Как и у HTML-страниц, у викистраниц существует параметр pageindex в разделе [Misc], он также определяет, какую вкладку на данной странице в последний раз открывал пользователь. Если пользователь завершил работу со страницей на вкладке «Вики», это значение будет равно 0, если на вкладке «Просмотр», то - 1, если на вкладке «HTML», то - 2.
Классы, предназначенные для работы с викистраницей расположены в папке src/outwiker/pages/wiki/.
Формат страниц глобального поиска¶
Формат страниц глобального поиска несколько отличается от форматов хранения записей другого типа, поскольку этому типу страниц не нужно хранить большой объем текста. Поэтому в папке страницы поиска содержится обязательный файл __page.opt
, но нет файла __page.text
.
Файл __page.opt
может иметь следующий вид:
[General]
type = search
tags = проверка, test
order = 2
datetime = 2014-04-28 20:56:28.363891
[Search]
phrase = искомая фраза
tags = test, html
strategy = 0
sort = 0
[SearchResults]
page_0 = Пример страницы
page_1 = Тесты
page_2 = Тесты/Проверка
page_3 = Тесты/Проверка/Плагины/source
page_4 = Тесты/Проверка/Абырвалг
page_5 = Тесты/Проверка/Тест
page_6 = HTML5
Для данного типа страниц параметр type из раздела [General] должен быть установлен в значение search. Все остальные параметры из этого раздела аналогичны одноименным параметрам страниц, описанных выше.
Рассмотрим теперь параметры, специфические для страницы глобального поиска. Начнем с раздела [Search], где хранятся параметры, описывающие последний поиск:
- phrase. Фраза, которая будет искаться по всем страницам дерева.
- tags. Метки, которые должны быть проставлены на страницах, чтобы они попали в результат поиска. Теги должны быть разделены запятыми. Если теги не установлены, значит поиск осуществляется по всем страницам дерева. Не путайте этот параметр с одноименным параметром из раздела [General], страница поиска тоже может быть отмечена метками.
- strategy определяет поведение поиска в случае выбора двух и более меток. Если параметр strategy равен 0 или в нем записано ошибочное значение, значит для того, чтобы страница попала в результаты поиска, необходимо, чтобы в ней была проставлена хотя бы одна метка из выбранных (хранимых в параметре tags). Если параметр strategy равен 1, значит для того, чтобы страница попала в результаты поиска, необходимо, чтобы в ней была проставлены все выбранные на странице поиска метки.
- sort определяет способ сортировки найденных результатов. Если параметр sort равен 0 или имеет ошибочное значение, сортировка найденных страниц будет осуществляться по алфавиту по заголовку страницы (поведение по умолчанию). Если параметр sort равен 1, сортировка найденных страниц будет осуществляться по заголовку страницы в обратном порядке. Если параметр sort равен 2, сортировка найденных страниц будет осуществляться по дате последнего изменения страницы, причем страницы с наиболее свежими правками будут располагаться вверху. Если параметр sort равен 3, сортировка найденных страниц будет осуществляться по дате последнего изменения страницы, причем страницы с наиболее свежими правками будут располагаться внизу.
В разделе [SearchResults] сохраняются пути до найденных страниц. Формат хранения результатов поиска видно на приведенном выше примере. Результат сохраняется на тот случай, можно через какое-то время можно было бы вернуться к старому результату поиска без его перезапуска, поскольку эта процедура может быть довольно длительной.
Классы, предназначенные для работы со страницей поиска расположены в папке src/outwiker/pages/search/.
Заключение¶
Подводя итоги всего вышесказанного, содержимое папки заметки может выглядеть следующим образом:

Для страницы со стилем по умолчанию и без прикрепленных файлов папка с заметкой будет выглядеть вот так:

Как создать свой стиль для страниц заметок (не написано)¶
План
Написать раздел про создание новых стилей для страниц.
Application. Экземпляр класса ApplicationParams¶
Чтобы плагин мог делать что-то полезное, в первую очередь нужно разобраться с классом outwiker.core.application.ApplicationParams
. Этот класс представлен глобальной переменной Application в модуле outwiker.core.application. Переменная Application - это интерфейс для доступа ко всем основным частям OutWiker. Идеология плагинов для OutWiker диктуется динамической сутью языка Python, т.е. вы можете добраться практически до любой части основной программы, но за свои действия отвечаете сами - никаких «песочниц» для плагинов не предусмотрено.
По историческим причинам во многих частях программы доступ к переменной Application осуществляется следующим образом:
from outwiker.core.application import Application
...
# Использование переменной Application
Но лучше не использовать явный импорт переменной Application, а передавать ее в явном виде между классами, которые нуждаются в этой переменной. Например, экземпляр класса outwiker.core.application.ApplicationParams
передается в конструктор класса outwiker.core.pluginbase.Plugin
и доступен через поле self._application внутри классов, производных от outwiker.core.pluginbase.Plugin
.
Основное назначение класса outwiker.core.application.ApplicationParams
- предоставить доступ к основным элементам OutWiker - главному окну, actions (см. раздел Actions (не написано)), дереву заметок, списку загруженных плагинов и др., а также дать возможность подписаться на внутренние события OutWiker или добавить свое событие. О событиях см. раздел События.
Класс outwiker.core.application.ApplicationParams
содержит следующие члены:
-
class
outwiker.core.application.
ApplicationParams
¶ -
config
¶ Экземпляр класса
outwiker.core.config.Config
, предназначенный для работы с настройками OutWiker.
-
recentWiki
¶ Экземпляр класса
outwiker.core.recent.RecentWiki
, предназначенный для работы со списком последних открытых деревьев заметок.
-
actionController
¶ Экземпляр класса
outwiker.gui.actioncontroller.ActionController
, предназначенный для работы с actions (см. раздел Actions (не написано)).
-
plugins
¶ Экземпляр класса
outwiker.core.pluginsloader.PluginsLoader
, предназначенный для работы с плагинами.
-
pageUidDepot
¶ Экземпляр класса
outwiker.core.pageuiddepot.PageUidDepot
, предназначенный для работы с уникальными идентификаторами страниц.
Словарь общего назначения, предназначенный для временного хранения данных и передачи информации между сообщениями. Используется как буфер для хранения произвольных данных.
-
wikiroot
¶ Корень открытого в данный момент дерева заметок. Экземпляр класса
outwiker.core.tree.WikiDocument
или None, если в данный момент нет открытого дерева заметок.
-
selectedPage
¶ Выбранная в данный момент страница. Экземпляр класса, производного от
outwiker.core.tree.WikiPage
или None, если в данный момент нет открытого дерева заметок или никакая страница не выбрана.
-
mainWindow
¶ Ссылка на экземпляр класса
outwiker.gui.mainwikdow.MainWindow
главного окна программы.
-
customEvents
¶ Экземпляр класса
outwiker.core.event.CustomEvents
, предназначенный для работы с нестандартными событиями (например, событиями, созданными плагинами).
-
onWikiOpen
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после открытия дерева заметок. Обработчик должен принимать параметры: - root - экземпляр класса
outwiker.core.tree.WikiDocument
, который предназначен для работы с деревом заметок в целом. root может быть равен None.
- root - экземпляр класса
- Событие. Экземпляр класса
-
onWikiClose
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается перед закрытием дерева заметок (например, перед открытием нового дерева заметок или в процессе закрытия программы). Обработчик должен принимать параметры: - root - экземпляр класса
outwiker.core.tree.WikiDocument
. root может быть равен None.
- root - экземпляр класса
- Событие. Экземпляр класса
-
onPageUpdate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после изменения содержимого страницы. Обработчик должен принимать параметры: - sender - страница, которая изменилась (это может быть не обязательно текущая страница). Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - change - переменная, содержащая флаги, обозначающие, что именно изменилось. Возможные значения флагов описаны в
src/outwiker/core/events.py
: - PAGE_UPDATE_CONTENT - изменилось содержимое страницы;
- PAGE_UPDATE_ICON - изменилась иконка страницы;
- PAGE_UPDATE_TAGS - изменились теги страницы;
- PAGE_UPDATE_STYLE - изменился стиль страницы.
- change - переменная, содержащая флаги, обозначающие, что именно изменилось. Возможные значения флагов описаны в
- sender - страница, которая изменилась (это может быть не обязательно текущая страница). Экземпляр класса
- Событие. Экземпляр класса
-
onPageCreate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после создания новой страницы. Обработчик должен принимать параметры: - sender - только что созданная страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него.
- sender - только что созданная страница. Экземпляр класса
- Событие. Экземпляр класса
-
onTreeUpdate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после каких-либо изменений в дереве заметок. Обработчик должен принимать параметры: - sender - Страница, из-за которой было вызвано событие. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. Может быть равен None.
- sender - Страница, из-за которой было вызвано событие. Экземпляр класса
- Событие. Экземпляр класса
-
onPageSelect
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после изменения выбранной страницы. Обработчик должен принимать параметры: - sender - Новая выбранная страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. Может быть равен None (например, если выбирается корень дерева, который не является полноценной страницей).
- sender - Новая выбранная страница. Экземпляр класса
- Событие. Экземпляр класса
-
onAttachmentPaste
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после нажатия кнопки «Вставить» на панели прикрепленных файлов. Обработчик должен отреагировать на то, что пользователь хочет вставить ссылки на прикрепленные файлы в текст страницы. Обработчик должен принимать параметры: - fnames - список имен выбранных прикрепленных файлов (только имена без полных путей).
- Событие. Экземпляр класса
-
onBookmarksChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после добавления страницы в закладки или удаления из них. Обработчик должен принимать параметры: - bookmark - экземпляр класса
outwiker.core.bookmarks.Bookmarks
.
- bookmark - экземпляр класса
- Событие. Экземпляр класса
-
onPageRemove
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после удаления страницы из дерева заметок. Обработчик должен принимать параметры: - page - удаленная страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него.
- page - удаленная страница. Экземпляр класса
- Событие. Экземпляр класса
-
onPageRename
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после переименования страницы. Обработчик должен принимать параметры: - page - переименованная страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - oldSubpath - строка, содержащая старый относительный путь до переименованной страницы.
- page - переименованная страница. Экземпляр класса
- Событие. Экземпляр класса
-
onStartTreeUpdate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, чтобы сообщить о том, что над деревом заметок будет производиться множество операций, которые будут вызывать события, которые, возможно, нет смысла обрабатывать по отдельности. В этом случае часто полезно временно отписаться от всех событий кроме onEndTreeUpdate (см. далее), по пришествию которого опять подписаться на интересующие события. Обработчик должен принимать параметры: - root - экземпляр класса
outwiker.core.tree.WikiDocument
. root может быть равен None.
- root - экземпляр класса
- Событие. Экземпляр класса
-
onEndTreeUpdate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, чтобы сообщить о том, что над деревом заметок было произведено множество операций, которые могли вызывать события, которые, возможно, нет смысла обрабатывать по отдельности. Обычно событие onEndTreeUpdate вызывается после onStartTreeUpdate. Обработчик должен принимать параметры: - root - экземпляр класса
outwiker.core.tree.WikiDocument
. root может быть равен None.
- root - экземпляр класса
- Событие. Экземпляр класса
-
onHtmlRenderingBegin
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается в начале процесса создания и отображения HTML, например, при переключении с викинотации на вкладку просмотра на викистраницах или с HTML-кода на вкладку просмотра на HTML-страницах. Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - page - Страница, для которой происходит рендеринг HTML (скорее всего это выбранная в данный момент страница). Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - htmlView - окно для отображения HTML.
- page - Страница, для которой происходит рендеринг HTML (скорее всего это выбранная в данный момент страница). Экземпляр класса
- Событие. Экземпляр класса
-
onHtmlRenderingEnd
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается в конце процесса создания и отображения HTML, например, при переключении с викинотации на вкладку просмотра на викистраницах или с HTML-кода на вкладку просмотра на HTML-страницах. Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - page - Страница, для которой происходит рендеринг HTML (скорее всего это выбранная в данный момент страница). Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - htmlView - окно для отображения HTML.
- page - Страница, для которой происходит рендеринг HTML (скорее всего это выбранная в данный момент страница). Экземпляр класса
- Событие. Экземпляр класса
-
onPageOrderChange
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после изменения порядка следования страницы в дереве заметок. Обработчик должен принимать параметры: - page - страница, которую переместили выше или ниже. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него.
- page - страница, которую переместили выше или ниже. Экземпляр класса
- Событие. Экземпляр класса
-
onForceSave
¶ Событие. Экземпляр класса
outwiker.core.event.Events
. Можно вызвать, чтобы принудительно заставить сохранить текущую страницу. Обработчик не должен принимать никакие параметры.
-
onWikiParserPrepare
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается перед тем как запустится разбор викинотации. Событие предназначено для того, чтобы плагины могли дополнить викинотацию. Обработчик должен принимать параметры: - parser - парсер викинотации. Экземпляр класса
outwiker.pages.wiki.parser.wikiparser.Parser
.
- parser - парсер викинотации. Экземпляр класса
- Событие. Экземпляр класса
-
onPreferencesDialogCreate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается во время создания диалога настроек программы. Событие предназначено для того, чтобы плагины могли добавить новые разделы в диалог настроек. Обработчик должен принимать параметры: - dialog - диалог настроек. Экземпляр класса
outwiker.gui.preferences.prefdialog.PrefDialog
.
- dialog - диалог настроек. Экземпляр класса
- Событие. Экземпляр класса
-
onPreferencesDialogClose
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после закрытия диалога настроек программы. Событие предназначено для того, чтобы программа OutWiker или плагины могли применить новые настройки. Обработчик должен принимать параметры: - dialog - диалог настроек. Экземпляр класса
outwiker.gui.preferences.prefdialog.PrefDialog
.
- dialog - диалог настроек. Экземпляр класса
- Событие. Экземпляр класса
-
onPageViewCreate
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после создания интерфейса отображения страницы. Это событие можно использовать для настройки интерфейса программы под выбранный в данный момент тип страницы. Обработчик должен принимать параметры: - page - страница, для которой был создан интерфейс. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него.
- page - страница, для которой был создан интерфейс. Экземпляр класса
- Событие. Экземпляр класса
-
onTreePopupMenu
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда пользователь щелкает правой кнопкой на дереве заметок, но до того, как будет отображено всплывающее меню. Событие предназначено для того, чтобы плагин мог изменить всплывающее меню, например, добавить новые пункты. Обработчик должен принимать параметры: - menu - меню, которое будет показано пользователю. Экземпляр класса
wx.Menu
. - page - страница, на которую щелкнули правой кнопкой мыши в дереве заметок. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него.
- menu - меню, которое будет показано пользователю. Экземпляр класса
- Событие. Экземпляр класса
-
onPreprocessing
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается перед началом преобразования текста страниц в HTML для их отображения. В данный момент используется для HTML-, вики- и Markdown-страниц. Это событие можно использовать для изменения содержимого страницы перед его преобразованием в HTML. Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - page - страница, которую в данный момент обрабатывают. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PreprocessingParams
.
- page - страница, которую в данный момент обрабатывают. Экземпляр класса
- Событие. Экземпляр класса
-
onPostprocessing
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после преобразования текста страниц в HTML для их отображения. В данный момент используется для HTML-, вики- и Markdown-страниц. Это событие можно использовать для изменения содержимого страницы после его парсинга, но до его отображения в виде HTML. Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - page - страница, которую в данный момент обрабатывают. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PostprocessingParams
.
- page - страница, которую в данный момент обрабатывают. Экземпляр класса
- Событие. Экземпляр класса
-
onPreHtmlImproving
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после преобразования текста страницы в HTML, но до «улучшения» полученного HTML-кода. Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - page - страница, которую в данный момент обрабатывают. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PreHtmlImprovingParams
.
- page - страница, которую в данный момент обрабатывают. Экземпляр класса
- Событие. Экземпляр класса
-
onPrepareHtmlImprovers
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после создания списка «улучшателей» HTML-кода, но до выбора конкретного «улучшателя» для работы. Улучшатели предназначены для преобразования HTML-кода (разделения текста на абзацы, форматирование кода и т.п.). Это событие можно использовать, чтобы добавить свой «улучшатель». Полный порядок вызова событий показан на рисунке в разделе Порядок событий, в процессе отображения викистраниц. Обработчик должен принимать параметры: - factory - фабрика для создания «улучшателей». Экземпляр класса
outwiker.core.htmlimproverfactory.HtmlImproverFactory
. С помощью этого класса можно добавлять новые «улучшатели», которые должны быть производными классаoutwiker.core.htmlimprover.HtmlImprover
.
- factory - фабрика для создания «улучшателей». Экземпляр класса
- Событие. Экземпляр класса
-
onHoverLink
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда пользователь проводит курсором мыши над ссылкой в окне просмотра страницы. В данный момент из-за особенности работы wxPython данное событие вызывается только в Windows. Обработчик должен принимать параметры: - page - текущая страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.HoverLinkParams
.
- page - текущая страница. Экземпляр класса
- Событие. Экземпляр класса
-
onLinkClick
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда пользователь щелкает на ссылку на странице в режиме просмотра. Обработчик должен принимать параметры: - page - текущая страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.LinkClickParams
.
- page - текущая страница. Экземпляр класса
- Событие. Экземпляр класса
-
onEditorPopupMenu
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда пользователь щелкает правой кнопкой мыши в текстовом редакторе, но до отображения всплывающего меню. Это событие можно использовать для изменения контекстного меню редактора. Обработчик должен принимать параметры: - page - текущая страница. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.EditorPopupMenuParams
.
- page - текущая страница. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogInit
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, во время создания диалога для установки свойств страницы. Это событие можно использовать для того, чтобы добавить новый тип страниц в данный диалог. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogInitParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogDestroy
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, в процессе уничтожения диалога для установки свойств страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogDestroyParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageTypeChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда в диалоге изменения свойств страницы пользователь меняет тип страницы. Это событие можно использовать, например, для настройки внешнего вида диалога изменения свойств страницы в зависимости от выбранного типа страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageTypeChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageTitleChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда в диалоге изменения свойств страницы пользователь меняет заголовок страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageTitleChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageStyleChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда в диалоге изменения свойств страницы пользователь меняет стиль страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageStyleChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageIconChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда в диалоге изменения свойств страницы пользователь меняет иконку страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageIconChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageTagsChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, когда в диалоге изменения свойств страницы пользователь меняет теги страницы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageTagsChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageDialogPageFactoriesNeeded
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается во время создания диалога редактирования свойств страницы. Обработчик этого события может добавлять нестандартные типы фабрик страниц, чтобы пользователь мог выбрать новый тип страниц в соответствующем выпадающем списке. В основном событие нежно для плагинов, которые добавляют новые типы страниц. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageDialogPageFactoriesNeededParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onEditorStyleNeeded
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается в процессе раскраски текста страницы в редакторе заметок. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.EditorStyleNeededParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageUpdateNeeded
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается, чтобы принудительно обновить текущую страницу. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageUpdateNeededParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPreWikiOpen
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается до того, как будет открыто новое дерево заметок. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PreWikiOpenParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPostWikiOpen
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после попытки открытия нового дерева заметок. Отличие от события onWikiOpen заключается в том, что onPostWikiOpen вызывается также после неудачных попыток открыть дерево заметок. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PostWikiOpenParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onIconsGroupsListInit
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после во время создания списка групп иконок. Обрабатывая это событие, плагин может добавлять или редактировать имеющийся список групп иконок. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.IconsGroupsListInitParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onPageModeChange
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после переключения страницы из одного режима в другой (текст / просмотр / HTML). Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.PageModeChangeParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
onAttachListChanged
¶ - Событие. Экземпляр класса
outwiker.core.event.Events
. Вызывается после изменения списка прикрепленных файлов: после добавления новых файлов, удаления или переименования файлов. Обработчик вызывается независимо от того, изменение списка файлов было сделано через интерфейс OutWiker или через файловый менеджер операционной системы. Обработчик должен принимать параметры: - page - страница, для которой вызывается диалог. Экземпляр класса
outwiker.core.tree.WikiPage
или производного от него. - params - экземпляр класса
outwiker.core.events.AttachListChangedParams
.
- page - страница, для которой вызывается диалог. Экземпляр класса
- Событие. Экземпляр класса
-
Порядок событий, в процессе отображения викистраниц¶
Предупреждение
Некоторые события могут быть еще не реализованы.

События¶
Обработка событий в OutWiker реализована через класс outwiker.core.event.Event
. Каждый экземпляр класса outwiker.core.event.Event
отвечает за какое-то одно событие. Этот класс соответствует шаблону проектирования «издатель - подписчик» (publisher-subscriber). Пользователи класса подписываются на событие, указывая какую функцию или вызываемый объект нужно вызвать при срабатывании события, а когда событие срабатывает, вызывается указанная функция или вызываемый объект с теми параметрами, которые были переданы в событие кодом, который вызвал срабатывание события.
На одно событие может быть подписано множество подписчиков, при этом все они имеют приоритет, определяемый целым числом, чем оно больше, тем выше приоритет, и тем раньше будет вызван обработчик с данным приоритетом. Если приоритет не указан, то по умолчанию он равен значению EVENT_PRIORITY_DEFAULT=0 из модуля outwiker.core.event. Величина приоритета на должно превышать значения EVENT_PRIORITY_MAX_CORE=100 и не должно быть меньше EVENT_PRIORITY_MIN_CORE=-100. Рекомендуется всегда оставлять приоритет по умолчанию и писать код так, чтобы не рассчитывать на порядок вызова обработчиков событий.
Многие события содержит в себе класс outwiker.core.application.ApplicationParams
(см. раздел Application. Экземпляр класса ApplicationParams). Содержимое класса outwiker.core.event.Event
:
-
class
outwiker.core.event.
Event
¶ -
__init__
()¶ Конструктор. Не принимает параметров.
-
bind
(handler, priority=EVENT_PRIORITY_DEFAULT)¶ Подписаться на событие.
Параметры: - handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию).
- priority (int) – приоритет данного подписчика. Чем выше приоритет, тем раньше будет вызван подписчик. Порядок вызова подписчиков с одинаковыми приоритетами не определен.
Результат: None
-
__iadd__
(handler)¶ Более короткий аналог метода
bind()
. Не позволяет указывать приоритет.Параметры: handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию). Результат: None
-
unbind
(handler)¶ Отписаться от события.
Параметры: handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода bind()
или__iadd__()
.Результат: None
-
__isub__
(handler)¶ Аналог метода
unbind()
Параметры: handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода bind()
или__iadd__()
.Результат: None
-
__call__
(*args, **kwargs)¶ Вызов события с параметрами *args и **kwargs. Метод вызывает все обработчики, которые были добавлены с помощью методов
bind()
или__iadd__()
.
-
clear
()¶ Отписывает всех подписчиков данного события.
-
Примеры использования класса outwiker.core.event.Event
¶
from outwiker.core.event import Event
def handler(param1, param2):
...
event = Event()
event += handler
event(10, 100)
...
event -= handler
from outwiker.core.event import Event
def handler(param1, param2):
...
event = Event()
event.bind(handler)
event(10, 100)
...
event.unbind(handler)
from outwiker.core.event import Event, EVENT_PRIORITY_DEFAULT
def handler1(param1, param2):
...
def handler2(param1, param2):
...
event = Event()
event.bind(handler1, priority=EVENT_PRIORITY_DEFAULT + 1)
event.bind(handler2, priority=EVENT_PRIORITY_DEFAULT - 1)
event(10, 100)
...
event.unbind(handler1)
event.unbind(handler2)
outwiker.core.application.ApplicationParams
¶from outwiker.core.application import Application
def pageSelect(sender):
...
Application.onPageSelect += pageSelect
...
Application.onPageSelect -= pageSelect
Пользовательские события¶
Помимо класса outwiker.core.event.Event
внутри модуля outwiker.core.event
содержится класс outwiker.core.event.CustomEvents
, предназначенный для хранения списка событий (экземпляров класса outwiker.core.event.Event
), доступ к которым осуществляется по имени (по ключу). Этот класс может быть полезен в тех случаях, когда нужно подписаться на событие, которое создается динамически (например, с помощью плагина). Класс outwiker.core.event.CustomEvents
создает экземпляр класса outwiker.core.event.Event
внутри себя только тогда, когда кто-то подписывается на событие с новым ключом.
-
class
outwiker.core.event.
CustomEvents
¶ -
bind
(key, handler, priority=EVENT_PRIORITY_DEFAULT)¶ Подписаться на событие с ключом key.
Параметры: - key (str) – ключ, с помощью которого идентифицируется событие. Рекомендуется использовать строку. Если не существует события с ключом key, будет создано новое событие (экземпляр класса
outwiker.core.event.Event
) с данным ключом. - handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию).
- priority (int) – приоритет данного подписчика. Чем выше приоритет, тем раньше будет вызван подписчик. Порядок вызова подписчиков с одинаковыми приоритетами не определен.
Результат: None
- key (str) – ключ, с помощью которого идентифицируется событие. Рекомендуется использовать строку. Если не существует события с ключом key, будет создано новое событие (экземпляр класса
-
unbind
(key, handler)¶ Отписаться от события с ключом key.
Параметры: - key (str) – ключ, с помощью которого идентифицируется событие. Если не существует события с ключом key, то ничего не происходит.
- handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода
bind()
или__iadd__()
.
Результат: None
-
__call__
(key *args, **kwargs)¶ Вызов события, которое определяется ключом key, с параметрами *args и **kwargs. Метод вызывает все обработчики, которые были добавлены с помощью метода
bind()
. Если не существует события с ключом key, то ничего не происходит.
-
clear
(key)¶ Отписывает всех подписчиков события, которое определяется ключом key. Если не существует события с ключом key, то ничего не происходит.
-
get
(key)¶ Возвращает экземпляр класса
outwiker.core.event.Event
, который определяется ключом key.Параметры: key (str) – ключ, с помощью которого идентифицируется событие. Если не существует события с ключом key, то оно создается. Тип результата: outwiker.core.event.Event
-
Хранение номеров версий в OutWiker и плагинах (не написано)¶
План
Описать формат хранения изменений в версиях.
Пакет outwiker.core (не написано)¶
Actions (не написано)¶
План
Написать раздел про actions.
Пакет outwiker.gui (не написано)¶
Парсер викинотации (не написано)¶
Локализаия OutWiker и плагинов (не написано)¶
План
Написать раздел про локализации.
Создание плагинов для OutWiker¶
Основы создания плагинов для OutWiker¶
Формат плагинов¶
Примечание
Эта документация подразумевает, что плагины будут рассчитаны на работу в OutWiker 2.0 или более новых версий. В OutWiker 1.9 и ранее формат плагинов немного отличался (не было обязательного файла plugin.xml
).
Плагины в OutWiker представляют собой Python-пакеты с дополнительным файлом plugin.xml
. Плагины располагаются в папке plugins
папки с настройками OutWiker (см. раздел Где находится папка профиля программы?).
Плагин представляет собой папку с файлами:
plugin.py
- основной модуль плагина. Каждый плагин должен иметь этот файл, в котором должен находиться класс, производный отoutwiker.core.pluginbase.Plugin
.plugin.xml
- файл с информацией о совместимости плагина и (не обязательно) с информацией об авторе плагина, домашней странице и со списокм изменений в каждой версии плагина.__init__.py
- необходимый файл, чтобы папка с плагином считалась Python-пакетом.
Файлы plugin.py
и plugin.xml
будут описаны далее.
Минимальный плагин¶
Для примера создадим плагин с именем FirstPlugin. Для этого нужно создать следующую структуру файлов и папок внутри папки plugins
:
plugins
└── firstplugin
├── __init__.py
├── plugin.py
└── plugin.xml
Файл __init__.py
останется пустым текстовым файлом, а остальные файлы начнем постепенно заполнять.
Начнем с файла plugin.xml
. Минимальный файл plugin.xml
должен содержать информацию о той версии OutWiker, которая требуется плагину:
<?xml version="1.1" encoding="UTF-8" ?>
<info>
<name>FirstPlugin</name>
<requirements>
<api>2.835</api>
</requirements>
</info>
Здесь внутри тега <name>…</name> указано имя плагина, которое будет в интерфейсе OutWiker и в сообщениях об ошибках.
Внутри тега <api>…</api> указана внутренняя версия API программы OutWiker, которая требуются плагину для работы. Номер текущей версии API можно увидеть в файле src/outwiker/core/__init__.py
.
При загрузке плагина происходит проверка требуемой версии API OutWiker по следующим правилам:
- Если плагину требуется API с большим номером версии, чем имеется в данной версии OutWiker, плагин не будет загружен, а в лог программы будет выведена ошибка о том, что для работы данного плагина требуется более новая версия OutWiker.
- Если плагину требуется API с тем же номером версии, что и в данной версии OutWiker, то плагин будет загружен.
- Если плагину требуется API с меньшим номером версии, но при этом первая цифра версии API данной версии OutWiker в требованиях плагина и OutWiker совпадает, то плагин будет загружен.
- Если плагину требуется компонент с меньшим номером версии, но при этом первая цифра версии API в требованиях плагина и OutWiker не совпадает, то плагин не будет загружен, а в лог программы будет выведено сообщение о том, что необходимо установить более новую версию плагина (данная версия плагина устарела).
Например, если плагину требуется API 2.2, то он будет успешно загружен в OutWiker, API версий 2.0 и 2.1, но не 1.9 и не 2.3. Считается, что при изменении первой цифры номера версии теряется обратная совместимость.
Файл plugin.py
должен содержать объявление класса, производного от абстрактного базового класса outwiker.core.pluginbase.Plugin
, который содержит методы, которые нужно и которые можно перегрузить в производном классе. Основные методы и свойства этого класса:
-
class
outwiker.core.pluginbase.
Plugin
¶ -
def __init__(application)
Конструктор принимает экземпляр класса
outwiker.core.application.ApplicationParams
(см. раздел Application. Экземпляр класса ApplicationParams), который будет доступен в производных классах через член self._application.
-
name
¶ Абстрактное свойство. Возвращает строку с именем плагина. По этой строке с помощью API OutWiker можно находить экземпляр загруженного плагина.
-
description
¶ Абстрактное свойство. Возвращает строку с кратким описанием плагина.
-
initialize
()¶ Абстрактный метод. Метод вызывается при загрузке плагина. Именно в этом методе плагин должен подписаться на необходимые события, чтобы взаимодействовать с OutWiker.
-
destroy
()¶ Абстрактный метод. Метод вызывается перед отключением плагина, в том числе перед закрытием программы OutWiker.
-
Минимально необходимый код в файле plugin.py
может выглядеть следующим образом:
# -*- coding: utf-8 -*-
from outwiker.core.pluginbase import Plugin
class PluginFirst(Plugin):
def __init__(self, application):
super(PluginFirst, self).__init__(application)
#########################################
# Properties and methods to overloading #
#########################################
@property
def name(self):
return u"FirstPlugin"
@property
def description(self):
return _(u"My first plugin")
def initialize(self):
pass
def destroy(self):
pass
Примечание
Имя класса из файла plugin.py
обязательно должно начинаться со слова «Plugin», например, «PluginFirst».
Если все сделано правильно, то после перезапуска OutWiker плагин FirstPlugin появится в списке плагинов.

Примечание
Исходные коды такого плагина можно посмотреть в исходниках OutWiker в папке plugins/examples/firstplugin_01
.
Файл plugin.xml
может содержать больше информации о плагине. Ниже приведен пример файла plugin.xml
для нашего первого плагина.
<?xml version="1.1" encoding="UTF-8" ?>
<info>
<name>FirstPlugin</name>
<updates>http://example.com/pluginname/plugin.xml</updates>
<requirements>
<api>2.835</api>
</requirements>
<data lang="en">
<website>http://example.com/pluginnameEn</website>
<description>Description.</description>
<author>
<name>Author name</name>
<email>example@example.com</email>
<site>http://example.com</site>
</author>
<changelog>
<version number="0.2" date="August 24, 2017">
<download os="all">http://example.com/pluginname-0.2.zip</download>
<change>Added a new cool feature.</change>
<change>Bug fixes.</change>
</version>
<version number="0.1" date="August 02, 2017">
<download os="all">http://example.com/pluginname-0.1.zip</download>
<change>The first version.</change>
</version>
</changelog>
</data>
<data lang="ru">
<website>http://example.com/pluginnameRu</website>
<description>Описание.</description>
<author>
<name>Author name</name>
<email>example@example.com</email>
<site>http://example.com</site>
</author>
<changelog>
<version number="0.2" date="24.08.2017">
<download os="all">http://example.com/pluginname-0.2.zip</download>
<change>Добавлена новая крутая возможность.</change>
<change>Исправление ошибок.</change>
</version>
<version number="0.1" date="02.08.2017">
<download os="all">http://example.com/pluginname-0.1.zip</download>
<change>Первая версия.</change>
</version>
</changelog>
</data>
</info>
Коротко рассмотрим используемые теги. Все они являются необязательными.
- info/updates
- Путь до файла
plugin.xml
в интернете. Используется для проверки доступной версии плагина на сайте http://jenyay.net. В перспективе это свойство будет использоваться плагином UpdateNotifier для поиска новых версий плагинов. Если у плагина нет сайта в интернете, этот тег можно не писать. - info/data
- Содержит дополнительную информацию, которая предназначена в первую очередь для показа пользователям (единственное исключение - номер версии, о чем будет сказано далее). Поэтому может быть несколько тегов <data>, каждый из них предназначен для показа данных на своем языке. В данный момент используются два языка: английский (тег <data> должен содержать атрибут lang=»en») и русский (тег <data> должен содержать атрибут lang=»ru»). Несмотря на то, что OutWiker поддерживает большее количество языков, эти два языка используются по той причине, что сайт OutWiker переведен только на эти два языка. Данные из тега <data> используются для создания страниц описания плагинов. Вложенные теги описаны далее.
- info/data/website
- Ссылка на страницу плагина в интернете.
- info/data/description
- Краткое описание плагина. Может не совпадать с описанием, которое возвращает свойство description класса, производного от
outwiker.core.pluginbase.Plugin
. Используется только для создания описания плагина на сайте. - info/data/author
- Содержит информацию об авторе плагина: имя автора (тег <name>), e-mail автора (тег <email>), сайт автора (не обязательно совпадающий с сайтом плагина, тег <site>).
- info/data/changelog
- Содержит описание изменений в каждой версии плагина. В данный момент информация из тега <changelog> используется только для создания списка изменений на сайте плагина. В будущем эти данные будут использоваться плагином UpdateNotifier, чтобы показывать пользователю, что изменилось в новой версии плагина.
- info/data/changelog/version
- Содержит информацию об изменениях в конкретной версии плагина. Обязательный атрибут - number, который указывает описание какой версии содержит тег <version>. Номер версии - целые числа, разделенные точками. Количество элементов номера версии может быть от 1 до 4. Также тег <version> может содержать атрибут date, который хранит дату релиза данной версии плагина. Дата может описываться в произвольном формате и предназначена для показа пользователю, поэтому формат даты может быть различным для английской и русской версии тега <data>. Тегов <version> может быть несколько. Текущая версия плагина определяется по наибольшей версии, которая указана в атрибутах number тегов <version>.
- info/data/changelog/version/download
- Содержит ссылку для скачивания данной версии плагина. Также может быть добавлен атрибут os, указывающий, для какой операционной системы предназначена данная ссылка. Может быть несколько тегов <download>, содержащих ссылки для скачивания для разных операционных систем. В данный момент атрибут os игнорируется.
- info/data/changelog/version/change
- Содержит информацию об одном пункте списка изменений.
Плагин FirstPlugin с приведенным выше файлом plugin.xml
в списке плагинов будет выглядеть следующим образом (появился номер версии):

Примечание
Исходные коды такого плагина можно посмотреть в исходниках OutWiker в папке plugins/examples/firstplugin_02
.
Заключение¶
В данном разделе был приведен пример минимального плагина, который ничего не делает кроме как загружается вместе с OutWiker. Чтобы придать плагину какую-либо функциональность, нужно воспользоваться переменной экземпляром класса outwiker.core.application.ApplicationParams
, который получает конструктор класса outwiker.core.pluginbase.Plugin
(см. раздел Application. Экземпляр класса ApplicationParams) и подписаться на те события, которые должен обрабатывать плагин. О событиях см. раздел События.
Обработка событий в плагине¶
В разделе Основы создания плагинов для OutWiker было показано, как создать простейший плагин, который ничего не делает кроме как загружается и упоминается в списке плагинов. В данном разделе будет показано, как обрабатывать различные события. Прежде чем читать данный раздел рекомендуется ознакомиться с разделами Application. Экземпляр класса ApplicationParams и События.
Примечание
Для выполнения примеров данного раздела необходимо перевести OutWiker в режим отладки, для чего в файле outwiker.ini
в секции [General] необходимо добавить строку debug = True. Чтобы найти файл outwiker.ini
, см. раздел Где хранятся настройки программы?
В этом разделе будет создан плагин с именем ExampleEventsPlugin, который будет выводить в лог работы информацию о некоторых событиях, возникающих в процессе работы OutWiker. Исходные коды данного плагина расположены в папке plugins/examples/eventsplugin/
исходных кодов программы OutWiker.
Сначала создадим новую папку с плагином, которая будет называться, например, eventsplugin
(имя папки не существенно). Данная папка должна располагаться в папке с плагинами (см. раздел Как установить плагин?).
Внутри этой папки создадим три файла:
__init__.py
- пустой файл.plugin.py
- файл с классом плагина.plugin.xml
- файл манифеста плагина.
Таким образом, структура каталога eventsplugin
будет следующая:
..
└── eventsplugin
├── __init__.py
├── plugin.py
└── plugin.xml
Содержимое файла plugin.xml
соответствует структуре, описанной в разделе Основы создания плагинов для OutWiker, и не представляет особого интереса:
<?xml version="1.1" encoding="UTF-8" ?>
<info>
<name>ExampleEventsPlugin</name>
<updates>http://example.com/pluginname/plugin.xml</updates>
<requirements>
<os>Windows, Linux</os>
<packages>
<core>1.3</core>
<actions>1.1</actions>
<gui>1.5</gui>
<pages>2.0</pages>
<utilites>1.0</utilites>
<libs>1.0</libs>
</packages>
</requirements>
<data lang="en">
<website>http://example.com/pluginnameEn</website>
<description>Description.</description>
<author>
<name>Author name</name>
<email>example@example.com</email>
<site>http://example.com</site>
</author>
<changelog>
<version number="0.1" date="August 20, 2017">
<download os="all">http://example.com/eventsplugin-0.1.zip</download>
<change>The first version.</change>
</version>
</changelog>
</data>
<data lang="ru">
<website>http://example.com/pluginnameRu</website>
<description>Описание.</description>
<author>
<name>Имя автора</name>
<email>example@example.com</email>
<site>http://example.com</site>
</author>
<changelog>
<version number="0.1" date="20.08.2017">
<download os="all">http://example.com/eventsplugin-0.1.zip</download>
<change>Первая версия.</change>
</version>
</changelog>
</data>
</info>
Файл plugin.py
для начала будет минимально необходимый, только чтобы убедиться, что плагин загружается:
# -*- coding: utf-8 -*-
from outwiker.core.pluginbase import Plugin
class PluginExampleEvents(Plugin):
def __init__(self, application):
super(PluginExampleEvents, self).__init__(application)
#########################################
# Properties and methods to overloading #
#########################################
@property
def name(self):
return u"ExampleEventsPlugin"
@property
def description(self):
return _(u"Example plugin")
def initialize(self):
pass
def destroy(self):
pass
Запустите OutWiker и убедитесь, что плагин успешно загружен, он должен появиться в списке плагинов в разделе «Плагины» диалога настроек:

Теперь добавим функциональность плагину. Мы могли бы все делать в рамках класса PluginExampleEvents
, но лучше пусть этот класс работает только в процессе загрузки плагина, а функциональность плагина мы поместим в новый класс eventsplugin.controller.Controller
, поэтому в папке eventsplugin
создадим еще один файл controller.py
с классом контроллера:
# -*- coding: UTF-8 -*-
import logging
logger = logging.getLogger('ExampleEventsPlugin')
class Controller(object):
def __init__(self, application):
self._application = application
def initialize(self):
logger.info(u'Initialize.')
def destroy(self):
logger.info(u'Destroy.')
Метод initialize()
будет вызываться во время инициализации плагина (его загрузки или включении в диалоге настроек), а метод destroy()
будет вызываться перед выгрузкой плагина (во время завершения программы OutWiker или после отключения плагина в диалоге настроек).
Пока единственное, что делает класс eventsplugin.controller.Controller
- это сообщает в логе работы о том, что плагин инициализируется и выгружается.
Чтобы начать использовать данный класс, изменим содержимое файла plugin.py
:
# -*- coding: utf-8 -*-
from outwiker.core.pluginbase import Plugin
from .controller import Controller
class PluginExampleEvents(Plugin):
def __init__(self, application):
super(PluginExampleEvents, self).__init__(application)
self.controller = Controller(application)
#########################################
# Properties and methods to overloading #
#########################################
@property
def name(self):
return u"ExampleEventsPlugin"
@property
def description(self):
return _(u"Example plugin")
def initialize(self):
self.controller.initialize()
def destroy(self):
self.controller.destroy()
Перезапустите OutWiker и в логе работы вы должны увидеть строки вида
INFO 2017-08-20 21:36:40,987 ExampleEventsPlugin - controller - Initialize.
INFO 2017-08-20 21:57:32,939 ExampleEventsPlugin - controller - Destroy.
Отключите и включите плагин в диалоге настроек, чтобы убедиться, что плагин инициализируется и выгружается.
Если вы работаете под Linux или запускаете OutWiker из исходников под Windows, то данный текст лога работы должен выводиться в консоль. Если вы запускаете OutWiker с помощью файла outwiker.exe под Windows, то данные строки вы должны увидеть в файле outwiker.log
в папке профиля программы (см. раздел Где находится папка профиля программы?). Если плагин загружен, но данные строки не появляются в логе работы, убедитесь, что вы перевели OutWiker в отладочный режим (см. примечание в начале данного раздела).
Теперь вернемся в файл controller.py
и подпишемся на некоторые события из класса outwiker.core.application.ApplicationParams
. Измененный файл controller.py
будет выглядеть следующим образом:
# -*- coding: UTF-8 -*-
import logging
logger = logging.getLogger('ExampleEventsPlugin')
class Controller(object):
def __init__(self, application):
self._application = application
def initialize(self):
logger.info(u'Initialize.')
self._application.onWikiOpen += self._onWikiOpen
self._application.onPageSelect += self._onPageSelect
self._application.onPageUpdate += self._onPageUpdate
self._application.onEditorPopupMenu += self._onEditorPopupMenu
def destroy(self):
logger.info(u'Destroy.')
self._application.onWikiOpen -= self._onWikiOpen
self._application.onPageSelect -= self._onPageSelect
self._application.onPageUpdate -= self._onPageUpdate
self._application.onEditorPopupMenu -= self._onEditorPopupMenu
def _onWikiOpen(self, root):
logger.info(u'onWikiOpen. Path to notes: {}'.format(root.path))
def _onPageSelect(self, sender):
if sender is None:
logger.info(u'onPageSelect. No page selected.')
else:
logger.info(u'onPageSelect. Selected page: {}'.format(sender.subpath))
def _onPageUpdate(self, sender, *args, **kwargs):
logger.info(u'onPageUpdate. Updated page: {}'.format(sender.subpath))
def _onEditorPopupMenu(self, page, params):
logger.info(u'onEditorPopupMenu. Current page: {}'.format(page.subpath))
В классе eventsplugin.controller.Controller
была добавлена подписка на следующие события:
- onWikiOpen
- Вызывается после открытия дерева заметок.
- onPageSelect
- Вызывается после выбора новой страницы в дереве заметок.
- onPageUpdate
- Вызывается после изменения содержимого страницы.
- onEditorPopupMenu
- Вызывается перед созданием контекстного меню после клика правой кнопкой мыши в текстовом редакторе.
Чтобы увидеть эти события, пооткрывайте и позакрывайте дерево заметок, поизменяйте содержимое страниц и повызывайте контекстное меню с помощью правой кнопки мыши. Подробнее о параметрах каждого из этих событий написано в описании класса outwiker.core.application.ApplicationParams
.
Лог работы может выглядеть примерно следующим образом:
INFO 2017-08-20 22:33:14,963 ExampleEventsPlugin - controller - Initialize.
INFO 2017-08-20 22:33:18,139 ExampleEventsPlugin - controller - onPageSelect. Selected page: test/page_01
INFO 2017-08-20 22:33:18,140 ExampleEventsPlugin - controller - onWikiOpen. Path to notes: /home/jenyay/sync/wiki/samplewiki
INFO 2017-08-20 22:33:18,140 root - plugin - Opening wiki /home/jenyay/sync/wiki/samplewiki: 1.09291815758 sec
INFO 2017-08-20 22:33:20,662 ExampleEventsPlugin - controller - onPageSelect. No page selected.
INFO 2017-08-20 22:33:21,801 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:21,803 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:21,804 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:21,859 ExampleEventsPlugin - controller - onPageSelect. Selected page: # Поиск
INFO 2017-08-20 22:33:22,618 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:22,621 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:22,624 ExampleEventsPlugin - controller - onPageUpdate. Updated page: # Поиск
INFO 2017-08-20 22:33:22,864 ExampleEventsPlugin - controller - onPageSelect. Selected page: test/page_01
INFO 2017-08-20 22:33:53,506 ExampleEventsPlugin - controller - onEditorPopupMenu. Current page: test/page_01
Плагин готов. В данном разделе мы создали плагин, который обрабатывает некоторые события из класса outwiker.core.application.ApplicationParams
и выводит текст в лог работы. Исходные коды данного плагина расположены в папке plugins/examples/eventsplugin/
.
Развивая идею данного плагина, был создан плагин DebugEvents, который подобным образом следит за всеми событиями из класса outwiker.core.application.ApplicationParams
. Этот плагин предназначен исключительно для разработчиков плагина, поэтому не упоминается на сайте программы. Найти его можно в исходных кодах в папке plugins/debugevents
.
История версий¶
3.1.0 (май 2022)¶
- Упрощение диалога создания / редактирования свойств страницы.
- Улучшена работа с горячими клавишами.
- Улучшения в интерфейсе панели с прикрепленными файлами.
Предыдущие версии¶
3.0.0 (май 2021)¶
- Теперь в именах заметок можно использовать любые символы.
- Переделаны панели инструментов.
- Новый интерфейс выбора значков заметок.
- Новый интерфейс всплывающего окна при клике на тег.
- Новый интерфейс при выборе корня дерева заметок.
- Новый интерфейс для отображения страниц неизвестного типа.
- Добавлена возможность выбора положения новой заметки в списке заметок.
- Добавлена настройка для шаблона имени новых страниц.
- Улучшен диалог с вопросом о перезаписи прикрепленных файлов.
- Другие улучшения в интерфейсе.
- Новые викикоманды для раскраски текста и применения пользовательских стилей.
- Добавлена возможность вставки комментариев в викинотации.
- Добавлено слежение за прикрепленными файлами для текущей страницы.
- В файлы стилей страниц добавлена новая переменная $title.
- Добавлен новый стиль страниц «rifle_green_and_red».
- Добавлена немецкая локализация.
- Изменение формата хранения некоторых настроек страниц в дереве заметок.
- Изменен способ хранения стандартных значков в заметках.
- Переделан инсталлятор программы.
- Изменен формат плагинов.
- Переход на Python 3.x и wxPython 4.1.
2.0.0 (июнь 2017)¶
- Переход на библиотеку wxPython 3.0.
- В редактор добавлена возможность дублировать текущую строку с помощью горячей клавиши или меню.
- В редактор добавлена возможность удалять текущую строку с помощью горячей клавиши или меню.
- В редактор добавлена возможность перемещения строк вверх / вниз с помощью горячих клавиш или меню.
- В редактор добавлена возможность для слияния строк с помощью горячей клавиши или меню.
- В редактор добавлена возможность удаления слов слева / справа с помощью горячей клавиши или меню.
- Добавлены пункты меню и горячие клавиши для перемещения по тексту.
- Добавлены пункты меню и горячие клавиши для копирования / вырезания текущей строки в буфер обмена.
- В редактор добавлены возможности для редактирования слов и строк.
- Добавлен параметр командной строки «–page, -p» для выбора страницы при запуске.
- Добавлен параметр командной строки «–normal» для отключения свертывания окна при запуске.
- Добавлен параметр командной строки «–debug» для запуска в режиме отладки.
- Восстановлена работоспособность иконки в трее под Linux.
- Добавлена возможность создавать псевдонимы для страниц.
- Переделан интерфейс для установки горячих клавиш.
- Добавлена настройка для изменения цвета фона поля редактора.
- Добавлена настройка для изменения цвета фона выделенного текста.
- Добавлена поддержка шведского языка.
- Удалена поддержка итальянского языка.
1.9.0.790 (09.04.2016)¶
- Добавлена проверка орфографии.
- Иконки для заметок разделены на группы.
- Теперь пользователи могут дополнять стандартный набор иконок своими файлами.
- Возможность выбора цветов для облака тегов.
- Возможность выбора действий при клике левой и средней кнопки мыши по тегам.
- Возможность выбора действия при двойном клике по прикрепленному файлу.
- Добавлены новые викикоманды для создания страниц (:table:), (:row:), (:cell:), (:hcell:)
- Теперь поиск действий для горячих клавиш в настройках осуществляется не только по названию действия, но и по его описанию.
- Добавлены новые иконки.
- Добавлены новые стили страниц.
- Теперь в диалоге вставки ссылок можно выбирать один из прикрепленных файлов, чтобы сделать ссылку на него.
- Дополнена справка.
1.8.1.752 (20.10.2014)¶
- Исправление ошибок
1.8.0.750 (11.10.2014)¶
- Добавлена возможность настройки горячих клавиш.
- Добавлена возможность ссылаться на страницы, используя их уникальные идентификаторы.
- Добавлена возможность перехода по ссылкам на якоря, расположенные на других страницах (page://bla-bla-bla/#anchor).
- Добавлена возможность использовать относительные пути в ссылках на страницы (../../Страница 1/Страница 2)
- Добавлена возможность установки стиля страницы разом для всех страниц ветки дерева (или всего дерева).
- Добавлена возможность поиска и замены по странице.
- Добавлены кнопки Вперед / Назад для возврата к предыдущим открытым страницам.
- Добавлена возможность настройки цветов редактора.
- Добавлена настройка для изменения поведения клавиш Home / End в редакторе (перескакивать в начало / конец строки или абзаца).
- Добавлен новый тег викисинтаксиса для цитирования: [>…<].
- Добавлена кнопка и пункт меню для вставки текущей даты и времени.
- Добавлены команды (:crdate:) и (:eddate:) для вставки даты создания и редактирования страницы соответственно.
- Добавлены диалоги для вставки команд (:attachlist:), (:childlist:) и (:include:).
- В команде (:childlist:) добавлена возможность сортировки дочерних страниц по дате создания и дате последнего изменения.
- На странице глобального поиска добавлена возможность сортировки найденных страниц по дате создания.
- Добавлен новый параметр командной строки «-r» или «–readonly», позволяющий открывать дерево заметок в режиме «Только для чтения».
- Добавлены всплывающие подсказки над иконками в окне свойств страниц.
- Добавлены новые стили оформления страниц.
- Добавлена кнопка и пункт меню для открытия папки с прикрепленными файлами в системном файловом менеджере.
- Добавлено сохранение последнего используемого стиля страницы.
- Добавлено сохранение положения курсора на каждой странице перед закрытием.
- Добавлена итальянская локализация.
- Теперь в панели с прикрепленными файлами показываются иконки файлов.
- Изменен алгоритм расстановки переносов строк.
- Открытие заметок и поиск страниц осуществляется в отдельном потоке.
- Теперь для каждой страницы сохраняется дата создания.
- Теперь все HTML-теги, создаваемые википарсером, будут строчными буквами.
- Теперь справка открывается в новом окне.
- Новые иконки.
- Настройки перенесены из ~/.outwiker в более идеологически верные места (зависит от операционной системы).
- Ускорение работы.
- Различные исправления и улучшения.
- Исправление ошибок.
1.7.0.684 (01.12.2012)¶
- Добавлена возможность открывать заметки в отдельных вкладках.
- Панель инструментов разделена на несколько перемещаемых панелей.
- Теперь сохраняется и показывается дата последней правки на странице.
- Значительно ускорены разбор и раскраска викисинтаксиса (по тестам ускорение от 2 до 10 раз).
- Добавлен интерфейс для вставки некоторых элементов викисинтаксиса.
- Добавлена возможность с помощью викисинтаксиса делать более крупный и мелкий шрифт.
- Добавлена возможность сортировки результатов поиска по алфавиту или по дате.
- Добавлена возможность принудительной пересборки HTML-кода по викинотации.
- Исправления в шаблонах страниц.
- В дистрибутив под Linux добавлена векторная иконка и иконки больших размеров.
- Изменения во внешнем виде страницы поиска.
- Создан инсталятор под Windows.
- Исправлена ошибка, из-за которой не создавались превьюшки на викистраницах, если расширения файлов с картинками было записано заглавными буквами.
- Исправлена ошибка из-за которой не сохранялись размеры внутренних окон (дерево заметок, прикрепленные файлы и т.п.)
- Исправления других ошибок.
- Множество небольших исправлений и улучшений в интерфейсе
1.6.0.650 (19.05.2012)¶
- Добавлена возможность смены стиля страниц.
- Добавлена раскраска викисинтаксиса в редакторе.
- Викикоманды для оформления ссылок на пользователей и сообщества livejournal.com вынесены из программы в отдельный плагин.
- Теперь для выравнивания текста на викистраницах кроме %center% и %right% можно использовать %left% и %justify%.
- Добавлена украинская локализация.
- Переделан диалог свойств страницы.
- Множество небольших исправлений.
1.5.0.627 (23.02.2012)¶
- Добавлено облако меток в главное окно.
- Теперь метки можно добавлять, кликая по ним мышкой, а не вводить имена меток полностью.
- Метки для выбранной записи теперь выделяются в общем облаке меток.
- Добавлена возможность группового добавления/удаления/переименования меток.
- Добавлена настройка, позволяющая сворачивать окно программы при нажатии на кнопку закрытия.
- Двойной щелчок на заголовок страницы открывает диалог для редактирования свойств страницы.
1.4.0.601 (07.12.2011)¶
- Добавлена поддержка плагинов.
- Добавлено автосохранение заметок по таймеру (интервал сохранения задается в настройках).
- Добавлена проверка изменения текста заметок сторонними программами.
- Для HTML-страниц добавлена кнопка включения/выключения автоматического переноса строк.
- Версия под Linux теперь устанавливается в /usr, а не в /opt. Теперь из консоли программу можно вызывать с помощью команды outwiker.
- Улучшена обработка викисинтаксиса, касающегося создания списков.
- Теперь поиск по страницам ищет искомую фразу в именах прикрепленных файлов и в названиях тегов.
- Исправления ошибок и небольшие улучшения интерфейса.
- Программа теперь тестируется только под Python 2.7.
1.3.2.496 (13.09.2011)¶
- Новый интерфейс выбора иконок.
- Добавил новые иконки из наборов famfamfam.com и yusukekamiyamane.com.
- Новая иконка программы (спасибо Алексею Набродову).
- В пределах одной страницы теперь работают якоря.
- Новый элемент викинотации для добавления якорей.
- Значительно уменьшено моргание и обновление интерфейса при перемещении по дереву.
- Справка на английском языке (спасибо Илье Чешкову за исправления моего корявого перевода с помощью Google Translate :) ).
- Добавлены горячие клавиши для тега <PRE> на HTML-странице и [@…@] на викистранице.
- Добавлены горячая клавиша и кнопка для [[<<]] на викистранице.
- Добавлены кнопки для тегов <code> и <blockquote> на HTML-странице.
- Добавлена кнопка «Обновить» для панели с прикрепленными файлами.
- При нажатии на иконку в трее, свернутое окно разворачивается, а развернутое теперь сворачивается.
- Исправлено: под Windows не работали ссылки на страницы, имеющие в своем пути символ «#».
- Исправлена ошибка, возникавшая при испорченном файле __page.opt в корне вики.
- Другие исправления ошибок в программе и переводе.
- Рефакторинг кода.
1.3.1.393 (01.07.2011)¶
- Под Windows исправлена ошибка, из-за которой не работали ссылки на странице поиска.
- Под Linux исправлена ошибка, из-за которой не открывались страницы, если в пути до них был символ „#“.
1.3.0.384 (26.06.2011)¶
- Теперь в качестве HTML-рендера под Windows используется движок Internet Explorer, под Linux - WebKit.
- Добавлена возможность печати заметок и их исходного текста.
- Добавлен новый вики-тег {-…-} для зачеркнутого текста.
- Добавлена кнопка для зачеркнутого текста на HTML-странице.
- Возможность установки размера шрифта при просмотре заметок через окно настроек.
- Возможность установки дополнительных стилей CSS для заметок.
- Изменение горячей клавиши для переключением между кодом и просмотром на F4.
- Добавлены пункты меню для вики-команд (: … :).
- Страницы, открытые в режиме «Только для чтения», в дереве выделяются курсивом.
- Под Windows программа теперь должна работать без установки MS Visual C++ 2008 Redistributable Package.
- При запуске программы под Windows с помощью exe-шника ошибки будут выводиться в файл outwiker.log, который будет создан в той же папке, где расположен файл настроек outwiker.ini.
- Исправлены ошибки, возникавщие при попытке открыть вики, если для какой-то из заметок нет прав на запись.
- Исправлена ошибка, из-за которой под Windows не работал рендеринг формул, если программа была установлена в директорию, содержащей пробелы.
1.2.0.322 (24.04.2011)¶
- Для вики-страниц добавлена возможность ввода формул в нотации TeX (для рендеринга используется mimeTex).
- Ссылка на картинку в виде [[Attach:xxx.png]] или [[http://…/xxx.png]] в вики-страницах вставляет только ссылку на картинку, а не саму картинку.
- Добавлена вики-команда (:childlist:) для вставки списка дочерних заметок.
- Добавлена вики-команда (:attachlist:)для вставки списка прикрепленных файлов
- Добавлена вики-команда (:include:) для вставки содержимого прикрепленных файлов.
- Добавлены вики-команды для вставки ссылок на пользователей Livejournal.com (команда (:ljuser:)) и на ЖЖ-сообщества (команда (:ljcomm:)).
- В меню добавлена функция для преобразования специальных символов HTML (<, > и т.п.) в их HTML-представление.
- Внутри оператора [@ … @] при разборе вики-нотации символы «<» заменяются на «<», а «>» - на «>».
- Добавлена возможность задания шаблона для пустой вики-страницы (см. настройки).
- Из вики-нотации удалена команда \, так как ее полностью заменяет команда [[<<]] (перевод строки).
- В дереве заметок теперь показывается корень вики.
- Значительно ускорена сортировка страниц по алфавиту.
- Улучшено распознавание ссылок в тексте вики-страниц.
- Улучшено кеширование разбора (парсинга) вики-страниц.
- В заголовках (выделенные нотацией !!, !!! и т.п.) теперь можно использовать и некоторые другие элементы вики-нотации (выделение полужирным, курсив и т.д, а также формулы и вики-команды (:…:)).
- Исправлены ошибки, связанные с удалением и перемещением заметок, которые нельзя удалить/переместить из-за блокировки их директорий.
- Исправлены ошибка, возникавшая при попытке сохранить страницу, директорию которой удалили вручную во время работы программы.
- Исправлено падение программы под Linux при переименовании страницы, содержащей картинки, загружаемые из интернета.ч
- Другие небольшие исправления и рефакторинг кода (особенно вики-парсера).
- Подробности в блоге
1.1.0.218 (23.02.2011)¶
- Переделан интерфейс главного окна. Теперь можно перемещать и закрывать панели с деревом заметок и вложенными файлами.
- Добавлена возможность изменения порядка следования заметок в дереве (горячие клавиши Ctrl+Shift+Up / Ctrl+Shift+Down).
- Добавлена возможность принудительной сортировки записей по алфавиту.
- Добавлен полноэкранный режим.
- Автосохранение заметок при переключении на другое приложение.
- Добавлена возможность перетаскивать файлы из окна вложений в другие программы.
- Добавлена настройка: всегда показывать значок в трее.
- Добавлена настройка размера табуляции в редакторе.
- Теперь при создании страницы по умолчанию выбирается тип страницы, созданной в прошлый раз.
- Теперь при создании страницы директория __attach для вложенных файлов не создается. Она создается при первой необходимости.
- Уменьшено моргание главного окна при различных действиях.
- Исправления ошибок.
- Мелкие исправления в интерфейсе.
- Подробности в блоге
1.0.0.108 release (25.12.2010)¶
- Добавлено окно настроек.
- Добавлена поддержка многоязычности (теперь в программе есть русский и английский интерфейс).
- Добавлена возможность сворачивания в трей (в том числе и при запуске).
- Добавлена возможность автоматического открытия последней вики при запуске программы.
- Добавлена возможность отключения вопроса перед выходом из программы.
- Добавлена возможность установки шрифта для редактора.
- Добавлена возможность включения нумерации строк в окне редактора.
- Добавлена настройка размера по умолчанию для превьюшек картинок на вики-страницах.
- Добавлена вкладка для просмотра полученного по вики-нотации кода HTML.
- Пустые страницы по умолчанию открываются на вкладке для редактирования.
- Если страница пустая, то на вкладке просмотра выводится список прикрепленных файлов (эту особенность можно отключить)
- Добавлена настройка заголовка главного окна. По умолчанию туда выводится имя открытой вики и текущей страницы.
- Новое окно «О программе», добавил туда вкладку «Donate» (удивительно, но эту «фичу» просили сразу несколько человек :)).
- Исправлена ошибка, связанная с хранением настроек в профиле с русскими буквами.
- Улучшено распознавание интернет-адресов в вики-нотации.
- Двойной клик по заметке в дереве открывает диалог со свойствами заметки.
- Вики-файлы, открытые в режиме «только для чтения» теперь не попадают в список последних открытых файлов.
- Различные мелкие исправления и улучшения в интерфейсе.
- Подробности в блоге
1.0 beta 3 (20.10.2010)¶
- Добавлен режим открытия вики «только для чтения». Теперь справка открывается именно в этом режиме.
- Добавлена возможность хранить настройки в папке профиля, а не в папке с программой (непортабельный режим).
- Устранено моргание окна при переключении страниц.
- Исходники перенесены с github на launchpad.net (https://launchpad.net/outwiker). Теперь вместо git используется Bazaar.
- Исправление нескольких ошибок в вики-парсере.
- Подробности в блоге
1.0 beta 2 (22.08.2010)¶
- Добавлена возможность перемещения страниц по дереву.
- Добавлена возможность переименования страниц без вызова диалога свойств страницы.
- Добавлено контекстное меню для дерева заметок.
- Относительные пути для ссылок на страницы теперь регистронезависимы.
- Изменение горячей клавиши для переключения между кодом и просмотром (было F2, стало F5).
- Если прикрепляется файл с именем, которое уже существует среди прикрепленных файлов, то показывается диалог с вопросом «Что делать?»
- Папка _thumb с превьюшками картинок теперь не показывается в списке прикрепленных файлов.
- Теперь дерево заметок сохраняет свое состояние (раскрыт узел или закрыт).
- Добавлена статусная панель, на которой показывается текст ссылки при наведении на нее курсора.
- В программе теперь используются абсолютные пути до папок, поэтому при запуске программы из ихсходников рабочей папкой не обязательно должна быть папка с исходниками.
- Исправления ошибок и глюков.
- Подробности в блоге
1.0 beta 1 (18.07.2010)¶
- Новый тип страниц - страница в нотации wiki.
- Добавлена справка по программе.
- Добавлен пункт меню для копирования ссылки на страницу в буфер обмена.
- Добавлена возможность открывать вики, передавая путь в командной строке.
- Добавлена горячая клавиша и пункт меню для преключения между кодом и просмотром страницы.
- На панель инструментов добавлены кнопки для выравнивания текста в HTML (по центру, по левому краю и т.п.).
- Пункт меню для копирования заголовка страницы в буфер обмена.
- Перед перезагрузкой вики теперь программа спрашивает, хотите ли вы сохранить текущую страницу.
- Добавлен пункт меню Edit (Undo/Redo/Cut/Copy/Paste).
- Исправлено копирование в буфер обмена из режима просмотра HTML.
- Мелкие исправления и улучшения.
- Подробности в блоге.
1.0 alpha 3 (08.06.2010)¶
- Добавлена возможность поиска по странице.
- Кнопки для основных тегов на странице HTML.
- Добавлена возможность создания ссылок на прикрепленные файлы.
- Добавлена кнопка для сброса флажков со всех тегов при глобальном поиске.
- Добавлены новые иконки для страниц.
- Добавлена возможность прикреплять файлы к странице, перетащив их в окно программы.
- Улучшен вывод списков на HTML-страницах.
- Исправлены некоторые баги.
- Подробности в блоге.
1.0 alpha 2 (19.05.2010)¶
- Возможность удаления и переименования страниц.
- Глобальный поиск по тексту заметок и по тегам.
- Добавлен новый тип страниц - поиск (search).
- Возможность запуска прикрепленных файлов.
- Возможность создания ссылок между страницами.
- Страницы в дереве теперь всегда сортируются по алфавиту.
- Устранены некоторые глюки.
- Несущественные изменения в интерфейсе.
- Подробности в блоге.
1.0 alpha 1 (04.05.2010)¶
- Первая публичная версия. Реализованы основные возможности.
Как помочь проекту¶
Если вы хотите помочь развитию проекта OutWiker, то вы можете сделать это следющими способами:
- Сделать новую локализацию интерфейса OutWiker или дополнить существующий с помощью сервиса crowdin.net (см. раздел Локализаия OutWiker и плагинов (не написано)).
- Проверить на ошибки справку или документацию. Особенно требует проверки англоязычная справка.
- Создать новый стиль для заметок (см. раздел Как создать свой стиль для страниц заметок (не написано))
- Создать новый плагин (см. раздел Основы создания плагинов для OutWiker)
- Предложить исправление или дополнение в исходный код OutWiker или какого-либо плагина (см. раздел Как скачать исходные коды OutWiker).
- Сообщить о найденной ошибке или предложить новую идею на Github Issues.
- Сделать денежный перевод с помощью Ю-money на номер 41001580829031 (деньги пойдут на оплату хостинга).