diff --git a/CHANGELOG b/CHANGELOG index 78c2b61..b374d47 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -v1.4 +1.4 Repair nsmd to correctly send client data when running headless and a GUI announces later. ClientId generation now prevent collision with existing IDs. nsmd command line option --load-session to directly load one (Berkelder, Rik) @@ -15,14 +15,14 @@ Legacy-GUI: Scale icons, support more icon formats. Legacy-GUI: Show all icons and buttons when attaching to a running nsmd session Legacy-GUI: Various small fixes. -v1.3.2 +1.3.2 Rename new-session-manager executable to nsm-legacy-gui to prevent future confusion. -v1.3.1 +1.3.1 Add header copyright even to unchanged files to adhere to stricter packaging requirements. Meson can now switch off individual executables and will stop/error when trying to build without dependencies. -v1.3 +1.3 Rebranding to "new session manager" Upstream GUI tools "non-session-manager" and "nsm-proxy" converted to standard FLTK instead of a custom toolkit New message /nsm/gui/session/root raises NSM_API_VERSION_MINOR from 0 to 1 (1.0 -> 1.1) @@ -31,5 +31,5 @@ License upgraded to GPLv3 Simplified file structure Fix compiler warnings. -v1.2.1 +1.2.1 Current state of upstream Non Session Manager v1.2 including unreleased /nsm/gui/session/root diff --git a/docs/api/index.html b/docs/api/index.html index 700234d..d27b2ab 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -6,7 +6,7 @@ -Non Session Manager API +Non Session Manager - API + + + +
+
+
+
+ +
+
+
+
+

Introduction

+
+
+

New Session Manager (NSM) is a tool to assist music production by grouping standalone programs into sessions. +Your workflow becomes easy to manage, robust and fast by leveraging the full potential of cooperative applications.

+
+
+

It is a community version of the "NON Session Manager" and free in every sense of the word: +free of cost, free to share and use, free of spyware or ads, free-and-open-source.

+
+
+

You can create a session, or project, add programs to it and then use commands to save, start/stop, +hide/show all programs at once, or individually. At a later date you can then re-open the session +and continue where you left off.

+
+
+

All files belonging to the session will be saved in the same directory.

+
+
+

If you are a user (and not a programmer or packager) everything you need is to install NSM +through your distributions package manager and, highly recommended, Argodejo as a GUI (see below).

+
+
+

To learn NSM you don’t need to know the background information from our documentation, which +is aimed at developers that want to implement NSM support in their programs. Learn the GUI, +not the server and protocol.

+
+
+
+
+

Bullet Points

+
+
+
    +
  • +

    Drop-In replacement for the non-session-manager daemon nsmd and tools (e.g. jackpatch)

    +
  • +
  • +

    Simple and hassle-free build system to make packaging easy

    +
  • +
  • +

    Possibility to react to sensible bug fixes that would not have been integrated original nsmd

    +
  • +
  • +

    Stay upwards and downwards compatible with original nsmd

    +
  • +
  • +

    Conservative and hesitant in regards to new features and behaviour-changes, but possible in principle

    +
  • +
  • +

    Keep the session-manager separate from the other NON* tools Mixer, Sequencer and Timeline.

    +
  • +
  • +

    Protect nsmd from vanishing from the internet one day.

    +
  • +
  • +

    The goal is to become the de-facto standard session manager for Linux distributions

    +
  • +
+
+
+
+
+

User Interface

+
+
+

It is highly recommended to use Argodejo ( https://www.laborejo.org/argodejo/ ) as graphical +user interface. In fact, if you install Argodejo in you distribution it will install NSM as +dependency and you don’t need to do anything yourself with this software package.

+
+
+

This repository also contains the legacy FLTK interface simply called nsm-legacy-gui, +symlinked to non-session-manager for backwards compatibility. (e.g. autostart scripts etc.)

+
+
+
+
+

Supported Clients

+
+
+

While NSM can start and stop any program it only becomes convenient if clients specifically +implement support. This enables saving and hiding the GUI, amongst other features. +Documentation and tutorials for software-developers will be added at a later date.

+
+
+
+
+ + + \ No newline at end of file diff --git a/docs/release-checklist.txt b/docs/release-checklist.txt deleted file mode 100644 index 7329882..0000000 --- a/docs/release-checklist.txt +++ /dev/null @@ -1,13 +0,0 @@ -This is an internal reminder what to check and change before a release. - -/documentation/API/api.adoc - :revnumber: - :revdate: - -Version number in /meson.build (one occurence) -Version number and changes in /CHANGELOG -Regenerate API and Website html to update the date in their footer - -We do not change the copyright date in file license-headers. That is not required by law and only -exist to mark to year of the fork. In the future it might be removed completely. - diff --git a/docs/api/LICENSE b/docs/src/api/LICENSE similarity index 100% rename from docs/api/LICENSE rename to docs/src/api/LICENSE diff --git a/docs/api/api.adoc b/docs/src/api/index.adoc similarity index 95% rename from docs/api/api.adoc rename to docs/src/api/index.adoc index 2696fe9..6ad9961 100644 --- a/docs/api/api.adoc +++ b/docs/src/api/index.adoc @@ -1,8 +1,9 @@ //// -This is not an "asciidoctor", not plain "asciidoc" document. +This is "asciidoctor", not plain "asciidoc". https://asciidoctor.org/docs/user-manual/ //// + //// This documentation is licensed under the Creative Commons Attribution-ShareAlike 2.5 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/2.5/legalcode or send a @@ -14,7 +15,6 @@ A copy of the license has been provided in the file documentation/API/LICENSE. :authors: Jonathan Moore Liles :email: :revnumber: 1.2 -:revdate: 2013-04-06 :iconfont-remote!: :!webfonts: @@ -22,15 +22,12 @@ A copy of the license has been provided in the file documentation/API/LICENSE. :sectnums: :sectnumlevels: 4 -:toc: preamble +:toc: :toc-title: Table of Contents :toclevels: 4 -= Non Session Manager API - - -== Non Session Management API += Non Session Manager - API The Non Session Management API is used by the various components of the Non audio production suite to allow any number of independent programs to be managed together as part of a logical session @@ -58,7 +55,7 @@ this specification it should be considered broken. Consistency across applicatio management is very important for a good user experience. -=== Client Behavior Under Session Management +== Client Behavior Under Session Management Most graphical applications make available to the user a common set of file operations, typically presented under a File or Project menu. @@ -72,16 +69,16 @@ consistent and predictable user experience, it is critically important for appli to these guidelines. -==== File Menu +=== File Menu -===== New +==== New This option may empty/reset the current file or project (possibly after user confirmation). UNDER NO CIRCUMSTANCES should it allow the user to create a new project/file in another location. -===== Open +==== Open This option MUST be disabled. @@ -89,7 +86,7 @@ The application may, however, elect to implement an option called 'Import into S copy of a file/project which is then saved at the session path provided by NSM. -===== Save +==== Save This option should behave as normal, saving the current file/project as established by the NSM `open` message. @@ -97,7 +94,7 @@ This option should behave as normal, saving the current file/project as establis UNDER NO CIRCUMSTANCES should this option present the user with a choice of where to save the file. -===== Save As +==== Save As This option MUST be disabled. @@ -106,21 +103,21 @@ creates a copy of the current file/project which is then saved in a user-specifi of the session path provided by NSM. -===== Close (as distinguished from Quit or Exit) +==== Close (as distinguished from Quit or Exit) This option MUST be disabled unless its meaning is to disconnect the application from session management. -===== Quit or Exit +==== Quit or Exit This option may behave as normal (possibly asking the user to confirm exiting). -==== Data Storage +=== Data Storage -===== Internal Files +==== Internal Files All project specific data created by a client MUST be stored in the per-client storage area provided by NSM. This includes all recorded audio and MIDI files, snapshots, etc. Only global @@ -128,7 +125,7 @@ configuration items, exports, and renders of the project may be stored elsewhere specifies). -===== External Files +==== External Files Files required by the project but external to it (typically read-only data such as audio samples) SHOULD be referenced by creating a symbolic link within the assigned session area, and then @@ -139,7 +136,7 @@ to (some unique component may be required to prevent collisions) -=== NSM OSC Protocol +== NSM OSC Protocol All message parameters are REQUIRED. All messages MUST be sent from the same socket as the `announce` message, using the `lo_send_from` method of liblo or its equivalent, as the server uses the return @@ -150,9 +147,9 @@ Clients MUST create thier OSC servers using the same protocol (UDP,TCP) as found is lacking a robust TCP implementation at the time of writing, but in the future it may be useful. -==== Establishing a Connection +=== Establishing a Connection -===== Announce +==== Announce At launch, the client MUST check the environment for the value of `NSM_URL`. If present, the client MUST send the following message to the provided address as soon as it is ready to respond to the @@ -201,7 +198,7 @@ like Python can be more challenging. |=== -===== Response +==== Response The server will respond to the client's announce message with the following message: @@ -257,7 +254,7 @@ The following table defines possible values of `error_code`: |=== -==== Server to Client Control Messages +=== Server to Client Control Messages Compliant clients MUST accept the client control messages described in this section. All client control messages REQUIRE a response. Responses MUST be delivered back to the sender (NSM) from the @@ -283,7 +280,7 @@ replied to (e.g. "nsm/client/save": ---- -===== Quit +==== Quit There is no message for this. Clients will receive the Unix SIGTERM signal and MUST close cleanly IMMEDIATELY, without displaying any kind of dialog to the user and regardless of whether or not @@ -291,7 +288,7 @@ unsaved changes would be lost. When a session is closed the application will rec soon after having responded to a `save` message. -===== Open +==== Open [source%nowrap,OSC] ---- @@ -349,7 +346,7 @@ A response is REQUIRED as soon as the open operation has been completed. Ongoing indicated by sending messages to `/nsm/client/progress`. -====== Response +===== Response The client MUST respond to the 'open' message with: @@ -381,7 +378,7 @@ Or |=== -===== Save +==== Save [source%nowrap,OSC] ---- @@ -391,7 +388,7 @@ Or This message will only be delivered after a previous `open` message, and may be sent any number of times within the course of a session (including zero, if the user aborts the session). -====== Response +===== Response [source%nowrap,OSC] ---- @@ -419,9 +416,9 @@ Or |=== -==== Server to Client Informational Messages +=== Server to Client Informational Messages -===== Session is Loaded +==== Session is Loaded Accepting this message is optional. The intent is to signal to clients which may have some interdependence (say, peer to peer OSC connections) that the session is fully loaded and all their @@ -437,7 +434,7 @@ on this message MUST not do so by delaying initialization waiting for it. This message does not require a response. -===== Show Optional Gui +==== Show Optional Gui If the client has specified the `optional-gui` capability, then it may receive this message from the server when the user wishes to change the visibility state of the GUI. It doesn't matter if the @@ -459,9 +456,9 @@ No response is message is required. -==== Client to Server Informational Messages +=== Client to Server Informational Messages -===== Optional GUI +==== Optional GUI If the client has specified the `optional-gui` capability, then it MUST send this message whenever the state of visibility of the optional GUI has changed. It also MUST send this message after it's @@ -483,7 +480,7 @@ loads. No response will be delivered. -===== Progress +==== Progress [source%nowrap,OSC] ---- @@ -503,7 +500,7 @@ Clients which intend to send progress messages should include `:progress:` in th capability string. -===== Dirtiness +==== Dirtiness [source%nowrap,OSC] ---- @@ -520,7 +517,7 @@ may optionally send `is_dirty` and `is_clean` messages. Clients which have this capability should include `:dirty:` in their `announce` capability string. -===== Status Messsages +==== Status Messsages [source%nowrap,OSC] ---- @@ -535,7 +532,7 @@ Clients which have this capability should include `:message:` in their `announce string. -==== Error Code Definitions +=== Error Code Definitions .Error Code Definitions [options="header", stripes=even] @@ -556,7 +553,7 @@ string. |=== -==== Client to Server Control +=== Client to Server Control If the server publishes the `:server_control:` capability, then clients can also initiate action by the server. For example, a client might implement a 'Save All' option which sends a @@ -564,7 +561,7 @@ the server. For example, a client might implement a 'Save All' option which send management interface to effect the save. -==== Server Control API +=== Server Control API The session manager not only manages clients via OSC, but it is itself controlled via OSC messages. The server responds to the following messages. @@ -632,7 +629,7 @@ The possible errors are: -===== Client to Client Communication +==== Client to Client Communication If the server includes `:broadcast:` in its capability string, then clients may send broadcast messages to each other through the NSM server. Clients may send messages to the server at the path diff --git a/docs/api/readme.txt b/docs/src/api/readme.txt similarity index 100% rename from docs/api/readme.txt rename to docs/src/api/readme.txt diff --git a/docs/src/generate.sh b/docs/src/generate.sh new file mode 100755 index 0000000..ae47e8f --- /dev/null +++ b/docs/src/generate.sh @@ -0,0 +1,67 @@ +#!/bin/sh + + +#The documentation is built statically and does not belong to the normal build process. +#Updating is part of the development process, not compiling or packaging. +#Run this before a release, or any time you want to update the docs or the README. + +#This script takes common snippets of information and updates or generates source info files from +#them. +# parse src/nsmd.cpp for API version, insert into /docs/src/api/index.adoc +# parse /CHANGELOG first line for package version, insert into /meson.build and /docs/src/index.adoc +# generate /README.md (shares text with manual index) +# generate /docs/src/index.adoc (shares text with readme) +# generate manpages (need all kind of information) +# convert all .adoc files to html in /docs/ (This enables github to directly present this dir as website) +# +#We do _not_ change the copyright date in files license-headers. +#They only exist to mark to year of the fork. In the future dates might be removed completely. + +set -e #Stop script on errors +set -u #Trace unset variables as an error. + +#Change pwd to root dir +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) +cd "$parent_path"/../.. +[ -f "CHANGELOG" ] || exit 1 #assert correct dir + +#Gather data +ROOT=$(pwd) #save for later +VERSION=$(head -n 1 "CHANGELOG") + +_MAJORAPI=$(grep "define NSM_API_VERSION_MAJOR" "src/nsmd.cpp" | cut -d ' ' -f 3) +_MINORAPI=$(grep "define NSM_API_VERSION_MINOR" "src/nsmd.cpp" | cut -d ' ' -f 3) +APIVERSION=$_MAJORAPI"."$_MINORAPI + +#Present data to confirm write-action +echo "Root: $ROOT" +echo "Version: $VERSION" +echo "API Version: $APIVERSION" +read -p "Is parsed data correct? Continue by writing files? [y|n] " -n 1 -r +if [[ ! $REPLY =~ ^[Yy]$ ]] +then + echo + echo "Abort" + exit 1 +fi +echo + +#Package Version Number +cd "$ROOT/docs/src" +sed -i '/^\:revnumber.*/c\:revnumber: '$VERSION index.adoc #Find the revnumber line and replace with entire new line + +#API Version Number +cd "$ROOT/docs/src/api" +sed -i '/^\:revnumber.*/c\:revnumber: '$APIVERSION index.adoc #Find the revnumber line and replace with entire new line + + +#Generate README.md +cd "$ROOT/docs/src" +cat "readme-00.md" "readme-01.md" "readme-02.md" > "$ROOT/README.md" + + +#Generate website and documentation with Asciidoctor +cd "$ROOT/docs" +mkdir -p "api" +asciidoctor src/index.adoc -o index.html +asciidoctor src/api/index.adoc -o api/index.html diff --git a/docs/src/index.adoc b/docs/src/index.adoc new file mode 100644 index 0000000..7d9b7eb --- /dev/null +++ b/docs/src/index.adoc @@ -0,0 +1,27 @@ +//// +This is "asciidoctor", not plain "asciidoc". +https://asciidoctor.org/docs/user-manual/ +//// + + +//// +This documentation is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. +To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a +letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +A copy of the license has been provided in the file documentation/LICENSE. +//// + +:Author: LinuxAudio.org +:iconfont-remote!: +:!webfonts: +:revnumber: 1.4 + += New Session Manager Documentation + +* link:https://github.com/linuxaudio/new-session-manager[Sourcecode] +* link:https://github.com/linuxaudio/new-session-manager/issues[Bug and Issue Tracker] +* link:api/index.html[API] document that describes all OSC Messages +* link:http://non.tuxfamily.org/session-manager/doc/MANUAL.html[Legacy-GUI Manual]. The original Non-Session-Manager manual is still valid. + + +include::readme-01.md[] diff --git a/docs/src/readme-00.md b/docs/src/readme-00.md new file mode 100644 index 0000000..9ecebbf --- /dev/null +++ b/docs/src/readme-00.md @@ -0,0 +1 @@ +# New Session Manager diff --git a/docs/src/readme-01.md b/docs/src/readme-01.md new file mode 100644 index 0000000..229b0ac --- /dev/null +++ b/docs/src/readme-01.md @@ -0,0 +1,46 @@ + +## Introduction + +New Session Manager (NSM) is a tool to assist music production by grouping standalone programs into sessions. +Your workflow becomes easy to manage, robust and fast by leveraging the full potential of cooperative applications. + +It is a community version of the "NON Session Manager" and free in every sense of the word: +free of cost, free to share and use, free of spyware or ads, free-and-open-source. + +You can create a session, or project, add programs to it and then use commands to save, start/stop, +hide/show all programs at once, or individually. At a later date you can then re-open the session +and continue where you left off. + +All files belonging to the session will be saved in the same directory. + +If you are a user (and not a programmer or packager) everything you need is to install NSM +through your distributions package manager and, highly recommended, Argodejo as a GUI (see below). + +To learn NSM you don't need to know the background information from our documentation, which +is aimed at developers that want to implement NSM support in their programs. Learn the GUI, +not the server and protocol. + + +## Bullet Points +* Drop-In replacement for the non-session-manager daemon nsmd and tools (e.g. jackpatch) +* Simple and hassle-free build system to make packaging easy +* Possibility to react to sensible bug fixes that would not have been integrated original nsmd +* Stay upwards and downwards compatible with original nsmd +* Conservative and hesitant in regards to new features and behaviour-changes, but possible in principle +* Keep the session-manager separate from the other NON* tools Mixer, Sequencer and Timeline. +* Protect nsmd from vanishing from the internet one day. +* The goal is to become the de-facto standard session manager for Linux distributions + +## User Interface +It is highly recommended to use Argodejo ( https://www.laborejo.org/argodejo/ ) as graphical +user interface. In fact, if you install Argodejo in you distribution it will install NSM as +dependency and you don't need to do anything yourself with this software package. + +This repository also contains the legacy FLTK interface simply called `nsm-legacy-gui`, +symlinked to `non-session-manager` for backwards compatibility. (e.g. autostart scripts etc.) + +## Supported Clients + +While NSM can start and stop any program it only becomes convenient if clients specifically +implement support. This enables saving and hiding the GUI, amongst other features. +Documentation and tutorials for software-developers will be added at a later date. diff --git a/docs/src/readme-02.md b/docs/src/readme-02.md new file mode 100644 index 0000000..d5213c1 --- /dev/null +++ b/docs/src/readme-02.md @@ -0,0 +1,52 @@ + +## Fork and License +This is a fork of non-session-manager, by Jonathan Moore Liles http://non.tuxfamily.org/ +which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. + +All files, except nsm.h kept in this fork were GPL "version 2 of the License, or (at your +option) any later version." + +`nsm.h` is licensed under the ISCL. + +New-Session-Manager changed the license to GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. +See file COPYING + +## Build +The build system is meson. + +This is a software package that will compile and install multiple executables: +* `nsmd`, the daemon or server itself. It is mandatory. + * It has no GUI. + * Dependency is `liblo`, the OSC library. +* `jackpatch`, NSM client to save and remember JACK connections. + * It has no GUI. + * Dependencies are `JACK Audio Connection Kit` and `liblo`, the OSC library. + * Can be deactivated (see below) `-Djackpatch=false` +* `nsm-legacy-gui`, Legacy GUI for the user + * Formerly known as "non-session-manager" + * Dependencies are `FLTK`>=v1.3.0 and `liblo`, the OSC library. + * Can be deactivated (see below) `-Dlegacy-gui=false` +* `nsm-proxy`, NSM GUI Client to run any program without direct NSM support + * Dependencies are `FLTK`>=v1.3.0, `fluid` (FLTK Editor/compiler, maybe in the same package as FLTK, maybe not) and `liblo`, the OSC library. + * Can be deactivated (see below) `-Dnsm-proxy=false` + + +``` +meson build --prefix=/usr +#or disable individual build targets: +#meson build --prefix=/usr -Dlegacy-gui=false -Dnsm-proxy=false -Djackpatch=false +cd build && ninja +sudo ninja install +``` + +Optionally you can skip `sudo ninja install` and run all executables from the build-dir. +In this case you need to add the build-dir to your PATH environment variable so that the tools +can find each other. + +## Names of Executable Files and Symlinks + +Some distributions (and possibly local laws) prevent a forked software project from creating +executable files under the same name, if the name itself is an original work subject to copyright, +which it arguably is for the "NON-"-suite. Therefore New Session Manager renamed +`non-session-manager` to `nsm-legacy-gui`. Installing will also create a symlink to +`non-session-manager` for backwards compatibility. (e.g. autostart scripts etc.). diff --git a/docs/src/test.txt b/docs/src/test.txt new file mode 100644 index 0000000..f711d8b --- /dev/null +++ b/docs/src/test.txt @@ -0,0 +1,7 @@ +Hallo Welt + +Lol Rolf + +== Cool Cool + +Cool diff --git a/meson.build b/meson.build index 7d732b6..a3c1099 100644 --- a/meson.build +++ b/meson.build @@ -17,7 +17,7 @@ # along with New-Session-Manager. If not, see . ############################################################################## -project('new-session-manager', 'c', 'cpp', version : '1.3.1', license : 'GPLv3') +project('new-session-manager', 'c', 'cpp', version : '1.4', license : 'GPLv3') ############## #Dependencies