qchanged. 修改了Mac OS打包逻辑

This commit is contained in:
lincube
2026-05-30 16:11:25 +08:00
parent 5be4537b2c
commit 4051b5cd74
10 changed files with 439 additions and 25 deletions

View File

@@ -637,10 +637,10 @@ jobs:
dotnet publish LanMountainDesktop/LanMountainDesktop.csproj \
-c Release \
-o ./publish/macos-${{ matrix.arch }}-app \
--self-contained \
--self-contained:false \
-r osx-${{ matrix.arch }} \
-p:SelfContained=false \
-p:PublishSingleFile=false \
-p:SelfContained=true \
-p:DebugType=none \
-p:DebugSymbols=false \
-p:SkipAirAppHostBuild=true \
@@ -651,6 +651,17 @@ jobs:
-p:FileVersion=${{ needs.prepare.outputs.assembly_version }} \
-p:InformationalVersion=${{ needs.prepare.outputs.informational_version }}
- name: Optimize and Guard macOS Payload
run: |
arch="${{ matrix.arch }}"
publishDir="publish/macos-${arch}-app"
pwsh ./LanMountainDesktop/scripts/Optimize-PublishPayload.ps1 \
-PublishDir "$publishDir" \
-RuntimeIdentifier "osx-${arch}" \
-AssertClean
shell: bash
- name: Package Payload Zip
run: |
release_dir="$PWD/release-assets"

View File

@@ -8,7 +8,10 @@ Rebuild the settings window as an independent Fluent shell with a custom titleba
- Keep the existing independent settings-window lifecycle: open-or-focus, no owner anchor, own taskbar entry.
- Use a 48 DIP titlebar with Back, pane toggle, icon/title, search, restart action, more menu, and caption-button spacer.
- Keep the titlebar and content area on one shared full-window background layer; the custom titlebar must remain transparent and must not paint a contrasting strip.
- Avoid a visible titlebar bottom divider that makes the titlebar read as a separate color band.
- Keep `FANavigationView` as the primary navigation surface with `OpenPaneLength` around 283 DIP.
- Keep `FANavigationView` pane and content template backgrounds transparent in the settings shell so the navigation control does not reintroduce a second surface color.
- Move the compact/minimal pane toggle from the navigation footer into the titlebar.
- Add search over built-in settings pages and settings expanders; selecting a result navigates, expands, focuses, and highlights.
- Add `auto` system material mode and make it the default.

View File

@@ -0,0 +1,93 @@
using Xunit;
namespace LanMountainDesktop.Tests;
public sealed class SettingsWindowShellVisualTests
{
[Fact]
public void SettingsWindow_UsesOneFullWindowBackgroundBehindTitlebarAndContent()
{
var xaml = ReadRepositoryFile("LanMountainDesktop", "Views", "SettingsWindow.axaml");
Assert.Contains("x:Name=\"RootGrid\"", xaml);
Assert.Contains("Background=\"Transparent\"", ExtractElementStart(xaml, "<Grid x:Name=\"RootGrid\""));
Assert.Contains("Grid.RowSpan=\"2\"", xaml);
Assert.Contains("Background=\"{DynamicResource AdaptiveSettingsWindowBackgroundBrush}\"", xaml);
Assert.Contains("Background=\"{DynamicResource AdaptiveSettingsWindowTintBrush}\"", xaml);
}
[Fact]
public void SettingsWindow_TitlebarDoesNotPaintASeparateSurfaceBand()
{
var xaml = ReadRepositoryFile("LanMountainDesktop", "Views", "SettingsWindow.axaml");
var titlebar = ExtractElementStart(xaml, "<Border x:Name=\"WindowTitleBarHost\"");
Assert.Contains("Background=\"Transparent\"", titlebar);
Assert.Contains("BorderBrush=\"Transparent\"", titlebar);
Assert.Contains("BorderThickness=\"0\"", titlebar);
Assert.DoesNotContain("BorderThickness=\"0,0,0,1\"", titlebar);
Assert.DoesNotContain("AdaptiveSettingsWindowBackgroundBrush", titlebar);
}
[Fact]
public void SettingsWindow_NavigationShellBackgroundsAreTransparent()
{
var xaml = ReadRepositoryFile("LanMountainDesktop", "Views", "SettingsWindow.axaml");
Assert.Contains("Classes=\"settings-navigation-view\"", xaml);
Assert.Contains("<SolidColorBrush x:Key=\"NavigationViewContentBackground\" Color=\"Transparent\" />", xaml);
Assert.Contains("<SolidColorBrush x:Key=\"NavigationViewContentGridBorderBrush\" Color=\"Transparent\" />", xaml);
Assert.Contains("<SolidColorBrush x:Key=\"NavigationViewDefaultPaneBackground\" Color=\"Transparent\" />", xaml);
Assert.Contains("<SolidColorBrush x:Key=\"NavigationViewExpandedPaneBackground\" Color=\"Transparent\" />", xaml);
Assert.Contains("<SolidColorBrush x:Key=\"NavigationViewTopPaneBackground\" Color=\"Transparent\" />", xaml);
}
[Fact]
public void NavigationStyles_KeepSettingsNavigationTemplateTransparent()
{
var styles = ReadRepositoryFile("LanMountainDesktop", "Styles", "NavigationStyles.axaml");
Assert.Contains("ui|FANavigationView.settings-navigation-view", styles);
Assert.Contains("Grid#RootGrid", styles);
Assert.Contains("Grid#ContentGrid", styles);
Assert.Contains("Grid#PaneRoot", styles);
Assert.Contains("Border#NavigationViewBorder", styles);
Assert.Contains("Border#ContentGridBorder", styles);
Assert.Contains("Border#PaneBorder", styles);
Assert.Contains("<Setter Property=\"Background\" Value=\"Transparent\" />", styles);
Assert.Contains("<Setter Property=\"BorderBrush\" Value=\"Transparent\" />", styles);
}
private static string ExtractElementStart(string source, string startToken)
{
var start = source.IndexOf(startToken, StringComparison.Ordinal);
Assert.True(start >= 0, $"Could not find '{startToken}'.");
var end = source.IndexOf('>', start);
Assert.True(end > start, $"Could not find end of '{startToken}'.");
return source.Substring(start, end - start + 1);
}
private static string ReadRepositoryFile(params string[] segments)
{
var directory = new DirectoryInfo(AppContext.BaseDirectory);
while (directory is not null)
{
var candidate = Path.Combine(new[] { directory.FullName }.Concat(segments).ToArray());
if (File.Exists(candidate))
{
return File.ReadAllText(candidate);
}
if (File.Exists(Path.Combine(directory.FullName, "LanMountainDesktop.slnx")))
{
break;
}
directory = directory.Parent;
}
throw new FileNotFoundException($"Could not locate repository file '{Path.Combine(segments)}'.");
}
}

View File

@@ -116,6 +116,7 @@
</Style>
<Style Selector="ui|FANavigationView.settings-navigation-view">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Transitions">
<Transitions>
<DoubleTransition Property="Opacity" Duration="0:0:0.2" Easing="0.05,0.75,0.10,1.00" />
@@ -123,6 +124,23 @@
</Setter>
</Style>
<Style Selector="ui|FANavigationView.settings-navigation-view /template/ Grid#RootGrid,
ui|FANavigationView.settings-navigation-view /template/ Grid#ContentGrid,
ui|FANavigationView.settings-navigation-view /template/ Grid#ContentRoot,
ui|FANavigationView.settings-navigation-view /template/ Grid#PaneRoot,
ui|FANavigationView.settings-navigation-view /template/ Grid#PaneContentGrid">
<Setter Property="Background" Value="Transparent" />
</Style>
<Style Selector="ui|FANavigationView.settings-navigation-view /template/ Border#NavigationViewBorder,
ui|FANavigationView.settings-navigation-view /template/ Border#ContentGridBorder,
ui|FANavigationView.settings-navigation-view /template/ Border#PaneBorder,
ui|FANavigationView.settings-navigation-view /template/ Border#PaneContentGridBorder,
ui|FANavigationView.settings-navigation-view /template/ Border#TopPaneBorder">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
</Style>
<Style Selector="ui|FANavigationView.settings-navigation-view /template/ Border#NavigationViewBorder">
<Setter Property="Transitions">
<Transitions>

View File

@@ -67,11 +67,20 @@
<Grid x:Name="RootGrid"
Classes="settings-scope"
Background="{DynamicResource AdaptiveSettingsWindowBackgroundBrush}"
Background="Transparent"
RowDefinitions="Auto,*">
<Border Grid.RowSpan="2"
Background="{DynamicResource AdaptiveSettingsWindowBackgroundBrush}"
IsHitTestVisible="False" />
<Border Grid.RowSpan="2"
Background="{DynamicResource AdaptiveSettingsWindowTintBrush}"
IsHitTestVisible="False" />
<ui:FANavigationView x:Name="RootNavigationView"
Grid.Row="1"
Classes="settings-navigation-view"
Margin="0"
Background="Transparent"
PaneDisplayMode="Auto"
@@ -90,6 +99,11 @@
<ui:FANavigationView.Resources>
<SolidColorBrush x:Key="NavigationViewContentBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewContentGridBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewDefaultPaneBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewExpandedPaneBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewMinimalPaneBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewPaneBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewTopPaneBackground" Color="Transparent" />
</ui:FANavigationView.Resources>
<Grid x:Name="SettingsContentGrid"
@@ -155,9 +169,9 @@
<Border x:Name="WindowTitleBarHost"
Grid.Row="0"
Height="48"
Background="{DynamicResource AdaptiveSettingsWindowBackgroundBrush}"
BorderBrush="{DynamicResource AdaptiveSettingsWindowBorderBrush}"
BorderThickness="0,0,0,1"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
PointerPressed="OnTitleBarDragZonePointerPressed">
<Grid ColumnDefinitions="Auto,*,Auto"
VerticalAlignment="Stretch">

View File

@@ -134,10 +134,6 @@ function Remove-NonTargetRuntimeDirectories {
[Parameter(Mandatory = $true)][string]$Rid
)
if ($Rid -notlike "win-*") {
return
}
$runtimeRoots = @(Get-ChildItem -LiteralPath $Root -Recurse -Directory -Filter "runtimes" -ErrorAction SilentlyContinue)
$removed = 0
foreach ($runtimeRoot in $runtimeRoots) {
@@ -152,25 +148,43 @@ function Remove-NonTargetRuntimeDirectories {
Write-Host "Removed non-target runtime directories: $removed"
}
function Assert-WindowsPayloadClean {
function Assert-PayloadClean {
param(
[Parameter(Mandatory = $true)][string]$Root,
[Parameter(Mandatory = $true)][string]$Rid
)
if ($Rid -notlike "win-*") {
$violations = [System.Collections.Generic.List[string]]::new()
if ($Rid -like "win-*") {
$forbiddenExtensions = @(".pdb", ".so", ".dylib", ".a")
$forbiddenBundledRuntimeFiles = @(
"coreclr.dll",
"hostfxr.dll",
"hostpolicy.dll",
"System.Private.CoreLib.dll"
)
} elseif ($Rid -like "osx-*") {
$forbiddenExtensions = @(".pdb", ".so", ".a")
$forbiddenBundledRuntimeFiles = @(
"libcoreclr.dylib",
"libhostfxr.dylib",
"libhostpolicy.dylib",
"System.Private.CoreLib.dll"
)
} elseif ($Rid -like "linux-*") {
$forbiddenExtensions = @(".pdb", ".dylib", ".dll", ".a")
$forbiddenBundledRuntimeFiles = @(
"libcoreclr.so",
"libhostfxr.so",
"libhostpolicy.so",
"System.Private.CoreLib.dll"
)
} else {
Write-Host "Unknown RID platform for payload clean assertion: $Rid — skipping."
return
}
$violations = [System.Collections.Generic.List[string]]::new()
$forbiddenExtensions = @(".pdb", ".so", ".dylib", ".a")
$forbiddenBundledRuntimeFiles = @(
"coreclr.dll",
"hostfxr.dll",
"hostpolicy.dll",
"System.Private.CoreLib.dll"
)
Get-ChildItem -LiteralPath $Root -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $forbiddenExtensions -contains $_.Extension.ToLowerInvariant() } |
ForEach-Object {
@@ -183,7 +197,6 @@ function Assert-WindowsPayloadClean {
$violations.Add((Get-RelativePathCompat -Root $Root -Path $_.FullName))
}
Get-ChildItem -LiteralPath $Root -Recurse -Directory -Filter "runtimes" -ErrorAction SilentlyContinue |
ForEach-Object {
Get-ChildItem -LiteralPath $_.FullName -Directory -ErrorAction SilentlyContinue |
@@ -195,10 +208,10 @@ function Assert-WindowsPayloadClean {
if ($violations.Count -gt 0) {
$sample = ($violations | Select-Object -First 50) -join [Environment]::NewLine
throw "Windows publish payload contains forbidden files or runtime directories for ${Rid}:$([Environment]::NewLine)$sample"
throw "Publish payload contains forbidden files or runtime directories for ${Rid}:$([Environment]::NewLine)$sample"
}
Write-Host "Windows payload guard passed for $Rid."
Write-Host "Payload guard passed for $Rid."
}
function Assert-WindowsPayloadContainsRequiredHosts {
@@ -258,7 +271,7 @@ Remove-NonTargetRuntimeDirectories -Root $resolvedPublishDir -Rid $RuntimeIdenti
Write-PayloadAudit -Root $resolvedPublishDir
if ($AssertClean) {
Assert-WindowsPayloadClean -Root $resolvedPublishDir -Rid $RuntimeIdentifier
Assert-PayloadClean -Root $resolvedPublishDir -Rid $RuntimeIdentifier
if ($RuntimeIdentifier -like "win-*") {
Assert-WindowsPayloadContainsRequiredHosts -Root $resolvedPublishDir
}

View File

@@ -0,0 +1,109 @@
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MMOOVVIINNGG
e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
ESC-j * Forward one file line (or _N file lines).
ESC-k * Backward one file line (or _N file lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
ESC-b * Backward one window, but don't stop at beginning-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Right one half screen width (or _N positions).
ESC-( LeftArrow * Left one half screen width (or _N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SSEEAARRCCHHIINNGG
/_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
n * Repeat previous search (for _N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
^O^N ^On * Search forward for (_N-th) OSC8 hyperlink.
^O^P ^Op * Search backward for (_N-th) OSC8 hyperlink.
^O^L ^Ol Jump to the currently selected OSC8 hyperlink.
ESC-u Undo (toggle) search highlighting.
ESC-U Clear search highlighting.
&_p_a_t_t_e_r_n * Display only matching lines.
---------------------------------------------------
Search is case-sensitive unless changed with -i or -I.
A search pattern may begin with one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
^S _n Search for match in _n-th parenthesized subpattern.
^W WRAP search if no match found.
^L Enter next character literally into pattern.
---------------------------------------------------------------------------
JJUUMMPPIINNGG
g < ESC-< * Go to first line in file (or line _N).
G > ESC-> * Go to last line in file (or line _N).
p % * Go to beginning of file (or _N percent into file).
t * Go to the (_N-th) next tag.
T * Go to the (_N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>.
ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>.
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (_N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (_N-th) close bracket in the bottom line.
m_<_l_e_t_t_e_r_> Mark the current top line with <letter>.
M_<_l_e_t_t_e_r_> Mark the current bottom line with <letter>.
'_<_l_e_t_t_e_r_> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
ESC-m_<_l_e_t_t_e_r_> Clear a mark.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------
CCHHAANNGGIINNGG FFIILLEESS
:e [_f_i_l_e] Examine a new file.
^X^V Same as :e.
:n * Examine the (_N-th) next file from the command line.
:p * Examine the (_N-th) previous file from the command line.
:x * Examine the first (or _N-th) file from the command line.
^O^O Open the currently selected OSC8 hyperlink.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------
MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS

109
ago --name-only --stat Normal file
View File

@@ -0,0 +1,109 @@
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MMOOVVIINNGG
e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
ESC-j * Forward one file line (or _N file lines).
ESC-k * Backward one file line (or _N file lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
ESC-b * Backward one window, but don't stop at beginning-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Right one half screen width (or _N positions).
ESC-( LeftArrow * Left one half screen width (or _N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SSEEAARRCCHHIINNGG
/_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
n * Repeat previous search (for _N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
^O^N ^On * Search forward for (_N-th) OSC8 hyperlink.
^O^P ^Op * Search backward for (_N-th) OSC8 hyperlink.
^O^L ^Ol Jump to the currently selected OSC8 hyperlink.
ESC-u Undo (toggle) search highlighting.
ESC-U Clear search highlighting.
&_p_a_t_t_e_r_n * Display only matching lines.
---------------------------------------------------
Search is case-sensitive unless changed with -i or -I.
A search pattern may begin with one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
^S _n Search for match in _n-th parenthesized subpattern.
^W WRAP search if no match found.
^L Enter next character literally into pattern.
---------------------------------------------------------------------------
JJUUMMPPIINNGG
g < ESC-< * Go to first line in file (or line _N).
G > ESC-> * Go to last line in file (or line _N).
p % * Go to beginning of file (or _N percent into file).
t * Go to the (_N-th) next tag.
T * Go to the (_N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>.
ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>.
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (_N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (_N-th) close bracket in the bottom line.
m_<_l_e_t_t_e_r_> Mark the current top line with <letter>.
M_<_l_e_t_t_e_r_> Mark the current bottom line with <letter>.
'_<_l_e_t_t_e_r_> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
ESC-m_<_l_e_t_t_e_r_> Clear a mark.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------
CCHHAANNGGIINNGG FFIILLEESS
:e [_f_i_l_e] Examine a new file.
^X^V Same as :e.
:n * Examine the (_N-th) next file from the command line.
:p * Examine the (_N-th) previous file from the command line.
:x * Examine the first (or _N-th) file from the command line.
^O^O Open the currently selected OSC8 hyperlink.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------
MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS

View File

@@ -0,0 +1,44 @@
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MMOOVVIINNGG
e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
ESC-j * Forward one file line (or _N file lines).
ESC-k * Backward one file line (or _N file lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
ESC-b * Backward one window, but don't stop at beginning-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Right one half screen width (or _N positions).
ESC-( LeftArrow * Left one half screen width (or _N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SSEEAARRCCHHIINNGG
/_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
n * Repeat previous search (for _N-th occurrence).
N * Repeat previous search in reverse direction.

0
how 6a65087 Normal file
View File