novelWriter 2.7.4__tar.gz → 2.7.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {novelwriter-2.7.4 → novelwriter-2.7.5}/CHANGELOG.md +23 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/PKG-INFO +1 -1
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/PKG-INFO +1 -1
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/__init__.py +3 -3
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/manual.pdf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/manual_fr.pdf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/sample.zip +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/doceditor.py +49 -22
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/types.py +2 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/CREDITS.md +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/LICENSE.md +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/MANIFEST.in +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/README.md +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/SOURCES.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/dependency_links.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/entry_points.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/requires.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelWriter.egg-info/top_level.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_en_US.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_es_419.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_cs_CZ.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_de_DE.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_en_GB.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_en_US.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_es_419.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_fr_FR.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_it_IT.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_ja_JP.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_nb_NO.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_nl_NL.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_nn_NO.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_pl_PL.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_pt_BR.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_ru_RU.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/i18n/project_zh_CN.json +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/font_awesome.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_filled_normal.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_filled_thin.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_rounded_normal.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_rounded_thin.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_sharp_normal.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_sharp_thin.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/none.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/novelwriter.ico +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/novelwriter.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/remix_filled.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/remix_outline.icons +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/x-novelwriter-project.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/novelwriter-text-dark.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/novelwriter-text-light.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/splash.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/welcome-dark.jpg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/welcome-light.jpg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/cyberpunk_night.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/default_dark.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/default_light.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/dracula.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/grey_dark.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/grey_light.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/light_owl.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/night_owl.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/snazzy.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/solarized_dark.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/solarized_light.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tango.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night_blue.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night_bright.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night_eighties.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/text/credits_en.htm +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/text/lipsum.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/cyberpunk_night.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/default.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/default_dark.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/default_light.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/dracula.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/snazzy.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/solarized_dark.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/themes/solarized_light.conf +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/common.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/config.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/constants.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/buildsettings.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/coretools.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/docbuild.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/document.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/index.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/indexdata.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/item.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/itemmodel.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/novelmodel.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/options.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/project.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/projectdata.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/projectxml.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/sessions.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/spellcheck.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/status.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/storage.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/core/tree.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/about.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/docmerge.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/docsplit.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/editlabel.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/preferences.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/projectsettings.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/quotes.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/dialogs/wordlist.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/enum.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/error.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/configlayout.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/eventfilters.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/modified.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/novelselector.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/pagedsidebar.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/progressbars.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/statusled.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/switch.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/switchbox.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/extensions/versioninfo.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/shared.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/todocx.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/tohtml.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/tokenizer.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/tomarkdown.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/toodt.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/toqdoc.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/formats/toraw.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/dochighlight.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/docviewer.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/docviewerpanel.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/editordocument.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/itemdetails.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/mainmenu.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/noveltree.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/outline.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/projtree.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/search.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/sidebar.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/statusbar.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/gui/theme.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/guimain.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/shared.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/splash.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/text/comments.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/text/counting.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/text/patterns.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/dictionaries.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/lipsum.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/manusbuild.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/manuscript.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/manussettings.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/noveldetails.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/welcome.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/tools/writingstats.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/pkgutils.py +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/pyproject.toml +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/LICENSE-Apache-2.0.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/appimage_launcher.sh +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/128x128/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/128x128/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/16x16/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/16x16/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/24x24/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/24x24/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/256x256/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/256x256/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/32x32/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/32x32/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/48x48/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/48x48/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/512x512/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/512x512/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/64x64/apps/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/64x64/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/scalable/apps/novelwriter.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/hicolor/scalable/mimetypes/application-x-novelwriter-project.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/novelwriter.desktop +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/data/x-novelwriter-project.xml +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/compat +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/control +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/copyright +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/install +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/py3dist-overrides +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/rules +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/debian/source/format +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/description_pypi.md +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/description_short.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/novelwriter.ico +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/novelwriter.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/novelwriter.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/x-novelwriter-project.ico +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/x-novelwriter-project.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/icons/x-novelwriter-project.svg +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/iss_license.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/App.entitlements +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/Info.plist.template +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/build.sh +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_128x128.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_128x128@2x.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_16x16.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_16x16@2x.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_256x256.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_256x256@2x.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_32x32.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_32x32@2x.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_512x512.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/macos/novelwriter.iconset/icon_512x512@2x.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/make_clean.sh +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/make_pip.sh +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/make_release.sh +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/novelwriter.appdata.xml +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/novelwriter_readme.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/novelwriter_text.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/screenshot.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/signpath_logo.png +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/win_setup_embed.iss +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/CMakeLists.txt +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/launcher.rc +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/main.cpp +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/make.ps1 +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/novelWriter.exe +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup/windows/novelWriter.ico +0 -0
- {novelwriter-2.7.4 → novelwriter-2.7.5}/setup.cfg +0 -0
@@ -1,5 +1,28 @@
|
|
1
1
|
# novelWriter Changelog
|
2
2
|
|
3
|
+
## Version 2.7.5 [2025-09-14]
|
4
|
+
|
5
|
+
### Release Notes
|
6
|
+
|
7
|
+
This is a patch release that fixes an issue related to crashes when using the completer menu under
|
8
|
+
certain conditions, and improves positioning of the input box for CJK languages.
|
9
|
+
|
10
|
+
### Detailed Changelog
|
11
|
+
|
12
|
+
**Bugfixes**
|
13
|
+
|
14
|
+
* Fixes an issue where the app would crash of deleting the `@` character with the completer menu
|
15
|
+
visible and the text margins of the editor set to "justified". This is likely crashing due to
|
16
|
+
some unhandled corner case in the Qt library, but the implementation of the completer menu in
|
17
|
+
novelWriter uses a small hack to bypass some intended behaviour of the menu. Extra steps have
|
18
|
+
been added to the implementation that seems to avoid the crash. Issue #2510. PR #2511.
|
19
|
+
* Fixes an issue where the input box that shows up when typing CJK languages were covering the text
|
20
|
+
due to an incorrect offset of the box location. The incorrect offset is caused by the text
|
21
|
+
margins not being taken into account. Fix by @Euophrys based on solution by @Jack-name.
|
22
|
+
Issues #2267 and #2517. PR #2518.
|
23
|
+
|
24
|
+
----
|
25
|
+
|
3
26
|
## Version 2.7.4 [2025-07-15]
|
4
27
|
|
5
28
|
### Release Notes
|
@@ -49,9 +49,9 @@ __license__ = "GPLv3"
|
|
49
49
|
__author__ = "Veronica Berglyd Olsen"
|
50
50
|
__maintainer__ = "Veronica Berglyd Olsen"
|
51
51
|
__email__ = "code@vkbo.net"
|
52
|
-
__version__ = "2.7.
|
53
|
-
__hexversion__ = "
|
54
|
-
__date__ = "2025-
|
52
|
+
__version__ = "2.7.5"
|
53
|
+
__hexversion__ = "0x020705f0"
|
54
|
+
__date__ = "2025-09-14"
|
55
55
|
__status__ = "Stable"
|
56
56
|
__domain__ = "novelwriter.io"
|
57
57
|
|
Binary file
|
Binary file
|
Binary file
|
@@ -39,13 +39,14 @@ from enum import Enum, IntFlag
|
|
39
39
|
from time import time
|
40
40
|
|
41
41
|
from PyQt6.QtCore import (
|
42
|
-
QObject, QPoint, QRegularExpression, QRunnable, Qt, QTimer,
|
43
|
-
pyqtSlot
|
42
|
+
QObject, QPoint, QRect, QRegularExpression, QRunnable, Qt, QTimer,
|
43
|
+
QVariant, pyqtSignal, pyqtSlot
|
44
44
|
)
|
45
45
|
from PyQt6.QtGui import (
|
46
|
-
QAction, QCursor, QDragEnterEvent, QDragMoveEvent, QDropEvent,
|
47
|
-
QKeySequence, QMouseEvent, QPalette, QPixmap,
|
48
|
-
QTextBlock, QTextCursor, QTextDocument,
|
46
|
+
QAction, QCursor, QDragEnterEvent, QDragMoveEvent, QDropEvent,
|
47
|
+
QInputMethodEvent, QKeyEvent, QKeySequence, QMouseEvent, QPalette, QPixmap,
|
48
|
+
QResizeEvent, QShortcut, QTextBlock, QTextCursor, QTextDocument,
|
49
|
+
QTextOption
|
49
50
|
)
|
50
51
|
from PyQt6.QtWidgets import (
|
51
52
|
QApplication, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QMenu,
|
@@ -74,8 +75,9 @@ from novelwriter.text.counting import standardCounter
|
|
74
75
|
from novelwriter.tools.lipsum import GuiLipsum
|
75
76
|
from novelwriter.types import (
|
76
77
|
QtAlignCenterTop, QtAlignJustify, QtAlignLeft, QtAlignLeftTop,
|
77
|
-
QtAlignRight, QtKeepAnchor, QtModCtrl, QtModNone,
|
78
|
-
QtMoveAnchor, QtMoveLeft, QtMoveRight,
|
78
|
+
QtAlignRight, QtImCursorRectangle, QtKeepAnchor, QtModCtrl, QtModNone,
|
79
|
+
QtModShift, QtMouseLeft, QtMoveAnchor, QtMoveLeft, QtMoveRight,
|
80
|
+
QtScrollAlwaysOff, QtScrollAsNeeded
|
79
81
|
)
|
80
82
|
|
81
83
|
logger = logging.getLogger(__name__)
|
@@ -151,7 +153,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
151
153
|
|
152
154
|
# Completer
|
153
155
|
self._completer = CommandCompleter(self)
|
154
|
-
self._completer.
|
156
|
+
self._completer.insertText.connect(self._insertCompletion)
|
155
157
|
|
156
158
|
# Create Custom Document
|
157
159
|
self._qDocument = GuiTextDocument(self)
|
@@ -914,7 +916,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
914
916
|
return True
|
915
917
|
|
916
918
|
##
|
917
|
-
#
|
919
|
+
# Events and Overloads
|
918
920
|
##
|
919
921
|
|
920
922
|
def keyPressEvent(self, event: QKeyEvent) -> None:
|
@@ -1017,6 +1019,26 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1017
1019
|
super().resizeEvent(event)
|
1018
1020
|
return
|
1019
1021
|
|
1022
|
+
def inputMethodEvent(self, event: QInputMethodEvent) -> None:
|
1023
|
+
"""Handle text being input from CJK input methods."""
|
1024
|
+
super().inputMethodEvent(event)
|
1025
|
+
if event.commitString():
|
1026
|
+
# See issues #2267 and #2517
|
1027
|
+
self.ensureCursorVisible()
|
1028
|
+
self._completerToCursor()
|
1029
|
+
|
1030
|
+
def inputMethodQuery(self, query: Qt.InputMethodQuery) -> QRect | QVariant:
|
1031
|
+
"""Adjust completion windows for CJK input methods to consider
|
1032
|
+
the viewport margins.
|
1033
|
+
"""
|
1034
|
+
if query == QtImCursorRectangle:
|
1035
|
+
# See issues #2267 and #2517
|
1036
|
+
vM = self.viewportMargins()
|
1037
|
+
rect = self.cursorRect()
|
1038
|
+
rect.translate(vM.left(), vM.top())
|
1039
|
+
return rect
|
1040
|
+
return super().inputMethodQuery(query)
|
1041
|
+
|
1020
1042
|
##
|
1021
1043
|
# Public Slots
|
1022
1044
|
##
|
@@ -1080,24 +1102,20 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1080
1102
|
|
1081
1103
|
if (block := self._qDocument.findBlock(pos)).isValid():
|
1082
1104
|
text = block.text()
|
1105
|
+
|
1083
1106
|
if text and text[0] in "@%" and added + removed == 1:
|
1084
1107
|
# Only run on single character changes, or it will trigger
|
1085
1108
|
# at unwanted times when other changes are made to the document
|
1086
1109
|
cursor = self.textCursor()
|
1087
1110
|
bPos = cursor.positionInBlock()
|
1088
|
-
if bPos > 0
|
1111
|
+
if bPos > 0:
|
1089
1112
|
if text[0] == "@":
|
1090
1113
|
show = self._completer.updateMetaText(text, bPos)
|
1091
1114
|
else:
|
1092
1115
|
show = self._completer.updateCommentText(text, bPos)
|
1093
1116
|
if show:
|
1094
|
-
point = self.cursorRect().bottomRight()
|
1095
|
-
self._completer.move(viewport.mapToGlobal(point))
|
1096
1117
|
self._completer.show()
|
1097
|
-
|
1098
|
-
self._completer.close()
|
1099
|
-
else:
|
1100
|
-
self._completer.close()
|
1118
|
+
self._completerToCursor()
|
1101
1119
|
|
1102
1120
|
if self._doReplace and added == 1:
|
1103
1121
|
cursor = self.textCursor()
|
@@ -1121,7 +1139,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1121
1139
|
cursor.setPosition(check, QtMoveAnchor)
|
1122
1140
|
cursor.setPosition(check + length, QtKeepAnchor)
|
1123
1141
|
cursor.insertText(text)
|
1124
|
-
self._completer.
|
1142
|
+
self._completer.close()
|
1125
1143
|
return
|
1126
1144
|
|
1127
1145
|
@pyqtSlot()
|
@@ -1898,6 +1916,12 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1898
1916
|
# Internal Functions
|
1899
1917
|
##
|
1900
1918
|
|
1919
|
+
def _completerToCursor(self) -> None:
|
1920
|
+
"""Make sure the completer menu is positioned by the cursor."""
|
1921
|
+
if self._completer.isVisible() and (viewport := self.viewport()):
|
1922
|
+
point = self.cursorRect().bottomLeft()
|
1923
|
+
self._completer.move(viewport.mapToGlobal(point))
|
1924
|
+
|
1901
1925
|
def _correctWord(self, cursor: QTextCursor, word: str) -> None:
|
1902
1926
|
"""Slot for the spell check context menu triggering the
|
1903
1927
|
replacement of a word with the word from the dictionary.
|
@@ -2089,10 +2113,13 @@ class CommandCompleter(QMenu):
|
|
2089
2113
|
called on every keystroke on a line starting with @ or %.
|
2090
2114
|
"""
|
2091
2115
|
|
2092
|
-
|
2116
|
+
__slots__ = ("_parent",)
|
2117
|
+
|
2118
|
+
insertText = pyqtSignal(int, int, str)
|
2093
2119
|
|
2094
2120
|
def __init__(self, parent: QWidget) -> None:
|
2095
2121
|
super().__init__(parent=parent)
|
2122
|
+
self._parent = parent
|
2096
2123
|
return
|
2097
2124
|
|
2098
2125
|
def updateMetaText(self, text: str, pos: int) -> bool:
|
@@ -2179,14 +2206,14 @@ class CommandCompleter(QMenu):
|
|
2179
2206
|
|
2180
2207
|
def keyPressEvent(self, event: QKeyEvent) -> None:
|
2181
2208
|
"""Capture keypresses and forward most of them to the editor."""
|
2182
|
-
parent = self.parent()
|
2183
2209
|
if event.key() in (
|
2184
2210
|
Qt.Key.Key_Up, Qt.Key.Key_Down, Qt.Key.Key_Return,
|
2185
2211
|
Qt.Key.Key_Enter, Qt.Key.Key_Escape
|
2186
2212
|
):
|
2187
2213
|
super().keyPressEvent(event)
|
2188
|
-
|
2189
|
-
|
2214
|
+
else:
|
2215
|
+
self.close() # Close to release the event lock before forwarding the key press (#2510)
|
2216
|
+
self._parent.keyPressEvent(event)
|
2190
2217
|
return
|
2191
2218
|
|
2192
2219
|
##
|
@@ -2195,7 +2222,7 @@ class CommandCompleter(QMenu):
|
|
2195
2222
|
|
2196
2223
|
def _emitComplete(self, pos: int, length: int, value: str) -> None:
|
2197
2224
|
"""Emit the signal to indicate a selection has been made."""
|
2198
|
-
self.
|
2225
|
+
self.insertText.emit(pos, length, value)
|
2199
2226
|
return
|
2200
2227
|
|
2201
2228
|
|
@@ -110,6 +110,8 @@ QtMoveAnchor = QTextCursor.MoveMode.MoveAnchor
|
|
110
110
|
QtMoveLeft = QTextCursor.MoveOperation.Left
|
111
111
|
QtMoveRight = QTextCursor.MoveOperation.Right
|
112
112
|
|
113
|
+
QtImCursorRectangle = Qt.InputMethodQuery.ImCursorRectangle
|
114
|
+
|
113
115
|
# Size Policy
|
114
116
|
|
115
117
|
QtSizeExpanding = QSizePolicy.Policy.Expanding
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_filled_normal.icons
RENAMED
File without changes
|
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_rounded_normal.icons
RENAMED
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_rounded_thin.icons
RENAMED
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/icons/material_sharp_normal.icons
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/images/novelwriter-text-light.svg
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night_bright.conf
RENAMED
File without changes
|
{novelwriter-2.7.4 → novelwriter-2.7.5}/novelwriter/assets/syntax/tomorrow_night_eighties.conf
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|