「ZIM-DESKTOP-WIKI」- 搭建开发环境 | 通过源码运行

操作系统

Ubuntu 22.04 LTS

安装依赖

# --------------------------------------------------------- # inside ubuntu 

apt-get install python-is-python3 gir1.2-gtk-3.0 python3-gi python3-xdg python3-pillow 

apt-get install pkg-config libcairo2-dev 

# https://stackoverflow.com/questions/18025730/pygobject-2-28-6-wont-configure-no-package-gobject-introspection-1-0-found
# No package 'gobject-introspection-1.0' found
apt-get install libgirepository1.0-dev

# --------------------------------------------------------- # inside virtualenv

pip install pyproject-toml
pip install pycairo gobject-introspection-1.0 pygobject

环境配置

PYTHONPATH

PYTHONPATH: http://zim-wiki.org/install.html

代码分析

[DONE] 界面启动过程

zim.py/main() -> main/init.py/main() -> main/init.py/ZimApplication()/run()

-> PluginManager().load_plugins_from_preferences()

-> build_command -> _run_cmd() -> GuiCommand()/run() -> _run_new_window()

启动笔记时,首个页面的加载过程

GuiCommand()/run()/_run_new_window()/windows.open_page()

在早期的代码中,创建 MainWindow()/init() 对象,并传入 page 实例。如果为空,则从历史中获取。如果历史为空则打开首页。

而后,我们取消其通过 init() 来加载页面,而是在单独的代码中加载页面。

插件加载过程

ZIM_APPLICATION.run

// 加载已启用插件,并获取对应实例

PluginManager().load_plugins_from_preferences(ConfigManager.preferences[‘General’][‘plugins’])
PluginManager().load_plugin()
PluginManager().get_plugin_class(name)

plugin = klass()
GuiCommand.run()
GuiCommand._run_new_window(notebook, pagelink)
MainWindow()._init_()

MainWindow().present()