Savitar 2 is the next major version of Savitar v1.x
README last updated: July 5th, 2022
Chronological Software Design Notes are available for viewing.
With the release of macOS 10.15, Catalina, Apple has dropped support for 32-bit applications, thus finally making the 23 year old Savitar v1.x app unrunnable on Catalina. The top goal for this first v2.0 release of Savitar is to gain 64-bit support and continue to support the application moving forward. Savitar v1.6.3's heart is its WASTE text engine, which is built atop 32-bit Carbon API calls. Savitar v1.6.3 was also implemented in MetroWerks' PowerPlant application framework. So, v2.0 becomes a complete rewrite of the features of Savitar v1.6.3 with a daring twist to the story: Savitar 2.0 is using WKWebView for its output pane, converting incoming ANSI escape sequences to HTML using a hacked version of Aha.
Although the first release of Savitar 2.0 is aimed at feature parity with current production Savitar, v1.6.3, future releases of Savitar 2 will start taking advantages with all the goodies of having an HTML engine for output.
To expediate the migration to 64-bit, the initial release of Savitar 2.0 will import existing Savitar v1.6.3 world documents and settings, and will have basically the same user interface too. If interest in the application continues/grows, subsequent 2.x versions of the app will see a redesign of the user interface of Savitar. I have also conciously avoided moving to new (to Savitar 1's timeframe) Apple technologies such as Core Data and SwiftUI. Those technologies can arrive after the first release of v2.0, and in fact, may even signal a 3.0 effort.
Here is the current state of getting to Savitar v1.6.3 feature parity, broken into two delivery parts:
√ Started a private github repo
√ App is 64bit only, runs on macOS 10.12 and later, including Catalina
√ App is integrated with AppCenter, handles crash reporting and basic analytics
√ Reading Sav 1.x world settings, opening sessions
√ Integrated WKWebView as the output pane
√ Rewrite Aha (ANSI to HTML parser)
√ World settings Appearance tab is operational
√ Output triggers are working
√ Input macro hotkeys are supported
√ Load Sav 1.x app settings (includes triggers)
√ Load Sav 1.x world triggers
√ Transition over to using ReSwift (break-out extensions of classes/structs as needed)
√ Implement input pane command recall
√ New world onboarding
√ Implement Continuous Speech (using new AVSpeechSynthesizer)
_ Implement the start of local commands, ##history
_ Implement sticky commands
_ Handle left-arrow, right-arrow, ctrl-a, ctrl-c, and bell input
√ Implement audio cue triggers
√ Implement reply triggers
√ Implement input triggers
_ Implement input trigger variables
_ Implement next gen startup commands (trigger based)
√ Implement Trigger Matching tab view
√ Implement Trigger Appearance tab view
√ Implement Trigger Audio Cue tab view
√ Implement Trigger Reply tab view
√ Implement Macro editor
_ Implement World settings Starting tab
√ Connect/disconnect session handling
_ Implement remaining World settings tabs
_ Implement remaining local commands
_ Implement scroll locking
_ Menubar finalized
√ Text Editing menu items finalized
_ Add check for updates support (Sparkle?)
_ Add bug reporting support
_ Release alpha to select testers, start geting feedback
_ Address key things found in alpha test
√ Move github repo to public
_ Start promoting the beta test
_ Find/Find Next supported
√ Logging support
_ Printing supported
_ Enhanced analytics
_ ANSI Color Settings window implemented
_ Macro Clicker
_ xch_cmd support
_ MCP (? does anyone use this?)
_ File upload
_ Divider status bar support
_ Polish, address beta test issues
These features take Savitar 2.0 beyond what 1.6.x provides:
_ SSL support
_ Dark Mode support
_ Text to emoji support
_ Javascript scripting?
_ ???
In the client
directory you'll find Savitar2.xcworkspace
.
You'll want to brew install swiftlint
to ensure coding style correctness.
There is an echo server you can use to test with. The echo server is derived from Using the BlueSocket framework to create an echo server
Here are the steps to build and run it on macOS:
$ cd server/echoserver
$ swift build
$ .build/debug/echoserver
If you want to generate an xcode project for the echoserver, do this:
$ cd server/echoserver
$ swift package generate-xcodeproj
Install the formatter:
$ brew install swiftformat
Then issue this at the command at the root of the clone:
$ swiftformat .
There's already a .swiftformat
config file that contains this:
--swiftversion 5
--disable wrapMultilineStatementBraces, trailingCommas
cloc . --exclude-dir=Pods,.build
167 text files.
151 unique files.
71 files ignored.
github.com/AlDanial/cloc v 1.92 T=0.32 s (478.6 files/s, 53394.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Swift 115 1773 1270 8162
XML 27 0 38 4758
Markdown 6 263 0 490
JSON 1 0 0 68
YAML 1 1 0 8
C/C++ Header 1 3 8 3
-------------------------------------------------------------------------------
SUM: 151 2040 1316 13489
-------------------------------------------------------------------------------