Skip to content

The menus

Moshe's Mac menu bar, item for item, with the usual keys of a Mac writing app, and what each calls in the page. The Mac app builds its menu bar from this (mac/Moshe/Menus.swift). The page's own keys (App.svelte's keydown) are the same keys, so the web app and Android behave alike, with no menu bar.

  • key: the menu's key. The page hears a key first, and a key it leaves alone reaches the menu. ⌃ chords reach the menu first.
  • command: window.mosheCommand(name, arg). means the page does not have it yet. The menu shows such an item disabled until the page lists the command in mosheMenuState().commands.
  • state: read from window.mosheMenuState() (below) when a menu opens: titles that toggle, ticks, and the submenus built from the library.

File

item key command state
New Sheet ⌘N newSheet
New Material Sheet ⌃⌥⌘N newMaterialSheet
New Handwritten Sheet newHandwrittenSheet
New Group… ⇧⌘N newGroup
New Filter… ⌃⌘N newFilter
New Project… newProject
Open Quickly ▸ Sheets… ⌘O openQuickly
Add to Favorites / Remove from Favorites ⌃⌘U favorite favorite
Mark as Material / Mark as Text ⌃⌘M material material
Keywords… ⇧⌘K keywords
Goal… goal
Statistics… statistics
Glue Sheets / Unglue Sheets glue glued
Merge Sheets… merge
Duplicate ⌘D duplicate
Export… ⇧⌘P export
Share… share (export, then mosheShell.share)
Browse Backups… browseBackups
Import… import
Close Window ⌘W (the shell)
Print… ⌘P print (PDF export straight to the print path)

Left out: Add External Folder (Moshe's library is one folder), Publish (no publishing targets), Save Version and Browse All Versions (Moshe keeps backups, not versions).

Edit

item key command state
Undo / Redo ⌘Z / ⇧⌘Z undo / redo: the editor's history (a text field in the page: the field's own) canUndo / canRedo
Cut ⌘X native
Copy ▸ Copy · Copy as Markdown · Copy as HTML · Copy as Rich Text ⌘C · · · native · copyAs, arg markdown / html / rich
Paste ▸ Paste ⌘V native
… Paste as Plain Text ⌥⇧⌘V native pasteAsPlainText:
… Paste as Code Block · Raw Source Block pasteAs, arg {kind: 'code'\|'raw', text}
… Paste from Markdown · HTML · Rich Text ⌥⌘V · · pasteFrom, arg {kind: 'markdown'\|'html'\|'rich', text, html}
Delete · Select All · ⌘A native
Move Line Up / Move Line Down ⌃⌘↑ / ⌃⌘↓ moveUp / moveDown: a line in the editor, a sheet in the list focus gives "Line" or "Sheet"
Split at Selection ⇧⌘B split
Attach Note… · Attach Image… attachNote · attachImage
Find ▸ Find… · Find and Replace… · Find Next · Find Previous · Use Selection for Find · Search Library… ⌘F · ⌥⌘F · ⌘G · ⇧⌘G · ⌘E · ⇧⌘F find, arg open / replace / next / previous / selection; openQuickly
Spelling and Grammar ▸ · Substitutions ▸ · Transformations ▸ · Speech ▸ native

For the paste commands the shell passes what is on the clipboard (the page may not read it itself from a menu).

Markup

item key command
Title · Heading · Subheading (⌥⌘1 · ⌥⌘2 · ⌥⌘3, hidden) heading 1 · 2 · 3
More ▸ Heading 4 · 5 · 6 · Paragraph (⌥⌘4–6, ⌥⌘0, hidden) heading 4 · 5 · 6 · 0
Strong · Emphasis ⌘B · ⌘I strong · emphasis
Code code
Mark ▸ Mark · Delete · Insert · Comment ⇧⌘H · · · ⇧⌘C mark · markDelete · markInsert · comment
Link ⌘K link
Annotate annotate
Dashed List · Numbered List · Quote dashedList · numberedList · quote
Comment Block · Code Block · Raw Source Block commentBlock · codeBlock · rawBlock
Clear Markup ⌘L clearMarkup

Insert

item key command
Line Break ⇧↩ insert, arg lineBreak (the editor's key already)
Tab ⌥⇥ insert tab
Divider insert divider
Image · Video · Footnote · Equation · Table insert image · video · footnote · equation · table
Table of Contents insert toc
Sketch… insert sketch: a drawing (pen, finger or mouse) saved as an SVG beside the sheet

View

item key command state
Hide Library / Show Library showSheets / showLibrary library
Dashboard ▸ (its views) dashboardView, arg view id dashboard, dashboardView, dashboardViews
Second Editor ⌥⌘3 secondEditor secondEditor
Hide Counter / Show Counter toggleCounter counter
Show Paragraph Numbers toggleParagraphNumbers paragraphNumbers
Sheet List ▸ (sort orders, Show Dates) sheetSort, arg; toggleSheetDates sheetSort, sheetSorts, sheetDates
Translation Mode · Revision Mode ⇧⌘T · ⇧⌘E translation · revision translation, revision
Voice (VOICE.md) ⌥⇧⌘L, or as chosen voice voice
Start Listening / Stop Listening ⌥⌘L, or as chosen listen listening
Zoom In · Zoom Out · Default Size ⌘+ · ⌘− · ⌘0 zoomIn · zoomOut · zoomReset
Show Line Marker toggleLineMarker lineMarker
Highlight ▸ Off · Line · Sentence · Paragraph highlight, arg highlight
Fixed Scrolling ▸ Off · Top · Middle · Bottom · Variable fixedScrolling, arg fixedScrolling
Appearance ▸ Match System · Light · Dark appearance, arg appearance
Theme ▸ (the themes) theme, arg id theme, themes
Focus Mode ⌘. hideInterface interfaceHidden
Enter Full Screen ⌃⌘F (🌐F) native

Go

item key command state
Back · Forward ⌘[ · ⌘] back · forward
Notes ▸ (All, Inbox, the groups) · Projects ▸ (the projects) select, arg path notes, projects, selection
Favorites ⇧⌘U favorites
Previous Sheet · Next Sheet ⌥⌘↑ · ⌥⌘↓ previousSheet · nextSheet
Library · Sheet List · Editor · Dashboard ⌘1 · ⌘2 · ⌘3 · ⌘4 showLibrary · showSheets · showEditor · dashboard
(Switch Editor) ⌥⌘← / ⌥⌘→, hidden otherEditor

Window

item key command
New Window ⌥⌘N (the shell)
Minimize · Zoom ⌘M · ⌃⌘Z native
Fill · Center · Move & Resize ▸ · Full Screen Tile ▸ added by macOS
Quick Export · Statistics · Navigation · Markup ⌘6 · ⌘7 · ⌘8 · ⌘9 panel, arg export / statistics / navigation / markup (the side panels: the dashboard's views where the page has them)
Keyword Manager keywordManager
Bring All to Front native

Moshe (the app menu) and Help

  • Moshe: About Moshe · Settings… ⌘, (settings) · Library Folder… · Show Library in Finder · Use the Server… · Services · Hide/Hide Others/Show All · Quit.
  • Help: Moshe Help (the README) · Getting Started (gettingStarted: the Getting Started sheets added to the Inbox again) · the search field macOS adds.

Shell services the page uses if they are there

  • mosheShell.copy({text, html}): Copy as HTML / Rich Text, since a menu's call is no user gesture for the page's clipboard. Without it the page tries navigator.clipboard.
  • mosheShell.print(html, fileName): File › Print… with the export window's PDF page. Without it the page prints a hidden frame.
  • mosheShell.share(fileName, base64, mime): File › Share… for the export window's file.
  • mosheShell.sharePdf(html, fileName), optional: the same for a PDF. Without it Share… on PDF saves it.

window.mosheMenuState()

Called by the shell when a menu opens; plain data, cheap to make:

{
  commands: ['newSheet', …],   // every name mosheCommand knows: the rest are shown disabled
  focus: 'library' | 'list' | 'editor',
  library: true,               // the library pane is shown
  dashboard: false, dashboardView: 'overview', dashboardViews: [{ id, name }],
  secondEditor: false, translation: false, revision: false, interfaceHidden: false,
  voice: false, listening: false,                       // writing by voice: on, and listening now
  favorite: false, material: false, glued: false,       // the picked sheet(s)
  counter: true, paragraphNumbers: false, lineMarker: false, sheetDates: false,
  highlight: 'off', fixedScrolling: 'off', appearance: 'system',
  theme: 'Moshe', themes: [{ id, name }],
  sheetSort: 'manual', sheetSorts: [{ id, name }],
  selection: 'Notes', notes: [{ path, name, depth }], projects: [{ path, name }],
}