mulmoterminal 1.7.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/common/terminalSubmit.ts +70 -0
- package/dist/assets/{abnfDiagram-VRR7QNED-RjiYivmv-CCLjG9E9.js → abnfDiagram-VRR7QNED-RjiYivmv-DU_K6qFi.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-4wf6mIEw.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-3nWA91tG-BcngES-G.js → architectureDiagram-ZJ3FMSHR-3nWA91tG-DVrZTqSk.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-BPuAJQRW-K8X4YdbW.js → blockDiagram-677ZJIJ3-BPuAJQRW-BLiRRQm5.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-C0LAqQso-DPvBKT_o.js → c4Diagram-LMCZKHZV-C0LAqQso-D5QwCU_o.js} +1 -1
- package/dist/assets/channel-7wUqSdoX-2AjOgRSk.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-BRrYpgtb-Sgw4YiwO.js → chunk-32BRIVSS-BRrYpgtb-i-fzlhhz.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-BJ-ss3Xr-DXTsqQmw.js → chunk-52WLFC77-BJ-ss3Xr-nyRqJju1.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-BZEucKEL-CzDWUuQD.js → chunk-C7G6YPKG-BZEucKEL-D9LEX7f2.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-DLS6FBN1-BZ8245YL.js → chunk-EX3LRPZG-DLS6FBN1-BytXeE9i.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-DHLSFw1H-rWT4wsYF.js → chunk-FWX5IMBZ-DHLSFw1H-m71SvFru.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-Bhlt8hXJ-DHHJ39yY.js → chunk-HOUHSVGY-Bhlt8hXJ-DvXTfr5J.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-DwgHBX_g-CVO4XUCO.js → chunk-ICXQ74PX-DwgHBX_g-DtZbnneJ.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-CMZRaeqt-CfjRj6ge.js → chunk-MOJQB5TN-CMZRaeqt-D-0XUMWR.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-8Qy4a8b5-Cs1ErBxS.js → chunk-OGEWGWER-8Qy4a8b5-CtzH4qtc.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-DcrWQRYh-DDlhQIXq.js → chunk-PUDLZKDR-DcrWQRYh-CPg1Gu6Y.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-ZXVGkG8Z-DtPCWcx0.js → chunk-Q4XR5HBZ-ZXVGkG8Z-CcjIHpgU.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DmGdheTX-FwuThvxD.js → chunk-V7JOEXUC-DmGdheTX-CWaw5IcP.js} +1 -1
- package/dist/assets/{chunk-VAUOI2AC-CS9QJ4yz-rBHFym4n.js → chunk-VAUOI2AC-CS9QJ4yz-DtSCvKnv.js} +1 -1
- package/dist/assets/{chunk-VR4S4FIN-C6a91eNY-6Y9hr75K.js → chunk-VR4S4FIN-C6a91eNY-Bh2VFmJ3.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-BlzOfotS-Cg8JP_k-.js → chunk-WYO6CB5R-BlzOfotS-BthT9wbR.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-BYwxNFTK-BvTVX4I4.js → chunk-ZGVPDNZ5-BYwxNFTK-C-bwbGzR.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-DMDbKuRe.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-DMDbKuRe.js +1 -0
- package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-D1spgDYy.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-DHA9iPo--Coj5CuZV.js → cynefinDiagram-TSTJHNR4-DHA9iPo--ZyHDWT82.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB--oJKqXBZ-iQ8NhR-E.js → dagre-VKFMJZFB--oJKqXBZ-DKioff7t.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-CcJCB9bG-CZBlndUC.js → diagram-FQU43EPY-CcJCB9bG-BCfSF8Es.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-C_o-WGG1-CezpEy0i.js → diagram-G47NLZAW-C_o-WGG1-B1_gM-30.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-CXJCYvY--DmwB4xPU.js → diagram-NH7WQ7WH-CXJCYvY--BiJXpAVX.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-BMzeJ87A-KO3buG9g.js → diagram-OA4YK3LP-BMzeJ87A-BfNHK-ax.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-D_93NKqo-epWpVF6L.js → diagram-WEI45ONY-D_93NKqo-Brhn23jG.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-CVai1Ii9-CluKhaw-.js → ebnfDiagram-CCIWWBDH-CVai1Ii9-Dg_4zQv-.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-CiABnA0s-DuCAxim-.js → erDiagram-Q63AITRT-CiABnA0s-BIolFGl5.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a-CHNl0Ktk.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-B56BCBpK.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-DQZvdFo1-9pklplap.js → ganttDiagram-NO4QXBWP-DQZvdFo1-DkRXerl4.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-fabW-ens.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-C2ovBouh-CWEyMeWe.js → gitGraphDiagram-IHSO6WYX-C2ovBouh-DDvPOoLH.js} +1 -1
- package/dist/assets/index-BjVjO5_a.js +617 -0
- package/dist/assets/index-Bx7iPSaX.css +1 -0
- package/dist/assets/info-DKCQHKI2-Dplx5kMp-9qLOO9db.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-7UnoB5AP-MGxGOrtx.js → infoDiagram-FWYZ7A6U-7UnoB5AP-KZr_ldtc.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-ByUDM_N2-Bx_aHmxj.js → ishikawaDiagram-FXEZZL3T-ByUDM_N2-BPRySiwW.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-c5xIah9o-DoZ1k7c2.js → journeyDiagram-5HDEW3XC-c5xIah9o-BL6hTC-O.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-Cnt6loYD-D_jZUsQX.js → kanban-definition-HUTT4EX6-Cnt6loYD-BhnENx2k.js} +1 -1
- package/dist/assets/{lib-BuOUsCeD.js → lib-DaMiMJQ3.js} +1 -1
- package/dist/assets/{line-D7ziSjKi-BHXiLBOo.js → line-D7ziSjKi-DE4ocbIf.js} +1 -1
- package/dist/assets/{marp-gvb94kjy.js → marp-DV5eTK1B.js} +1 -1
- package/dist/assets/{mermaid-parser.core-DxEa8E3F-kLn0LOBf.js → mermaid-parser.core-DxEa8E3F-kNPP09h0.js} +2 -2
- package/dist/assets/{mermaid.core-V0OYwIz3-C-sR2rUO.js → mermaid.core-V0OYwIz3-BaCKmHzi.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-CexN3O6L-C2mzLUhV.js → mindmap-definition-LN4V7U3C-CexN3O6L-B-ReFUSl.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-CQI3flND-BnZnDtgV.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-BiM4G0cW-ilTx6ElC.js → pegDiagram-2B236MQR-BiM4G0cW-CnV811h5.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-DPdL-2LK.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-B_fBBS-2-WTDOFCHf.js → pieDiagram-ENE6RG2P-B_fBBS-2-DXiwKFGc.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-BigGVxCR-2XE8FR0c.js → quadrantDiagram-ABIIQ3AL-BigGVxCR-YALzgMHe.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-us6x-Z9R-1CtI6gYg.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-DSFm44dq.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-dWlrjNfQ.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-PTXIDoql.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-C4QylQNV.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6--lNIlG64-BUzUIavz.js → railroadDiagram-RFXS5EU6--lNIlG64-DUHKKTb7.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-D-B0Y5Wu-rbwe3PPS.js → requirementDiagram-TGXJPOKE-D-B0Y5Wu-DTsjzvCL.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-DlutaXDv-DygoObNU.js → sankeyDiagram-HTMAVEWB-DlutaXDv-TGgoWZD-.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-BOLgtggH-B0ncAj6o.js → sequenceDiagram-DBY2YBRQ-BOLgtggH-BytE_plg.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-jf_dXUEU-RKHr1CUK.js → stateDiagram-2N3HPSRC-jf_dXUEU-BfwezKvR.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-C1D8uBqi.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-CYjtALQH-xIOTAMQY.js → swimlanes-5IMT3BWC-CYjtALQH-BbcKSkd3.js} +1 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-BAAqICVR.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-DYJ4oUm8-CGt2mnFM.js → timeline-definition-FHXFAJF6-DYJ4oUm8-DZWue9K0.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-QTdMpBG6.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-Dyi9V8wK.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-CdKAHoek-DbQdfDPm.js → vennDiagram-L72KCM5P-CdKAHoek-CJ7cJ6KS.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-Da9tZ4Bs.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-BF6c4_CW-CE26h6BQ.js → wardleyDiagram-EHGQE667-BF6c4_CW-8dSrLEaZ.js} +1 -1
- package/dist/assets/{xychartDiagram-FW5EYKEG-CGiKngj7-DqMbN7gq.js → xychartDiagram-FW5EYKEG-CGiKngj7-DtUjdbBs.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +3 -3
- package/server/backends/files.ts +28 -14
- package/server/backends/remoteHost/getFeed.spec.ts +1 -0
- package/server/backends/remoteHost/handlers.spec.ts +37 -0
- package/server/backends/remoteHost/handlers.ts +18 -6
- package/server/backends/remoteHost/index.ts +1 -0
- package/server/backends/remoteHost/terminalInput.spec.ts +41 -0
- package/server/backends/remoteHost/terminalInput.ts +7 -1
- package/server/backends/remoteHost/terminalScreen.ts +44 -5
- package/server/backends/thumbnailStore.ts +1 -1
- package/server/backends/worklog.ts +2 -2
- package/server/config/app-config.ts +15 -0
- package/server/config/config-routes.ts +7 -0
- package/server/config/header-config.ts +11 -4
- package/server/files/files-browse.ts +1 -49
- package/server/files/pathContainment.ts +79 -0
- package/server/git/git-status.ts +3 -2
- package/server/index.ts +37 -5
- package/server/routes/app-routes.ts +5 -3
- package/dist/assets/architecture-TIHT7OUA-0NsD2xW1-Dc62_ljl.js +0 -1
- package/dist/assets/channel-7wUqSdoX-NCtPilPL.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-BYlRi6YQ-D1ky24Ds.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-BCHaYHxj-D1ky24Ds.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-CGYr2F6h-ORm6k8ze.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-CWmqhm3a--puF0Mfa.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-DKSB5AiY-Cr4R3boa.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-BR9qPwdN-Catx3rAM.js +0 -1
- package/dist/assets/index-CxXEEdyv.css +0 -1
- package/dist/assets/index-Dh4imzyE.js +0 -617
- package/dist/assets/info-DKCQHKI2-Dplx5kMp-C6Q2N8lR.js +0 -1
- package/dist/assets/packet-7NZHBO7P-CQI3flND-C5aIMsHg.js +0 -1
- package/dist/assets/pie-RZYD4A2V-CnmKE2Wa-DLGaOWQD.js +0 -1
- package/dist/assets/radar-I7S5WNFK-us6x-Z9R-XEiHFJv1.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-BKdz6pdN-CHJoHZk-.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-m_CSSIfd-93zoonP0.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-Nu3nAG7C-Op85BMOm.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6--Y3mD4R_-CX7O2hYb.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-CuzgCL2v-CvRqyCfT.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-3bmSBtKs-JHgNIgBl.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-D27HWG6Q-8FYcTJ8G.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-CmGIU3H5-DLUudxda.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-CbHWsb2k-BnWGyxAv.js +0 -1
package/README.md
CHANGED
|
@@ -410,13 +410,16 @@ The Settings modal (⚙) persists per-user UI choices to `~/.mulmoterminal/confi
|
|
|
410
410
|
| `pushEnabled` | `true` to send a **Web Push** to your registered devices when a background task finishes. Off by default; only sends while the **RemoteHost** channel is connected (see below). |
|
|
411
411
|
| `worklogEnabled` | `true` to run the built-in **dev worklog** batch (see below). Off by default (each run spawns an LLM session, so it costs tokens). |
|
|
412
412
|
| `worklogIntervalHours` | Worklog cadence in hours (default `6`, clamped to `1`–`168`). |
|
|
413
|
+
| `terminalSubmit` | Which bytes Claude reads as **submit** vs **newline**: `"cr"` (default — Enter submits, Shift+Enter makes a newline) or `"esc-cr"` (for a Claude Code rebound the other way). Applies to the keyboard **and** the phone remote-view submit, for **Claude sessions only** (shell/codex keep plain Enter). See the [Configuration guide](https://receptron.github.io/mulmoterminal/guide/en/config.html#terminal-submit). |
|
|
413
414
|
|
|
414
415
|
#### Header buttons
|
|
415
416
|
|
|
416
417
|
Each terminal header shows configurable **action buttons**. Omitting `buttons` (globally or per-dir)
|
|
417
|
-
keeps the built-in
|
|
418
|
-
|
|
419
|
-
|
|
418
|
+
keeps the built-in **starter set**: a file-path picker (📎), an OS file-manager reveal (📂), an in-app
|
|
419
|
+
file explorer (📁), a new terminal here (🖥), this branch's PR (🔗, git repos, only when a PR exists),
|
|
420
|
+
and open-on-GitHub (🌐, git repos). Setting `buttons` (at either level) **replaces the whole default
|
|
421
|
+
set** with your list (it is not merged on top), so listing your own — even a **shorter** one — is how
|
|
422
|
+
you drop, reorder, or swap them.
|
|
420
423
|
A button has an `id`, `label`, and a `run` of `"shell"` (run a command), `"input"` (send text to the
|
|
421
424
|
agent), or `"open"`. An `open` button targets one of `url` / `reveal` (OS file manager) / `files`
|
|
422
425
|
(in-app explorer) / `view` (a built-in overlay) / `terminal` (a dir → a new cell running `$SHELL`,
|
|
@@ -793,7 +796,9 @@ Favorited collections get their own toolbar buttons.
|
|
|
793
796
|
- **Themes** — four terminal palettes (midnight / nord / daylight / solarized), your pick
|
|
794
797
|
remembered; a project's `.mulmoterminal.json` can override per directory.
|
|
795
798
|
- **Editing niceties** — **Shift+Enter** inserts a newline in the prompt, and on macOS
|
|
796
|
-
**Option** is treated as Meta so Claude's Alt-key bindings work.
|
|
799
|
+
**Option** is treated as Meta so Claude's Alt-key bindings work. If your Claude Code is
|
|
800
|
+
rebound so Enter and Shift+Enter behave backwards, flip them with
|
|
801
|
+
[`terminalSubmit`](https://receptron.github.io/mulmoterminal/guide/en/config.html#terminal-submit).
|
|
797
802
|
|
|
798
803
|
---
|
|
799
804
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// How the host's Claude Code / TUI maps received bytes to "submit this prompt" vs
|
|
2
|
+
// "insert a newline". The TUI decides from the bytes, and that mapping is environment-
|
|
3
|
+
// dependent (Claude Code lets a user rebind it), so the SAME fact has to reach two
|
|
4
|
+
// unrelated places: the browser's xterm key handler and the phone remote-view's submit.
|
|
5
|
+
// One value, consumed by both, keeps them from drifting apart.
|
|
6
|
+
//
|
|
7
|
+
// "cr" — the standard binding: CR (\r) submits, ESC+CR (\x1b\r, = Alt/Meta+Enter)
|
|
8
|
+
// makes a newline. This is MulmoTerminal's default and unchanged behaviour.
|
|
9
|
+
// "esc-cr" — the reversed binding some users configure: ESC+CR submits, CR makes a
|
|
10
|
+
// newline.
|
|
11
|
+
export const TERMINAL_SUBMIT_MODES = ["cr", "esc-cr"] as const;
|
|
12
|
+
export type TerminalSubmitMode = (typeof TERMINAL_SUBMIT_MODES)[number];
|
|
13
|
+
export const DEFAULT_TERMINAL_SUBMIT_MODE: TerminalSubmitMode = "cr";
|
|
14
|
+
|
|
15
|
+
export const isTerminalSubmitMode = (value: unknown): value is TerminalSubmitMode =>
|
|
16
|
+
typeof value === "string" && (TERMINAL_SUBMIT_MODES as readonly string[]).includes(value);
|
|
17
|
+
|
|
18
|
+
// CR on its own. ESC+CR is what a terminal emits for Alt/Meta+Enter.
|
|
19
|
+
const CR = "\r";
|
|
20
|
+
const ESC_CR = "\x1b\r";
|
|
21
|
+
|
|
22
|
+
// The byte(s) the host reads as "submit this prompt" in the given mode.
|
|
23
|
+
export const submitSequence = (mode: TerminalSubmitMode): string => (mode === "esc-cr" ? ESC_CR : CR);
|
|
24
|
+
// The byte(s) it reads as "insert a newline" — the other one.
|
|
25
|
+
export const newlineSequence = (mode: TerminalSubmitMode): string => (mode === "esc-cr" ? CR : ESC_CR);
|
|
26
|
+
|
|
27
|
+
// The submit byte(s) for a specific session. `terminalSubmit` describes the user's CLAUDE
|
|
28
|
+
// binding, so it applies ONLY to Claude sessions; every other agent (shell, codex, a
|
|
29
|
+
// one-shot command) keeps plain CR — a reversed setting must never rewrite a shell's Enter,
|
|
30
|
+
// where ESC+CR is Alt+Enter, not submit.
|
|
31
|
+
export const submitSequenceForAgent = (agent: string | undefined, mode: TerminalSubmitMode): string => (agent === "claude" ? submitSequence(mode) : CR);
|
|
32
|
+
|
|
33
|
+
// The structural shape of a keydown the override needs. A real DOM KeyboardEvent satisfies
|
|
34
|
+
// it, and so does a plain test object — no DOM dependency, so this stays testable and shared.
|
|
35
|
+
export interface EnterKeyEvent {
|
|
36
|
+
type: string;
|
|
37
|
+
key: string;
|
|
38
|
+
shiftKey: boolean;
|
|
39
|
+
altKey: boolean;
|
|
40
|
+
ctrlKey: boolean;
|
|
41
|
+
metaKey: boolean;
|
|
42
|
+
isComposing?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The bytes to emit for an Enter-family keydown (the caller then suppresses xterm's own
|
|
46
|
+
// \r and sends these instead), or null to let xterm handle the key natively.
|
|
47
|
+
//
|
|
48
|
+
// The SEMANTICS are the same in both modes — a bare Enter SUBMITS, Shift/Alt(Option)+Enter
|
|
49
|
+
// make a NEWLINE — only which bytes carry each meaning differs, because that is the
|
|
50
|
+
// environment fact `mode` encodes.
|
|
51
|
+
//
|
|
52
|
+
// In "cr" mode only Shift+Enter is overridden, exactly as before the setting existed: a
|
|
53
|
+
// bare Enter falls through to xterm's native \r (submit) and Option+Enter to
|
|
54
|
+
// macOptionIsMeta's ESC+CR (newline). Leaving the bare-Enter path native keeps IME
|
|
55
|
+
// candidate-confirm and the hottest key untouched in the default configuration.
|
|
56
|
+
export const enterKeyOverride = (mode: TerminalSubmitMode, e: EnterKeyEvent): string | null => {
|
|
57
|
+
if (e.type !== "keydown" || e.key !== "Enter") return null;
|
|
58
|
+
// IME composition (Japanese and other CJK input): this Enter confirms a candidate — it
|
|
59
|
+
// is never the user's submit/newline, so never intercept it.
|
|
60
|
+
if (e.isComposing) return null;
|
|
61
|
+
const bare = !e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey;
|
|
62
|
+
const shiftOnly = e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey;
|
|
63
|
+
const altHeld = e.altKey && !e.ctrlKey && !e.metaKey; // Option/Alt (with or without Shift)
|
|
64
|
+
if (mode === "cr") return shiftOnly ? newlineSequence(mode) : null;
|
|
65
|
+
// "esc-cr": a bare Enter must emit the ESC+CR that submits here; Shift/Alt+Enter must
|
|
66
|
+
// emit the CR that makes a newline (the Alt case also overrides macOptionIsMeta's ESC+CR).
|
|
67
|
+
if (bare) return submitSequence(mode);
|
|
68
|
+
if (shiftOnly || altHeld) return newlineSequence(mode);
|
|
69
|
+
return null;
|
|
70
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DxEa8E3F-
|
|
1
|
+
import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DxEa8E3F-kNPP09h0.js";import"./chunk-WYO6CB5R-BlzOfotS-BthT9wbR.js";import"./chunk-VAUOI2AC-CS9QJ4yz-DtSCvKnv.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CMZRaeqt-D-0XUMWR.js";import{t as s}from"./chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js";var c=r().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=e(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=e(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{s(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let r=c.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new n(r);let i=r.value;t.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:o,styles:i};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e}from"./mermaid-parser.core-DxEa8E3F-kNPP09h0.js";export{e as createArchitectureServices};
|