fpasoterm 1.6.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.
Potentially problematic release.
This version of fpasoterm might be problematic. Click here for more details.
- package/CHANGELOG.md +230 -0
- package/CONTRIBUTING.md +67 -0
- package/INSTALL.ja.md +204 -0
- package/INSTALL.md +229 -0
- package/LICENSE +21 -0
- package/README.ja.md +389 -0
- package/README.md +607 -0
- package/bin/fpasoterm +2882 -0
- package/completions/_fpasoterm +81 -0
- package/completions/fpasoterm.bash +55 -0
- package/completions/fpasoterm.fish +64 -0
- package/completions/fpasoterm.ps1 +47 -0
- package/docs/capability-diagnostics.en.md +77 -0
- package/docs/capability-diagnostics.ja.md +63 -0
- package/docs/completion.en.md +141 -0
- package/docs/completion.ja.md +113 -0
- package/docs/config.en.md +554 -0
- package/docs/config.ja.md +544 -0
- package/docs/debugging.en.md +72 -0
- package/docs/debugging.ja.md +66 -0
- package/docs/diagnostics.en.md +69 -0
- package/docs/diagnostics.ja.md +64 -0
- package/docs/font-diagnostics.en.md +116 -0
- package/docs/font-diagnostics.ja.md +105 -0
- package/docs/fpasoterm-plugin.d.ts +51 -0
- package/docs/known-issues.en.md +23 -0
- package/docs/known-issues.ja.md +23 -0
- package/docs/plugins.en.md +266 -0
- package/docs/plugins.ja.md +176 -0
- package/docs/pr-review.en.md +177 -0
- package/docs/pr-review.ja.md +170 -0
- package/docs/release-checklist.en.md +72 -0
- package/docs/release-checklist.ja.md +71 -0
- package/docs/security.en.md +36 -0
- package/docs/security.ja.md +31 -0
- package/docs/spec.en.md +106 -0
- package/docs/spec.ja.md +99 -0
- package/docs/sshfs.en.md +28 -0
- package/docs/sshfs.ja.md +28 -0
- package/docs/sync.en.md +280 -0
- package/docs/sync.ja.md +280 -0
- package/examples/apply-default-appearance.bat +8 -0
- package/examples/apply-default-appearance.ps1 +7 -0
- package/examples/apply-default-appearance.sh +7 -0
- package/examples/apply-runtime-appearance.bat +8 -0
- package/examples/apply-runtime-appearance.ps1 +7 -0
- package/examples/apply-runtime-appearance.sh +7 -0
- package/examples/config/default-appearance.toml +36 -0
- package/examples/config/minimal.toml +30 -0
- package/examples/config/profiles.toml +20 -0
- package/examples/config/runtime-appearance.toml +24 -0
- package/examples/config/sync-folder.toml +17 -0
- package/examples/config/tui-compatibility.toml +7 -0
- package/examples/config/with-plugins.toml +33 -0
- package/examples/plugins/hello.ts +17 -0
- package/examples/plugins/status-banner.ts +14 -0
- package/examples/plugins/theme.ts +32 -0
- package/examples/plugins/welcome-banner.ts +16 -0
- package/extra/linux/icons/hicolor/128x128/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/16x16/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/192x192/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/256x256/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/32x32/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/48x48/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/512x512/apps/fpasoterm.png +0 -0
- package/extra/linux/icons/hicolor/64x64/apps/fpasoterm.png +0 -0
- package/extra/linux/io.github.oyoguhito.fpasoterm.desktop +10 -0
- package/extra/logo/fpasoterm.png +0 -0
- package/extra/macos/fpasoterm.icns +0 -0
- package/extra/windows/fpasoterm.cmd +40 -0
- package/extra/windows/fpasoterm.ico +0 -0
- package/package.json +81 -0
- package/scripts/build-artifacts.js +183 -0
- package/scripts/generate-icon.js +251 -0
- package/scripts/init-jj-empty-main +41 -0
- package/scripts/install-linux-desktop.js +238 -0
- package/scripts/run +16 -0
- package/scripts/security/scan-secrets.js +89 -0
- package/scripts/tests/smoke.js +2476 -0
- package/scripts/uninstall-desktop.js +20 -0
- package/scripts/uninstall-linux-desktop.js +96 -0
- package/scripts/uninstall-windows-path.js +94 -0
- package/src/config.js +855 -0
- package/src/renderer/confirm.html +71 -0
- package/src/renderer/index.html +223 -0
- package/src/renderer/renderer.js +4166 -0
- package/src/renderer/styles.css +969 -0
- package/src/renderer/vendor/addon-fit/addon-fit.js +2 -0
- package/src/renderer/vendor/addon-image/LICENSE +19 -0
- package/src/renderer/vendor/addon-image/addon-image.js +3 -0
- package/src/renderer/vendor/addon-web-links/LICENSE +19 -0
- package/src/renderer/vendor/addon-web-links/addon-web-links.js +2 -0
- package/src/renderer/vendor/xterm/xterm.css +292 -0
- package/src/renderer/vendor/xterm/xterm.js +2 -0
- package/src-tauri/Cargo.lock +5253 -0
- package/src-tauri/Cargo.toml +29 -0
- package/src-tauri/build.rs +140 -0
- package/src-tauri/capabilities/default.json +13 -0
- package/src-tauri/default-config.toml +128 -0
- package/src-tauri/src/main.rs +9347 -0
- package/src-tauri/tauri.conf.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
# fpasoterm
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
Cross-platform terminal app built with Tauri, xterm.js, and a Rust PTY bridge.
|
|
6
|
+
|
|
7
|
+
fpasoterm is intended to be used with terminal multiplexers such as screen / tmux / byobu / zellij / herdr. It focuses on a single terminal surface and does not manage split panes. Multiple application windows can be tiled from the titlebar.
|
|
8
|
+
|
|
9
|
+
This is a deliberate boundary: fpasoterm avoids reimplementing capabilities that belong to the user's shell, multiplexer, or TUI editor. This includes pane and session management, shell commands, job control, multiplexer configuration, and editor features supplied by Vim, Emacs, Fresh, Helix, and similar tools. Use those tools for their native workflows; fpasoterm provides the terminal surface, OS integration, and local customization hooks. New convenience behavior should normally be delivered as a plugin instead of expanding the core application. Compatibility with those multiplexers and TUI editors is a maintenance priority.
|
|
10
|
+
|
|
11
|
+
Kitty Graphics Protocol, SIXEL, and iTerm inline images are currently unsupported because image streams can freeze the Tauri/WebKitGTK renderer. `Ctrl+Shift+B` opens Broadcast Input, which selects local fpasoterm windows before sending one command. The same operation is available as `fpasoterm --broadcast "command"`; a trusted sync folder can optionally deliver the short-lived command to every already-running instance on another machine. See [Configuration](docs/config.en.md) and [Sync Folder](docs/sync.en.md).
|
|
12
|
+
|
|
13
|
+
Japanese documentation: [README.ja.md](README.ja.md). Installation instructions are available in [English](INSTALL.md) and [Japanese](INSTALL.ja.md).
|
|
14
|
+
|
|
15
|
+
- Tauri provides the application shell through the platform webview.
|
|
16
|
+
- xterm.js renders the terminal in the renderer process.
|
|
17
|
+
- Rust and portable-pty own the real shell/PTY in the backend process.
|
|
18
|
+
|
|
19
|
+
Japanese IME composition and keyboard layout switching are handled by the OS webview and xterm.js. fpasoterm does not intercept `かな` / `英数` key presses.
|
|
20
|
+
|
|
21
|
+
Set `FPASOTERM_DEBUG_KEYS=1` to print runtime key names to stderr and show the latest key/composition event in the window while testing Japanese keyboard keys.
|
|
22
|
+
|
|
23
|
+
Debug logs are also written to `~/.config/fpasoterm/User/logs/fpasoterm-debug.log`. The debug panel has a Copy button because xterm.js can capture normal terminal copy shortcuts.
|
|
24
|
+
|
|
25
|
+
For reproducible IME, rendering, clipboard, and window diagnostics, see the
|
|
26
|
+
[Debugging Guide](docs/debugging.en.md).
|
|
27
|
+
|
|
28
|
+
Use `Font / Glyph Test` in the window menu to inspect the active terminal font
|
|
29
|
+
settings and representative CJK, half-width kana, box drawing, symbol, and
|
|
30
|
+
Nerd Font glyphs. See [Font and Glyph Diagnostics](docs/font-diagnostics.en.md).
|
|
31
|
+
Use `Diagnostics > Capability Test` to inspect the terminal environment and
|
|
32
|
+
verify truecolor, OSC 52, OSC 8, OSC 9/99, OSC 7, OSC 133, bracketed-paste, and bell behavior. See
|
|
33
|
+
[Terminal Capability Diagnostics](docs/capability-diagnostics.en.md). The same
|
|
34
|
+
panel can persist an explicit UTF-8, Shift_JIS, or EUC-JP output decoder for a
|
|
35
|
+
new terminal session.
|
|
36
|
+
|
|
37
|
+
When the shell reports its local directory with OSC 7, use `Ctrl+Shift+o` or
|
|
38
|
+
**Window > New CWD** to open another fpasoterm window in that directory.
|
|
39
|
+
|
|
40
|
+
Terminal-output URLs and OSC 8 hyperlinks open an explicit confirmation dialog.
|
|
41
|
+
They can always be copied; opening a URL externally also requires
|
|
42
|
+
`[security] osc8Open = true`. Absolute paths remain copy-only links.
|
|
43
|
+
|
|
44
|
+
On Linux, Tauri uses WebKitGTK. If ChromeOS/Baguette shows black, white, or flickering surfaces while testing transparent windows, disable the DMA-BUF renderer for that launch:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
fpasoterm --disable-dmabuf
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
Detailed installation instructions are in [INSTALL.md](INSTALL.md).
|
|
53
|
+
|
|
54
|
+
For local ChromeOS Linux development:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
sudo apt install build-essential curl libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Node.js and Rust are managed by mise in this workspace. You can also use system installations.
|
|
61
|
+
|
|
62
|
+
## Run
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
npm install
|
|
66
|
+
./scripts/run
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For quick source-checking without rebuilding release bundles:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
./bin/fpasoterm --dev
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Use this after editing renderer or Tauri source. It ignores any stale `src-tauri/target/release/fpasoterm` binary.
|
|
76
|
+
Add `--foreground --console-diagnostics` only when you need logs in the current console.
|
|
77
|
+
|
|
78
|
+
With mise:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
mise exec node -- npm install
|
|
82
|
+
mise exec node -- npm start
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
To install a local command and launcher entry for this checkout:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
npm run install:desktop
|
|
89
|
+
fpasoterm
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The command is installed to `~/.local/bin/fpasoterm` by default. Set `XDG_BIN_HOME` to choose a different command directory.
|
|
93
|
+
|
|
94
|
+
To update the local command, launcher entry, and icons after pulling a newer checkout:
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
npm run update:desktop
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
To update an npm-installed fpasoterm package from the terminal:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
fpasoterm --self-update
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For a source checkout, update the checkout with your normal git or jj workflow,
|
|
107
|
+
then refresh desktop integration:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
fpasoterm --update-desktop
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
To cleanly remove the local command, launcher entry, installed launcher icons, user config, runtime cache, and Tauri/WebKit app data:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
npm run uninstall:desktop
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
On Windows, the same command removes fpasoterm-specific directories from the
|
|
120
|
+
current user's `Path` if they were added during local testing. It does not remove
|
|
121
|
+
shared npm directories from `Path`.
|
|
122
|
+
|
|
123
|
+
## Command-line binary
|
|
124
|
+
|
|
125
|
+
Install from the npm registry:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
npm install -g fpasoterm
|
|
129
|
+
fpasoterm
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The npm package name and command are both `fpasoterm`.
|
|
133
|
+
Check the installed version without opening a window:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
fpasoterm --version
|
|
137
|
+
fpasoterm -v
|
|
138
|
+
fpasoterm --update-check
|
|
139
|
+
fpasoterm --doctor
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
`--update-check` explicitly queries npm for the `latest` release and prints
|
|
143
|
+
whether an update is available. It is not run automatically at startup, from
|
|
144
|
+
`--help`, or by `--version`.
|
|
145
|
+
|
|
146
|
+
`--doctor` is a read-only maintenance report. From the Node launcher it checks
|
|
147
|
+
the selected config, npm latest version, and `npm audit --omit=dev`; it only
|
|
148
|
+
suggests `--self-update` and never updates automatically. A standalone bundled
|
|
149
|
+
binary reports config and update health, while npm audit is unavailable because
|
|
150
|
+
it has no npm package context.
|
|
151
|
+
|
|
152
|
+
In the GUI, open the hamburger menu, choose **Help**, then select **Check for
|
|
153
|
+
Updates**. The same panel shows the installed build, npm latest version, and
|
|
154
|
+
update status. This is also an explicit request; opening Help does not contact
|
|
155
|
+
the network.
|
|
156
|
+
|
|
157
|
+
On Windows, run the same check against the installed executable after replacing an older installer build. If the old UI is still visible but `fpasoterm --version` prints the older version, the previous executable is still the one being launched from `Path` or the Start menu.
|
|
158
|
+
|
|
159
|
+
During development, link the package to expose a `fpasoterm` command:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
npm link
|
|
163
|
+
fpasoterm
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Alternatively:
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
npm install -g .
|
|
170
|
+
fpasoterm
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
When the shell exits, for example by running `exit`, fpasoterm closes the application window.
|
|
174
|
+
|
|
175
|
+
## Command-line Options
|
|
176
|
+
|
|
177
|
+
Normal launches using a cached runtime detach from the console and return the
|
|
178
|
+
shell prompt immediately:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
fpasoterm
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
When a first source or npm-package launch needs a local Cargo build, the CLI
|
|
185
|
+
stays attached and prints phase 1/3 preparation, phase 2/3 compiler progress,
|
|
186
|
+
and phase 3/3 native window startup. Cargo errors are shown in that terminal;
|
|
187
|
+
the prompt returns after the window process is started. Timing and compiler
|
|
188
|
+
output are also appended to `~/.cache/fpasoterm/launcher.log` on Linux/macOS,
|
|
189
|
+
or `%LOCALAPPDATA%\\fpasoterm\\launcher.log` on Windows. Use
|
|
190
|
+
`--foreground --console-diagnostics` only when the caller must also wait for
|
|
191
|
+
the desktop process to exit.
|
|
192
|
+
|
|
193
|
+
Show available options:
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
fpasoterm --help
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Shell completion is available for Bash, Zsh, Fish, and PowerShell. For example,
|
|
200
|
+
enable Bash completion in the current shell with:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
source <(fpasoterm --completion bash)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
See [Command Completion](docs/completion.en.md) for persistent installation and
|
|
207
|
+
Windows PowerShell instructions. Reinstall persistent completion after an app
|
|
208
|
+
update only when you want newly added CLI options to appear in Tab completion.
|
|
209
|
+
|
|
210
|
+
List running fpasoterm windows without opening another window:
|
|
211
|
+
|
|
212
|
+
```sh
|
|
213
|
+
fpasoterm --list
|
|
214
|
+
fpasoterm -l
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Each line contains the process/session ID, displayed title, and startup time.
|
|
218
|
+
|
|
219
|
+
Close running windows by PID, exact displayed title, or the reserved `all` target:
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
fpasoterm --close 12345
|
|
223
|
+
fpasoterm -q review-shell
|
|
224
|
+
fpasoterm --close all
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Useful one-shot overrides:
|
|
228
|
+
|
|
229
|
+
```sh
|
|
230
|
+
fpasoterm --config ~/.config/fpasoterm/User/work.toml
|
|
231
|
+
fpasoterm --size 1200x760
|
|
232
|
+
fpasoterm --width 1200 --height 760
|
|
233
|
+
fpasoterm --shell pwsh.exe
|
|
234
|
+
fpasoterm --cwd .
|
|
235
|
+
fpasoterm --cwd ~/work/project --title project
|
|
236
|
+
fpasoterm --command "tmux attach -t work"
|
|
237
|
+
fpasoterm --title work --titlebar-color '#2e7d32'
|
|
238
|
+
fpasoterm --reset-config
|
|
239
|
+
fpasoterm --reset-window-state
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
On Windows, fpasoterm uses PowerShell 7 (`pwsh.exe`) by default when it is
|
|
243
|
+
available. If it is not on `PATH`, fpasoterm also checks common install paths
|
|
244
|
+
such as `C:\Program Files\PowerShell\7\pwsh.exe`, then falls back to the OS
|
|
245
|
+
command shell. A full path can always be used with `--shell`.
|
|
246
|
+
|
|
247
|
+
Windows child shells also receive the fpasoterm executable directory at the
|
|
248
|
+
front of `Path`, so commands such as `fpasoterm --help` work inside a
|
|
249
|
+
fpasoterm terminal after installation.
|
|
250
|
+
|
|
251
|
+
macOS child shells receive the application executable directory at the front
|
|
252
|
+
of `PATH` as well. Running `fpasoterm` there opens a detached window and returns
|
|
253
|
+
the current prompt without waiting for that window to close.
|
|
254
|
+
|
|
255
|
+
By default, fpasoterm keeps its configured title even if the shell emits its own
|
|
256
|
+
title sequence. Use `OSC 777;title=...` for an intentional runtime rename.
|
|
257
|
+
|
|
258
|
+
Short options are available for common one-shot overrides:
|
|
259
|
+
|
|
260
|
+
```sh
|
|
261
|
+
fpasoterm -t work -b '#2e7d32' -z 1200x760 -s pwsh.exe
|
|
262
|
+
fpasoterm -e "tmux attach -t work"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
The running window can also be renamed from inside the terminal with a POSIX shell:
|
|
266
|
+
|
|
267
|
+
```sh
|
|
268
|
+
printf '\033]0;work\a\r\n'
|
|
269
|
+
printf '\033]777;titlebarColor=#2e7d32\a\r\n'
|
|
270
|
+
printf '\033]777;opacity=0.65\a\r\n'
|
|
271
|
+
printf '\033]777;title=work;titlebarColor=#2e7d32\a\r\n'
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Windows PowerShell and cmd.exe do not run those `printf` examples as-is. Use the
|
|
275
|
+
PowerShell form or the helper scripts below:
|
|
276
|
+
|
|
277
|
+
```powershell
|
|
278
|
+
[Console]::Write("$([char]27)]777;title=work;titlebarColor=#2e7d32$([char]7)`r`n")
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
The runtime config sample can be applied with:
|
|
282
|
+
|
|
283
|
+
```sh
|
|
284
|
+
./examples/apply-runtime-appearance.sh
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
On Windows PowerShell or cmd.exe:
|
|
288
|
+
|
|
289
|
+
```powershell
|
|
290
|
+
.\examples\apply-runtime-appearance.ps1
|
|
291
|
+
.\examples\apply-runtime-appearance.bat
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
This sample changes the title to `RUNTIME SAMPLE ACTIVE`, switches the titlebar
|
|
295
|
+
to pink, and changes the terminal background and text colors.
|
|
296
|
+
|
|
297
|
+
To return the running window to the default appearance:
|
|
298
|
+
|
|
299
|
+
```sh
|
|
300
|
+
./examples/apply-default-appearance.sh
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
On Windows PowerShell or cmd.exe:
|
|
304
|
+
|
|
305
|
+
```powershell
|
|
306
|
+
.\examples\apply-default-appearance.ps1
|
|
307
|
+
.\examples\apply-default-appearance.bat
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Or, if you need to specify the path manually:
|
|
311
|
+
|
|
312
|
+
```sh
|
|
313
|
+
config_path="$(pwd)/examples/config/runtime-appearance.toml"
|
|
314
|
+
printf '\033]777;config=%s\a\r\n' "$config_path"
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
On Windows PowerShell:
|
|
318
|
+
|
|
319
|
+
```powershell
|
|
320
|
+
$configPath = Resolve-Path .\examples\config\runtime-appearance.toml
|
|
321
|
+
[Console]::Write("$([char]27)]777;config=$configPath$([char]7)`r`n")
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Runtime config application keeps the current shell session running. It applies
|
|
325
|
+
live window and terminal appearance settings such as `window.title`,
|
|
326
|
+
`window.titlebarColor`, `window.width`, `window.height`, `terminal.fontSize`,
|
|
327
|
+
`terminal.lineHeight`, `terminal.fontFamily`, `terminal.backgroundOpacity`, and
|
|
328
|
+
`terminal.theme`.
|
|
329
|
+
Settings that require a new PTY, such as `terminal.shell`, take effect on the next launch.
|
|
330
|
+
|
|
331
|
+
Inspect the resolved settings and plugin load status without launching:
|
|
332
|
+
|
|
333
|
+
```sh
|
|
334
|
+
fpasoterm --show-config
|
|
335
|
+
fpasoterm --config ~/.config/fpasoterm/User/work.toml --show-config
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Validate a configuration or prepare a Markdown report for an Issue without
|
|
339
|
+
opening a window:
|
|
340
|
+
|
|
341
|
+
```sh
|
|
342
|
+
fpasoterm --config-check
|
|
343
|
+
fpasoterm --doctor
|
|
344
|
+
fpasoterm --diagnostics
|
|
345
|
+
fpasoterm --copy-diagnostics
|
|
346
|
+
fpasoterm --open-log-dir
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
See [Configuration and Diagnostics](docs/diagnostics.en.md) for the exact
|
|
350
|
+
output, exit status, and clipboard requirements.
|
|
351
|
+
|
|
352
|
+
Use a named appearance or shell profile for one launch with
|
|
353
|
+
`fpasoterm --profile <name>`. See [Profiles](docs/config.en.md#profiles).
|
|
354
|
+
|
|
355
|
+
When a packaged `fpasoterm.exe` is launched directly on Windows, `--show-config`
|
|
356
|
+
prints the resolved runtime config as JSON. The Node launcher prints TOML and
|
|
357
|
+
plugin load details when it is available.
|
|
358
|
+
|
|
359
|
+
Enable or disable plugins in `config.toml`:
|
|
360
|
+
|
|
361
|
+
```sh
|
|
362
|
+
fpasoterm --enable-plugin hello,theme
|
|
363
|
+
fpasoterm --disable-plugin hello,theme
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
Plugin enable/disable commands are handled by the Node launcher. For direct
|
|
367
|
+
packaged binary launches, edit `config.toml` manually or use the npm-installed
|
|
368
|
+
`fpasoterm` command.
|
|
369
|
+
|
|
370
|
+
For debugging, keep the app attached to the current console:
|
|
371
|
+
|
|
372
|
+
```sh
|
|
373
|
+
fpasoterm --foreground --console-diagnostics
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
In a source checkout, force a fresh local debug-binary build when you want to confirm current behavior. This uses bundled static frontend assets and does not require a localhost development server. Omit `--foreground` when you want the shell prompt back after launch:
|
|
377
|
+
|
|
378
|
+
```sh
|
|
379
|
+
./bin/fpasoterm --dev
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
For ChromeOS/Baguette WebKitGTK rendering diagnostics:
|
|
383
|
+
|
|
384
|
+
```sh
|
|
385
|
+
fpasoterm --disable-dmabuf
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Configuration and Plugins
|
|
389
|
+
|
|
390
|
+
fpasoterm reads user configuration from:
|
|
391
|
+
|
|
392
|
+
```text
|
|
393
|
+
~/.config/fpasoterm/User/config.toml
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
On launch, fpasoterm writes or refreshes the example file at:
|
|
397
|
+
|
|
398
|
+
```text
|
|
399
|
+
~/.config/fpasoterm/User/config.toml.example
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
The example file is safe to regenerate because fpasoterm does not overwrite `config.toml`.
|
|
403
|
+
|
|
404
|
+
Example:
|
|
405
|
+
|
|
406
|
+
```toml
|
|
407
|
+
[window]
|
|
408
|
+
rememberBounds = true
|
|
409
|
+
frame = false
|
|
410
|
+
[terminal]
|
|
411
|
+
fontSize = 15
|
|
412
|
+
lineHeight = 1
|
|
413
|
+
fontFamily = "Noto Sans Mono CJK JP, monospace"
|
|
414
|
+
|
|
415
|
+
[terminal.theme]
|
|
416
|
+
background = "rgba(16, 19, 23, 0.65)"
|
|
417
|
+
foreground = "#e8edf2"
|
|
418
|
+
|
|
419
|
+
[plugins]
|
|
420
|
+
enabled = ["plugins/example.ts"]
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Plugins must live under `~/.config/fpasoterm/User/plugins/`. JavaScript (`.js`) and TypeScript (`.ts`) plugins are supported. TypeScript plugins are transpiled into `~/.config/fpasoterm/User/cache/plugins/` at launch. They run in the renderer context, so enable only trusted local files that you have reviewed. See [Security](docs/security.en.md) for plugin and sync-folder trust boundaries.
|
|
424
|
+
|
|
425
|
+
Plugins can read `version`, run post-startup work through `onReady()`, and add
|
|
426
|
+
actions to the hamburger menu's `Plugins` submenu through `registerCommand()`.
|
|
427
|
+
Use `fpasoterm --plugin-list` to inspect discovered and enabled plugins in the
|
|
428
|
+
local `User/plugins` directory, or
|
|
429
|
+
`--plugin-enable` / `--plugin-disable` to update the enabled list. Use
|
|
430
|
+
`fpasoterm --plugin-info welcome-banner` for a plugin's source, enabled
|
|
431
|
+
state, description, and load status. Restart the affected window after an
|
|
432
|
+
enable or source change.
|
|
433
|
+
|
|
434
|
+
Remove a reviewed local plugin and its enabled entry with
|
|
435
|
+
`fpasoterm --plugin-uninstall <file>`. This is a local-only operation; it does
|
|
436
|
+
not contact the public port catalog.
|
|
437
|
+
|
|
438
|
+
To download one reviewed public plugin without cloning the ports repository or
|
|
439
|
+
installing Node.js, use `fpasoterm --plugin-install appearance/teal`. Add
|
|
440
|
+
`--enable` only after review to enable it. See [Plugins](docs/plugins.en.md)
|
|
441
|
+
for the fixed repository, validation, and overwrite rules.
|
|
442
|
+
|
|
443
|
+
For a reviewed local `fpasoterm-plugins` checkout, use
|
|
444
|
+
`fpasoterm --plugin-install appearance/teal --plugin-ports-dir ./fpasoterm-plugins --enable`.
|
|
445
|
+
For one trusted standalone source file, use
|
|
446
|
+
`fpasoterm --plugin-install-file ./my-plugin.ts --enable`. The ports project is
|
|
447
|
+
for catalog/INDEX search and plugin development or validation; fpasoterm performs
|
|
448
|
+
the end-user installation.
|
|
449
|
+
|
|
450
|
+
Use `fpasoterm --plugin-search [query]` to search official public port metadata
|
|
451
|
+
without installing a plugin or downloading plugin source. The output includes a
|
|
452
|
+
copyable `--plugin-install` command for every matching port. The command labels
|
|
453
|
+
its source as the remote official INDEX, while `--plugin-list` is local-only.
|
|
454
|
+
|
|
455
|
+
Minimal TypeScript plugin:
|
|
456
|
+
|
|
457
|
+
```ts
|
|
458
|
+
/// <reference path="/path/to/fpasoterm/docs/fpasoterm-plugin.d.ts" />
|
|
459
|
+
|
|
460
|
+
const api = window.fpasotermPluginApi;
|
|
461
|
+
api.log('example plugin loaded');
|
|
462
|
+
api.terminal.options.cursorBlink = true;
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
IME composition is displayed visually only. fpasoterm does not suppress, replay, replace, or directly commit text received from the WebView/xterm.js input path.
|
|
466
|
+
|
|
467
|
+
When `window.rememberBounds` is enabled, fpasoterm stores the last window size locally in `~/.config/fpasoterm/User/window-state.json`.
|
|
468
|
+
|
|
469
|
+
Window appearance and size are resolved in this order: default settings, explicit values in `config.toml`, saved `window-state.json` for size, then one-shot CLI overrides such as `--title`, `--titlebar-color`, and `--size`.
|
|
470
|
+
|
|
471
|
+
To return to the configured or default size manually, set `window.rememberBounds = false`, or run:
|
|
472
|
+
|
|
473
|
+
```sh
|
|
474
|
+
fpasoterm --reset-window-state
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
To restore every setting and window size to its platform default, run
|
|
478
|
+
`fpasoterm --reset-config` or `fpasoterm -R`. The existing file is renamed to
|
|
479
|
+
`config.toml.backup-<timestamp>` before a complete new `config.toml` is written.
|
|
480
|
+
The saved `window-state.json` is also removed so the default width of 1000 and
|
|
481
|
+
height of 680 take effect on the next launch.
|
|
482
|
+
|
|
483
|
+
The full default configuration is documented in [Configuration](docs/config.en.md). See [Plugins](docs/plugins.en.md) for the runtime/API contract and [`docs/fpasoterm-plugin.d.ts`](docs/fpasoterm-plugin.d.ts) for the supported API declaration. Sample configs are available in [examples/config](examples/config), and minimal local plugin examples are in [examples/plugins](examples/plugins). For reviewed, installable public plugins, use [fpasoterm-plugins](https://github.com/oyoguhito/fpasoterm-plugins), which owns the ports catalog, compatibility checks, updates, and contribution workflow.
|
|
484
|
+
|
|
485
|
+
For maintenance workflows across machines, fpasoterm can share diagnostics and
|
|
486
|
+
terminal output logs through a local sync folder such as Google Drive for
|
|
487
|
+
desktop. It does not use Google Drive API or OAuth. See [Sync Folder](docs/sync.en.md).
|
|
488
|
+
Run `fpasoterm --setup-sync` for an interactive first-time setup.
|
|
489
|
+
On Windows source checkouts, run `node .\bin\fpasoterm --setup-sync`.
|
|
490
|
+
Use `fpasoterm --sync-status` to inspect folder health and channels, or
|
|
491
|
+
`fpasoterm --sync-clean` to remove only expired sync command files.
|
|
492
|
+
Terminal output logs can be written from the hamburger menu with `Log Start (^S)` /
|
|
493
|
+
`Log Stop (^S)` or `Ctrl+Shift+S`, and inspected with `Log Show (^P)` or `Ctrl+Shift+P`.
|
|
494
|
+
`Log Show` displays the active log or the last log closed by `Log Stop`. Point
|
|
495
|
+
`logging.directory` at the same synced folder when you want those logs shared.
|
|
496
|
+
The log panel includes a search field and `Search` button for selecting and
|
|
497
|
+
scrolling to the next matching string in the displayed log. `N` moves to the
|
|
498
|
+
next match, `P` moves to the previous match, and `j` / `k` provide the same
|
|
499
|
+
navigation when the log text area has focus. Arrow keys remain available for
|
|
500
|
+
normal log scrolling.
|
|
501
|
+
|
|
502
|
+
Current platform limitations are tracked in [Known Issues](docs/known-issues.en.md) / [既知課題](docs/known-issues.ja.md).
|
|
503
|
+
|
|
504
|
+
## Icon
|
|
505
|
+
|
|
506
|
+
The project icon is a PNG asset:
|
|
507
|
+
|
|
508
|
+
```text
|
|
509
|
+
extra/logo/fpasoterm.png
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
The desktop entry uses `Icon=io.github.oyoguhito.fpasoterm`; ChromeOS/Linux launchers resolve that name through the hicolor icon theme files under:
|
|
513
|
+
|
|
514
|
+
```text
|
|
515
|
+
extra/linux/icons/hicolor/
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
The installed entry uses `StartupWMClass=fpasoterm` and keeps the GTK
|
|
519
|
+
application id disabled so multiple fpasoterm windows can be started from the
|
|
520
|
+
CLI or launcher. ChromeOS/Linux launchers still resolve the shelf icon from
|
|
521
|
+
`Icon=io.github.oyoguhito.fpasoterm` for the ChromeOS shelf. The installer also writes a legacy
|
|
522
|
+
`fpasoterm` icon alias for environments that prefer short icon names.
|
|
523
|
+
|
|
524
|
+
For unpacked checkout installs, `npm run install:desktop` writes the installed
|
|
525
|
+
desktop entry with an absolute `Exec=` path to the local wrapper and no
|
|
526
|
+
`TryExec`. The wrapper records the Node.js executable used during installation
|
|
527
|
+
and also falls back to common `node` paths. This lets the ChromeOS launcher
|
|
528
|
+
start fpasoterm from the icon even when it does not inherit the user's shell
|
|
529
|
+
`PATH`.
|
|
530
|
+
|
|
531
|
+
The GTK application id is disabled so multiple fpasoterm processes can run.
|
|
532
|
+
When multiple fpasoterm windows are open, use `Tile (^T)` in the titlebar window
|
|
533
|
+
menu, or press `Ctrl+Shift+T`,
|
|
534
|
+
to arrange them into a grid on the current monitor. Windows and X11 support
|
|
535
|
+
native placement. Wayland compositors may reject application-controlled
|
|
536
|
+
positions; the terminal remains usable and the diagnostic panel reports the
|
|
537
|
+
placement error.
|
|
538
|
+
Use `Close All (^X)` in the same menu, or press `Ctrl+Shift+X`, to close every
|
|
539
|
+
running fpasoterm window.
|
|
540
|
+
|
|
541
|
+
When packaging a macOS `.app` bundle, use the generated icon at:
|
|
542
|
+
|
|
543
|
+
```text
|
|
544
|
+
extra/macos/fpasoterm.icns
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
On Windows, the app window uses the generated icon at:
|
|
548
|
+
|
|
549
|
+
```text
|
|
550
|
+
extra/windows/fpasoterm.ico
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
To replace the icon, update `extra/logo/fpasoterm.png`, regenerate the launcher sizes, and reinstall the desktop entry:
|
|
554
|
+
|
|
555
|
+
```sh
|
|
556
|
+
npm run generate:icons
|
|
557
|
+
npm run update:desktop
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
For Android-native packaging, use the same PNG as the source asset for the Android adaptive icon pipeline.
|
|
561
|
+
|
|
562
|
+
## License
|
|
563
|
+
|
|
564
|
+
MIT. See [LICENSE](LICENSE).
|
|
565
|
+
|
|
566
|
+
## Contributing
|
|
567
|
+
|
|
568
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) or [CONTRIBUTING.ja.md](CONTRIBUTING.ja.md).
|
|
569
|
+
Release history is tracked in [CHANGELOG.md](CHANGELOG.md).
|
|
570
|
+
|
|
571
|
+
## Project Name
|
|
572
|
+
|
|
573
|
+
The jj bookmark `main` points at an empty initial commit. The app implementation lives in the child change named `Initial fpasoterm terminal app`.
|
|
574
|
+
|
|
575
|
+
## jj Repository Initialization
|
|
576
|
+
|
|
577
|
+
```sh
|
|
578
|
+
cd fpasoterm
|
|
579
|
+
./scripts/init-jj-empty-main
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
The script creates an empty `main` branch first, then records the initial project files on top of it.
|
|
583
|
+
|
|
584
|
+
## Checks
|
|
585
|
+
|
|
586
|
+
```sh
|
|
587
|
+
npm run check
|
|
588
|
+
npm run scan:secrets
|
|
589
|
+
desktop-file-validate extra/linux/io.github.oyoguhito.fpasoterm.desktop
|
|
590
|
+
npm run audit:prod
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
GitHub Actions runs the same check set and Linux artifact build on pushes and
|
|
594
|
+
pull requests. Official cross-platform artifacts are built by the tag-based
|
|
595
|
+
Release workflow.
|
|
596
|
+
|
|
597
|
+
## Documentation
|
|
598
|
+
|
|
599
|
+
- [Specification](docs/spec.en.md)
|
|
600
|
+
- [Configuration](docs/config.en.md)
|
|
601
|
+
- [Sync Folder](docs/sync.en.md)
|
|
602
|
+
- [Pull request review](docs/pr-review.en.md)
|
|
603
|
+
- [Debugging guide](docs/debugging.en.md)
|
|
604
|
+
- [Release checklist](docs/release-checklist.en.md)
|
|
605
|
+
### SSHFS mounts
|
|
606
|
+
|
|
607
|
+
Use **Sync > SSHFS Mounts** to mount a remote directory under `User/mounts/<name>`. It uses your normal SSH keys, config, and agent by default; an optional password is used only for that mount and is never saved. See [SSHFS mounts](docs/sshfs.en.md).
|