Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ concurrency:
jobs:
checkpoint-validation:
name: Validate engineering checkpoint
if: ${{ contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]'), github.ref_name) }}
if: ${{ contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]'), github.ref_name) }}
runs-on: windows-2022
timeout-minutes: 30
steps:
Expand All @@ -35,7 +35,7 @@ jobs:

validate:
name: Validate exact release source
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]'), github.ref_name) }}
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]'), github.ref_name) }}
runs-on: windows-2022
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -82,7 +82,7 @@ jobs:

test-x64:
name: Build and test x64 Release
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]'), github.ref_name) }}
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]'), github.ref_name) }}
needs: validate
runs-on: windows-2022
timeout-minutes: 240
Expand All @@ -102,7 +102,7 @@ jobs:

release:
name: Build, test, attest, and publish EXE and Portable ZIP
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]'), github.ref_name) }}
if: ${{ !contains(fromJSON('["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]'), github.ref_name) }}
needs:
- validate
- test-x64
Expand Down
31 changes: 28 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
# Changelog

## Unreleased
## 1.3.1 - 2026-08-11

Documentation-only work. No application code, resource, or version file
changed, and no release was produced.
Engineering checkpoint for the Pane Search roadmap, Phase 1: active-pane
search. Like the v1.2.1 through v1.2.4 checkpoints, this version marks merged
development work only. It is not a published release and produces no
downloadable artifacts; GitHub Latest and WinGet keep pointing at the stable
v1.2.0, and v1.3.0-beta3 remains the newest published prerelease.

### Added

- Added `Ctrl+F` as the default Find shortcut. It targets the active pane
only: the action resolves the focused pane through the tab's existing pane
model and opens the search box as an overlay inside that pane's terminal
control, so sibling panes, other tabs, and the Command Timeline are never
searched and never show foreign search state. `Ctrl+Shift+F` stays bound as
a compatibility alias, and both chords remain ordinary remappable
keybindings — a profile that needs a literal `^F` for a terminal
application can unbind `ctrl+f` and keep reaching Find through
`Ctrl+Shift+F` or the Command Palette.
- The search experience is carried entirely by the existing Microsoft
Terminal search pipeline — search box control, buffer searcher, and
renderer highlights — now validated for winTerm: typing searches the active
pane's full text buffer including scrollback live on every keystroke, all
matches are highlighted at once, `Enter` and `Shift+Enter` step forward and
backward with wrap-around, an empty query shows no highlights, and `Esc` or
the close button clears the search state and returns focus to the terminal.
Text typed into the search box is never sent to the shell, and a closed
search performs no recurring background work. No second search engine,
index, or buffer copy was introduced.

### Documentation

Expand Down
6 changes: 3 additions & 3 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Microsoft、Windows、Windows Terminalのロゴも使用していません。
- `winTerm-<version>-setup-x64.exe` — 現在のユーザー、または全ユーザーへのインストール用;
- `winTerm-<version>-portable-x64.zip` — 展開してそのまま実行する用。

現在のソースバージョンは `1.3.0-beta3` で、
現在のソースバージョンは `1.3.1` で、
最新の安定版リリースは `1.2.0` です。公開されている資産の一覧とチェックサムの全体は、
[最新の公式リリース](https://github.com/HelloThisWorld/winTerm/releases/latest)
を参照してください。
Expand Down Expand Up @@ -111,8 +111,8 @@ PowerShell 7と、[ビルド手順(英語)](docs/build.md)に記載された
.\scripts\winterm\build.ps1 -Configuration Release -Platform x64 -IncludeTests
.\scripts\winterm\test.ps1 -Suite Relevant -Configuration Release -Platform x64
.\scripts\winterm\build-unpackaged.ps1 -Configuration Release -Platform x64
.\scripts\winterm\build-installer.ps1 -Version 1.3.0-beta3 -Platform x64
.\scripts\winterm\build-portable.ps1 -Version 1.3.0-beta3 -Platform x64
.\scripts\winterm\build-installer.ps1 -Version 1.3.1 -Platform x64
.\scripts\winterm\build-portable.ps1 -Version 1.3.1 -Platform x64
```

アンパッケージ形式の生成処理では、統合されたリソースインデックスを作るための
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ application downloads are:
- `winTerm-<version>-setup-x64.exe` — current-user or all-users installation;
- `winTerm-<version>-portable-x64.zip` — extract and run without installation.

The current source version is `1.3.0-beta3`;
The current source version is `1.3.1`;
the latest stable release is `1.2.0`. See the
[latest official Release](https://github.com/HelloThisWorld/winTerm/releases/latest)
for the complete published asset list and checksums.
Expand Down Expand Up @@ -106,8 +106,8 @@ Use PowerShell 7 and the Microsoft Terminal toolchain described in
.\scripts\winterm\build.ps1 -Configuration Release -Platform x64 -IncludeTests
.\scripts\winterm\test.ps1 -Suite Relevant -Configuration Release -Platform x64
.\scripts\winterm\build-unpackaged.ps1 -Configuration Release -Platform x64
.\scripts\winterm\build-installer.ps1 -Version 1.3.0-beta3 -Platform x64
.\scripts\winterm\build-portable.ps1 -Version 1.3.0-beta3 -Platform x64
.\scripts\winterm\build-installer.ps1 -Version 1.3.1 -Platform x64
.\scripts\winterm\build-portable.ps1 -Version 1.3.1 -Platform x64
```

The unpackaged generator uses an unsigned MSIX only as an upstream build
Expand Down
67 changes: 42 additions & 25 deletions docs/current-progress.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,47 @@
# Current development progress

Last updated: 2026-08-05
Last updated: 2026-08-11

## Repository state

- Branch: `release/v1.3.0-beta3`
- Base: `fix/visual-progress-shell-fallback-one-shot` at `baf6f8a87`
(one-shot launch fallback fix, pull request #41), based on `main` at
`39193206c` (1.3.0-beta2 release metadata, pull request #40)
- Branch: `feature/v1.3.1-pane-search-phase1`, based on `main` at
`4753fba68` (Japanese README, pull request #43)
- Microsoft Terminal upstream revision:
`1cea42d433253d95c4487a3037db48197b5e72f4`
- Application version: `1.3.0-beta3`
- Package/file version: `1.3.0.6`
- PowerShell module version: `1.3.0` with prerelease suffix `beta3`
- Release channel: `beta`
- Release tag: `v1.3.0-beta3`
- Application version: `1.3.1`
- Package/file version: `1.3.1.0`
- PowerShell module version: `1.3.1` with no prerelease suffix
- Release channel: `stable` (engineering checkpoint; nothing is published)
- Checkpoint tag: `v1.3.1`, listed with the v1.2.x checkpoint tags in the
release workflow so a pushed checkpoint tag runs quick validation only and
can never produce release artifacts
- Current public Latest: `v1.2.0`, the stable Visual Progress release
- Newest published prerelease: `v1.3.0-beta3` on the beta channel
- Supported target: Windows 11 x64

`v1.3.0-beta3` is the third beta of the Command Timeline release. It fixes
the beta2 field report that any long-running command — k9s, vim, top,
FastAPI/uvicorn, Spring Boot, Node dev servers, `tail -f`,
`kubectl port-forward` — kept the Visual Progress rainbow animation looping
for its whole lifetime. The OSC 133 Shell Integration fallback is now a
bounded one-shot launch indication scoped by a shell command generation. The
release workflow marks any non-stable channel with `--prerelease` and
`--latest=false`, so `/releases/latest` keeps resolving to v1.2.0. Like the
earlier betas, it is listed on the winTerm website next to the stable v1.2.0
download and is skipped by the WinGet workflow.
`v1.3.1` is an engineering checkpoint, the first of the Pane Search roadmap
toward v1.4. Like the v1.2.1 through v1.2.4 Command Timeline checkpoints, it
is a source/development version only: no GitHub Release, website slot, or
WinGet update is produced, and `/releases/latest` keeps resolving to v1.2.0.

## Pane Search status (v1.4 roadmap)

Phase 1 — active-pane search — is complete in this checkpoint. `Ctrl+F` (and
the retained `Ctrl+Shift+F` alias) opens the existing Microsoft Terminal
search box inside the focused pane only. The implementation reuses the
mature upstream pipeline end to end — `SearchBoxControl`,
`ControlCore::Search`, `Search`/`TextBuffer::SearchText`, and renderer
search highlights — with no second search engine, no index, and no buffer
duplication. Live search on every keystroke highlights all matches across
the pane's scrollback, Enter/Shift+Enter navigate with wrap-around, Esc
clears the state, search-box input never reaches the shell, and each
terminal control keeps its own search state so split panes stay isolated.

Deferred to later phases: the winTerm-specific search UI redesign and
scrollbar overview markers (Phase 2), and performance work such as
debouncing or large-scrollback optimization (Phase 3). Final integration is
planned as `1.4.0-alpha`, with promotion to beta only after manual user
validation.

## Command Timeline status

Expand Down Expand Up @@ -142,11 +156,14 @@ through pull request #32:

## Next steps

1. Update the winTerm website: dual stable/beta download columns, refreshed
sanitized screenshots, the Tools navigation dropdown, and the logo link.
2. Collect beta feedback.
3. Promote to a stable `v1.3.0` only after beta testing, which is the point at
which Latest, WinGet, and the website stable slot move.
1. Pane Search Phase 2 (`1.3.2`): winTerm-specific search UI and scrollbar
overview markers.
2. Pane Search Phase 3 (`1.3.3`): performance investigation and hardening.
3. Final integration checkpoint `1.4.0-alpha`, then manual user validation
before any beta promotion.
4. Collect Command Timeline beta feedback; promote a stable `v1.3.0` only
after beta testing, which is the point at which Latest, WinGet, and the
website stable slot move.

## Validation state

Expand Down
21 changes: 21 additions & 0 deletions docs/user/keyboard-shortcuts.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,27 @@ while it owns pointer capture.
Pane movement commands are not available in winTerm 1.1. A legacy custom
`movePane` action can still be parsed safely but is disabled.

## Search

| Shortcut | Behavior |
| --- | --- |
| `Ctrl+F` | Open search in the focused pane |
| `Ctrl+Shift+F` | Open search in the focused pane (compatibility alias) |

Search always targets the active pane. The search box opens as an overlay
inside that pane without resizing terminal content, and the input field is
focused immediately. Typing searches the pane's buffer and scrollback as you
type and highlights every match at once. `Enter` moves to the next match and
`Shift+Enter` to the previous one, wrapping around at either end. `Esc` or
the close button dismisses the search box, clears the highlights, and
returns focus to the terminal. Text typed into the search box never reaches
the shell.

Both chords are ordinary configurable keybindings. A terminal application
that needs a literal `Ctrl+F` keystroke can reclaim it by unbinding the
default (`{ "command": "unbound", "keys": "ctrl+f" }` in settings); Find
stays reachable through `Ctrl+Shift+F` or the Command Palette.

## Command Timeline

| Shortcut | Behavior |
Expand Down
6 changes: 3 additions & 3 deletions scripts/winterm/package-shell-assets.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ foreach ($relativePath in $sourceAssets)
}

$version = Get-Content -LiteralPath (Join-Path $repositoryRoot 'shell\shared\version.json') -Raw | ConvertFrom-Json
if ($version.moduleVersion -ne '1.3.0' -or
$version.modulePrerelease -ne 'beta3' -or
$version.applicationVersion -ne '1.3.0-beta3' -or
if ($version.moduleVersion -ne '1.3.1' -or
$version.modulePrerelease -ne '' -or
$version.applicationVersion -ne '1.3.1' -or
$version.protocolVersion -ne 1)
{
throw 'The winTerm Shell asset version metadata is invalid.'
Expand Down
4 changes: 2 additions & 2 deletions scripts/winterm/test-release-workflow.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ try
"- 'v*'",
'checkpoint-validation:',
'Validate engineering checkpoint',
'["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]',
'["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]',
'verify-version.ps1 -RequireTag',
'test.ps1 -Suite Smoke',
'contents: write',
Expand Down Expand Up @@ -63,7 +63,7 @@ try
}
}

$checkpointGuard = 'contains(fromJSON(''["v1.2.1","v1.2.2","v1.2.3","v1.2.4"]''), github.ref_name)'
$checkpointGuard = 'contains(fromJSON(''["v1.2.1","v1.2.2","v1.2.3","v1.2.4","v1.3.1"]''), github.ref_name)'
if ([regex]::Matches($workflow, [regex]::Escape($checkpointGuard)).Count -ne 4)
{
throw 'Release workflow must guard the checkpoint validation and all three full release jobs.'
Expand Down
44 changes: 22 additions & 22 deletions scripts/winterm/test-visual-progress.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1431,12 +1431,12 @@ try

$version = $source.VersionMetadata | ConvertFrom-Json
$expectedVersionValues = [ordered]@{
applicationVersion = '1.3.0-beta3'
packageVersion = '1.3.0.6'
moduleVersion = '1.3.0'
modulePrerelease = 'beta3'
channel = 'beta'
tag = 'v1.3.0-beta3'
applicationVersion = '1.3.1'
packageVersion = '1.3.1.0'
moduleVersion = '1.3.1'
modulePrerelease = ''
channel = 'stable'
tag = 'v1.3.1'
workspaceSchemaVersion = 2
dockingModelVersion = 1
shellProtocolVersion = 1
Expand All @@ -1451,39 +1451,39 @@ try
}
}
$shellVersion = $source.ShellVersion | ConvertFrom-Json
if ($shellVersion.applicationVersion -ne '1.3.0-beta3' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1)
if ($shellVersion.applicationVersion -ne '1.3.1' -or $shellVersion.moduleVersion -ne '1.3.1' -or $shellVersion.protocolVersion -ne 1)
{
throw 'Shell version metadata does not match winTerm release 1.3.0-beta3 with protocol version 1.'
throw 'Shell version metadata does not match winTerm version 1.3.1 with protocol version 1.'
}
foreach ($surface in @(
@{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.0-beta3" }'; Description = 'About release metadata' },
@{ Content = $source.PackageManifest; Value = 'Version="1.3.0.6"'; Description = 'MSIX package manifest' },
@{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,0,6'; Description = 'Terminal host file version' },
@{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.0-beta3\0"'; Description = 'Terminal host display version' },
@{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,0,6'; Description = 'Shim file version' },
@{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.0-beta3\0"'; Description = 'Shim display version' },
@{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.1" }'; Description = 'About release metadata' },
@{ Content = $source.PackageManifest; Value = 'Version="1.3.1.0"'; Description = 'MSIX package manifest' },
@{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,1,0'; Description = 'Terminal host file version' },
@{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.1\0"'; Description = 'Terminal host display version' },
@{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,1,0'; Description = 'Shim file version' },
@{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.1\0"'; Description = 'Shim display version' },
@{ Content = $source.CustomProps; Value = '<VersionMajor>1</VersionMajor>'; Description = 'Executable major version' },
@{ Content = $source.CustomProps; Value = '<VersionMinor>3</VersionMinor>'; Description = 'Executable minor version' },
@{ Content = $source.ShellModuleManifest; Value = "ModuleVersion = '1.3.0'"; Description = 'PowerShell module manifest' },
@{ Content = $source.ShellModule; Value = "`$script:WinTermModuleVersion = '1.3.0'"; Description = 'PowerShell module runtime' },
@{ Content = $source.ShellModuleManifest; Value = "ModuleVersion = '1.3.1'"; Description = 'PowerShell module manifest' },
@{ Content = $source.ShellModule; Value = "`$script:WinTermModuleVersion = '1.3.1'"; Description = 'PowerShell module runtime' },
@{ Content = $source.PackageShellAssets; Value = "'shell\shared\version.json'"; Description = 'Canonical shell version metadata packaging' },
@{ Content = $source.WorkspaceSerializer; Value = '"1.3.0-beta3"'; Description = 'Workspace application-version fallback' }
@{ Content = $source.WorkspaceSerializer; Value = '"1.3.1"'; Description = 'Workspace application-version fallback' }
))
{
Assert-Contains $surface.Content $surface.Value $surface.Description
}
foreach ($required in @(
"applicationVersion -eq '1.3.0-beta3'",
"packageVersion -eq '1.3.0.6'",
"moduleVersion -eq '1.3.0'",
"tag -eq 'v1.3.0-beta3'",
"applicationVersion -eq '1.3.1'",
"packageVersion -eq '1.3.1.0'",
"moduleVersion -eq '1.3.1'",
"tag -eq 'v1.3.1'",
"Workspace Schema version remains 2",
"Docking Model version remains 1",
"Shell Protocol version remains 1",
"Theme Schema remains at version 1"
))
{
Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.0-beta3 version validation surface'
Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.1 version validation surface'
}

$testBinary = Join-Path $root "bin\$Platform\$Configuration\UnitTests_SettingsModel\SettingsModel.Unit.Tests.dll"
Expand Down
4 changes: 2 additions & 2 deletions scripts/winterm/test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ function Test-ShellExperienceFoundations
}

$manifest = Import-PowerShellDataFile -LiteralPath $moduleManifest
if ($manifest.ModuleVersion -ne '1.3.0' -or
$manifest.PrivateData.PSData.Prerelease -ne 'beta3' -or
if ($manifest.ModuleVersion -ne '1.3.1' -or
$manifest.PrivateData.PSData.Prerelease -ne '' -or
$manifest.PowerShellVersion -ne '5.1')
{
throw 'The winTerm PowerShell module manifest does not declare the supported version boundary.'
Expand Down
2 changes: 1 addition & 1 deletion scripts/winterm/verify-branding.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ function Test-Manifest
Test-Requirement -Condition ($null -ne $identity -and $identity.Name -eq 'HelloThisWorld.winTerm') -Message "$Path uses package identity HelloThisWorld.winTerm"
Test-Requirement -Condition ($null -ne $identity -and $identity.Name -notmatch '^Microsoft\.') -Message "$Path does not use a Microsoft package name"
Test-Requirement -Condition ($null -ne $identity -and $identity.Publisher -ceq $ExpectedPublisher) -Message "$Path uses the expected non-Microsoft publisher"
Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.3.0.6') -Message "$Path uses package version 1.3.0.6"
Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.3.1.0') -Message "$Path uses package version 1.3.1.0"
Test-Requirement -Condition ($null -ne $properties -and $properties.DisplayName -eq 'winTerm') -Message "$Path package display name is winTerm"
Test-Requirement -Condition ($null -ne $application -and $application.Id -eq 'winTerm') -Message "$Path application ID is winTerm"
Test-Requirement -Condition ($null -ne $visualElements -and $visualElements.DisplayName -eq 'winTerm') -Message "$Path application display name is winTerm"
Expand Down
Loading