Merge branch 'release' into dev
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
*.egg-info
|
||||
setup.iss
|
||||
novelwriter.desktop
|
||||
novelWriter.pyw
|
||||
|
||||
# Documentation
|
||||
/docs/build/
|
||||
|
||||
@@ -21,3 +21,7 @@
|
||||
white-space: normal !important;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
|
||||
pre span.go {
|
||||
color: #333333 !important;
|
||||
}
|
||||
|
||||
+11
-8
@@ -57,22 +57,25 @@ details.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: First Steps
|
||||
:caption: Introduction
|
||||
|
||||
int_introduction
|
||||
int_started
|
||||
int_interface
|
||||
int_typography
|
||||
int_linux
|
||||
int_mac
|
||||
int_windows
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Writing Novels
|
||||
:caption: Usage
|
||||
|
||||
write_projects
|
||||
write_structure
|
||||
write_notes
|
||||
write_export
|
||||
usage_interface
|
||||
usage_projects
|
||||
usage_structure
|
||||
usage_notes
|
||||
usage_export
|
||||
usage_typography
|
||||
|
||||
|
||||
.. toctree::
|
||||
|
||||
@@ -42,8 +42,8 @@ formatting features supported are available through convenient keyboard shortcut
|
||||
available in the main menu. A full list of shortcuts can be found in the :ref:`a_ui_shortcuts`
|
||||
section.
|
||||
|
||||
In addition, novelWriter offers a :guilabel:`Distraction Free Mode` where all the user interface
|
||||
elements other than the document editor itself are hidden away.
|
||||
In addition, novelWriter offers a :guilabel:`Focus Mode` where all the user interface elements
|
||||
other than the document editor itself are hidden away.
|
||||
|
||||
The colour scheme of the user interface defaults to that of the host operating system. In addition,
|
||||
a dark theme is provided, and can be enabled in :guilabel:`Preferences` from the :guilabel:`Tools`
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
.. _a_setup_linux:
|
||||
|
||||
**************
|
||||
Setup on Linux
|
||||
**************
|
||||
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _main website: https://novelwriter.io
|
||||
|
||||
This is a brief guide to how you can get novelWriter running on a Linux computer. There are
|
||||
currently no packaged version of novelWriter for Linux, so it is recommended that you just extract
|
||||
the source to a practical location on your system and run the ``setup.py`` script.
|
||||
|
||||
|
||||
Running from Source
|
||||
===================
|
||||
|
||||
To run novelWriter from source, download the latest source package from the release page on
|
||||
GitHub_ or the `main website`_, or if you have git running on your computer, you can also clone the
|
||||
repository.
|
||||
|
||||
|
||||
Step 1: Installing Dependencies
|
||||
-------------------------------
|
||||
|
||||
The dependencies of novelWriter are generally available from Linux distro repositories. For Debian
|
||||
and Ubuntu, they can be installed with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
sudo apt install python3-pyqt5 python3-lxml python3-enchant
|
||||
|
||||
If you prefer to install dependencies via PyPi, or the repository dependencies are out of date, you
|
||||
can install them with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip3 install --user -r requirements.txt
|
||||
|
||||
|
||||
Step 2: Install Package (Optional)
|
||||
----------------------------------
|
||||
|
||||
You can install novelWriter to the correct location for Python packages with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./setup.py install
|
||||
|
||||
This is equivalent to what the ``pip`` installer does. It puts novelWriter in the location on your
|
||||
system where Python packages are usually kept. This is not really the best suited location for a
|
||||
GUI application like novelWriter, so you may instead copy the entire source to a suiteable location
|
||||
yourself.
|
||||
|
||||
By default, this command installs novelWriter for the current user only. To install for all users,
|
||||
run the script with the ``sudo`` command.
|
||||
|
||||
This should install novelWriter to either ``~/.local/bin/novelWriter`` if installed for local user
|
||||
only, or to ``/usr/local/bin/novelWriter`` if installed for all users.
|
||||
|
||||
|
||||
Step 3: Create Launcher Icons
|
||||
-----------------------------
|
||||
|
||||
To set up the novelWriter desktop launcher, the icons, and the project file association, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./setup.py xdg-install
|
||||
|
||||
By default, these commands install novelWriter and its icons for the current user only. To install
|
||||
for all users, run the script with the ``sudo`` command.
|
||||
|
||||
.. tip::
|
||||
All options of the setup script can be listed with: ``./setup.py help``.
|
||||
@@ -0,0 +1,66 @@
|
||||
.. _a_setup_mac:
|
||||
|
||||
**************
|
||||
Setup on macOS
|
||||
**************
|
||||
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _main website: https://novelwriter.io
|
||||
.. _brew docs: https://docs.brew.sh/Homebrew-and-Python
|
||||
|
||||
This is a brief guide to how you can get novelWriter running on macOS. There are currently no
|
||||
packaged version of novelWriter for macOS, so it is recommended that you just extract the source to a
|
||||
practical location on your system and run it.
|
||||
|
||||
|
||||
Running from Source
|
||||
===================
|
||||
|
||||
To run novelWriter from source, download the latest source package from the release page on
|
||||
GitHub_ or the `main website`_, or if you have git running on your computer, you can also clone the
|
||||
repository.
|
||||
|
||||
|
||||
Step 1: Installing Dependencies
|
||||
-------------------------------
|
||||
|
||||
These instructions assume you're using brew, and have Python and pip set up. If not, see the
|
||||
`brew docs`_ for help. Main requirements are installed via the requirements file. You also need to
|
||||
install the ``pyobjc`` package, so you should run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip3 install --user -r requirements.txt
|
||||
pip3 install --user pyobjc
|
||||
|
||||
For spell checking you may also need to install the enchant package. It comes with a lot of default
|
||||
dictionaries.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
brew install enchant
|
||||
|
||||
With the dependencies in place, you can launch the ``novelWriter.py`` script directly to run
|
||||
novelWriter.
|
||||
|
||||
|
||||
Step 2: Install Package (Optional)
|
||||
----------------------------------
|
||||
|
||||
You can install novelWriter to the correct location for Python packages with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./setup.py install
|
||||
|
||||
This is equivalent to what the ``pip`` installer does. It puts novelWriter in the location on your
|
||||
system where Python packages are usually kept. This is not really the best suited location for a
|
||||
GUI application like novelWriter, so you may instead copy the entire source to a suiteable location
|
||||
yourself.
|
||||
|
||||
After this, you should be able to launch novelWriter by running ``novelWriter`` in a command line
|
||||
window.
|
||||
|
||||
.. note::
|
||||
Right now there isn't a better integration with macOS available. Contributions from someone more
|
||||
familiar with macOS would be very much appreciated.
|
||||
+50
-195
@@ -4,14 +4,22 @@
|
||||
Getting Started
|
||||
***************
|
||||
|
||||
This is a brief guide to how you can get novelWriter running on your computer. These are the
|
||||
methods currently supported by the developer. Packages may also be available in other package
|
||||
managers, but those are not managed by the developer. A Windows installer file is also provided on
|
||||
the GitHub releases page and linked from the `main website`_.
|
||||
.. _main website: https://novelwriter.io
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _PyPi: https://pypi.org/project/novelWriter/
|
||||
|
||||
This section contains brief guides to how you can get novelWriter running on your computer. These
|
||||
are the methods currently supported by the developer. Packages may also be available in other
|
||||
package managers, but those are not managed by the developer. A Windows installer file is also
|
||||
provided on the GitHub_ releases page and linked from the `main website`_.
|
||||
|
||||
As novelWriter matures, more options for how to install it and get it running will be added. For
|
||||
non-Windows users the install process is at the present time best suited for people used to working
|
||||
with the command line. But even if you're not, the install process is fairly straight forward.
|
||||
with the command line. But even if you're not, the install process is fairly straightforward.
|
||||
|
||||
The next pages have specific install instructions for the various operating systems novelWriter can
|
||||
run on. The instructions below are supplementary information, instructions for alterbative methods,
|
||||
and additional build options.
|
||||
|
||||
.. note::
|
||||
The text below assumes the command ``python`` corresponds to a Python 3 executable. For
|
||||
@@ -19,13 +27,47 @@ with the command line. But even if you're not, the install process is fairly str
|
||||
Linux, the scripts can also be made executable and run without the ``python`` command. Likewise,
|
||||
``pip`` may need to be replaced with ``pip3``.
|
||||
|
||||
.. _main website: https://novelwriter.io
|
||||
|
||||
.. _a_started_depend:
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
novelWriter has been designed to rely on as few dependencies as possible. Aside from the packages
|
||||
needed to communicate with the Qt GUI libraries, only one package is required for handling the XML
|
||||
format of the main project file. Everything else is handled with standard Python libraries.
|
||||
|
||||
The following Python packages are needed to run novelWriter:
|
||||
|
||||
* ``pyqt5`` – needed for connecting with the Qt5 libraries.
|
||||
* ``lxml`` – needed for full XML support.
|
||||
* ``pyenchant`` – needed for efficient spell checking (optional).
|
||||
|
||||
PyQt/Qt should be at least 5.2.1, but ideally 5.10 or higher for nearly all features to work.
|
||||
Exporting to standard Markdown, for instance, requires PyQt/Qt 5.14. Searching using regular
|
||||
expressions requires 5.3, and for full Unicode support, 5.13. There is no known minimum version
|
||||
requirement for package ``lxml``, but the code was originally written with 4.2, which is therefore
|
||||
set as the minimum. It may work on lower versions. You have to test it.
|
||||
|
||||
Optionally, a package can be installed to interface with the Enchant spell checking libaries, but
|
||||
this isn't strictly required. If no external spell checking library is available, novelWriter falls
|
||||
back to using the internal ``difflib`` of Python to check spelling. This is a much slower approach,
|
||||
and it is less sophisticated than full spell checking libaries, but if you only work with small
|
||||
files, the performance loss is not noticeable. The spell check library must be at least 3.0 to work
|
||||
with Windows. On Linux, 2.0 also works fine.
|
||||
|
||||
If you install from PyPi, these dependencies should be installed automatically. If you install from
|
||||
source, dependencies can still be installed from PyPi with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip install -r requirements.txt
|
||||
|
||||
|
||||
.. _a_started_install:
|
||||
|
||||
Installing and Running
|
||||
======================
|
||||
Installing via PyPi
|
||||
===================
|
||||
|
||||
The application is written in Python 3 using Qt5 via PyQt5. It is developed on Linux, but it should
|
||||
in principle work fine on other operating systems as long as dependencies are met.
|
||||
@@ -58,193 +100,6 @@ When installing via pip, novelWriter can be launched from command line with:
|
||||
Make sure the install location for pip is in your PATH variable. This is not always the case by
|
||||
default.
|
||||
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _PyPi: https://pypi.org/project/novelWriter/
|
||||
|
||||
|
||||
.. _a_started_depend:
|
||||
|
||||
Python Dependencies
|
||||
-------------------
|
||||
|
||||
novelWriter has been designed to rely on as few dependencies as possible. Aside from the package(s)
|
||||
needed to communicate with the Qt GUI libraries, only one package is required for handling the XML
|
||||
format of the main project file. Everything else is handled with standard Python libraries.
|
||||
|
||||
The following Python packages are needed to run novelWriter:
|
||||
|
||||
* ``pyqt5`` – needed for connecting with the Qt5 libraries.
|
||||
* ``lxml`` – needed for full XML support.
|
||||
* ``pyenchant`` – needed for efficient spell checking (optional).
|
||||
|
||||
PyQt/Qt should be at least 5.2.1, but ideally 5.10 or higher for nearly all features to work.
|
||||
Exporting to standard Markdown, for instance, requires PyQt/Qt 5.14. Searching using regular
|
||||
expressions requires 5.3, and for full Unicode support, 5.13. There is no known minimum version
|
||||
requirement for package ``lxml``, but the code was originally written with 4.2, which is therefore
|
||||
set as the minimum. It may work on lower versions. You have to test it.
|
||||
|
||||
Optionally, a package can be installed to interface with the Enchant spell checking libaries, but
|
||||
this isn't strictly required. If no external spell checking library is available, novelWriter falls
|
||||
back to using the internal ``difflib`` of Python to check spelling. This is a much slower approach,
|
||||
and it is less sophisticated than full spell checking libaries, but if you only work with small
|
||||
files, the performance loss is not noticeable. The spell check library must be at least 3.0 to work
|
||||
with Windows. On Linux, 2.0 also works fine.
|
||||
|
||||
If you install from PyPi, these dependencies should be installed automatically. If you install from
|
||||
source, dependencies can still be installed from PyPi with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip install -r requirements.txt
|
||||
|
||||
|
||||
.. _a_started_running:
|
||||
|
||||
Running from Source
|
||||
-------------------
|
||||
|
||||
If all the required dependencies are met, you can run novelWriter from the command line with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python novelWriter.py
|
||||
|
||||
A few switches are supported from the command line, mostly to assist in debugging if an error is
|
||||
encountered. To list all options, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python novelWriter.py --help
|
||||
|
||||
|
||||
.. _a_started_linux:
|
||||
|
||||
Setup on Linux
|
||||
==============
|
||||
|
||||
The dependencies of novelWriter are generally available from Linux distro repositories. For Debian
|
||||
and Ubuntu, they can be installed with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
sudo apt install python3-pyqt5 python3-lxml python3-enchant
|
||||
|
||||
If you downloaded the source, you can use the provided ``setup.py`` script to install novelWriter
|
||||
into the system's default Python install locations. If so, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python setup.py install
|
||||
|
||||
To set up the novelWriter desktop launcher, the icons, and the project file association, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python setup.py xdg-install
|
||||
|
||||
By default, these commands install novelWriter and its icons for the current user only. To install
|
||||
for all users, run the script with the ``sudo`` command. Other options are also available. Run
|
||||
``python setup.py help`` for a full list of install options.
|
||||
|
||||
This should install novelWriter to either ``~/.local/bin/novelWriter`` if installed for local user
|
||||
only, or to ``/usr/local/bin/novelWriter`` if installed for all users.
|
||||
|
||||
|
||||
.. _a_started_macos:
|
||||
|
||||
Setup on macOS
|
||||
==============
|
||||
|
||||
These instructions assume you're using brew, and have Python and pip set up. If not, see the
|
||||
`brew docs`_ for help. Main requirements are installed via the requirements file. You also need to
|
||||
install the ``pyobjc`` package, so you must run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip3 install --user -r requirements.txt
|
||||
pip3 install --user pyobjc
|
||||
|
||||
For spell checking you may also need to install the enchant package. It comes with a lot of default
|
||||
dictionaries.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
brew install enchant
|
||||
|
||||
With the dependencies in place, you can either launch the ``novelWriter.py`` script directly, or
|
||||
run the install command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python setup.py install
|
||||
|
||||
After this, you should be able to launch novelWriter by running ``novelWriter`` in a command line
|
||||
window.
|
||||
|
||||
Right now there isn't a better integration with macOS available. Contributions from someone more
|
||||
familiar with macOS would be very much appreciated.
|
||||
|
||||
.. _brew docs: https://docs.brew.sh/Homebrew-and-Python
|
||||
|
||||
|
||||
.. _a_started_windows:
|
||||
|
||||
Setup on Windows
|
||||
================
|
||||
|
||||
On Windows, you have two options: You can either run from source, or install novelWriter via a
|
||||
Windows installer.
|
||||
|
||||
|
||||
.. _a_started_win_installer:
|
||||
|
||||
Windows Installer
|
||||
-----------------
|
||||
|
||||
You can install novelWriter with the Windows installer for 64-bit Windows available on the
|
||||
`main website`_ and GitHub_ page. This installer bundles all that is needed for novelWriter to run,
|
||||
including Python and the XML and Qt libraries. When installing novelWriter this way, you don't need
|
||||
to install any of the dependencies manually. The installer is made with pyinstaller and Inno Setup.
|
||||
|
||||
|
||||
.. _a_started_win_source:
|
||||
|
||||
From Source
|
||||
-----------
|
||||
|
||||
To run from source, you may first need to install Python. If you don't have it installed, you can
|
||||
download it from the python.org_ website. novelWriter should work with Python 3.6 or higher, but it
|
||||
is recommended that you install the latest version of Python.
|
||||
|
||||
Also, make sure you select the "Add Python to PATH" option during installation, otherwise the
|
||||
``python`` command will not work in the command line window.
|
||||
|
||||
.. image:: images/python_win_install.png
|
||||
:width: 600
|
||||
|
||||
Once Python is set up and running, you can either run novelWriter from the folder where you
|
||||
extracted it, or you can build an executable and run that from a desktop icon instead.
|
||||
|
||||
The PyPi installer should come bundled with the Python installation, so to install dependencies,
|
||||
run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
pip install --user -r requirements.txt
|
||||
|
||||
.. tip::
|
||||
|
||||
To create a desktop shortcut to launch novelWriter, you can right click the ``novelWriter.py``
|
||||
file, create a shortcut, then right click again, select "Properties" and change the target to
|
||||
your python executable followed by ``novelWriter.py``. It should look something like this:
|
||||
``C:\...\AppData\Local\Programs\Python\Python38\python.exe novelWriter.py``
|
||||
|
||||
You can also run the ``setup.py`` script to generate a single executable, or an installer.
|
||||
See `Build and Install novelWriter`_ for more details or run: ``python setup.py help``.
|
||||
|
||||
.. _python.org: https://www.python.org/downloads/windows/
|
||||
.. _Build and Install novelWriter: https://github.com/vkbo/novelWriter/blob/main/setup/README.md
|
||||
|
||||
|
||||
.. _a_started_docs:
|
||||
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
.. _a_setup_win:
|
||||
|
||||
****************
|
||||
Setup on Windows
|
||||
****************
|
||||
|
||||
.. _GitHub: https://github.com/vkbo/novelWriter/releases
|
||||
.. _main website: https://novelwriter.io
|
||||
.. _zipapp: https://docs.python.org/3/library/zipapp.html
|
||||
.. _Inno Setup: https://jrsoftware.org/isinfo.php
|
||||
.. _python.org: https://www.python.org/downloads/windows
|
||||
.. _PyPi: https://pypi.org/project/novelWriter
|
||||
.. _discussions: https://github.com/vkbo/novelWriter/discussions
|
||||
|
||||
This is a brief guide to how you can get novelWriter running on a Windows computer.
|
||||
|
||||
On Windows, you have two options: You can either run from source, or install novelWriter via a
|
||||
Windows installer. The latter is the simplest, but since novelWriter is a hobby project, the
|
||||
installer is not signed and downloading and running the installer often triggers warning because
|
||||
Windows doesn't know whether it's safe or not.
|
||||
|
||||
The installer contains an executable zip of novelWriter, a copy of the three libraries it depends
|
||||
on, and a copy of the Python run environment. If you're uncomfortable with running this installer,
|
||||
you can install the components yourself and just run novelWriter directly from the source code. The
|
||||
Source code can be downloaded as a zip file directly from GitHub_.
|
||||
|
||||
|
||||
.. _a_setup_win_installer:
|
||||
|
||||
Using the Installer
|
||||
===================
|
||||
|
||||
You can install novelWriter with the Windows installer for 64-bit Windows available on the
|
||||
`main website`_ and GitHub_ page. This installer bundles all that is needed for novelWriter to run,
|
||||
including Python and the XML and Qt libraries. When installing novelWriter this way, you don't need
|
||||
to install any of the dependencies manually. The installer is made with zipapp_ and `Inno Setup`_.
|
||||
|
||||
|
||||
.. _a_setup_win_source:
|
||||
|
||||
Running from Source
|
||||
===================
|
||||
|
||||
To run novelWriter from source, download the latest source package from the release page on
|
||||
GitHub_, or if you have git running on your computer, you can also clone the repository.
|
||||
|
||||
The main requirement is that you have Python installed. The dependencies of novelWriter can then be
|
||||
installed from the Python Package Index, PyPi_.
|
||||
|
||||
Step 1: Installing Python
|
||||
-------------------------
|
||||
|
||||
If you already have Python installed, you can skip this step. If you don't have it installed, you
|
||||
can download it from the python.org_ website. novelWriter should work with Python 3.6 or higher,
|
||||
but it is recommended that you install the latest version of Python.
|
||||
|
||||
Also, make sure you select the "Add Python to PATH" option during installation, otherwise the
|
||||
``python`` command will not work in the command line window.
|
||||
|
||||
.. image:: images/python_win_install.png
|
||||
:width: 600
|
||||
|
||||
Step 2: Dependencies and Icons
|
||||
------------------------------
|
||||
|
||||
**Alternative A: By Script**
|
||||
|
||||
Open the folder where you extracted the novelWriter source, and double-click the file named
|
||||
``win_install`` or ``win_install.bat``. This should open a command line window and run the setup
|
||||
script to install dependencies and desktop and start menu icons.
|
||||
|
||||
**Alternative B: Command Prompt**
|
||||
|
||||
The above alternative can also be run manually.
|
||||
|
||||
Open the windows command prompt. It can be launched by pressing the :kbd:`Win` key and typing "cmd".
|
||||
The "Command Prompt" app should then be in the list of applications.
|
||||
|
||||
With the command prompt open, navigate to the folder where you extracted the novelWriter source,
|
||||
and run the following commands.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
python setup.py pip
|
||||
python setup.py win-install
|
||||
|
||||
The first command will install the dependencies on your system, and the second command will create
|
||||
a desktop icon and a start menu icon.
|
||||
|
||||
That should be all that you need. If you have any problems, you can always open a question on the
|
||||
project's discussions_ page. This requires a GitHub account.
|
||||
+3
-3
@@ -513,9 +513,9 @@ class GuiMainMenu(QMenuBar):
|
||||
# View > Separator
|
||||
self.viewMenu.addSeparator()
|
||||
|
||||
# View > Toggle Distraction Free Mode
|
||||
self.aFocusMode = QAction("Distraction Free Mode", self)
|
||||
self.aFocusMode.setStatusTip("Toggles distraction free mode, only showing text editor")
|
||||
# View > Focus Mode
|
||||
self.aFocusMode = QAction("Focus Mode", self)
|
||||
self.aFocusMode.setStatusTip("Toggles a distraction free mode, only showing text editor")
|
||||
self.aFocusMode.setShortcut("F8")
|
||||
self.aFocusMode.setCheckable(True)
|
||||
self.aFocusMode.setChecked(self.theParent.isFocusMode)
|
||||
|
||||
@@ -39,6 +39,8 @@ def installPackages(hostOS):
|
||||
installQueue = ["pip", "-r requirements.txt"]
|
||||
if hostOS == OS_DARWIN:
|
||||
installQueue.append("pyobjc")
|
||||
elif hostOS == OS_WIN:
|
||||
installQueue.append("pywin32")
|
||||
|
||||
pyCmd = [sys.executable, "-m"]
|
||||
pipCmd = ["pip", "install", "--user", "--upgrade"]
|
||||
@@ -400,8 +402,11 @@ def freezePackage(buildWindowed, oneFile, makeSetup, hostOS):
|
||||
"""
|
||||
try:
|
||||
import PyInstaller.__main__ # noqa: E402
|
||||
except Exception:
|
||||
print("ERROR: Package 'pyinstaller' is missing on this system")
|
||||
except ImportError:
|
||||
print(
|
||||
"ERROR: Package 'pyinstaller' is missing on this system.\n"
|
||||
" Please run 'pip install --user pyinstaller'."
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
print("")
|
||||
@@ -513,7 +518,7 @@ def freezePackage(buildWindowed, oneFile, makeSetup, hostOS):
|
||||
# =============================================================================================== #
|
||||
|
||||
##
|
||||
# XDG Installation (xdg-install, launcher)
|
||||
# XDG Installation (xdg-install)
|
||||
##
|
||||
|
||||
def xdgInstall():
|
||||
@@ -657,6 +662,116 @@ def xdgInstall():
|
||||
|
||||
return
|
||||
|
||||
##
|
||||
# WIN Installation (win-install, launcher)
|
||||
##
|
||||
|
||||
def winInstall():
|
||||
"""Will attempt to install icons and make a launcher for Windows.
|
||||
"""
|
||||
from nw import __version__, __hexversion__
|
||||
try:
|
||||
import win32com.client
|
||||
except ImportError:
|
||||
print(
|
||||
"ERROR: Package 'pywin32' is missing on this system.\n"
|
||||
" Please run 'setup.py pip' to automatically install\n"
|
||||
" dependecies, or run 'pip install --user pywin32'."
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
print("")
|
||||
print("Windows Install")
|
||||
print("===============")
|
||||
print("")
|
||||
|
||||
nwTesting = not __hexversion__.endswith("f0")
|
||||
wShell = win32com.client.Dispatch("WScript.Shell")
|
||||
|
||||
if nwTesting:
|
||||
linkName = "novelWriter Testing %s.lnk" % __version__
|
||||
else:
|
||||
linkName = "novelWriter %s.lnk" % __version__
|
||||
|
||||
desktopDir = wShell.SpecialFolders("Desktop")
|
||||
desktopIcon = os.path.join(desktopDir, linkName)
|
||||
|
||||
startMenuDir = wShell.SpecialFolders("StartMenu")
|
||||
startMenuProg = os.path.join(startMenuDir, "Programs", "novelWriter")
|
||||
startMenuIcon = os.path.join(startMenuProg, linkName)
|
||||
|
||||
pythonDir = os.path.dirname(sys.executable)
|
||||
pythonExe = os.path.join(pythonDir, "pythonw.exe")
|
||||
|
||||
targetDir = os.path.abspath(os.path.dirname(__file__))
|
||||
targetPy = os.path.join(targetDir, "novelWriter.pyw")
|
||||
targetIcon = os.path.join(targetDir, "setup", "icons", "novelwriter.ico")
|
||||
|
||||
os.curdir = os.path.dirname(__file__)
|
||||
with open(targetPy, mode="w") as outFile:
|
||||
outFile.write(
|
||||
"#!/usr/bin/env python3\n"
|
||||
"# -*- coding: utf-8 -*-\n\n"
|
||||
"import os\n\n"
|
||||
"os.curdir = os.path.abspath(os.path.dirname(__file__))\n\n"
|
||||
"if __name__ == \"__main__\":\n"
|
||||
" import nw\n"
|
||||
" nw.main()\n"
|
||||
)
|
||||
|
||||
print("Collecting Info ...")
|
||||
print("Desktop Folder: %s" % desktopDir)
|
||||
print("Start Menu Folder: %s" % startMenuDir)
|
||||
print("Python Executable: %s" % pythonExe)
|
||||
print("Target Executable: %s" % targetPy)
|
||||
print("Target Icon: %s" % targetIcon)
|
||||
print("")
|
||||
|
||||
print("Creating Links ...")
|
||||
if os.path.isfile(desktopIcon):
|
||||
os.unlink(desktopIcon)
|
||||
print("Deleted: %s" % desktopIcon)
|
||||
|
||||
if os.path.isdir(startMenuProg):
|
||||
for oldIcon in os.listdir(startMenuProg):
|
||||
oldPath = os.path.join(startMenuProg, oldIcon)
|
||||
if not oldIcon.startswith("novelWriter"):
|
||||
continue
|
||||
|
||||
isTesting = oldIcon.startswith("novelWriter Testing")
|
||||
if isTesting and nwTesting:
|
||||
os.unlink(oldPath)
|
||||
print("Deleted: %s" % oldPath)
|
||||
if not isTesting and not nwTesting:
|
||||
os.unlink(oldPath)
|
||||
print("Deleted: %s" % oldPath)
|
||||
|
||||
else:
|
||||
os.mkdir(startMenuProg)
|
||||
print("Created: %s" % startMenuProg)
|
||||
|
||||
wShortcut = wShell.CreateShortCut(desktopIcon)
|
||||
wShortcut.TargetPath = targetPy
|
||||
wShortcut.WorkingDirectory = targetDir
|
||||
wShortcut.IconLocation = targetIcon
|
||||
wShortcut.WindowStyle = 1
|
||||
wShortcut.save()
|
||||
print("Created: %s" % desktopIcon)
|
||||
|
||||
wShortcut = wShell.CreateShortCut(startMenuIcon)
|
||||
wShortcut.TargetPath = targetPy
|
||||
wShortcut.WorkingDirectory = targetDir
|
||||
wShortcut.IconLocation = targetIcon
|
||||
wShortcut.WindowStyle = 1
|
||||
wShortcut.save()
|
||||
print("Created: %s" % startMenuIcon)
|
||||
|
||||
print("")
|
||||
print("Done!")
|
||||
print("")
|
||||
|
||||
return
|
||||
|
||||
# =============================================================================================== #
|
||||
# Windows Installers
|
||||
# =============================================================================================== #
|
||||
@@ -747,12 +862,12 @@ if __name__ == "__main__":
|
||||
"\n"
|
||||
"General Installers:\n"
|
||||
"\n"
|
||||
" install Installs novelWriter to the system's Python install location.\n"
|
||||
" Run as root or with sudo for system-wide install, or as\n"
|
||||
" user for single user install.\n"
|
||||
" xdg-install Install launcher and icons for freedesktop systems.\n"
|
||||
" Run as root or with sudo for system-wide install, or as\n"
|
||||
" user for single user install.\n"
|
||||
" install Installs novelWriter to the system's Python install location. Run as \n"
|
||||
" root or with sudo for system-wide install, or as user for single user \n"
|
||||
" install.\n"
|
||||
" xdg-install Install launcher and icons for freedesktop systems. Run as root or \n"
|
||||
" with sudo for system-wide install, or as user for single user install.\n"
|
||||
" win-install Install desktop and start menu icons for Windows systems.\n"
|
||||
"\n"
|
||||
"Windows Installers:\n"
|
||||
"\n"
|
||||
@@ -831,8 +946,16 @@ if __name__ == "__main__":
|
||||
else:
|
||||
xdgInstall()
|
||||
|
||||
# Windows Installers
|
||||
# ==================
|
||||
if "win-install" in sys.argv:
|
||||
sys.argv.remove("win-install")
|
||||
if hostOS == OS_WIN:
|
||||
winInstall()
|
||||
else:
|
||||
print("ERROR: Command 'win-install' can only be used on Windows")
|
||||
sys.exit(1)
|
||||
|
||||
# Windows Setup Installers
|
||||
# ========================
|
||||
|
||||
if "setup-exe" in sys.argv:
|
||||
sys.argv.remove("setup-exe")
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
python setup.py pip
|
||||
python setup.py win-install
|
||||
pause
|
||||
Reference in New Issue
Block a user