操作系统
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()
-> build_command -> _run_cmd() -> GuiCommand()/run() -> _run_new_window()
启动笔记时,首个页面的加载过程
GuiCommand()/run()/_run_new_window()/windows.open_page()
在早期的代码中,创建 MainWindow()/init() 对象,并传入 page 实例。如果为空,则从历史中获取。如果历史为空则打开首页。
而后,我们取消其通过 init() 来加载页面,而是在单独的代码中加载页面。
而后,我们取消其通过 init() 来加载页面,而是在单独的代码中加载页面。
插件加载过程
ZIM_APPLICATION.run
// 加载已启用插件,并获取对应实例
PluginManager().load_plugins_from_preferences(ConfigManager.preferences[‘General’][‘plugins’])
PluginManager().load_plugins_from_preferences(ConfigManager.preferences[‘General’][‘plugins’])
PluginManager().load_plugin()
PluginManager().get_plugin_class(name)
plugin = klass()
plugin = klass()
GuiCommand.run()
GuiCommand._run_new_window(notebook, pagelink)
MainWindow()._init_()
MainWindow().present()
MainWindow().present()