mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
Merge pull request #2043 from hauleth/chore/clean-up-typos
chore: clean up typos
This commit is contained in:
26
.github/workflows/test.yml
vendored
26
.github/workflows/test.yml
vendored
@ -393,3 +393,29 @@ jobs:
|
|||||||
useDaemon: false # sometimes fails on short jobs
|
useDaemon: false # sometimes fails on short jobs
|
||||||
- name: alejandra check
|
- name: alejandra check
|
||||||
run: nix develop -c alejandra --check .
|
run: nix develop -c alejandra --check .
|
||||||
|
|
||||||
|
typos:
|
||||||
|
runs-on: namespace-profile-ghostty-sm
|
||||||
|
timeout-minutes: 60
|
||||||
|
env:
|
||||||
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
|
- name: Setup Cache
|
||||||
|
uses: namespacelabs/nscloud-cache-action@v1.1.6
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
/nix
|
||||||
|
/zig
|
||||||
|
- uses: cachix/install-nix-action@V27
|
||||||
|
with:
|
||||||
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
|
- uses: cachix/cachix-action@v15
|
||||||
|
with:
|
||||||
|
name: ghostty
|
||||||
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
skipPush: true
|
||||||
|
useDaemon: false # sometimes fails on short jobs
|
||||||
|
- name: typos check
|
||||||
|
run: nix develop -c typos
|
||||||
|
@ -445,7 +445,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Documenation
|
// Documentation
|
||||||
if (emit_docs) {
|
if (emit_docs) {
|
||||||
try buildDocumentation(b, config);
|
try buildDocumentation(b, config);
|
||||||
} else {
|
} else {
|
||||||
|
2
dist/macos/update_appcast_tip.py
vendored
2
dist/macos/update_appcast_tip.py
vendored
@ -68,7 +68,7 @@ if len(items) > prune_amount:
|
|||||||
for item in items[:-prune_amount]:
|
for item in items[:-prune_amount]:
|
||||||
channel.remove(item)
|
channel.remove(item)
|
||||||
|
|
||||||
# Create the item using some absoultely terrible XML manipulation.
|
# Create the item using some absolutely terrible XML manipulation.
|
||||||
item = ET.SubElement(channel, "item")
|
item = ET.SubElement(channel, "item")
|
||||||
elem = ET.SubElement(item, "title")
|
elem = ET.SubElement(item, "title")
|
||||||
elem.text = f"Build {build}"
|
elem.text = f"Build {build}"
|
||||||
|
@ -267,7 +267,7 @@ class TerminalController: NSWindowController, NSWindowDelegate,
|
|||||||
|
|
||||||
// Terminals typically operate in sRGB color space and macOS defaults
|
// Terminals typically operate in sRGB color space and macOS defaults
|
||||||
// to "native" which is typically P3. There is a lot more resources
|
// to "native" which is typically P3. There is a lot more resources
|
||||||
// covered in thie GitHub issue: https://github.com/mitchellh/ghostty/pull/376
|
// covered in this GitHub issue: https://github.com/mitchellh/ghostty/pull/376
|
||||||
// Ghostty defaults to sRGB but this can be overridden.
|
// Ghostty defaults to sRGB but this can be overridden.
|
||||||
switch (ghostty.config.windowColorspace) {
|
switch (ghostty.config.windowColorspace) {
|
||||||
case "display-p3":
|
case "display-p3":
|
||||||
|
@ -136,7 +136,7 @@ extension Ghostty {
|
|||||||
/// An application is attempting to read from the clipboard using OSC 52
|
/// An application is attempting to read from the clipboard using OSC 52
|
||||||
case osc_52_read
|
case osc_52_read
|
||||||
|
|
||||||
/// An applciation is attempting to write to the clipboard using OSC 52
|
/// An application is attempting to write to the clipboard using OSC 52
|
||||||
case osc_52_write
|
case osc_52_write
|
||||||
|
|
||||||
/// The text to show in the clipboard confirmation prompt for a given request type
|
/// The text to show in the clipboard confirmation prompt for a given request type
|
||||||
|
@ -894,7 +894,7 @@ extension Ghostty {
|
|||||||
font.release()
|
font.release()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ghostty coordinate system is top-left, conver to bottom-left for AppKit
|
// Ghostty coordinate system is top-left, convert to bottom-left for AppKit
|
||||||
let pt = NSMakePoint(info.tl_px_x - 2, frame.size.height - info.tl_px_y + 2)
|
let pt = NSMakePoint(info.tl_px_x - 2, frame.size.height - info.tl_px_y + 2)
|
||||||
let str = NSAttributedString.init(string: text, attributes: attributes)
|
let str = NSAttributedString.init(string: text, attributes: attributes)
|
||||||
self.showDefinition(for: str, at: pt);
|
self.showDefinition(for: str, at: pt);
|
||||||
|
@ -55,7 +55,7 @@ class FullScreenHandler {
|
|||||||
// It's important to do this in two calls, because setting them in a single call guarantees
|
// It's important to do this in two calls, because setting them in a single call guarantees
|
||||||
// that the menu bar will also be hidden on any additional displays (why? nobody knows!)
|
// that the menu bar will also be hidden on any additional displays (why? nobody knows!)
|
||||||
// When these options are set separately, the menu bar hiding problem will only occur in
|
// When these options are set separately, the menu bar hiding problem will only occur in
|
||||||
// specific scenarios. More invesitgation is needed to pin these scenarios down precisely,
|
// specific scenarios. More investigation is needed to pin these scenarios down precisely,
|
||||||
// but it seems to have something to do with which app had focus last.
|
// but it seems to have something to do with which app had focus last.
|
||||||
// Furthermore, it's much easier to figure out which screen the dock is on if the menubar
|
// Furthermore, it's much easier to figure out which screen the dock is on if the menubar
|
||||||
// has not yet been hidden, so the order matters here!
|
// has not yet been hidden, so the order matters here!
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
alejandra,
|
alejandra,
|
||||||
pandoc,
|
pandoc,
|
||||||
hyperfine,
|
hyperfine,
|
||||||
|
typos,
|
||||||
}: let
|
}: let
|
||||||
# See package.nix. Keep in sync.
|
# See package.nix. Keep in sync.
|
||||||
rpathLibs =
|
rpathLibs =
|
||||||
@ -95,6 +96,7 @@ in
|
|||||||
# Linting
|
# Linting
|
||||||
nodePackages.prettier
|
nodePackages.prettier
|
||||||
alejandra
|
alejandra
|
||||||
|
typos
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
parallel
|
parallel
|
||||||
|
@ -84,7 +84,7 @@ mouse: Mouse,
|
|||||||
///
|
///
|
||||||
/// Also note the utf8 value is not valid for this event so some unfocused
|
/// Also note the utf8 value is not valid for this event so some unfocused
|
||||||
/// release events may not send exactly the right data within Kitty keyboard
|
/// release events may not send exactly the right data within Kitty keyboard
|
||||||
/// events. This seems unspecificed in the spec so for now I'm okay with
|
/// events. This seems unspecified in the spec so for now I'm okay with
|
||||||
/// this. Plus, its only for release events where the key text is far
|
/// this. Plus, its only for release events where the key text is far
|
||||||
/// less important.
|
/// less important.
|
||||||
pressed_key: ?input.KeyEvent = null,
|
pressed_key: ?input.KeyEvent = null,
|
||||||
@ -1262,7 +1262,7 @@ pub fn preeditCallback(self: *Surface, preedit_: ?[]const u8) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Called for any key events. This handles keybindings, encoding and
|
/// Called for any key events. This handles keybindings, encoding and
|
||||||
/// sending to the termianl, etc.
|
/// sending to the terminal, etc.
|
||||||
pub fn keyCallback(
|
pub fn keyCallback(
|
||||||
self: *Surface,
|
self: *Surface,
|
||||||
event: input.KeyEvent,
|
event: input.KeyEvent,
|
||||||
@ -2075,7 +2075,7 @@ fn mouseShiftCapture(self: *const Surface, lock: bool) bool {
|
|||||||
if (lock) self.renderer_state.mutex.lock();
|
if (lock) self.renderer_state.mutex.lock();
|
||||||
defer if (lock) self.renderer_state.mutex.unlock();
|
defer if (lock) self.renderer_state.mutex.unlock();
|
||||||
|
|
||||||
// If thet terminal explicitly requests it then we always allow it
|
// If the terminal explicitly requests it then we always allow it
|
||||||
// since we processed never/always at this point.
|
// since we processed never/always at this point.
|
||||||
switch (self.io.terminal.flags.mouse_shift_capture) {
|
switch (self.io.terminal.flags.mouse_shift_capture) {
|
||||||
.false => return false,
|
.false => return false,
|
||||||
@ -2153,7 +2153,7 @@ pub fn mouseButtonCallback(
|
|||||||
self.modsChanged(mods);
|
self.modsChanged(mods);
|
||||||
|
|
||||||
// This is set to true if the terminal is allowed to capture the shift
|
// This is set to true if the terminal is allowed to capture the shift
|
||||||
// modifer. Note we can do this more efficiently probably with less
|
// modifier. Note we can do this more efficiently probably with less
|
||||||
// locking/unlocking but clicking isn't that frequent enough to be a
|
// locking/unlocking but clicking isn't that frequent enough to be a
|
||||||
// bottleneck.
|
// bottleneck.
|
||||||
const shift_capture = self.mouseShiftCapture(true);
|
const shift_capture = self.mouseShiftCapture(true);
|
||||||
@ -2833,7 +2833,7 @@ fn dragLeftClickDouble(
|
|||||||
};
|
};
|
||||||
|
|
||||||
// If our current mouse position is before the starting position,
|
// If our current mouse position is before the starting position,
|
||||||
// then the seletion start is the word nearest our current position.
|
// then the selection start is the word nearest our current position.
|
||||||
if (drag_pin.before(click_pin)) {
|
if (drag_pin.before(click_pin)) {
|
||||||
try self.setSelection(terminal.Selection.init(
|
try self.setSelection(terminal.Selection.init(
|
||||||
word_current.start(),
|
word_current.start(),
|
||||||
|
@ -1765,7 +1765,7 @@ pub const CAPI = struct {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Complete a clipboard read request startd via the read callback.
|
/// Complete a clipboard read request started via the read callback.
|
||||||
/// This can only be called once for a given request. Once it is called
|
/// This can only be called once for a given request. Once it is called
|
||||||
/// with a request the request pointer will be invalidated.
|
/// with a request the request pointer will be invalidated.
|
||||||
export fn ghostty_surface_complete_clipboard_request(
|
export fn ghostty_surface_complete_clipboard_request(
|
||||||
@ -1817,7 +1817,7 @@ pub const CAPI = struct {
|
|||||||
const content_scale = ptr.getContentScale() catch return null;
|
const content_scale = ptr.getContentScale() catch return null;
|
||||||
|
|
||||||
// Get the shared font grid. We acquire a read lock to
|
// Get the shared font grid. We acquire a read lock to
|
||||||
// read the font face. It should not be deffered since
|
// read the font face. It should not be deferred since
|
||||||
// we're loading the primary face.
|
// we're loading the primary face.
|
||||||
const grid = ptr.core_surface.renderer.font_grid;
|
const grid = ptr.core_surface.renderer.font_grid;
|
||||||
grid.lock.lockShared();
|
grid.lock.lockShared();
|
||||||
|
@ -565,7 +565,7 @@ fn realize(self: *Surface) !void {
|
|||||||
try self.core_surface.setFontSize(size);
|
try self.core_surface.setFontSize(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the intial color scheme
|
// Set the initial color scheme
|
||||||
try self.core_surface.colorSchemeCallback(self.app.getColorScheme());
|
try self.core_surface.colorSchemeCallback(self.app.getColorScheme());
|
||||||
|
|
||||||
// Note we're realized
|
// Note we're realized
|
||||||
@ -1222,7 +1222,7 @@ fn gtkRealize(area: *c.GtkGLArea, ud: ?*anyopaque) callconv(.C) void {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// When we have a realized surface, we also attach our input method context.
|
// When we have a realized surface, we also attach our input method context.
|
||||||
// We do this here instead of init because this allows us to relase the ref
|
// We do this here instead of init because this allows us to release the ref
|
||||||
// to the GLArea when we unrealized.
|
// to the GLArea when we unrealized.
|
||||||
c.gtk_im_context_set_client_widget(self.im_context, @ptrCast(@alignCast(self.overlay)));
|
c.gtk_im_context_set_client_widget(self.im_context, @ptrCast(@alignCast(self.overlay)));
|
||||||
}
|
}
|
||||||
@ -1854,7 +1854,7 @@ fn gtkInputCommit(
|
|||||||
self.im_composing = false;
|
self.im_composing = false;
|
||||||
|
|
||||||
// We're not in a keypress, so this was sent from an on-screen emoji
|
// We're not in a keypress, so this was sent from an on-screen emoji
|
||||||
// keyboard or someting like that. Send the characters directly to
|
// keyboard or something like that. Send the characters directly to
|
||||||
// the surface.
|
// the surface.
|
||||||
_ = self.core_surface.keyCallback(.{
|
_ = self.core_surface.keyCallback(.{
|
||||||
.action = .press,
|
.action = .press,
|
||||||
|
@ -11,7 +11,7 @@ const font = @import("font/main.zig");
|
|||||||
const rendererpkg = @import("renderer.zig");
|
const rendererpkg = @import("renderer.zig");
|
||||||
const WasmTarget = @import("os/wasm/target.zig").Target;
|
const WasmTarget = @import("os/wasm/target.zig").Target;
|
||||||
|
|
||||||
/// The build configuratin options. This may not be all available options
|
/// The build configurations options. This may not be all available options
|
||||||
/// to `zig build` but it contains all the options that the Ghostty source
|
/// to `zig build` but it contains all the options that the Ghostty source
|
||||||
/// needs to know about at comptime.
|
/// needs to know about at comptime.
|
||||||
///
|
///
|
||||||
@ -51,7 +51,7 @@ pub const BuildConfig = struct {
|
|||||||
|
|
||||||
// Our version. We also add the string version so we don't need
|
// Our version. We also add the string version so we don't need
|
||||||
// to do any allocations at runtime. This has to be long enough to
|
// to do any allocations at runtime. This has to be long enough to
|
||||||
// accomodate realistic large branch names for dev versions.
|
// accommodate realistic large branch names for dev versions.
|
||||||
var buf: [1024]u8 = undefined;
|
var buf: [1024]u8 = undefined;
|
||||||
step.addOption(std.SemanticVersion, "app_version", self.version);
|
step.addOption(std.SemanticVersion, "app_version", self.version);
|
||||||
step.addOption([:0]const u8, "app_version_string", try std.fmt.bufPrintZ(
|
step.addOption([:0]const u8, "app_version_string", try std.fmt.bufPrintZ(
|
||||||
|
@ -5,7 +5,7 @@ const Allocator = std.mem.Allocator;
|
|||||||
const help_strings = @import("help_strings");
|
const help_strings = @import("help_strings");
|
||||||
|
|
||||||
pub const Options = struct {
|
pub const Options = struct {
|
||||||
/// If `true`, print out documenation about the action associated with the
|
/// If `true`, print out documentation about the action associated with the
|
||||||
/// keybinds.
|
/// keybinds.
|
||||||
docs: bool = false,
|
docs: bool = false,
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ pub const Config = struct {
|
|||||||
/// same priority order Ghostty would use to pick a font.
|
/// same priority order Ghostty would use to pick a font.
|
||||||
///
|
///
|
||||||
/// The `--family` argument can be used to filter results to a specific family.
|
/// The `--family` argument can be used to filter results to a specific family.
|
||||||
/// The family handling is identical to the `font-familiy` set of Ghostty
|
/// The family handling is identical to the `font-family` set of Ghostty
|
||||||
/// configuration values, so this can be used to debug why your desired font may
|
/// configuration values, so this can be used to debug why your desired font may
|
||||||
/// not be loading.
|
/// not be loading.
|
||||||
///
|
///
|
||||||
|
@ -11,7 +11,7 @@ pub const Options = struct {
|
|||||||
/// in the config file.
|
/// in the config file.
|
||||||
default: bool = false,
|
default: bool = false,
|
||||||
|
|
||||||
/// If `true`, print out documenation about the action associated with the
|
/// If `true`, print out documentation about the action associated with the
|
||||||
/// keybinds.
|
/// keybinds.
|
||||||
docs: bool = false,
|
docs: bool = false,
|
||||||
|
|
||||||
|
@ -1023,7 +1023,7 @@ keybind: Keybinds = .{},
|
|||||||
/// are scaled-up RGB values, where each component are 16 bits. This is how
|
/// are scaled-up RGB values, where each component are 16 bits. This is how
|
||||||
/// most terminals report these values. However, some legacy applications may
|
/// most terminals report these values. However, some legacy applications may
|
||||||
/// require 8-bit, unscaled, components. We also support turning off reporting
|
/// require 8-bit, unscaled, components. We also support turning off reporting
|
||||||
/// alltogether. The components are lowercase hex values.
|
/// altogether. The components are lowercase hex values.
|
||||||
///
|
///
|
||||||
/// Allowable values are:
|
/// Allowable values are:
|
||||||
///
|
///
|
||||||
@ -1102,7 +1102,7 @@ keybind: Keybinds = .{},
|
|||||||
///
|
///
|
||||||
/// * `visible-menu` - Use non-native macOS fullscreen, keep the menu bar visible
|
/// * `visible-menu` - Use non-native macOS fullscreen, keep the menu bar visible
|
||||||
/// * `true` - Use non-native macOS fullscreen, hide the menu bar
|
/// * `true` - Use non-native macOS fullscreen, hide the menu bar
|
||||||
/// * `false` - Use native macOS fullscreeen
|
/// * `false` - Use native macOS fullscreen
|
||||||
///
|
///
|
||||||
@"macos-non-native-fullscreen": NonNativeFullscreen = .false,
|
@"macos-non-native-fullscreen": NonNativeFullscreen = .false,
|
||||||
|
|
||||||
@ -2114,7 +2114,7 @@ fn loadTheme(self: *Config, theme: []const u8) !void {
|
|||||||
defer file.close();
|
defer file.close();
|
||||||
|
|
||||||
// From this point onwards, we load the theme and do a bit of a dance
|
// From this point onwards, we load the theme and do a bit of a dance
|
||||||
// to achive two separate goals:
|
// to achieve two separate goals:
|
||||||
//
|
//
|
||||||
// (1) We want the theme to be loaded and our existing config to
|
// (1) We want the theme to be loaded and our existing config to
|
||||||
// override the theme. So we need to load the theme and apply
|
// override the theme. So we need to load the theme and apply
|
||||||
@ -2125,7 +2125,7 @@ fn loadTheme(self: *Config, theme: []const u8) !void {
|
|||||||
//
|
//
|
||||||
// Point 2 is strictly a result of aur approach to point 1.
|
// Point 2 is strictly a result of aur approach to point 1.
|
||||||
|
|
||||||
// Keep track of our replay length prior ot loading the theme
|
// Keep track of our replay length prior to loading the theme
|
||||||
// so that we can replay the previous config to override values.
|
// so that we can replay the previous config to override values.
|
||||||
const replay_len = self._replay_steps.items.len;
|
const replay_len = self._replay_steps.items.len;
|
||||||
|
|
||||||
@ -2719,7 +2719,7 @@ pub const Color = packed struct(u24) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn parseCLI(input_: ?[]const u8) !Color {
|
pub fn parseCLI(input_: ?[]const u8) !Color {
|
||||||
const input = input_ orelse return error.ValueRequred;
|
const input = input_ orelse return error.ValueRequired;
|
||||||
|
|
||||||
if (terminal.x11_color.map.get(input)) |rgb| return .{
|
if (terminal.x11_color.map.get(input)) |rgb| return .{
|
||||||
.r = rgb.r,
|
.r = rgb.r,
|
||||||
|
@ -74,7 +74,7 @@ test "url regex" {
|
|||||||
.expect = "https://example.com",
|
.expect = "https://example.com",
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
.input = "some file wih https://google.com https://duckduckgo.com links.",
|
.input = "some file with https://google.com https://duckduckgo.com links.",
|
||||||
.expect = "https://google.com",
|
.expect = "https://google.com",
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
|
@ -147,7 +147,7 @@ pub fn getIndex(
|
|||||||
// Build our presentation mode. If we don't have an explicit presentation
|
// Build our presentation mode. If we don't have an explicit presentation
|
||||||
// given then we use the UCD (Unicode Character Database) to determine
|
// given then we use the UCD (Unicode Character Database) to determine
|
||||||
// the default presentation. Note there is some inefficiency here because
|
// the default presentation. Note there is some inefficiency here because
|
||||||
// we'll do this muliple times if we recurse, but this is a cached function
|
// we'll do this multiple times if we recurse, but this is a cached function
|
||||||
// call higher up (GroupCache) so this should be rare.
|
// call higher up (GroupCache) so this should be rare.
|
||||||
const p_mode: Collection.PresentationMode = if (p) |v| .{ .explicit = v } else .{
|
const p_mode: Collection.PresentationMode = if (p) |v| .{ .explicit = v } else .{
|
||||||
.default = if (ziglyph.emoji.isEmojiPresentation(@intCast(cp)))
|
.default = if (ziglyph.emoji.isEmojiPresentation(@intCast(cp)))
|
||||||
|
@ -285,7 +285,7 @@ pub fn hasCodepoint(self: DeferredFace, cp: u32, p: ?Presentation) bool {
|
|||||||
// because forced presentation modes are only used for emoji and
|
// because forced presentation modes are only used for emoji and
|
||||||
// emoji should always have color glyphs set. This can be
|
// emoji should always have color glyphs set. This can be
|
||||||
// more correct by using the isColorGlyph logic but I'd want
|
// more correct by using the isColorGlyph logic but I'd want
|
||||||
// to find a font that actualy requires this so we can write
|
// to find a font that actually requires this so we can write
|
||||||
// a test for it before changing it.
|
// a test for it before changing it.
|
||||||
if (p) |desired_p| {
|
if (p) |desired_p| {
|
||||||
const traits = ct.font.getSymbolicTraits();
|
const traits = ct.font.getSymbolicTraits();
|
||||||
|
@ -445,7 +445,7 @@ pub const CoreText = struct {
|
|||||||
|
|
||||||
assert(desc.codepoint > 0);
|
assert(desc.codepoint > 0);
|
||||||
|
|
||||||
// Get our original font. This is dependent on the requestd style
|
// Get our original font. This is dependent on the requested style
|
||||||
// from the descriptor.
|
// from the descriptor.
|
||||||
const original = original: {
|
const original = original: {
|
||||||
// In all the styles below, we try to match it but if we don't
|
// In all the styles below, we try to match it but if we don't
|
||||||
@ -716,7 +716,7 @@ test "descriptor hash" {
|
|||||||
try testing.expect(d.hashcode() != 0);
|
try testing.expect(d.hashcode() != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test "descriptor hash familiy names" {
|
test "descriptor hash family names" {
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
|
|
||||||
var d1: Descriptor = .{ .family = "A" };
|
var d1: Descriptor = .{ .family = "A" };
|
||||||
|
@ -495,7 +495,7 @@ pub const Shaper = struct {
|
|||||||
// If this grid doesn't match the one we've cached fonts for,
|
// If this grid doesn't match the one we've cached fonts for,
|
||||||
// then we reset the cache list since it's no longer valid.
|
// then we reset the cache list since it's no longer valid.
|
||||||
// We use an intFromPtr rather than direct pointer comparison
|
// We use an intFromPtr rather than direct pointer comparison
|
||||||
// because we don't want anyone to inadvertenly use the pointer.
|
// because we don't want anyone to inadvertently use the pointer.
|
||||||
const grid_id: usize = @intFromPtr(grid);
|
const grid_id: usize = @intFromPtr(grid);
|
||||||
if (grid_id != self.cached_font_grid) {
|
if (grid_id != self.cached_font_grid) {
|
||||||
if (self.cached_font_grid > 0) {
|
if (self.cached_font_grid > 0) {
|
||||||
|
@ -2516,7 +2516,7 @@ fn draw_dash_vertical(
|
|||||||
// | | |
|
// | | |
|
||||||
// | |
|
// | |
|
||||||
// +-----------+
|
// +-----------+
|
||||||
// Our dashed line should be made such that when tiled verically it
|
// Our dashed line should be made such that when tiled vertically it
|
||||||
// it creates one consistent line with no uneven gap or segment sizes.
|
// it creates one consistent line with no uneven gap or segment sizes.
|
||||||
// In order to make sure this is the case, we should have an extra gap
|
// In order to make sure this is the case, we should have an extra gap
|
||||||
// gap at the bottom.
|
// gap at the bottom.
|
||||||
|
@ -184,7 +184,7 @@ const Draw = struct {
|
|||||||
break :pos y_max - (MIN_AMPLITUDE * 2);
|
break :pos y_max - (MIN_AMPLITUDE * 2);
|
||||||
};
|
};
|
||||||
|
|
||||||
// The full aplitude of the wave can be from the bottom to the
|
// The full amplitude of the wave can be from the bottom to the
|
||||||
// underline position. We also calculate our mid y point of the wave
|
// underline position. We also calculate our mid y point of the wave
|
||||||
const double_amplitude: f64 = @floatFromInt(y_max - pos);
|
const double_amplitude: f64 = @floatFromInt(y_max - pos);
|
||||||
const half_amplitude: f64 = @max(1, double_amplitude / 4);
|
const half_amplitude: f64 = @max(1, double_amplitude / 4);
|
||||||
|
@ -692,7 +692,7 @@ const CsiUMods = packed struct(u3) {
|
|||||||
return raw + 1;
|
return raw + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
test "modifer sequence values" {
|
test "modifier sequence values" {
|
||||||
// This is all sort of trivially seen by looking at the code but
|
// This is all sort of trivially seen by looking at the code but
|
||||||
// we want to make sure we never regress this.
|
// we want to make sure we never regress this.
|
||||||
var mods: CsiUMods = .{};
|
var mods: CsiUMods = .{};
|
||||||
@ -775,7 +775,7 @@ const KittyMods = packed struct(u8) {
|
|||||||
return raw + 1;
|
return raw + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
test "modifer sequence values" {
|
test "modifier sequence values" {
|
||||||
// This is all sort of trivially seen by looking at the code but
|
// This is all sort of trivially seen by looking at the code but
|
||||||
// we want to make sure we never regress this.
|
// we want to make sure we never regress this.
|
||||||
var mods: KittyMods = .{};
|
var mods: KittyMods = .{};
|
||||||
|
@ -275,7 +275,7 @@ fn cursorKey(
|
|||||||
/// format should have exactly one "hole" for the mods code.
|
/// format should have exactly one "hole" for the mods code.
|
||||||
/// Example: "\x1b[11;{}~" for F1.
|
/// Example: "\x1b[11;{}~" for F1.
|
||||||
fn pcStyle(comptime fmt: []const u8) []Entry {
|
fn pcStyle(comptime fmt: []const u8) []Entry {
|
||||||
// The comptime {} wrapper is superflous but it prevents us from
|
// The comptime {} wrapper is superfluous but it prevents us from
|
||||||
// accidentally running this function at runtime.
|
// accidentally running this function at runtime.
|
||||||
comptime {
|
comptime {
|
||||||
var entries: [modifiers.len]Entry = undefined;
|
var entries: [modifiers.len]Entry = undefined;
|
||||||
|
@ -1205,7 +1205,7 @@ pub fn drawFrame(self: *Metal, surface: *apprt.Surface) !void {
|
|||||||
break :desc desc;
|
break :desc desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Prepare our color atachment (output).
|
// Prepare our color attachment (output).
|
||||||
const attachments = objc.Object.fromId(desc.getProperty(?*anyopaque, "colorAttachments"));
|
const attachments = objc.Object.fromId(desc.getProperty(?*anyopaque, "colorAttachments"));
|
||||||
const attachment = attachments.msgSend(
|
const attachment = attachments.msgSend(
|
||||||
objc.Object,
|
objc.Object,
|
||||||
@ -1954,7 +1954,7 @@ pub fn setScreenSize(
|
|||||||
|
|
||||||
// Blank space around the grid.
|
// Blank space around the grid.
|
||||||
const blank: renderer.Padding = switch (self.config.padding_color) {
|
const blank: renderer.Padding = switch (self.config.padding_color) {
|
||||||
// We can use zero padding because the backgroudn color is our
|
// We can use zero padding because the background color is our
|
||||||
// clear color.
|
// clear color.
|
||||||
.background => .{},
|
.background => .{},
|
||||||
|
|
||||||
@ -2565,7 +2565,7 @@ fn addCursor(
|
|||||||
cursor_color: terminal.color.RGB,
|
cursor_color: terminal.color.RGB,
|
||||||
) void {
|
) void {
|
||||||
// Add the cursor. We render the cursor over the wide character if
|
// Add the cursor. We render the cursor over the wide character if
|
||||||
// we're on the wide characer tail.
|
// we're on the wide character tail.
|
||||||
const wide, const x = cell: {
|
const wide, const x = cell: {
|
||||||
// The cursor goes over the screen cursor position.
|
// The cursor goes over the screen cursor position.
|
||||||
const cell = screen.cursor.page_cell;
|
const cell = screen.cursor.page_cell;
|
||||||
|
@ -165,7 +165,7 @@ const SetScreenSize = struct {
|
|||||||
|
|
||||||
// Blank space around the grid.
|
// Blank space around the grid.
|
||||||
const blank: renderer.Padding = switch (r.config.padding_color) {
|
const blank: renderer.Padding = switch (r.config.padding_color) {
|
||||||
// We can use zero padding because the backgroudn color is our
|
// We can use zero padding because the background color is our
|
||||||
// clear color.
|
// clear color.
|
||||||
.background => .{},
|
.background => .{},
|
||||||
|
|
||||||
@ -1485,7 +1485,7 @@ fn addCursor(
|
|||||||
cursor_color: terminal.color.RGB,
|
cursor_color: terminal.color.RGB,
|
||||||
) !?*const CellProgram.Cell {
|
) !?*const CellProgram.Cell {
|
||||||
// Add the cursor. We render the cursor over the wide character if
|
// Add the cursor. We render the cursor over the wide character if
|
||||||
// we're on the wide characer tail.
|
// we're on the wide character tail.
|
||||||
const wide, const x = cell: {
|
const wide, const x = cell: {
|
||||||
// The cursor goes over the screen cursor position.
|
// The cursor goes over the screen cursor position.
|
||||||
const cell = screen.cursor.page_cell;
|
const cell = screen.cursor.page_cell;
|
||||||
@ -1923,7 +1923,7 @@ fn flushAtlasSingle(
|
|||||||
atlas: *font.Atlas,
|
atlas: *font.Atlas,
|
||||||
modified: *usize,
|
modified: *usize,
|
||||||
resized: *usize,
|
resized: *usize,
|
||||||
interal_format: gl.Texture.InternalFormat,
|
internal_format: gl.Texture.InternalFormat,
|
||||||
format: gl.Texture.Format,
|
format: gl.Texture.Format,
|
||||||
) !void {
|
) !void {
|
||||||
// If the texture isn't modified we do nothing
|
// If the texture isn't modified we do nothing
|
||||||
@ -1941,7 +1941,7 @@ fn flushAtlasSingle(
|
|||||||
if (new_resized > resized.*) {
|
if (new_resized > resized.*) {
|
||||||
try texbind.image2D(
|
try texbind.image2D(
|
||||||
0,
|
0,
|
||||||
interal_format,
|
internal_format,
|
||||||
@intCast(atlas.size),
|
@intCast(atlas.size),
|
||||||
@intCast(atlas.size),
|
@intCast(atlas.size),
|
||||||
0,
|
0,
|
||||||
|
@ -230,7 +230,7 @@ fn threadMain_(self: *Thread) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn startDrawTimer(self: *Thread) void {
|
fn startDrawTimer(self: *Thread) void {
|
||||||
// If our renderer doesn't suppoort animations then we never run this.
|
// If our renderer doesn't support animations then we never run this.
|
||||||
if (!@hasDecl(renderer.Renderer, "hasAnimations")) return;
|
if (!@hasDecl(renderer.Renderer, "hasAnimations")) return;
|
||||||
if (!self.renderer.hasAnimations()) return;
|
if (!self.renderer.hasAnimations()) return;
|
||||||
if (self.config.custom_shader_animation == .false) return;
|
if (self.config.custom_shader_animation == .false) return;
|
||||||
|
@ -102,7 +102,7 @@ test "cursor: blinking disabled" {
|
|||||||
try testing.expect(cursorStyle(&state, false, false) == .block_hollow);
|
try testing.expect(cursorStyle(&state, false, false) == .block_hollow);
|
||||||
}
|
}
|
||||||
|
|
||||||
test "cursor: explictly not visible" {
|
test "cursor: explicitly not visible" {
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const alloc = testing.allocator;
|
const alloc = testing.allocator;
|
||||||
var term = try terminal.Terminal.init(alloc, .{ .cols = 10, .rows = 10 });
|
var term = try terminal.Terminal.init(alloc, .{ .cols = 10, .rows = 10 });
|
||||||
|
@ -65,7 +65,7 @@ pub fn Buffer(comptime T: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Sync new contents to the buffer. The data is expected to be the
|
/// Sync new contents to the buffer. The data is expected to be the
|
||||||
/// complete contents of the buffer. If the amont of data is larger
|
/// complete contents of the buffer. If the amount of data is larger
|
||||||
/// than the buffer length, the buffer will be reallocated.
|
/// than the buffer length, the buffer will be reallocated.
|
||||||
///
|
///
|
||||||
/// If the amount of data is smaller than the buffer length, the
|
/// If the amount of data is smaller than the buffer length, the
|
||||||
|
@ -42,7 +42,7 @@ pub fn loadFromFile(
|
|||||||
defer arena.deinit();
|
defer arena.deinit();
|
||||||
const alloc = arena.allocator();
|
const alloc = arena.allocator();
|
||||||
|
|
||||||
// Load the shader fiel
|
// Load the shader file
|
||||||
const cwd = std.fs.cwd();
|
const cwd = std.fs.cwd();
|
||||||
const file = try cwd.openFile(path, .{});
|
const file = try cwd.openFile(path, .{});
|
||||||
defer file.close();
|
defer file.close();
|
||||||
|
@ -2424,7 +2424,7 @@ fn pinIsValid(self: *const PageList, p: Pin) bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the viewport for the given pin, prefering to pin to
|
/// Returns the viewport for the given pin, preferring to pin to
|
||||||
/// "active" if the pin is within the active area.
|
/// "active" if the pin is within the active area.
|
||||||
fn pinIsActive(self: *const PageList, p: Pin) bool {
|
fn pinIsActive(self: *const PageList, p: Pin) bool {
|
||||||
// If the pin is in the active page, then we can quickly determine
|
// If the pin is in the active page, then we can quickly determine
|
||||||
@ -2519,7 +2519,7 @@ pub fn getCell(self: *const PageList, pt: point.Point) ?Cell {
|
|||||||
/// 124 | | | 0
|
/// 124 | | | 0
|
||||||
/// 125 |Text | | 1
|
/// 125 |Text | | 1
|
||||||
/// : ^ : : = PIN 0
|
/// : ^ : : = PIN 0
|
||||||
/// 126 |Wrapp… | 2
|
/// 126 |Wrap… | 2
|
||||||
/// +-----+ :
|
/// +-----+ :
|
||||||
/// +-----+ : = PAGE 1
|
/// +-----+ : = PAGE 1
|
||||||
/// 0 …ed | | 3
|
/// 0 …ed | | 3
|
||||||
@ -2822,7 +2822,7 @@ pub const RowIterator = struct {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Create an interator that can be used to iterate all the rows in
|
/// Create an iterator that can be used to iterate all the rows in
|
||||||
/// a region of the screen from the given top-left. The tag of the
|
/// a region of the screen from the given top-left. The tag of the
|
||||||
/// top-left point will also determine the end of the iteration,
|
/// top-left point will also determine the end of the iteration,
|
||||||
/// so convert from one reference point to another to change the
|
/// so convert from one reference point to another to change the
|
||||||
|
@ -1182,7 +1182,7 @@ fn resizeInternal(
|
|||||||
});
|
});
|
||||||
|
|
||||||
// If we have no scrollback and we shrunk our rows, we must explicitly
|
// If we have no scrollback and we shrunk our rows, we must explicitly
|
||||||
// erase our history. This is beacuse PageList always keeps at least
|
// erase our history. This is because PageList always keeps at least
|
||||||
// a page size of history.
|
// a page size of history.
|
||||||
if (self.no_scrollback) {
|
if (self.no_scrollback) {
|
||||||
self.pages.eraseRows(.{ .history = .{} }, null);
|
self.pages.eraseRows(.{ .history = .{} }, null);
|
||||||
|
@ -356,7 +356,7 @@ pub fn adjust(
|
|||||||
adjustment: Adjustment,
|
adjustment: Adjustment,
|
||||||
) void {
|
) void {
|
||||||
// Note that we always adjust "end" because end always represents
|
// Note that we always adjust "end" because end always represents
|
||||||
// the last point of the selection by mouse, not necessarilly the
|
// the last point of the selection by mouse, not necessarily the
|
||||||
// top/bottom visually. So this results in the correct behavior
|
// top/bottom visually. So this results in the correct behavior
|
||||||
// whether the user drags up or down.
|
// whether the user drags up or down.
|
||||||
const end_pin = self.endPtr();
|
const end_pin = self.endPtr();
|
||||||
|
@ -492,7 +492,7 @@ pub fn print(self: *Terminal, c: u21) !void {
|
|||||||
self.printCell(0, .spacer_tail);
|
self.printCell(0, .spacer_tail);
|
||||||
} else {
|
} else {
|
||||||
// This is pretty broken, terminals should never be only 1-wide.
|
// This is pretty broken, terminals should never be only 1-wide.
|
||||||
// We sould prevent this downstream.
|
// We should prevent this downstream.
|
||||||
self.screen.cursorMarkDirty();
|
self.screen.cursorMarkDirty();
|
||||||
self.printCell(0, .narrow);
|
self.printCell(0, .narrow);
|
||||||
},
|
},
|
||||||
@ -867,7 +867,7 @@ pub fn cursorLeft(self: *Terminal, count_req: usize) void {
|
|||||||
|
|
||||||
// UNDEFINED TERMINAL BEHAVIOR. This situation is not handled in xterm
|
// UNDEFINED TERMINAL BEHAVIOR. This situation is not handled in xterm
|
||||||
// and currently results in a crash in xterm. Given no other known
|
// and currently results in a crash in xterm. Given no other known
|
||||||
// terminal [to me] implements XTREVWRAP2, I decided to just mimick
|
// terminal [to me] implements XTREVWRAP2, I decided to just mimic
|
||||||
// the behavior of xterm up and not including the crash by wrapping
|
// the behavior of xterm up and not including the crash by wrapping
|
||||||
// up to the (0, 0) and stopping there. My reasoning is that for an
|
// up to the (0, 0) and stopping there. My reasoning is that for an
|
||||||
// appropriately sized value of "count" this is the behavior that xterm
|
// appropriately sized value of "count" this is the behavior that xterm
|
||||||
|
@ -16,7 +16,7 @@ pub const Command = union(enum) {
|
|||||||
/// Set the window title of the terminal
|
/// Set the window title of the terminal
|
||||||
///
|
///
|
||||||
/// If title mode 0 is set text is expect to be hex encoded (i.e. utf-8
|
/// If title mode 0 is set text is expect to be hex encoded (i.e. utf-8
|
||||||
/// with each code unit further encoded with two hex digets).
|
/// with each code unit further encoded with two hex digits).
|
||||||
///
|
///
|
||||||
/// If title mode 2 is set or the terminal is setup for unconditional
|
/// If title mode 2 is set or the terminal is setup for unconditional
|
||||||
/// utf-8 titles text is interpreted as utf-8. Else text is interpreted
|
/// utf-8 titles text is interpreted as utf-8. Else text is interpreted
|
||||||
|
@ -172,7 +172,7 @@ pub const Page = struct {
|
|||||||
|
|
||||||
/// The current dimensions of the page. The capacity may be larger
|
/// The current dimensions of the page. The capacity may be larger
|
||||||
/// than this. This allows us to allocate a larger page than necessary
|
/// than this. This allows us to allocate a larger page than necessary
|
||||||
/// and also to resize a page smaller witout reallocating.
|
/// and also to resize a page smaller without reallocating.
|
||||||
size: Size,
|
size: Size,
|
||||||
|
|
||||||
/// The capacity of this page. This is the full size of the backing
|
/// The capacity of this page. This is the full size of the backing
|
||||||
|
@ -16,7 +16,7 @@ pub const Tag = enum {
|
|||||||
/// because it includes the full height (rows) of the screen, including
|
/// because it includes the full height (rows) of the screen, including
|
||||||
/// rows that may not be written yet. This is required because the active
|
/// rows that may not be written yet. This is required because the active
|
||||||
/// area is fully "addressable" by the running program (see below) whereas
|
/// area is fully "addressable" by the running program (see below) whereas
|
||||||
/// the other tags are used primarliy for reading/modifying past-written
|
/// the other tags are used primarily for reading/modifying past-written
|
||||||
/// data so they can't address unwritten rows.
|
/// data so they can't address unwritten rows.
|
||||||
///
|
///
|
||||||
/// Note for those less familiar with terminal functionality: there
|
/// Note for those less familiar with terminal functionality: there
|
||||||
@ -36,7 +36,7 @@ pub const Tag = enum {
|
|||||||
/// Top-left is the furthest back in the scrollback history
|
/// Top-left is the furthest back in the scrollback history
|
||||||
/// supported by the screen and the bottom-right is the bottom-right
|
/// supported by the screen and the bottom-right is the bottom-right
|
||||||
/// of the last written row. Note this last point is important: the
|
/// of the last written row. Note this last point is important: the
|
||||||
/// bottom right is NOT necessarilly the same as "active" because
|
/// bottom right is NOT necessarily the same as "active" because
|
||||||
/// "active" always allows referencing the full rows tall of the
|
/// "active" always allows referencing the full rows tall of the
|
||||||
/// screen whereas "screen" only contains written rows.
|
/// screen whereas "screen" only contains written rows.
|
||||||
screen,
|
screen,
|
||||||
|
@ -21,7 +21,7 @@ const fastmem = @import("../fastmem.zig");
|
|||||||
/// reference count. The caller is responsible for calling release for an
|
/// reference count. The caller is responsible for calling release for an
|
||||||
/// item when it is no longer being used. Items with 0 references will be
|
/// item when it is no longer being used. Items with 0 references will be
|
||||||
/// kept until another item is written to their bucket. This allows items
|
/// kept until another item is written to their bucket. This allows items
|
||||||
/// to be ressurected if they are re-added before they get overwritten.
|
/// to be resurrected if they are re-added before they get overwritten.
|
||||||
///
|
///
|
||||||
/// The backing data structure of this set is an open addressed hash table
|
/// The backing data structure of this set is an open addressed hash table
|
||||||
/// with linear probing and Robin Hood hashing, and a flat array of items.
|
/// with linear probing and Robin Hood hashing, and a flat array of items.
|
||||||
|
@ -158,7 +158,7 @@ pub fn Stream(comptime Handler: type) type {
|
|||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Like nextSlice but takes one byte and is necessarilly a scalar
|
/// Like nextSlice but takes one byte and is necessarily a scalar
|
||||||
/// operation that can't use SIMD. Prefer nextSlice if you can and
|
/// operation that can't use SIMD. Prefer nextSlice if you can and
|
||||||
/// try to get multiple bytes at once.
|
/// try to get multiple bytes at once.
|
||||||
pub fn next(self: *Self, c: u8) !void {
|
pub fn next(self: *Self, c: u8) !void {
|
||||||
|
@ -231,7 +231,7 @@ fn setupBash(
|
|||||||
);
|
);
|
||||||
try env.put("ENV", integ_dir);
|
try env.put("ENV", integ_dir);
|
||||||
|
|
||||||
// Join the acculumated arguments to form the final command string.
|
// Join the accumulated arguments to form the final command string.
|
||||||
return try std.mem.join(alloc, " ", args.items);
|
return try std.mem.join(alloc, " ", args.items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
41
typos.toml
Normal file
41
typos.toml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
[files]
|
||||||
|
extend-exclude = [
|
||||||
|
"vendor/*",
|
||||||
|
"pkg/*",
|
||||||
|
"src/stb/*",
|
||||||
|
"*.xib",
|
||||||
|
# Do not self-check
|
||||||
|
"typos.toml",
|
||||||
|
# Fonts
|
||||||
|
"*.ttf",
|
||||||
|
"*.otf",
|
||||||
|
# Images
|
||||||
|
"*.png",
|
||||||
|
"*.ico",
|
||||||
|
"*.icns",
|
||||||
|
# Other
|
||||||
|
"*.pdf",
|
||||||
|
"*.data"
|
||||||
|
]
|
||||||
|
|
||||||
|
[default]
|
||||||
|
extend-ignore-re = [
|
||||||
|
# Ignore typos in test expectations
|
||||||
|
"testing\\.expect[^;]*;",
|
||||||
|
"kHOM\\d*"
|
||||||
|
]
|
||||||
|
|
||||||
|
[default.extend-words]
|
||||||
|
Pn = "Pn"
|
||||||
|
thr = "thr"
|
||||||
|
# Should be "halves", but for now skip it as it would make diff huge
|
||||||
|
halfs = "halfs"
|
||||||
|
# Swift oddities
|
||||||
|
Requestor = "Requestor"
|
||||||
|
iterm = "iterm"
|
||||||
|
ACCES = "ACCES"
|
||||||
|
wdth = "wdth"
|
||||||
|
Strat = "Strat"
|
||||||
|
|
||||||
|
[type.swift.extend-words]
|
||||||
|
inout = "inout"
|
@ -4,6 +4,6 @@ import VTSequence from "@/components/VTSequence";
|
|||||||
|
|
||||||
<VTSequence sequence="BS" />
|
<VTSequence sequence="BS" />
|
||||||
|
|
||||||
This sequence performs [cursor backword (CUB)](/vt/cub)
|
This sequence performs [cursor backward (CUB)](/vt/cub)
|
||||||
with `n = 1`. There is no additional or different behavior for
|
with `n = 1`. There is no additional or different behavior for
|
||||||
using `BS`.
|
using `BS`.
|
||||||
|
@ -8,7 +8,7 @@ Move the cursor `n` tabs left.
|
|||||||
|
|
||||||
The leftmost valid column for this operation is the first column. If
|
The leftmost valid column for this operation is the first column. If
|
||||||
[origin mode](#TODO) is enabled, then the leftmost valid column for this
|
[origin mode](#TODO) is enabled, then the leftmost valid column for this
|
||||||
operatin is the [left margin](#TODO).
|
operation is the [left margin](#TODO).
|
||||||
|
|
||||||
Move the cursor left until the cursor position is on a tabstop. If the
|
Move the cursor left until the cursor position is on a tabstop. If the
|
||||||
cursor would move past the leftmost valid column, the cursor remains at
|
cursor would move past the leftmost valid column, the cursor remains at
|
||||||
|
@ -15,7 +15,7 @@ and the leftmost column on the screen is column 1.
|
|||||||
This sequence always unsets the pending wrap state.
|
This sequence always unsets the pending wrap state.
|
||||||
|
|
||||||
If [origin mode](#TODO) is **NOT** set, the cursor is moved exactly to the
|
If [origin mode](#TODO) is **NOT** set, the cursor is moved exactly to the
|
||||||
row and column specified by `y` and `x`. The maxium value for `y` is the
|
row and column specified by `y` and `x`. The maximum value for `y` is the
|
||||||
bottom row of the screen and the maximum value for `x` is the rightmost
|
bottom row of the screen and the maximum value for `x` is the rightmost
|
||||||
column of the screen.
|
column of the screen.
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ differs from [Insert Character (ICH)](/vt/ich).
|
|||||||
|
|
||||||
Only cells within the scroll region are deleted or shifted. Cells to the
|
Only cells within the scroll region are deleted or shifted. Cells to the
|
||||||
right of the right margin are unmodified.
|
right of the right margin are unmodified.
|
||||||
The blank cells inserted from the right margin are blank with the backgroud
|
The blank cells inserted from the right margin are blank with the background
|
||||||
color colored according to the current SGR state.
|
color colored according to the current SGR state.
|
||||||
|
|
||||||
If a multi-cell character (such as "橋") is shifted so that the cell is split
|
If a multi-cell character (such as "橋") is shifted so that the cell is split
|
||||||
|
Reference in New Issue
Block a user