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
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
# fpasoterm Configuration
|
|
2
|
+
|
|
3
|
+
fpasoterm reads user-editable settings from:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
~/.config/fpasoterm/User/config.toml
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
On Windows, `~` is the current user's profile directory, so the default path is
|
|
10
|
+
`%USERPROFILE%\.config\fpasoterm\User\config.toml`.
|
|
11
|
+
|
|
12
|
+
On launch, fpasoterm writes or refreshes the full default example at:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
~/.config/fpasoterm/User/config.toml.example
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Copy the example to `config.toml` and edit only the values you want to change. Existing `config.toml` files are not overwritten. If `config.toml.example` is missing or outdated, fpasoterm regenerates it on the next launch.
|
|
19
|
+
|
|
20
|
+
Use another config file for one launch:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
fpasoterm --config ~/.config/fpasoterm/User/work.toml
|
|
24
|
+
fpasoterm -c ~/.config/fpasoterm/User/work.toml
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Open `Help` from the window menu to see the absolute path of the configuration
|
|
28
|
+
file currently used by that window. This also reflects a runtime config file
|
|
29
|
+
applied through `OSC 777;config=...`.
|
|
30
|
+
|
|
31
|
+
## Applying changes
|
|
32
|
+
|
|
33
|
+
fpasoterm reads `config.toml` when each window process starts. The launcher
|
|
34
|
+
passes that resolved configuration to the native process as an in-memory JSON
|
|
35
|
+
snapshot; it is not a file cache and an already-running window does not watch
|
|
36
|
+
for TOML changes. Close and reopen the affected window after editing the file.
|
|
37
|
+
This includes `[keybindings]`: shortcut labels and bindings are resolved at
|
|
38
|
+
startup, not while the TOML file is being edited.
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
flowchart TD
|
|
42
|
+
U["User TOML<br/>~/.config/fpasoterm/User/config.toml"]
|
|
43
|
+
X["Generated example<br/>config.toml.example"]
|
|
44
|
+
S["Saved bounds<br/>window-state.json"]
|
|
45
|
+
N["Node launcher<br/>bin/fpasoterm"]
|
|
46
|
+
E["Embedded defaults<br/>src-tauri/default-config.toml"]
|
|
47
|
+
D["Direct packaged binary<br/>fpasoterm.exe / fpasoterm"]
|
|
48
|
+
J["FPASOTERM_RUNTIME_CONFIG_JSON<br/>one-process snapshot"]
|
|
49
|
+
W["Native window and renderer"]
|
|
50
|
+
T["Terminal shell runs fpasoterm"]
|
|
51
|
+
|
|
52
|
+
U --> N
|
|
53
|
+
N --> X
|
|
54
|
+
S -. saved width and height .-> N
|
|
55
|
+
N --> J --> W
|
|
56
|
+
U --> D
|
|
57
|
+
E --> D
|
|
58
|
+
S -. saved width and height .-> D
|
|
59
|
+
D --> W
|
|
60
|
+
W --> T --> D
|
|
61
|
+
J -. inherited native snapshot is ignored by child .-> D
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`FPASOTERM_RUNTIME_CONFIG_JSON` is never written to disk and is not a cache of
|
|
65
|
+
an old TOML file. On every new launch, the Node launcher reads the selected
|
|
66
|
+
`config.toml` and creates a new JSON snapshot; the direct packaged binary reads
|
|
67
|
+
the selected TOML itself. A missing or older partial TOML is still read and
|
|
68
|
+
merged with current defaults. `config.toml.example` is refreshed separately and
|
|
69
|
+
does not change the existing user `config.toml`.
|
|
70
|
+
|
|
71
|
+
Reading configuration never rewrites `config.toml` or `window-state.json`.
|
|
72
|
+
Remembered bounds continue to win over TOML width and height only when
|
|
73
|
+
`window.rememberBounds = true`; `--reset-window-state` is the explicit command
|
|
74
|
+
that removes that saved size.
|
|
75
|
+
|
|
76
|
+
To apply a file to the current terminal session without closing it, write this
|
|
77
|
+
OSC sequence from the terminal. Use the absolute path shown in `Help` when in
|
|
78
|
+
doubt.
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
config_path="$HOME/.config/fpasoterm/User/config.toml"
|
|
82
|
+
printf '\033]777;config=%s\a\r\n' "$config_path"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
In PowerShell:
|
|
86
|
+
|
|
87
|
+
```powershell
|
|
88
|
+
$configPath = Join-Path $HOME '.config\fpasoterm\User\config.toml'
|
|
89
|
+
[Console]::Write("$([char]27)]777;config=$configPath$([char]7)`r`n")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`window.width` and `window.height` are additionally overridden by the saved
|
|
93
|
+
`window-state.json` while `window.rememberBounds = true`. Run
|
|
94
|
+
`fpasoterm --reset-window-state`, then open a new window, when testing a size
|
|
95
|
+
change from `config.toml`.
|
|
96
|
+
|
|
97
|
+
Temporarily override the configured window size:
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
fpasoterm --size 1200x760
|
|
101
|
+
fpasoterm -z 1200x760
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Temporarily override the titlebar title or color. This is useful when multiple fpasoterm windows are open:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
fpasoterm --title work --titlebar-color '#2e7d32'
|
|
108
|
+
fpasoterm -t logs -b '#6a1b9a'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
When `--title` is used, shell-emitted title changes are ignored so the window
|
|
112
|
+
label stays stable. Use `OSC 777;title=...` if you intentionally want to rename
|
|
113
|
+
the running window from inside the terminal.
|
|
114
|
+
|
|
115
|
+
Run a command in the shell after launch:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
fpasoterm --command "tmux attach -t work"
|
|
119
|
+
fpasoterm -e "tmux attach -t work"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Use another shell for one launch:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
fpasoterm --shell pwsh.exe
|
|
126
|
+
fpasoterm --shell cmd.exe
|
|
127
|
+
fpasoterm -s /usr/bin/fish
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Delete the saved window size:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
fpasoterm --reset-window-state
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Restore every setting to its platform default:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
fpasoterm --reset-config
|
|
140
|
+
# Short form: fpasoterm -R
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
An existing file is renamed beside it as `config.toml.backup-<timestamp>` before
|
|
144
|
+
a complete new `config.toml` is written. The saved `window-state.json` is also
|
|
145
|
+
deleted, so the default width of 1000 and height of 680 are used on the next
|
|
146
|
+
launch. This command exits without opening a window. With `--config <path>`,
|
|
147
|
+
only that selected config file is renamed and reset; the standard local window
|
|
148
|
+
state is still cleared.
|
|
149
|
+
|
|
150
|
+
Add settings introduced in a newer fpasoterm version without replacing your
|
|
151
|
+
existing values:
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
fpasoterm --update-config
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The command writes a complete normalized `config.toml`, preserves existing
|
|
158
|
+
supported values, and creates `config.toml.backup-<timestamp>` before writing.
|
|
159
|
+
It does not change `window-state.json`. Use `--config <path>` to update another
|
|
160
|
+
file. The Node launcher and direct packaged binary both support this command.
|
|
161
|
+
|
|
162
|
+
Remove settings that no longer belong to the supported configuration schema:
|
|
163
|
+
|
|
164
|
+
```sh
|
|
165
|
+
fpasoterm --prune-config
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This also creates a backup and leaves supported values intact. It removes every
|
|
169
|
+
unknown setting, including custom keys intended for third-party plugins, so use
|
|
170
|
+
it only after checking the backup. Use `--update-config` afterward when both
|
|
171
|
+
adding current defaults and removing retired settings is desired.
|
|
172
|
+
|
|
173
|
+
Print the resolved configuration and plugin status:
|
|
174
|
+
|
|
175
|
+
```sh
|
|
176
|
+
fpasoterm --show-config
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Validate the selected TOML without changing it, print its selected path, or
|
|
180
|
+
write the current default example to stdout:
|
|
181
|
+
|
|
182
|
+
```sh
|
|
183
|
+
fpasoterm --config-check
|
|
184
|
+
fpasoterm --config-path
|
|
185
|
+
fpasoterm --config-example > config.toml
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
See [Configuration and Diagnostics](diagnostics.en.md) for warnings, exit
|
|
189
|
+
status, and the GitHub Issue-friendly `--diagnostics` report.
|
|
190
|
+
|
|
191
|
+
## Profiles
|
|
192
|
+
|
|
193
|
+
Profiles are optional named overlays selected for one launch. Normal settings
|
|
194
|
+
are merged first, then `[profiles.<name>]`, then CLI overrides such as
|
|
195
|
+
`--title`, `--shell`, and `--size`. A profile therefore never rewrites
|
|
196
|
+
`config.toml` or saved window bounds.
|
|
197
|
+
|
|
198
|
+
```toml
|
|
199
|
+
[terminal]
|
|
200
|
+
fontSize = 14
|
|
201
|
+
|
|
202
|
+
[profiles.large-font.terminal]
|
|
203
|
+
fontSize = 18
|
|
204
|
+
|
|
205
|
+
[profiles.transparent.window]
|
|
206
|
+
titlebarColor = "#00695c"
|
|
207
|
+
|
|
208
|
+
[profiles.transparent.terminal]
|
|
209
|
+
backgroundOpacity = 0.65
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
```sh
|
|
213
|
+
fpasoterm --profile-list
|
|
214
|
+
fpasoterm --profile large-font
|
|
215
|
+
fpasoterm --config examples/config/profiles.toml --profile transparent
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Profile names are case-sensitive TOML table names. A missing name or a profile
|
|
219
|
+
that is not a table exits with an error instead of silently falling back to the
|
|
220
|
+
normal configuration. `--show-config` and `--diagnostics` display the active
|
|
221
|
+
profile. To use `fpasoterm --profile large-font` without `--config`, copy the
|
|
222
|
+
`[profiles.large-font.terminal]` table into the file printed by
|
|
223
|
+
`fpasoterm --config-path`. See [`examples/config/profiles.toml`](../examples/config/profiles.toml).
|
|
224
|
+
|
|
225
|
+
Enable or disable plugins from the command line:
|
|
226
|
+
|
|
227
|
+
```sh
|
|
228
|
+
fpasoterm --enable-plugin hello,theme
|
|
229
|
+
fpasoterm --disable-plugin hello,theme
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Plugin commands select files below `User/plugins` by file name. Separate multiple
|
|
233
|
+
names with commas or repeat the option. If the same file name exists in more than
|
|
234
|
+
one subdirectory, specify its plugins-relative path, such as `group/hello.ts`.
|
|
235
|
+
|
|
236
|
+
## Full Default
|
|
237
|
+
|
|
238
|
+
```toml
|
|
239
|
+
[window]
|
|
240
|
+
title = "fpasoterm"
|
|
241
|
+
width = 1000
|
|
242
|
+
height = 680
|
|
243
|
+
minWidth = 420
|
|
244
|
+
minHeight = 260
|
|
245
|
+
backgroundColor = "rgba(0, 0, 0, 0)"
|
|
246
|
+
titlebarColor = "#1565c0"
|
|
247
|
+
titleLocked = true
|
|
248
|
+
themeSource = "system"
|
|
249
|
+
rememberBounds = true
|
|
250
|
+
frame = false
|
|
251
|
+
[terminal]
|
|
252
|
+
allowTransparency = true
|
|
253
|
+
cursorBlink = true
|
|
254
|
+
cursorStyle = "block"
|
|
255
|
+
fontFamily = "\"DejaVu Sans Mono\", \"Noto Sans Mono\", \"Noto Sans Mono CJK JP\", \"Noto Sans Mono CJK KR\", \"Noto Sans Mono CJK SC\", \"NanumGothicCoding\", \"BIZ UDGothic\", \"Symbols Nerd Font Mono\", \"Symbols Nerd Font\", \"JetBrainsMono Nerd Font\", \"Noto Sans CJK JP\", \"Noto Sans CJK KR\", \"Noto Sans CJK SC\", \"Noto Sans CJK TC\", \"Hiragino Kaku Gothic ProN\", \"Apple SD Gothic Neo\", \"Malgun Gothic\", Meiryo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
|
|
256
|
+
fontSize = 14
|
|
257
|
+
# When omitted, the default is 12 on Intel macOS and 14 on other platforms.
|
|
258
|
+
lineHeight = 1
|
|
259
|
+
minimumContrastRatio = 1
|
|
260
|
+
rescaleOverlappingGlyphs = false
|
|
261
|
+
backgroundOpacity = 0.65
|
|
262
|
+
scrollback = 1000
|
|
263
|
+
termName = "xterm-256color"
|
|
264
|
+
encoding = "utf-8"
|
|
265
|
+
shell = ""
|
|
266
|
+
|
|
267
|
+
# Enable only for a TUI that explicitly requires enhanced Kitty keyboard input.
|
|
268
|
+
# It is separate from the currently disabled graphics addon.
|
|
269
|
+
kittyKeyboard = false
|
|
270
|
+
|
|
271
|
+
# [terminal.images] is reserved for a future stable renderer.
|
|
272
|
+
# Current builds ignore this section. Do not add it to config.toml.
|
|
273
|
+
|
|
274
|
+
[terminal.theme]
|
|
275
|
+
background = "rgba(16, 19, 23, 0.65)"
|
|
276
|
+
foreground = "#e8edf2"
|
|
277
|
+
cursor = "#f5d76e"
|
|
278
|
+
selectionBackground = "#35506b"
|
|
279
|
+
black = "#11151a"
|
|
280
|
+
red = "#ff6b6b"
|
|
281
|
+
green = "#8bd17c"
|
|
282
|
+
yellow = "#f5d76e"
|
|
283
|
+
blue = "#7bb7ff"
|
|
284
|
+
magenta = "#d7a8ff"
|
|
285
|
+
cyan = "#63d4d5"
|
|
286
|
+
white = "#e8edf2"
|
|
287
|
+
brightBlack = "#5d6978"
|
|
288
|
+
brightRed = "#ff8f8f"
|
|
289
|
+
brightGreen = "#ade89f"
|
|
290
|
+
brightYellow = "#ffe08a"
|
|
291
|
+
brightBlue = "#a4ceff"
|
|
292
|
+
brightMagenta = "#e3c3ff"
|
|
293
|
+
brightCyan = "#9de9ea"
|
|
294
|
+
brightWhite = "#ffffff"
|
|
295
|
+
|
|
296
|
+
[keybindings]
|
|
297
|
+
# Mod means Ctrl on Windows/Linux and Cmd on macOS.
|
|
298
|
+
prefix = "Mod+Shift"
|
|
299
|
+
# A one-letter value inherits prefix. A full value overrides it for one action.
|
|
300
|
+
# Physical-key example: newWindow = "Ctrl+Alt+KeyN"
|
|
301
|
+
logMenu = "L"
|
|
302
|
+
logToggle = "S"
|
|
303
|
+
logShow = "P"
|
|
304
|
+
copy = "C"
|
|
305
|
+
paste = "V"
|
|
306
|
+
menu = "M"
|
|
307
|
+
help = "H"
|
|
308
|
+
newWindow = "N"
|
|
309
|
+
openCwd = "o"
|
|
310
|
+
broadcast = "B"
|
|
311
|
+
kill = "K"
|
|
312
|
+
tile = "T"
|
|
313
|
+
closeAll = "X"
|
|
314
|
+
|
|
315
|
+
### Key names
|
|
316
|
+
|
|
317
|
+
`prefix` accepts only modifiers separated by `+`: `Ctrl` or `Control`, `Alt` or
|
|
318
|
+
`Option`, `Shift`, `Meta` or `Cmd` or `Command`, and `Mod`. `Mod` means `Ctrl`
|
|
319
|
+
on Windows/Linux and `Cmd` on macOS. Modifier spelling is case-insensitive.
|
|
320
|
+
Action keys such as `Escape` cannot be part of `prefix`.
|
|
321
|
+
|
|
322
|
+
Every action accepts one action key, which inherits `prefix`, or a complete
|
|
323
|
+
shortcut such as `Ctrl+Shift+KeyN`. The following names are supported:
|
|
324
|
+
|
|
325
|
+
| Type | Names | Matching |
|
|
326
|
+
| --- | --- | --- |
|
|
327
|
+
| Characters | `A`-`Z`, `0`-`9`, `-` | Browser key value; keyboard-layout dependent |
|
|
328
|
+
| Named keys | `Tab`, `Enter`, `Escape`, `Space`, `Backspace`, `Delete`, `Insert`, `Home`, `End`, `PageUp`, `PageDown` | `Space` and physical forms use keyboard code; other names use key value |
|
|
329
|
+
| Function/cursor | `F1`-`F24`, `ArrowUp`, `ArrowDown`, `ArrowLeft`, `ArrowRight` | Physical keyboard code |
|
|
330
|
+
| Physical keys | `KeyA`-`KeyZ`, `Digit0`-`Digit9`, `Space`, `Numpad0`-`Numpad9`, `NumpadEnter`, `NumpadAdd`, `NumpadSubtract`, `NumpadMultiply`, `NumpadDivide`, `NumpadDecimal` | Physical keyboard code |
|
|
331
|
+
| Japanese IME keys | `ZenkakuHankaku`, `KanaMode`, `KanjiMode` | Browser key value; keyboard and OS dependent |
|
|
332
|
+
|
|
333
|
+
`Tab`, `Escape`, `Delete`, and `Backspace` are available. For example,
|
|
334
|
+
`kill = "Escape"` inherits the configured prefix, and
|
|
335
|
+
`help = "Ctrl+Shift+F1"` applies a full shortcut only to Help. `Space` is
|
|
336
|
+
available through the literal name `Space`, for example `broadcast = "Space"`.
|
|
337
|
+
Use `KeyN` and `Digit1` for layout-independent ordinary keys.
|
|
338
|
+
|
|
339
|
+
`Fn` is not available as an action or modifier. It is normally handled by the
|
|
340
|
+
keyboard firmware and does not generate an independent browser key event.
|
|
341
|
+
`Fn+F1` can be configured as `F1` only when the operating system exposes it as
|
|
342
|
+
an F1 event. Japanese IME keys may be intercepted by the IME or OS before
|
|
343
|
+
fpasoterm receives them, so they are not recommended for application actions.
|
|
344
|
+
Likewise, OS-reserved combinations such as `Alt+Tab`, `Ctrl+Alt+Tab`, and some
|
|
345
|
+
function keys may not be delivered. Do not assign one full shortcut to multiple
|
|
346
|
+
fpasoterm actions.
|
|
347
|
+
|
|
348
|
+
`Ctrl+X` is a valid complete shortcut, for example `closeAll = "Ctrl+X"`.
|
|
349
|
+
`Ctrl+X` followed by another key such as `N` is an ordered key chord, not one
|
|
350
|
+
shortcut; key chords are not supported by the current configuration format.
|
|
351
|
+
|
|
352
|
+
On Windows, do not use `Ctrl+N` or `Ctrl+Shift+N` to test fpasoterm: WebView or
|
|
353
|
+
the IME can consume them before the renderer receives them. Use an explicit
|
|
354
|
+
non-reserved test binding instead:
|
|
355
|
+
|
|
356
|
+
```toml
|
|
357
|
+
[keybindings]
|
|
358
|
+
newWindow = "Ctrl+F2"
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Run with `--debug-keys --console-diagnostics`. A working shortcut reports both
|
|
362
|
+
`ctrl=true` on the F2 event and `shortcut matched action=newWindow spec=Ctrl+F2`.
|
|
363
|
+
If it reports `ctrl=false`, the operating system did not deliver the modifier
|
|
364
|
+
and this cannot be corrected from the renderer.
|
|
365
|
+
|
|
366
|
+
[plugins]
|
|
367
|
+
enabled = []
|
|
368
|
+
|
|
369
|
+
[sync]
|
|
370
|
+
enabled = false
|
|
371
|
+
provider = "folder"
|
|
372
|
+
path = ""
|
|
373
|
+
channel = "default"
|
|
374
|
+
diagnostics = true
|
|
375
|
+
maxBytes = 1048576
|
|
376
|
+
commands = false
|
|
377
|
+
commandSecret = ""
|
|
378
|
+
commandTtlSeconds = 60
|
|
379
|
+
|
|
380
|
+
[logging]
|
|
381
|
+
enabled = true
|
|
382
|
+
directory = ""
|
|
383
|
+
autoStart = false
|
|
384
|
+
maxBytes = 10485760
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
`lineHeight` defaults to `1` on every platform, including macOS. This
|
|
388
|
+
keeps descenders such as `g`, `q`, and `y` distinct while keeping macOS TUI
|
|
389
|
+
logo rows closer together. fpasoterm's bundled xterm.js accepts values down to
|
|
390
|
+
`0.5`. Existing macOS values matching former compact defaults `0.8`, `0.81`, `0.82`, `0.85`, `0.9`, or `0.92`
|
|
391
|
+
are migrated at runtime; explicit custom values are retained.
|
|
392
|
+
|
|
393
|
+
On macOS, `Menlo` is the first default terminal font because its box and block
|
|
394
|
+
glyph metrics match the macOS Terminal renderer more closely than `SF Mono`.
|
|
395
|
+
|
|
396
|
+
## Sections
|
|
397
|
+
|
|
398
|
+
- `window`: titlebar title, initial window size, minimum size, background color, custom titlebar color, native theme source, frame/titlebar visibility, and whether to remember the last bounds locally. `themeSource` can be `system`, `light`, or `dark`. `titleLocked` defaults to `true` so shell-emitted title sequences do not replace the fpasoterm titlebar. `--title` / `-t` and `--titlebar-color` / `-b` override titlebar appearance for one launch.
|
|
399
|
+
- `terminal`: xterm.js options passed when the terminal is created. The default `fontFamily` starts with Noto/DejaVu monospace candidates so terminal cell metrics remain stable for box and block art. Nerd Font candidates follow as fallbacks for private-use glyphs. On macOS, this includes `SF Mono`, `Menlo`, Hiragino, and `Apple SD Gothic Neo`; do not put proportional `Hiragino Sans` before the monospace fonts. Other platforms include Japanese, Korean, and Chinese Noto CJK candidates, plus common OS-specific fallbacks, so half-width kana and CJK characters are preferred during rendering. A font stack cannot render glyphs from a font that is not installed: use Font / Glyph Test and install a CJK or Nerd Font through the operating system when its sample is a tofu box or an incorrect private-use glyph. `lineHeight` defaults to `1` to keep terminal art and TUI logo rows connected. `minimumContrastRatio` defaults to `1` so terminal applications retain their selected ANSI and RGB colors. `rescaleOverlappingGlyphs` defaults to `false` to preserve application glyphs such as block art and Powerline-style decorations; enable it only when a CJK font overlaps adjacent cells. `terminal.termName` defaults to `xterm-256color`, and the backend PTY exports `TERM=xterm-256color` plus `COLORTERM=truecolor`, so terminal multiplexers and TUI applications can use terminfo and the truecolor path. `terminal.encoding` defaults to `utf-8`. On Unix, fpasoterm supplies a UTF-8 locale to a UTF-8 PTY when the inherited locale is not UTF-8, which prevents path names from being replaced with `?`. Use `shift-jis` or `euc-jp` only for a known legacy byte stream; the decoder is selected explicitly because automatic encoding detection is ambiguous. **Diagnostics > Capability Test** can save this setting; restart the window to start a new PTY with it. `terminal.shell` overrides the platform default when non-empty. Windows examples are `powershell.exe`, `pwsh.exe`, and `cmd.exe`. `--shell <command>` / `-s <command>` overrides this for one launch. PowerShell 7 (`pwsh.exe`) is the default when it is available; otherwise fpasoterm checks common PowerShell 7 install paths and accepts a full path. `terminal.kittyKeyboard` is `false` by default: enable it only for a TUI that explicitly needs enhanced Kitty keyboard input, because IME behavior differs among WebViews. It does not enable graphics. `[terminal.images]` is reserved and ignored by current builds; do not add or enable it.
|
|
400
|
+
|
|
401
|
+
On Windows, a full shell path can be written as `C:\Program Files\PowerShell\7\pwsh.exe` when PowerShell is installed in a nonstandard location.
|
|
402
|
+
|
|
403
|
+
### TUI compatibility check
|
|
404
|
+
|
|
405
|
+
Terminal applications that intentionally use tightly spaced block glyphs or
|
|
406
|
+
low-contrast RGB colors can be distorted by contrast or glyph-rescaling
|
|
407
|
+
overrides. The default values preserve those applications. To compare an
|
|
408
|
+
existing configuration with the compatibility values, either set the following
|
|
409
|
+
in its `[terminal]` section and restart, or launch the partial
|
|
410
|
+
`examples/config/tui-compatibility.toml` configuration for a one-off test:
|
|
411
|
+
|
|
412
|
+
```toml
|
|
413
|
+
[terminal]
|
|
414
|
+
minimumContrastRatio = 1
|
|
415
|
+
rescaleOverlappingGlyphs = false
|
|
416
|
+
```
|
|
417
|
+
- `keybindings`: application shortcut settings. `prefix = "Mod+Shift"` means `Ctrl+Shift` on Windows/Linux and `Cmd+Shift` on macOS. On Windows, set `prefix = "Ctrl+Alt"` when `Ctrl+Shift` is captured by a keyboard layout or another application. This replaces the shared modifier, so the former `Ctrl+Shift` application shortcuts no longer run. Prefix tokens are case-insensitive but may only be `Ctrl`/`Control`, `Alt`/`Option`, `Shift`, `Meta`/`Cmd`/`Command`, or `Mod`; `Ctrl+Esc` is invalid because `Esc` is an action key, not a modifier. An invalid prefix falls back to `Mod+Shift` and the menu provides a tooltip explaining that fallback. A one-letter action value inherits `prefix`; a complete shortcut overrides only that action. Valid action keys include `Escape`, `F1`, `ArrowUp`, and `KeyN`/`Digit1`; for example, use `newWindow = "Ctrl+Alt+KeyN"` or `kill = "Ctrl+Alt+Escape"`. `KeyN`-style values match the physical keyboard key, which avoids keyboard-layout-specific `event.key` differences. The window menu shows the active prefix at its top and each action only shows its key. Opening it moves focus to its first item; `Tab`/`Shift+Tab` and arrow keys navigate it, while `Escape` closes it and returns focus to the terminal. Restart or apply a runtime config file to refresh the menu labels and bindings.
|
|
418
|
+
fpasoterm observes IME composition events only to show marked text. xterm.js and the WebView retain native input delivery: fpasoterm does not suppress, replay, replace, or directly commit IME text. On ChromeOS/Linux, at the start of a new composition, it clears xterm's hidden helper textarea when it contains stale committed text and before the new marked text is inserted. This prevents later conversions from inheriting accumulated committed text and does not change terminal text or the PTY payload. Windows/Linux use a visual-only `IME` marked-text fallback when the WebView does not paint xterm's helper textarea. macOS uses its native WebKit marked-text rendering and does not add this fallback, avoiding a stale IME overlay after commit.
|
|
419
|
+
- `plugins.enabled`: plugin paths relative to `~/.config/fpasoterm/User/`.
|
|
420
|
+
- `sync`: optional sync-folder integration for diagnostics and explicitly requested broadcast commands. `provider = "folder"` uses an already-synced local folder such as Google Drive for desktop. `commands` permits short-lived shared commands and `commandTtlSeconds` limits their lifetime. See [Sync Folder](sync.en.md).
|
|
421
|
+
- `logging`: terminal output logging. The hamburger menu contains `Log Start (^S)` / `Log Stop (^S)` and `Log Show (^P)`. `Ctrl+Shift+L` opens that menu at the log actions; `Ctrl+Shift+S` toggles logging directly, and `Ctrl+Shift+P` opens a selector for captured logs. Logging writes readable terminal output with control sequences removed to a local file. Saved automatic log names include the titlebar title and timestamp, for example `terminal-work-<timestamp>.log`. The log panel can delete the selected stopped log, or `Delete All` can empty the active log and delete all stopped `terminal-*.log` files after in-panel confirmation. `directory` defaults to `~/.config/fpasoterm/User/logs` when empty, and can point to a synced folder when needed. Paths can use `~`, `%USERPROFILE%`, `$HOME`, and similar environment variables. `~` is the most portable form when sharing config across operating systems.
|
|
422
|
+
|
|
423
|
+
When `window.rememberBounds` is enabled, the last window size is saved to `~/.config/fpasoterm/User/window-state.json` and restored on the next launch.
|
|
424
|
+
|
|
425
|
+
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`. If you want config size changes to take effect over the saved state, run `fpasoterm --reset-window-state`.
|
|
426
|
+
|
|
427
|
+
On Windows, the terminal process receives the fpasoterm executable directory at the front of `Path`. On macOS, fpasoterm regenerates the conventional `~/.local/bin/fpasoterm` command for the currently running app bundle and places `~/.local/bin` first in `PATH`; it forwards every argument unchanged. The previous `~/.config/fpasoterm/bin/fpasoterm` shim is also refreshed for compatibility. This allows `fpasoterm --help`, `--list`, `--close`, and other direct-binary commands to run inside the opened terminal and preserves the command path used by earlier releases. A nested macOS GUI launch detaches by default so the current prompt is released; use `--foreground` when waiting for the new window is intentional. Options documented as Node-launcher-only, unknown options such as `--hoge` or `-?`, and options with missing values are rejected with one concise error instead of opening an unrelated GUI window. Use `--help` when the complete option list is needed. `--version` and the in-app `Help (^H)` panel display the package version plus the build commit, so same-version contributor and PR builds can be distinguished.
|
|
428
|
+
|
|
429
|
+
macOS normally keeps an application active after its last window is closed. CLI close requests (`--close` / `-q`) and the in-app Close All action explicitly exit each matching fpasoterm process, so `fpasoterm -q all` also removes fpasoterm from the macOS menu bar.
|
|
430
|
+
|
|
431
|
+
The running titlebar can be updated from inside the terminal. Standard OSC title changes update the window title, and fpasoterm-specific OSC 777 changes update titlebar appearance.
|
|
432
|
+
|
|
433
|
+
## Terminal Graphics
|
|
434
|
+
|
|
435
|
+
Kitty Graphics Protocol, SIXEL, and iTerm inline images are not supported by the current build. The xterm.js image addon can make the current Tauri/WebKitGTK WebView unresponsive on ChromeOS, so it is deliberately not loaded even when `[terminal.images]` is present in `config.toml`.
|
|
436
|
+
|
|
437
|
+
Do not run `kitten icat`, `chafa --format kitty`, or `chafa --format sixels` in fpasoterm for graphics testing. `kitten icat` reports that graphics are unsupported because fpasoterm keeps `TERM=xterm-256color` and does not answer the Kitty graphics capability query. This is expected and avoids the previously reproduced renderer freeze.
|
|
438
|
+
|
|
439
|
+
## Broadcast Input
|
|
440
|
+
|
|
441
|
+
Open the hamburger menu and choose `Broadcast (^B)`, or press `Ctrl+Shift+B`. Select one or more local windows by title and PID, enter one or more commands, then press `Shift+Enter` or choose `Send`. Use `Enter` for a line break in a multi-line command. fpasoterm removes trailing line breaks, normalizes line endings, and delivers the text only to the selected local fpasoterm windows. Every command uses the target terminal's actual Enter key event after its text, so a target TUI can encode the active keyboard protocol correctly. In a conventional shell it produces the usual CR byte. A control-byte-only input, such as the `Ctrl+C` notation inserted by the picker, is delivered without an added Enter key.
|
|
442
|
+
|
|
443
|
+
When every local window is selected and sync is enabled, the dialog exposes `Include synced channel`. This publishes the same short-lived command to every already-running fpasoterm instance using the same sync path and channel. Sync delivery is disabled for a local subset because remote window identities are not shared. Command files expire after `sync.commandTtlSeconds` (60 seconds by default) and an instance ignores commands created before it started.
|
|
444
|
+
|
|
445
|
+
This feature deliberately has no remote server, OAuth token, or automatic command execution for later launches. A shared sync folder becomes a command channel when this option is used. Use it only with a folder and channel trusted by every participating machine.
|
|
446
|
+
|
|
447
|
+
Broadcast keeps keyboard focus inside its dialog while it is open: `Tab` and `Shift+Tab` cycle through its controls instead of reaching the terminal. The focused control scrolls into view, has a yellow outline, and is named by the `Keyboard focus:` status line. `Shift+Enter` sends even if focus was unexpectedly reclaimed by the terminal. Every send uses the target terminal's actual Enter key event after the text; this is distinct from the dialog shortcut and preserves enhanced keyboard protocols. IME composition keys remain with the browser instead of being treated as dialog navigation. Its **Control byte** picker inserts visible
|
|
448
|
+
notation at the textarea cursor: `\x0D` for an explicit `Enter / CR`, `\x09` for `Tab`, `\x03` for `Ctrl+C`,
|
|
449
|
+
`\x04` for `Ctrl+D`, `\x18` for `Ctrl+X`, and `\x1A` for `Ctrl+Z`.
|
|
450
|
+
fpasoterm converts only these picker-inserted notations to terminal bytes when
|
|
451
|
+
you send them. A trailing explicit `\x0D` does not receive a second semantic
|
|
452
|
+
Enter event. The standalone `Esc` option is intentionally omitted because
|
|
453
|
+
**Alt prefix / Esc** inserts the same `\x1B`. `Ctrl` and `Alt` are modifiers,
|
|
454
|
+
not bytes. For the conventional `Alt+x` terminal sequence, insert **Alt prefix
|
|
455
|
+
/ Esc**, then type `x`. The picker avoids relying on Escape and Tab key events,
|
|
456
|
+
which the dialog reserves for close and focus movement.
|
|
457
|
+
|
|
458
|
+
Before Broadcast sends a command matching a high-risk pattern, it asks for a
|
|
459
|
+
second confirmation. Current patterns include `rm`, `find -delete`, `git reset
|
|
460
|
+
--hard`, forced `git clean`, filesystem formatting, `dd of=`, `truncate`,
|
|
461
|
+
`shred`, and shutdown commands. The confirmation shows matched patterns,
|
|
462
|
+
selected targets, sync delivery, and the command text. This is a convenience
|
|
463
|
+
warning only: it is not a shell parser or a security boundary, so review every
|
|
464
|
+
Broadcast command before selecting **Send Anyway**.
|
|
465
|
+
|
|
466
|
+
Broadcast and Diagnostics panels open at the same lower-right position. Drag a
|
|
467
|
+
panel heading to move that panel within the window. The temporary position is
|
|
468
|
+
not saved and does not change the terminal window position or size.
|
|
469
|
+
|
|
470
|
+
The following `printf` examples are for POSIX shells such as `bash`, `dash`, and `fish`. They do not run as-is in Windows PowerShell or cmd.exe.
|
|
471
|
+
|
|
472
|
+
```sh
|
|
473
|
+
printf '\033]0;work\a\r\n'
|
|
474
|
+
printf '\033]777;titlebarColor=#2e7d32\a\r\n'
|
|
475
|
+
printf '\033]777;opacity=0.65\a\r\n'
|
|
476
|
+
printf '\033]777;title=work;titlebarColor=#2e7d32\a\r\n'
|
|
477
|
+
printf '\033]777;log=start\a\r\n'
|
|
478
|
+
printf '\033]777;log=stop\a\r\n'
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
In PowerShell, emit the same fpasoterm OSC 777 sequence with:
|
|
482
|
+
|
|
483
|
+
```powershell
|
|
484
|
+
[Console]::Write("$([char]27)]777;title=work;titlebarColor=#2e7d32$([char]7)`r`n")
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
The runtime config sample can be applied with:
|
|
488
|
+
|
|
489
|
+
```sh
|
|
490
|
+
./examples/apply-runtime-appearance.sh
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
On Windows PowerShell or cmd.exe:
|
|
494
|
+
|
|
495
|
+
```powershell
|
|
496
|
+
.\examples\apply-runtime-appearance.ps1
|
|
497
|
+
.\examples\apply-runtime-appearance.bat
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
This sample changes the title to `RUNTIME SAMPLE ACTIVE`, switches the titlebar to pink, and changes the terminal background and text colors.
|
|
501
|
+
|
|
502
|
+
To return the running window to the default appearance:
|
|
503
|
+
|
|
504
|
+
```sh
|
|
505
|
+
./examples/apply-default-appearance.sh
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
On Windows PowerShell or cmd.exe:
|
|
509
|
+
|
|
510
|
+
```powershell
|
|
511
|
+
.\examples\apply-default-appearance.ps1
|
|
512
|
+
.\examples\apply-default-appearance.bat
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
Or, if you need to specify the path manually:
|
|
516
|
+
|
|
517
|
+
```sh
|
|
518
|
+
config_path="$(pwd)/examples/config/runtime-appearance.toml"
|
|
519
|
+
printf '\033]777;config=%s\a\r\n' "$config_path"
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
In Windows PowerShell, specify the path manually with:
|
|
523
|
+
|
|
524
|
+
```powershell
|
|
525
|
+
$configPath = Resolve-Path .\examples\config\runtime-appearance.toml
|
|
526
|
+
[Console]::Write("$([char]27)]777;config=$configPath$([char]7)`r`n")
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
Runtime config application keeps the current shell session running. It applies live window and terminal appearance settings such as `window.title`, `window.titlebarColor`, `window.width`, `window.height`, `terminal.fontSize`, `terminal.lineHeight`, `terminal.minimumContrastRatio`, `terminal.fontFamily`, `terminal.backgroundOpacity`, and `terminal.theme`. Settings that require a new PTY, such as `terminal.shell`, take effect on the next launch.
|
|
530
|
+
|
|
531
|
+
TOML does not allow the same table to be defined more than once. To test values such as `frame = true`, edit the existing `[window]` section. Adding another `[window]` section at the end of the file causes a config parse error.
|
|
532
|
+
|
|
533
|
+
## Plugins
|
|
534
|
+
|
|
535
|
+
Plugins live under:
|
|
536
|
+
|
|
537
|
+
```text
|
|
538
|
+
~/.config/fpasoterm/User/plugins/
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Enable them in `config.toml`:
|
|
542
|
+
|
|
543
|
+
```toml
|
|
544
|
+
[plugins]
|
|
545
|
+
enabled = ["plugins/example.ts"]
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
TypeScript plugins are transpiled to:
|
|
549
|
+
|
|
550
|
+
```text
|
|
551
|
+
~/.config/fpasoterm/User/cache/plugins/
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
See `examples/config/` for sample configs and `examples/plugins/` for sample plugins.
|