Proposal Nyquist IDE

From Audacity Wiki
Jump to: navigation, search
Proposal pages help us get from feature requests into actual plans. This page is a proposal for a Nyquist IDE module to replace Nyquist Workbench
Proposal pages are used on an ongoing basis by the Audacity development team and are open to edits from visitors to the wiki. They are a good way to get community feedback on a proposal.

  • Note: Proposals for Google Summer of Code projects are significantly different in structure, are submitted via Google's web app and may or may not have a corresponding proposal page.

The Problem

The Nyquist Workbench has been neglected for many years, has multiple outstanding bugs and enhancement requests. The original developer of Nyquist Workbench is no longer active in Audacity, and with recent advances to Nyquist and the Nyquist Prompt, the goals of a new modern Nyquist Workbench are somewhat different from the initial ideas.

This proposal aims to replace the multitude of bugs / enhancements listed on bugzilla against the Nyquist Workbench, with an outline for a new design that meets the needs for people developing Nyquist plug-ins for the current version of Audaity.

Proposed Feature

To develop an new "Workbench" module for developing Nyquist plug-ins for Audacity.

Developer/QA Backing

  • Steve
  • James - Supports core idea of having a mod-nyq-workbench IDE for Nyquist. May argue with details.

Use Cases

For both experienced and new users creating Nyquist plug-ins.


At this stage, this is just a list of ideas, largely derived from enhancements that were previously logged on bugzilla and the wiki Feature Requests page.
  • Installation: The module should be shipped with Audacity so that it can be installed / enabled in similar fashion to mod-script-pipe.
  • Syntax Highlighting: This could perhaps borrow some code from Scintilla / Scite, which has syntax highlighting for LISP. Ideally it would have syntax highlighting for both LISP and SAL syntax, but as LISP is the underlying language, and most of our documentation in for LISP, the priority should be for LISP syntax.
  • Parentheses matching: This is an essential feature.
  • Two space indentation: This is commonly adopted for LISP code, and is very much preferred to tab indenting. Because LISP frequently has many levels of indentation, the amount of indentation should be small and consistent.
  • Monospace font: This is very desireable, at least for code even if not for comments.
      Steve 28May19: My personal preference is for monospace font for code and comments.
  • Plug-in boilerplates: Most Nyquist plug-ins have similar headers (several of which are required). A selection of boilerplate "templates" saves repetitive typing and reduces errors.
  • Debug Window: As in the original Workbench, an integrated debug window is more convenient that either the Nyquist Prompt's debug window, or switching to Audacity's log window.
  • Interrupt: As in the original Workbench, the ability to abort a running script is extremely useful, particularly as it is very easy to write infinite loops in Nyquist.
  • AUD-DO Support: Syntax highlighting and even auto-completion would be a nice to have feature for Audacity's Scripting commands.
  • Snippets: Common code snippets (and optionally user snippets) could greatly improve user experience for experienced plug-in authors, and aid new plug-in authors. Some examples could be DO, DO*, DOLIST, PWL, PWLV, PWLE, PWLV-LIST, etc.
  • Plug-in Support: Support for plug-ins written in Nyquist, such as the Nyquist Apropos plug-in.

GUI Examples

The GUI may be similar to the original Nyquist Workbench.