@@ -1,5 +1,28 @@
|
||||
# novelWriter ChangeLog
|
||||
|
||||
## Version 0.4.4 [2020-02-17]
|
||||
|
||||
**Features**
|
||||
|
||||
* A project can now be opened from the command line by providing the project path to the launching script. PRs #164 and #166.
|
||||
|
||||
**User Interface**
|
||||
|
||||
* Added functionality to split a document into a folder of multiple documents, and also to merge a folder of documents into a single document. PRs #159 and #163.
|
||||
* It is now possible to permanently delete files from the Trash folder. This can be done file-by-file or by using the Empty Trash option in the menu. PRs #159 and #163.
|
||||
* When running the spell checker, a wait cursor is displayed. This will alert the user that novelWriter is working on something when, for instance, a very large document is opened and initial spell checking is running. PR #158.
|
||||
|
||||
**Bug Fixes**
|
||||
|
||||
* Fixed a few keyboard shortcuts that were not working in distraction free mode. PR #157.
|
||||
* Added a check to ensure the user does not drag and drop an item into the Orphaned Items folder. Since this folder is not an actual project item, novelWriter would crash when trying to change the dropped item's parent item to the Orphaned Items folder. Now, instead, the drop event is cancelled if the target folder is Orphaned Items. PR #163.
|
||||
|
||||
**Code Improvements**
|
||||
|
||||
* The way project files are saved has been altered slightly. When a project file or document file is saved, the data is first streamed to a temp file. Then the old storage file is renamed to .bak, and and the temp file is renamed to the correct storage file name. This ensures that the storage file is only replaced after a complete and successful write. PR #165.
|
||||
* The cache folder has been removed. It was used to store the 10 most recent versions of the project file. Instead, the previous project file is renamed to .bak, and can be restored if opening from the latest project file fails. Any additional restore capabilities should be ensured by backup solutions, either the internal simple zip backup, or other third party tools. PR #165.
|
||||
* The dependency on the Python package `appdirs` has been dropped. It was used only for extracting the path to the user's config folder, a feature which is also provided by Qt. PR #169.
|
||||
|
||||
## Version 0.4.3 [2019-11-24]
|
||||
|
||||
**User Interface**
|
||||
|
||||
+3
-3
@@ -20,13 +20,13 @@
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = "novelWriter"
|
||||
copyright = "2018-2019, Veronica Berglyd Olsen"
|
||||
copyright = "2018-2020, Veronica Berglyd Olsen"
|
||||
author = "Veronica Berglyd Olsen"
|
||||
|
||||
# The short X.Y version
|
||||
version = "0.4.3"
|
||||
version = "0.4.4"
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = "0.4.3"
|
||||
release = "0.4.4"
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
+7
-12
@@ -23,10 +23,10 @@ from nw.config import Config
|
||||
|
||||
__package__ = "novelWriter"
|
||||
__author__ = "Veronica Berglyd Olsen"
|
||||
__copyright__ = "Copyright 2018–2019, Veronica Berglyd Olsen"
|
||||
__copyright__ = "Copyright 2018–2020, Veronica Berglyd Olsen"
|
||||
__license__ = "GPLv3"
|
||||
__version__ = "0.4.3"
|
||||
__date__ = "2019-11-24"
|
||||
__version__ = "0.4.4"
|
||||
__date__ = "2020-02-17"
|
||||
__maintainer__ = "Veronica Berglyd Olsen"
|
||||
__email__ = "code@vkbo.net"
|
||||
__status__ = "Development"
|
||||
@@ -77,14 +77,13 @@ def main(sysArgs=None):
|
||||
sysArgs = sys.argv[1:]
|
||||
|
||||
# Valid Input Options
|
||||
shortOpt = "hdiqtl:v"
|
||||
shortOpt = "hdiql:v"
|
||||
longOpt = [
|
||||
"help",
|
||||
"debug",
|
||||
"info",
|
||||
"verbose",
|
||||
"quiet",
|
||||
"time",
|
||||
"logfile=",
|
||||
"version",
|
||||
"config=",
|
||||
@@ -103,7 +102,6 @@ def main(sysArgs=None):
|
||||
" -d, --debug Print debug output.\n"
|
||||
" --verbose Increase verbosity of debug output.\n"
|
||||
" -q, --quiet Disable output to command line. Does not affect log file.\n"
|
||||
" -t, --time Shows time stamp in logging output.\n"
|
||||
" -l, --logfile= Specify log file.\n"
|
||||
" --style= Set Qt5 style flag. Defaults to 'Fusion'.\n"
|
||||
" --config= Alternative config file.\n"
|
||||
@@ -118,11 +116,9 @@ def main(sysArgs=None):
|
||||
# Defaults
|
||||
debugLevel = logging.WARN
|
||||
debugStr = "{levelname:8} {message:}"
|
||||
timeStr = "[{asctime:}] "
|
||||
logFile = ""
|
||||
toFile = False
|
||||
toStd = True
|
||||
showTime = False
|
||||
confPath = None
|
||||
testMode = False
|
||||
qtStyle = "Fusion"
|
||||
@@ -149,7 +145,7 @@ def main(sysArgs=None):
|
||||
debugLevel = logging.INFO
|
||||
elif inOpt in ("-d", "--debug"):
|
||||
debugLevel = logging.DEBUG
|
||||
debugStr = "{name:>30}:{lineno:<4d} {levelname:8} {message:}"
|
||||
debugStr = "[{asctime:}] {name:>30}:{lineno:<4d} {levelname:8} {message:}"
|
||||
elif inOpt in ("-l","--logfile"):
|
||||
logFile = inArg
|
||||
toFile = True
|
||||
@@ -157,8 +153,6 @@ def main(sysArgs=None):
|
||||
toStd = False
|
||||
elif inOpt in ("--verbose"):
|
||||
debugLevel = VERBOSE
|
||||
elif inOpt in ("-t","--time"):
|
||||
showTime = True
|
||||
elif inOpt in ("--style"):
|
||||
qtStyle = inArg
|
||||
elif inOpt in ("--config"):
|
||||
@@ -172,7 +166,6 @@ def main(sysArgs=None):
|
||||
CONFIG.cmdOpen = cmdOpen
|
||||
|
||||
# Set Logging
|
||||
if showTime: debugStr = timeStr+debugStr
|
||||
logFmt = logging.Formatter(fmt=debugStr,datefmt="%Y-%m-%d %H:%M:%S",style="{")
|
||||
|
||||
if not logFile == "" and toFile:
|
||||
@@ -201,6 +194,8 @@ def main(sysArgs=None):
|
||||
return nwGUI
|
||||
else:
|
||||
nwApp = QApplication([__package__,("-style=%s" % qtStyle)])
|
||||
nwApp.setApplicationName(__package__)
|
||||
nwApp.setApplicationVersion(__version__)
|
||||
nwGUI = GuiMain()
|
||||
sys.exit(nwApp.exec_())
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ import configparser
|
||||
import sys
|
||||
import nw
|
||||
|
||||
from os import path, mkdir, makedirs
|
||||
from os import path, mkdir
|
||||
from datetime import datetime
|
||||
|
||||
from PyQt5.Qt import PYQT_VERSION_STR
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import (
|
||||
QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLineEdit,
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush
|
||||
from PyQt5.QtWidgets import (
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QColor, QPixmap
|
||||
from PyQt5.QtWidgets import (
|
||||
|
||||
@@ -26,8 +26,8 @@ from PyQt5.QtGui import (
|
||||
|
||||
from nw.project import NWDoc
|
||||
from nw.gui.tools import GuiDocHighlighter, WordCounter
|
||||
from nw.tools import NWSpellCheck, NWSpellSimple
|
||||
from nw.constants import nwFiles, nwUnicode, nwDocAction, nwAlert
|
||||
from nw.tools import NWSpellSimple
|
||||
from nw.constants import nwUnicode, nwDocAction
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@ from PyQt5.QtWidgets import (
|
||||
QWidget, QLabel, QScrollArea, QFrame, QToolButton, QCheckBox, QGridLayout
|
||||
)
|
||||
|
||||
from nw.constants import nwLabels
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class GuiDocViewDetails(QWidget):
|
||||
|
||||
@@ -14,7 +14,6 @@ import logging
|
||||
import nw
|
||||
|
||||
from lxml import etree
|
||||
from datetime import datetime
|
||||
|
||||
from nw.common import checkInt
|
||||
from nw.constants import nwItemType, nwItemClass, nwItemLayout
|
||||
@@ -23,8 +22,6 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class NWItem():
|
||||
|
||||
MAX_DEPTH = 8
|
||||
|
||||
def __init__(self, theProject):
|
||||
|
||||
self.theProject = theProject
|
||||
|
||||
@@ -14,7 +14,6 @@ import logging
|
||||
import nw
|
||||
|
||||
from os import path, mkdir, listdir, unlink, rename
|
||||
from shutil import copyfile
|
||||
from lxml import etree
|
||||
from hashlib import sha256
|
||||
from datetime import datetime
|
||||
|
||||
@@ -6,7 +6,7 @@ with open("README.md", "r") as inFile:
|
||||
|
||||
setuptools.setup(
|
||||
name = "novelWriter",
|
||||
version = "0.4.3",
|
||||
version = "0.4.4",
|
||||
author = "Veronica Berglyd Olsen",
|
||||
author_email = "code@vkbo.net",
|
||||
description = "A markdown-like document editor for writing novels",
|
||||
@@ -35,7 +35,7 @@ setuptools.setup(
|
||||
"Natural Language :: English",
|
||||
"Topic :: Text Editors",
|
||||
],
|
||||
python_requires = ">=3.5",
|
||||
python_requires = ">=3.6",
|
||||
install_requires = [
|
||||
"pyqt5",
|
||||
"lxml",
|
||||
|
||||
Reference in New Issue
Block a user