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.

Files changed (101) hide show
  1. package/CHANGELOG.md +230 -0
  2. package/CONTRIBUTING.md +67 -0
  3. package/INSTALL.ja.md +204 -0
  4. package/INSTALL.md +229 -0
  5. package/LICENSE +21 -0
  6. package/README.ja.md +389 -0
  7. package/README.md +607 -0
  8. package/bin/fpasoterm +2882 -0
  9. package/completions/_fpasoterm +81 -0
  10. package/completions/fpasoterm.bash +55 -0
  11. package/completions/fpasoterm.fish +64 -0
  12. package/completions/fpasoterm.ps1 +47 -0
  13. package/docs/capability-diagnostics.en.md +77 -0
  14. package/docs/capability-diagnostics.ja.md +63 -0
  15. package/docs/completion.en.md +141 -0
  16. package/docs/completion.ja.md +113 -0
  17. package/docs/config.en.md +554 -0
  18. package/docs/config.ja.md +544 -0
  19. package/docs/debugging.en.md +72 -0
  20. package/docs/debugging.ja.md +66 -0
  21. package/docs/diagnostics.en.md +69 -0
  22. package/docs/diagnostics.ja.md +64 -0
  23. package/docs/font-diagnostics.en.md +116 -0
  24. package/docs/font-diagnostics.ja.md +105 -0
  25. package/docs/fpasoterm-plugin.d.ts +51 -0
  26. package/docs/known-issues.en.md +23 -0
  27. package/docs/known-issues.ja.md +23 -0
  28. package/docs/plugins.en.md +266 -0
  29. package/docs/plugins.ja.md +176 -0
  30. package/docs/pr-review.en.md +177 -0
  31. package/docs/pr-review.ja.md +170 -0
  32. package/docs/release-checklist.en.md +72 -0
  33. package/docs/release-checklist.ja.md +71 -0
  34. package/docs/security.en.md +36 -0
  35. package/docs/security.ja.md +31 -0
  36. package/docs/spec.en.md +106 -0
  37. package/docs/spec.ja.md +99 -0
  38. package/docs/sshfs.en.md +28 -0
  39. package/docs/sshfs.ja.md +28 -0
  40. package/docs/sync.en.md +280 -0
  41. package/docs/sync.ja.md +280 -0
  42. package/examples/apply-default-appearance.bat +8 -0
  43. package/examples/apply-default-appearance.ps1 +7 -0
  44. package/examples/apply-default-appearance.sh +7 -0
  45. package/examples/apply-runtime-appearance.bat +8 -0
  46. package/examples/apply-runtime-appearance.ps1 +7 -0
  47. package/examples/apply-runtime-appearance.sh +7 -0
  48. package/examples/config/default-appearance.toml +36 -0
  49. package/examples/config/minimal.toml +30 -0
  50. package/examples/config/profiles.toml +20 -0
  51. package/examples/config/runtime-appearance.toml +24 -0
  52. package/examples/config/sync-folder.toml +17 -0
  53. package/examples/config/tui-compatibility.toml +7 -0
  54. package/examples/config/with-plugins.toml +33 -0
  55. package/examples/plugins/hello.ts +17 -0
  56. package/examples/plugins/status-banner.ts +14 -0
  57. package/examples/plugins/theme.ts +32 -0
  58. package/examples/plugins/welcome-banner.ts +16 -0
  59. package/extra/linux/icons/hicolor/128x128/apps/fpasoterm.png +0 -0
  60. package/extra/linux/icons/hicolor/16x16/apps/fpasoterm.png +0 -0
  61. package/extra/linux/icons/hicolor/192x192/apps/fpasoterm.png +0 -0
  62. package/extra/linux/icons/hicolor/256x256/apps/fpasoterm.png +0 -0
  63. package/extra/linux/icons/hicolor/32x32/apps/fpasoterm.png +0 -0
  64. package/extra/linux/icons/hicolor/48x48/apps/fpasoterm.png +0 -0
  65. package/extra/linux/icons/hicolor/512x512/apps/fpasoterm.png +0 -0
  66. package/extra/linux/icons/hicolor/64x64/apps/fpasoterm.png +0 -0
  67. package/extra/linux/io.github.oyoguhito.fpasoterm.desktop +10 -0
  68. package/extra/logo/fpasoterm.png +0 -0
  69. package/extra/macos/fpasoterm.icns +0 -0
  70. package/extra/windows/fpasoterm.cmd +40 -0
  71. package/extra/windows/fpasoterm.ico +0 -0
  72. package/package.json +81 -0
  73. package/scripts/build-artifacts.js +183 -0
  74. package/scripts/generate-icon.js +251 -0
  75. package/scripts/init-jj-empty-main +41 -0
  76. package/scripts/install-linux-desktop.js +238 -0
  77. package/scripts/run +16 -0
  78. package/scripts/security/scan-secrets.js +89 -0
  79. package/scripts/tests/smoke.js +2476 -0
  80. package/scripts/uninstall-desktop.js +20 -0
  81. package/scripts/uninstall-linux-desktop.js +96 -0
  82. package/scripts/uninstall-windows-path.js +94 -0
  83. package/src/config.js +855 -0
  84. package/src/renderer/confirm.html +71 -0
  85. package/src/renderer/index.html +223 -0
  86. package/src/renderer/renderer.js +4166 -0
  87. package/src/renderer/styles.css +969 -0
  88. package/src/renderer/vendor/addon-fit/addon-fit.js +2 -0
  89. package/src/renderer/vendor/addon-image/LICENSE +19 -0
  90. package/src/renderer/vendor/addon-image/addon-image.js +3 -0
  91. package/src/renderer/vendor/addon-web-links/LICENSE +19 -0
  92. package/src/renderer/vendor/addon-web-links/addon-web-links.js +2 -0
  93. package/src/renderer/vendor/xterm/xterm.css +292 -0
  94. package/src/renderer/vendor/xterm/xterm.js +2 -0
  95. package/src-tauri/Cargo.lock +5253 -0
  96. package/src-tauri/Cargo.toml +29 -0
  97. package/src-tauri/build.rs +140 -0
  98. package/src-tauri/capabilities/default.json +13 -0
  99. package/src-tauri/default-config.toml +128 -0
  100. package/src-tauri/src/main.rs +9347 -0
  101. package/src-tauri/tauri.conf.json +60 -0
@@ -0,0 +1,66 @@
1
+ # デバッグガイド
2
+
3
+ IME composition、clipboard、terminal描画、window lifecycleなど、OS固有の問題を
4
+ event traceで確認する場合に使用します。
5
+
6
+ ## 現在のsourceから起動する
7
+
8
+ 既存のfpasoterm windowをすべて閉じてから、local debug binaryを強制rebuildします。
9
+ 古いpackage済みbinaryやcached runtimeを検証しないためです。
10
+
11
+ ```sh
12
+ mise exec node -- ./bin/fpasoterm --dev --foreground --debug-keys --console-diagnostics \
13
+ 2>&1 | tee ~/temp/fpasoterm-debug.log
14
+ ```
15
+
16
+ `--dev`は現在のsourceからlocal debug binaryをrebuildします。`--foreground`は
17
+ launcherをconsoleへ接続したままにします。`--debug-keys`はrendererのkey/composition
18
+ diagnosticを有効化し、`--console-diagnostics`はそれをstderrにも出力します。
19
+
20
+ rebuildを強制せず、console接続だけ必要な場合は以下を使います。
21
+
22
+ ```sh
23
+ fpasoterm --foreground --debug-keys --console-diagnostics
24
+ ```
25
+
26
+ 永続debug logは通常
27
+ `~/.config/fpasoterm/User/logs/fpasoterm-debug.log`です。OSごとに別のUser directoryを
28
+ 設定している場合はその配下を確認してください。
29
+
30
+ ## IME Composition Trace
31
+
32
+ 少なくとも二回の変換を行って再現します。例として、`日本語は`を変換・確定した後、
33
+ 別の文字列を変換・確定するか、句読点を入力します。appを閉じた後、IMEとPTY入力だけを
34
+ 抜き出します。
35
+
36
+ ```sh
37
+ grep -E 'renderer ime (compositionstart|compositionupdate|compositionend|beforeinput|input|keydown|cleared)|renderer terminal input' \
38
+ ~/temp/fpasoterm-debug.log
39
+ ```
40
+
41
+ 期待する動作では、各`renderer terminal input`のpayloadはその回に確定したtextだけです。
42
+ ChromeOSの調査では、`compositionstart`のhelper textarea `value=`と直後の
43
+ `compositionupdate`を比較します。新しいcompositionが以前のvalueを継承してはいけません。
44
+
45
+ 成功した一回と失敗した一回を含む、最小限で連続したtraceを共有してください。event payloadの
46
+ 編集や置換はしないでください。eventの順序がplatform webviewとxterm.jsの相互作用を調べる
47
+ 根拠になります。
48
+
49
+ ## 描画とWindowの診断
50
+
51
+ ChromeOS/BaguetteでWebKitGTKの描画に問題がある場合は以下を使用します。
52
+
53
+ ```sh
54
+ fpasoterm --disable-dmabuf --foreground --console-diagnostics
55
+ ```
56
+
57
+ glyph、terminfo、truecolor、OSC、bracketed paste、bellの問題は報告前にtitlebar menuの
58
+ **Diagnostics > Font / Glyph Test**と**Diagnostics > Capability Test**を実行してください。
59
+ [設定と診断](diagnostics.ja.md)、[Font / Glyph Diagnostics](font-diagnostics.ja.md)、
60
+ [Terminal Capability Diagnostics](capability-diagnostics.ja.md)も参照してください。
61
+
62
+ ## 安全な報告
63
+
64
+ 必要に応じて`fpasoterm --diagnostics`の結果を添付しますが、先に内容を確認してください。
65
+ local path、plugin名、shell出力、sync folder情報が含まれる場合があります。credential、token、
66
+ private command、secretを含むterminal outputは公開しないでください。
@@ -0,0 +1,69 @@
1
+ # Configuration And Diagnostics
2
+
3
+ These commands inspect local state only. They do not open a terminal window or
4
+ modify `config.toml`.
5
+
6
+ ## Configuration
7
+
8
+ ```sh
9
+ fpasoterm --config-path
10
+ fpasoterm --config-example > config.toml
11
+ fpasoterm --config-check
12
+ fpasoterm --config ~/.config/fpasoterm/User/work.toml --config-check
13
+ ```
14
+
15
+ `--config-path` prints the selected `config.toml` path. `--config-example`
16
+ prints the complete default TOML for the current platform. Redirect it only to
17
+ a new file; use `--reset-config` when a backup of an existing config is needed.
18
+
19
+ `--config-check` parses the selected TOML and reports warnings without changing
20
+ it. A TOML syntax error returns exit status `1`; warnings keep exit status `0`
21
+ because fpasoterm can still use defaults for omitted settings. Checks include
22
+ positive numeric settings, `plugins.enabled` entries that are invalid or
23
+ missing, and unsupported keys that `--prune-config` would remove.
24
+
25
+ ## Doctor
26
+
27
+ ```sh
28
+ fpasoterm --doctor
29
+ ```
30
+
31
+ `--doctor` is read-only. The Node launcher validates the selected config,
32
+ compares the installed version with npm `latest`, and runs `npm audit --omit=dev`.
33
+ It never installs an update or changes configuration; follow its explicit
34
+ `--self-update` suggestion only after reviewing the report. Standalone bundled
35
+ binaries run the config and update checks but report npm audit as unavailable,
36
+ because they do not include an npm package manifest.
37
+
38
+ ## Diagnostics Report
39
+
40
+ ```sh
41
+ fpasoterm --diagnostics
42
+ fpasoterm --diagnostics > fpasoterm-diagnostics.md
43
+ fpasoterm --copy-diagnostics
44
+ ```
45
+
46
+ `--diagnostics` prints Markdown intended for a GitHub Issue. It contains the
47
+ version and build commit, operating system and architecture, config path and
48
+ status, enabled plugins, configured or saved terminal size, font size, logging
49
+ path, sync state, and debug-log path. Review the output before posting it:
50
+ plugin names and local paths may be private.
51
+
52
+ `--copy-diagnostics` writes the same Markdown to the operating-system text
53
+ clipboard. It uses the native Windows clipboard, `pbcopy` on macOS, and
54
+ `wl-copy`, `xclip`, or `xsel` on Linux. It returns an error if no supported
55
+ clipboard provider is available.
56
+
57
+ ## Logs
58
+
59
+ ```sh
60
+ fpasoterm --open-log-dir
61
+ ```
62
+
63
+ The command creates the configured terminal-log directory if necessary, opens
64
+ it in the platform file manager, and prints its path. The default is
65
+ `~/.config/fpasoterm/User/logs`; `[logging].directory` overrides it. The debug
66
+ log is always `fpasoterm-debug.log` below the local `User/logs` directory.
67
+
68
+ The npm launcher and direct packaged binaries support these commands. On a
69
+ headless machine, use the printed path rather than `--open-log-dir`.
@@ -0,0 +1,64 @@
1
+ # 設定と診断
2
+
3
+ 以下のcommandはlocal stateを参照するだけで、terminal windowを開かず、
4
+ `config.toml`も書き換えません。
5
+
6
+ ## 設定
7
+
8
+ ```sh
9
+ fpasoterm --config-path
10
+ fpasoterm --config-example > config.toml
11
+ fpasoterm --config-check
12
+ fpasoterm --config ~/.config/fpasoterm/User/work.toml --config-check
13
+ ```
14
+
15
+ `--config-path`は選択中の`config.toml`のpathを表示します。
16
+ `--config-example`は現在のOS向けの完全な既定TOMLを標準出力へ表示します。
17
+ 新規fileを作る場合だけredirectを使ってください。既存configをbackup付きで戻す場合は
18
+ `--reset-config`を使用します。
19
+
20
+ `--config-check`は選択中のTOMLを解析し、書換なしでwarningを表示します。TOML構文errorは
21
+ exit status `1`になります。warningだけの場合は、省略した設定を既定値で補えるためexit status
22
+ `0`です。正の数であるべき設定、無効または存在しない`plugins.enabled`、
23
+ `--prune-config`で削除対象となる未対応keyを確認します。
24
+
25
+ ## Doctor
26
+
27
+ ```sh
28
+ fpasoterm --doctor
29
+ ```
30
+
31
+ `--doctor`はread-onlyです。Node launcherでは選択中のconfig検証、npmの`latest`との比較、
32
+ `npm audit --omit=dev`を実行します。自動更新やconfig書換は行わず、結果に応じて明示的な
33
+ `--self-update`だけを案内します。standalone binaryではconfigと更新確認を実行しますが、
34
+ npm package manifestを持たないためnpm auditは`unavailable`として表示します。
35
+
36
+ ## 診断report
37
+
38
+ ```sh
39
+ fpasoterm --diagnostics
40
+ fpasoterm --diagnostics > fpasoterm-diagnostics.md
41
+ fpasoterm --copy-diagnostics
42
+ ```
43
+
44
+ `--diagnostics`はGitHub Issueへ貼り付けやすいMarkdownを表示します。version/build commit、
45
+ OS/architecture、config path/status、有効plugin、設定済みまたは保存済みterminal size、font size、
46
+ logging path、sync状態、debug log pathを含みます。plugin名やlocal pathがprivateな場合があるため、
47
+ Issueへ投稿する前に内容を確認してください。
48
+
49
+ `--copy-diagnostics`は同じMarkdownをOSのtext clipboardへ書き込みます。Windowsはnative clipboard、
50
+ macOSは`pbcopy`、Linuxは`wl-copy`、`xclip`、`xsel`を順に使います。利用可能なclipboard providerが
51
+ 無い場合はerrorになります。
52
+
53
+ ## Log
54
+
55
+ ```sh
56
+ fpasoterm --open-log-dir
57
+ ```
58
+
59
+ 必要ならterminal log directoryを作成し、OSのfile managerで開いた後、pathも表示します。既定は
60
+ `~/.config/fpasoterm/User/logs`で、`[logging].directory`を設定した場合はそのdirectoryを使います。
61
+ debug logは常にlocalの`User/logs/fpasoterm-debug.log`です。
62
+
63
+ npm launcherと配布済みdirect binaryの両方で使用できます。headless環境では
64
+ `--open-log-dir`ではなく表示されたpathを使用してください。
@@ -0,0 +1,116 @@
1
+ # Font And Glyph Diagnostics
2
+
3
+ Open the window menu and select **Font / Glyph Test**. fpasoterm opens the
4
+ existing diagnostics panel without changing the terminal session or its saved
5
+ configuration.
6
+
7
+ The panel displays the active resolved values for:
8
+
9
+ - `terminal.fontFamily`
10
+ - `terminal.fontSize`
11
+ - `terminal.lineHeight`
12
+
13
+ It renders representative text using those same font values:
14
+
15
+ - CJK text: Japanese, Chinese, and Korean characters
16
+ - Half-width kana, including voiced marks
17
+ - Light and double box-drawing characters
18
+ - Common arrows, mathematical symbols, and status symbols
19
+ - Nerd Font private-use glyphs and their Unicode code points
20
+
21
+ This is a visual check, not a font installation tool. A missing glyph normally
22
+ appears as a fallback glyph, blank cell, or tofu box. That result indicates the
23
+ configured font stack does not supply that glyph. Install or configure an
24
+ appropriate font in `terminal.fontFamily`, then restart fpasoterm and open the
25
+ test again.
26
+
27
+ On Linux and ChromeOS, the default stack starts with installed Noto/DejaVu
28
+ monospace fonts so terminal cell width remains stable for box and block art.
29
+ Nerd Fonts are fallback fonts only. Existing configurations that use the old
30
+ shipped Nerd-Font-first default are migrated at runtime; explicitly selected
31
+ font families are not changed.
32
+
33
+ The default stack includes Noto CJK Japanese, Korean, and Chinese candidates,
34
+ but it cannot use a font that is absent from the operating system. If the
35
+ Korean sample is a tofu box, install an OS CJK font that supports Korean, then
36
+ restart fpasoterm. On Linux, `fc-match 'Noto Sans CJK KR'` is a useful
37
+ diagnostic: a result that falls back to an unrelated font means that candidate
38
+ is not installed.
39
+
40
+ For ChromeOS/Baguette and other Debian-based Linux environments, install the
41
+ Noto CJK font package and rebuild the font cache:
42
+
43
+ ```sh
44
+ sudo apt install fonts-noto-cjk
45
+ fc-cache -f
46
+ fc-match 'Noto Sans CJK KR'
47
+ ```
48
+
49
+ An existing `config.toml` takes precedence over new defaults. If it has an
50
+ explicit `terminal.fontFamily`, remove that one setting to use the current
51
+ default fallback stack, or replace it with a stack that includes `Noto Sans CJK
52
+ KR`. Restart fpasoterm after changing either fonts or `config.toml`.
53
+
54
+ ## Windows
55
+
56
+ Windows can render Nerd Font glyphs when a Nerd Font is installed in Windows.
57
+ Download a trusted Nerd Font `.ttf` or `.otf` file, extract it if needed, then
58
+ right-click the font file and choose **Install** or **Install for all users**.
59
+ In **Settings > Personalization > Fonts**, verify the *exact family name* of
60
+ the chosen Nerd Font. Restart fpasoterm and open **Font / Glyph Test** again.
61
+ The font file name is not necessarily its CSS family name. PowerShell can list
62
+ the installed family names that match common Nerd Font names:
63
+
64
+ ```powershell
65
+ Add-Type -AssemblyName PresentationCore
66
+ [Windows.Media.Fonts]::SystemFontFamilies |
67
+ Where-Object Source -match 'Nerd|Caskaydia|JetBrains|Meslo|FiraCode|Hack' |
68
+ ForEach-Object Source
69
+ ```
70
+
71
+ If a custom `terminal.fontFamily` is already configured, prepend the installed
72
+ font family. For example:
73
+
74
+ ```toml
75
+ [terminal]
76
+ fontFamily = "\"CaskaydiaCove Nerd Font Mono\", \"Symbols Nerd Font Mono\", \"JetBrainsMono Nerd Font\", Cascadia Mono, Consolas, monospace"
77
+ ```
78
+
79
+ Replace `CaskaydiaCove Nerd Font Mono` with the exact name reported by Windows
80
+ when using a different Nerd Font. Put that name before non-Nerd fallback fonts,
81
+ fully exit fpasoterm, start it again, then check both Nerd Font lines in the
82
+ panel. This procedure also distinguishes a missing font from a rendering issue.
83
+
84
+ The `Nerd Font (Powerline):` and `Nerd Font (icons):` lines should then show
85
+ the intended icons instead of tofu boxes or unrelated private-use glyphs.
86
+ Windows language-associated fonts can also be optional on a minimal install;
87
+ add the Korean language/font feature in **Settings > Time & language > Language
88
+ & region** if the Korean CJK sample remains unavailable.
89
+
90
+ The preview uses the resolved terminal configuration, so it is useful after
91
+ changing `config.toml`, applying a profile, or diagnosing different behavior
92
+ across ChromeOS/Linux, macOS, and Windows. It does not modify `config.toml`,
93
+ `window-state.json`, the shell, or multiplexer sessions.
94
+
95
+ ## Verification
96
+
97
+ Use this procedure after installation, after changing a font setting, or when
98
+ comparing platforms:
99
+
100
+ 1. Start fpasoterm and open the window menu.
101
+ 2. Select **Font / Glyph Test**.
102
+ 3. Confirm that the `CJK:` line reads:
103
+
104
+ ```text
105
+ CJK: 日本語 漢字 ひらがな カタカナ 中文 한국어
106
+ ```
107
+
108
+ 4. Confirm that the Japanese, Chinese, and Korean text has visible glyphs and
109
+ consistent cell spacing. A tofu box, blank cell, or visibly different
110
+ fallback font identifies a missing glyph in the configured font stack.
111
+ 5. Check the `Half-width kana:`, `Box drawing:`, `Symbols:`, and `Nerd Font:`
112
+ lines as needed.
113
+
114
+ `npm test` also asserts that this exact CJK sample is present in the renderer
115
+ source. The automated test cannot determine whether a host operating system
116
+ has the required fonts, so the panel remains the visual acceptance test.
@@ -0,0 +1,105 @@
1
+ # Font / Glyph Diagnostics
2
+
3
+ window menu から **Font / Glyph Test** を選択します。既存のdiagnostics panelを
4
+ 表示するだけで、terminal sessionや保存済み設定は変更しません。
5
+
6
+ panelには解決済みの次の値を表示します。
7
+
8
+ - `terminal.fontFamily`
9
+ - `terminal.fontSize`
10
+ - `terminal.lineHeight`
11
+
12
+ これらと同じfont設定で、次の代表文字列を描画します。
13
+
14
+ - 日本語・中国語・韓国語を含むCJK文字
15
+ - 濁点・半濁点を含む半角カナ
16
+ - 通常線と二重線の罫線文字
17
+ - 矢印、数学記号、status用記号
18
+ - Nerd Fontのprivate-use glyphとUnicode code point
19
+
20
+ これは表示確認用であり、fontをinstallする機能ではありません。glyphが無い場合は
21
+ fallback glyph、空cell、tofu boxなどで表示されます。これは設定したfont stackが対象glyphを
22
+ 提供していないことを示します。適切なfontをinstallまたは`terminal.fontFamily`へ設定し、
23
+ fpasotermを再起動してから再度確認してください。
24
+
25
+ Linux/ChromeOS の既定font stackは、罫線・block文字のcell幅を安定させるため、導入済みの
26
+ Noto/DejaVu等幅fontを先頭にします。Nerd Fontはprivate-use glyph用のfallbackです。過去に
27
+ 配布したNerd Font優先の既定値は起動時に移行します。利用者が明示的に指定した`fontFamily`は
28
+ 変更しません。
29
+
30
+ 既定のfont stackにはNoto CJKの日本語・韓国語・中国語候補を含めますが、OSにinstallされて
31
+ いないfontは利用できません。韓国語sampleがtofu boxになる場合は、韓国語に対応するCJK fontを
32
+ OS側でinstallしてからfpasotermを再起動してください。Linuxでは、`fc-match 'Noto Sans CJK KR'`
33
+ の結果が無関係なfontへfallbackしている場合、その候補fontはinstallされていません。
34
+
35
+ ChromeOS/Baguetteを含むDebian系Linuxでは、Noto CJK font packageをinstallし、font cacheを
36
+ 更新して確認できます。
37
+
38
+ ```sh
39
+ sudo apt install fonts-noto-cjk
40
+ fc-cache -f
41
+ fc-match 'Noto Sans CJK KR'
42
+ ```
43
+
44
+ 既存の`config.toml`は新しい既定値より優先されます。`terminal.fontFamily`を明示している
45
+ 場合は、その一行を削除して現在の既定fallback stackを使うか、`Noto Sans CJK KR`を含むstackへ
46
+ 置き換えてください。fontまたは`config.toml`を変更した後はfpasotermを再起動します。
47
+
48
+ ## Windows
49
+
50
+ Windowsでも、Nerd FontをWindowsへinstallすればNerd Font glyphを表示できます。信頼できる
51
+ 配布元からNerd Fontの`.ttf`または`.otf`を取得して展開し、font fileを右クリックして
52
+ **Install** または **Install for all users** を選択します。**Settings > Personalization > Fonts**
53
+ で、選択したNerd Fontの*正確なfamily名*が一覧にあることを確認します。font file名とCSSで指定する
54
+ family名は一致しない場合があります。次のPowerShellでも、代表的なNerd Fontのinstall済みfamily名を
55
+ 列挙できます。
56
+
57
+ ```powershell
58
+ Add-Type -AssemblyName PresentationCore
59
+ [Windows.Media.Fonts]::SystemFontFamilies |
60
+ Where-Object Source -match 'Nerd|Caskaydia|JetBrains|Meslo|FiraCode|Hack' |
61
+ ForEach-Object Source
62
+ ```
63
+
64
+ fpasotermを再起動してから **Font / Glyph Test** を開いてください。
65
+
66
+ 既に`terminal.fontFamily`を指定している場合は、installしたfont familyを先頭へ追加します。
67
+ 例:
68
+
69
+ ```toml
70
+ [terminal]
71
+ fontFamily = "\"CaskaydiaCove Nerd Font Mono\", \"Symbols Nerd Font Mono\", \"JetBrainsMono Nerd Font\", Cascadia Mono, Consolas, monospace"
72
+ ```
73
+
74
+ 別のNerd Fontを利用する場合は、`CaskaydiaCove Nerd Font Mono`をWindowsで確認した正確なfamily名に
75
+ 置き換えます。Nerd Fontではないfallback fontより前に指定し、fpasotermを完全に終了して再起動後、
76
+ panelの2つのNerd Font行を確認してください。この手順によりfont未導入と描画上の問題を区別できます。
77
+
78
+ `Nerd Font (Powerline):` と `Nerd Font (icons):` の行がtofu boxや別のprivate-use glyphではなく、
79
+ 意図したiconとして表示されれば成功です。最小構成のWindowsでは韓国語などのlanguage関連fontが
80
+ optionalの場合もあります。CJK韓国語sampleも表示されない場合は、**Settings > Time & language >
81
+ Language & region** から韓国語のlanguage/font featureを追加してください。
82
+
83
+ previewは解決済みterminal設定を使うため、`config.toml`変更後、profile適用後、ChromeOS/Linux、
84
+ macOS、Windows間での表示差異の確認に使えます。`config.toml`、`window-state.json`、shell、
85
+ multiplexer sessionは変更しません。
86
+
87
+ ## 動作確認
88
+
89
+ install後、font設定変更後、またはOS間の表示差異を確認する場合は、次を実施します。
90
+
91
+ 1. fpasotermを起動し、window menuを開きます。
92
+ 2. **Font / Glyph Test** を選択します。
93
+ 3. `CJK:` 行が次の文字列として表示されることを確認します。
94
+
95
+ ```text
96
+ CJK: 日本語 漢字 ひらがな カタカナ 中文 한국어
97
+ ```
98
+
99
+ 4. 日本語・中国語・韓国語のglyphが表示され、cell幅が一貫していることを確認します。tofu box、
100
+ 空cell、または明らかに異なるfallback fontは、設定したfont stackにglyphが無い目印です。
101
+ 5. 必要に応じて `Half-width kana:`、`Box drawing:`、`Symbols:`、`Nerd Font:` 行も確認します。
102
+
103
+ `npm test`では、この固定のCJK sampleがrenderer sourceに含まれることも確認します。ただし、
104
+ 自動testではOSに必要なfontがinstallされているかまでは判定できないため、panelでの目視確認を
105
+ 表示に関する受け入れ確認として使用します。
@@ -0,0 +1,51 @@
1
+ type FpasotermPluginApi = {
2
+ version: string;
3
+ terminal: {
4
+ options: Record<string, unknown>;
5
+ write: (data: string) => void;
6
+ writeln: (data: string) => void;
7
+ focus: () => void;
8
+ };
9
+ fitAddon: {
10
+ fit: () => void;
11
+ };
12
+ config: {
13
+ window: {
14
+ width: number;
15
+ height: number;
16
+ minWidth: number;
17
+ minHeight: number;
18
+ backgroundColor: string;
19
+ themeSource: 'system' | 'light' | 'dark';
20
+ };
21
+ terminal: Record<string, unknown>;
22
+ plugins: {
23
+ enabled: string[];
24
+ };
25
+ };
26
+ log: (message: string) => void;
27
+ getOfficialPluginIndex: () => Promise<Array<{
28
+ id: string;
29
+ name: string;
30
+ version: string;
31
+ author: string;
32
+ description: string;
33
+ license: string;
34
+ minFpasotermVersion: string;
35
+ installPath: string;
36
+ }>>;
37
+ onReady: (callback: () => void) => void;
38
+ registerCommand: (
39
+ id: string,
40
+ title: string,
41
+ handler: () => void | Promise<void>,
42
+ ) => void;
43
+ };
44
+
45
+ declare global {
46
+ interface Window {
47
+ fpasotermPluginApi: FpasotermPluginApi;
48
+ }
49
+ }
50
+
51
+ export {};
@@ -0,0 +1,23 @@
1
+ # Known Issues
2
+
3
+ ## ChromeOS/Baguette Window Position
4
+
5
+ ChromeOS/Baguette currently ignores or remaps desktop runtime window `x` / `y` placement for fpasoterm. During testing, the runtime reported that `set_position()` applied the requested position, but the visible window was still placed by the compositor/window manager.
6
+
7
+ Repeated delayed position reapplication and `moveTop()` were tested in earlier runtime experiments and removed because resizing the window could freeze the OS. A Tauri one-shot position restore was also tested and did not affect the visible position on the target environment. fpasoterm therefore restores window size only. Window position support is kept as a future task.
8
+
9
+ ## ChromeOS/Baguette Transparent Terminal Background
10
+
11
+ Before the Tauri migration, xterm.js canvas alpha backgrounds did not compose as transparent on the tested ChromeOS/Baguette environment. Alpha backgrounds were rendered as black or opaque colors instead of showing the desktop behind the terminal.
12
+
13
+ The Tauri backend uses WebKitGTK on Linux, enables transparent windows, and sets xterm.js `allowTransparency = true` with a 65% opaque terminal background by default. ChromeOS/Baguette still needs device testing. If rendering flickers or turns black/white, launch with `--disable-dmabuf`, which sets `WEBKIT_DISABLE_DMABUF_RENDERER=1`.
14
+
15
+ ## Kitty/SIXEL Graphics
16
+
17
+ Rendering Kitty, SIXEL, or iTerm inline-image streams can leave the current Tauri/WebKitGTK WebView unresponsive, including to `Ctrl+C`. `[terminal.images]` is therefore disabled by default.
18
+
19
+ ## macOS Gatekeeper
20
+
21
+ Release builds use ad-hoc code signing so CI can verify the generated `.app` bundle and `.dmg` structure. This prevents unsigned or structurally broken artifacts from being uploaded, but it is not the same as Apple Developer ID signing and notarization.
22
+
23
+ For normal double-click installation without Gatekeeper warnings, the release workflow still needs Developer ID certificate and notarization credentials. Until those credentials are configured, macOS may report that a downloaded app is damaged or cannot be verified even when the DMG passes CI validation.
@@ -0,0 +1,23 @@
1
+ # 現時点の既知課題
2
+
3
+ ## ChromeOS/Baguette のウィンドウ位置
4
+
5
+ ChromeOS/Baguette では、fpasoterm から desktop runtime window の `x` / `y` 位置を指定しても、実表示には反映されないことを確認しています。調査中、runtime API は `set_position()` で指定位置が適用されたと報告しましたが、実際の画面では compositor/window manager 側で配置されました。
6
+
7
+ 以前の runtime 検証では、遅延して何度も位置を再適用する方法や `moveTop()` を試しましたが、リサイズ時に OS がフリーズする可能性があるため削除しました。Tauri でも 1 回だけの位置復元を試しましたが、対象環境の実表示には反映されませんでした。このため fpasoterm は現時点では window size のみ復元します。window position support は今後の課題として残します。
8
+
9
+ ## ChromeOS/Baguette の透明 terminal 背景
10
+
11
+ Tauri 移行前にテストした ChromeOS/Baguette 環境では、xterm.js canvas の alpha 背景は透明として合成されませんでした。alpha 付き背景は、デスクトップが透けるのではなく黒または不透明色として表示されました。
12
+
13
+ Tauri backend は Linux で WebKitGTK を使い、transparent window を有効にし、xterm.js に `allowTransparency = true` と 65% 不透明の terminal 背景を設定します。ChromeOS/Baguette 実機では再検証が必要です。描画がちらつく、黒または白になる場合は `--disable-dmabuf` で起動してください。この引数は `WEBKIT_DISABLE_DMABUF_RENDERER=1` を設定します。
14
+
15
+ ## Kitty/SIXEL graphics
16
+
17
+ 現在のTauri/WebKitGTKでKitty、SIXEL、iTerm inline imageのstreamを描画すると、WebViewが無反応になり`Ctrl+C`も届かなくなることがあります。このため`[terminal.images]`は既定で無効です。
18
+
19
+ ## macOS Gatekeeper
20
+
21
+ Release build では ad-hoc code signing を使い、CI で生成された `.app` bundle と `.dmg` の構造を検証します。これにより、未署名または構造的に壊れた artifact が upload されることは防ぎますが、Apple Developer ID による署名と notarization とは別物です。
22
+
23
+ Gatekeeper の警告なしに通常の double-click install を行うには、Release workflow に Developer ID certificate と notarization credentials を設定する必要があります。これらを設定するまでは、CI validation を通過した DMG でも macOS が「壊れている」または「検証できない」と表示する場合があります。