Commit Graph

18357 Commits

Author SHA1 Message Date
Strykar
8be2a10b29 fonts: attach synthetic-italic FC_MATRIX to found roman faces
fontconfig's FcFontList omits FC_MATRIX from its object set
(kitty/fontconfig.c), so a roman font that find_best_match finds there
(e.g. Fira Code, which ships no italic, in both its static and variable
builds) carries no synthetic-italic shear and its "italic" renders upright.
A family that is not found is substituted, and when the substitute
resolves through the listed faces those descriptors are equally
matrix-less, so this attach covers them too. Only raw fc_match
descriptors (runtime glyph-fallback faces via create_fallback_face, and
find_best_match's last-resort return) already carry the matrix from
substitution.

The italic intent for the configured faces exists only during selection,
not at face construction, so attach the matrix at the end of
get_font_files: for an italic slot whose chosen face is upright and has no
matrix, ask fc_match what fontconfig would do. fc_match returns a synthetic
matrix only when there is no real italic to use (no italic face and no
slanted named instance or variable slant axis), so a font that is already
italic, static or variable, is never double-slanted. Face construction
applies the matrix via FT_Set_Transform; the previous commit makes it
survive the size specialization step the render path builds faces from.
Only the matrix is taken, so selection is unchanged.

FontConfigPattern declared matrix as a required key, but pattern_as_dict
sets it only when the pattern has one, so declare it NotRequired. With
that and narrowing on descriptor_type the attach needs no cast.

Add a regression test (test_synthetic_italic_matrix): a roman no-italic
font gets a non-identity matrix on its italic slot while a real-italic
control does not, and the matrix survives specialize_font_descriptor. It
asserts the invariant rather than the exact shear (the value is
fontconfig's, version-dependent) and skips when the synthetic rule is
inactive.

Covers the four configured faces. Limitation: fc_match re-matches by family
name, so under an uncommon config (a multi-face family key plus a user
per-font FC_MATRIX rule keyed on width/style) it can attach a matrix
computed for a different face; the 90-synthetic shear this targets is
weight-independent and unaffected. A production version should re-match the
selected face by path+index+slant.
2026-06-11 00:57:59 +05:30
Strykar
779a49acde fonts: preserve the font matrix when specializing a descriptor
specialize_font_descriptor() re-resolves a descriptor by file, index,
size and dpi to pick up size dependent fields. The re-match carries no
slant request, so fontconfig cannot re-derive a synthetic italic matrix,
and only index, named_style and axes were copied back from the base
descriptor. Any FC_MATRIX on the descriptor was therefore lost on every
sized face build, so the face was constructed without it and
FT_Set_Transform was never called, rendering the glyphs upright.

Descriptors can carry FC_MATRIX since b3e7c3e ("Read FC_MATRIX from
fontconfig"). Copy the matrix back like the other selection derived
fields the re-match cannot reproduce.
2026-06-10 13:57:30 +05:30
Kovid Goyal
79a768ed55 Merge branch 'followup-b-cairo-matrix' of https://github.com/Strykar/kitty 2026-06-08 12:26:06 +05:30
Kovid Goyal
55425e2e75 Show secure input indicator on active tab 2026-06-08 11:22:54 +05:30
Kovid Goyal
4ca6a20c7d Merge branch 'dependabot/github_actions/actions-e6ee9d7de3' of https://github.com/kovidgoyal/kitty 2026-06-08 09:41:39 +05:30
Kovid Goyal
07ccc19533 Merge branch 'dependabot/go_modules/all-go-deps-44a001e8d2' of https://github.com/kovidgoyal/kitty 2026-06-08 09:41:18 +05:30
dependabot[bot]
d9334a6149 Bump actions/checkout from 6 to 6.0.2 in the actions group
Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v6.0.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:44:39 +00:00
dependabot[bot]
60c31ba2ab Bump the all-go-deps group with 2 updates
Bumps the all-go-deps group with 2 updates: [github.com/alecthomas/chroma/v2](https://github.com/alecthomas/chroma) and [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil).


Updates `github.com/alecthomas/chroma/v2` from 2.24.1 to 2.26.1
- [Release notes](https://github.com/alecthomas/chroma/releases)
- [Commits](https://github.com/alecthomas/chroma/compare/v2.24.1...v2.26.1)

Updates `github.com/shirou/gopsutil/v4` from 4.26.4 to 4.26.5
- [Release notes](https://github.com/shirou/gopsutil/releases)
- [Commits](https://github.com/shirou/gopsutil/compare/v4.26.4...v4.26.5)

---
updated-dependencies:
- dependency-name: github.com/alecthomas/chroma/v2
  dependency-version: 2.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-deps
- dependency-name: github.com/shirou/gopsutil/v4
  dependency-version: 4.26.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:42:55 +00:00
Kovid Goyal
d20fe4d4b5 version 0.47.2 v0.47.2 2026-06-07 09:37:24 +05:30
Kovid Goyal
314899b9aa Update changelog 2026-06-07 09:22:28 +05:30
Kovid Goyal
45bd3a0f14 Add a note about interaction of --reload-in and auto reload 2026-06-07 08:55:48 +05:30
Kovid Goyal
470a70db57 Remind user to not transfer files from machines they dont trust 2026-06-07 06:52:27 +05:30
Kovid Goyal
72c1ff6085 Ignore inapplicable CVE 2026-06-06 18:53:13 +05:30
Kovid Goyal
40ed8cfd3c fontconfig: ignore failure to return FC_INDEX assume its zero
Sigh. The number of creative ways Linux systems can be broken.
See #10112
2026-06-06 18:46:15 +05:30
Kovid Goyal
6839281277 Fix #10113 2026-06-06 18:36:29 +05:30
Kovid Goyal
2d9e243847 Ignore inappplicable CVE 2026-06-06 06:12:03 +05:30
Kovid Goyal
522555a5b6 ... 2026-06-05 06:31:08 +05:30
Kovid Goyal
b2d70c899d Merge branch 'master' of https://github.com/Mobinshahidi/kitty 2026-06-04 21:12:59 +05:30
Mobin shahidi
3bd18be320 docs: add kitty-search to integrations 2026-06-04 18:56:41 +03:30
Kovid Goyal
8996aa798c dnd kitten: Create regular files with O_EXCL to avoid symlink attacks
This is not really needed as the terminal emulator should be de
duplicating directory entries anyway but no harm in defense in depth.
2026-06-03 12:17:38 +05:30
Kovid Goyal
4aa4a5c056 File transfer protocol: use O_NOFOLLOW when opening regular files 2026-06-03 06:18:31 +05:30
Kovid Goyal
9b89031a7f Bump Go toolchain version for CVEs 2026-06-03 05:58:36 +05:30
Kovid Goyal
e6e5524f67 diff kitten: Strip suid/sgid bits from extracted files 2026-06-03 05:45:04 +05:30
Kovid Goyal
cb0f05c4e4 Fix parsing of config set aborting on non-existent files 2026-06-02 21:19:04 +05:30
Kovid Goyal
54ecc67339 Update changelog
Fixes #10102
2026-06-02 21:08:28 +05:30
Kovid Goyal
3684838188 Merge branch 'copilot/modify-watch-for-config-changes' of https://github.com/kovidgoyal/kitty 2026-06-02 21:06:58 +05:30
copilot-swe-agent[bot]
bff5af7052 address review: fix comment wording and rename burst_actions variable 2026-06-02 12:46:10 +00:00
copilot-swe-agent[bot]
d80fd1c23d consolidate watch tests and add include-in-included-file test
- Merge TestWatchForConfigChangesIncludeAdded and
  TestWatchForConfigChangesIncludeRemoved into the main
  TestWatchForConfigChanges function, which now starts the watcher
  once and shares it across all integration subtests.
- Add prime_watcher helper that retries writes until an action fires,
  replacing the blind time.Sleep(200ms) watcher-startup wait.
- Add new subtest "include added to already-included file adds its
  parent dir": writes an include directive into sub/included.conf
  (itself included from kitty.conf), then verifies that changes to
  the newly referenced file trigger the action, confirming its parent
  directory was added to the watch set.
- Fix TestWatchForConfigChangesDebounce to use prime_watcher instead
  of time.Sleep for startup; capture before_burst baseline before the
  burst loop so the burst-action count is computed correctly.
2026-06-02 12:45:00 +00:00
copilot-swe-agent[bot]
7e96373515 watch: non-recursive config file watching with dynamic include tracking 2026-06-02 08:23:05 +00:00
Kovid Goyal
6c586934f4 ... 2026-06-02 13:31:14 +05:30
Kovid Goyal
4043e99b75 Merge branch 'copilot/show-secure-input-in-menubar' of https://github.com/kovidgoyal/kitty 2026-06-01 13:11:30 +05:30
Kovid Goyal
26d255b27d Merge branch 'dependabot/github_actions/actions-754f0868f5' of https://github.com/kovidgoyal/kitty 2026-06-01 13:04:24 +05:30
Kovid Goyal
905e1b77d1 Merge branch 'dependabot/go_modules/all-go-deps-c4d8eed042' of https://github.com/kovidgoyal/kitty 2026-06-01 13:01:52 +05:30
dependabot[bot]
de8870da47 Bump github/codeql-action from 4.35.5 to 4.36.0 in the actions group
Bumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 4.35.5 to 4.36.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.5...v4.36.0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:48:15 +00:00
dependabot[bot]
73ac7b738f Bump the all-go-deps group with 3 updates
Bumps the all-go-deps group with 3 updates: [github.com/ebitengine/purego](https://github.com/ebitengine/purego), [github.com/sgtdi/fswatcher](https://github.com/sgtdi/fswatcher) and [golang.org/x/sys](https://github.com/golang/sys).


Updates `github.com/ebitengine/purego` from 0.10.0 to 0.10.1
- [Release notes](https://github.com/ebitengine/purego/releases)
- [Commits](https://github.com/ebitengine/purego/compare/v0.10.0...v0.10.1)

Updates `github.com/sgtdi/fswatcher` from 1.2.0 to 1.3.0
- [Release notes](https://github.com/sgtdi/fswatcher/releases)
- [Commits](https://github.com/sgtdi/fswatcher/compare/v1.2.0...v1.3.0)

Updates `golang.org/x/sys` from 0.44.0 to 0.45.0
- [Commits](https://github.com/golang/sys/compare/v0.44.0...v0.45.0)

---
updated-dependencies:
- dependency-name: github.com/ebitengine/purego
  dependency-version: 0.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-deps
- dependency-name: github.com/sgtdi/fswatcher
  dependency-version: 1.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-deps
- dependency-name: golang.org/x/sys
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:40:37 +00:00
Kovid Goyal
385d90c427 Fix matching of var/env against tabs
Fixes #10095
2026-06-01 11:49:45 +05:30
Kovid Goyal
9c7b3d778a Switch to match/case 2026-06-01 11:47:14 +05:30
copilot-swe-agent[bot]
f388fdabdc Show [Secure input] indicator in macOS global menubar title area when secure keyboard entry is enabled 2026-06-01 00:57:43 +00:00
Kovid Goyal
ce4defcff4 Merge branch 'wayland-titlebar-crash' of https://github.com/cwelsys/kitty 2026-05-31 11:03:13 +05:30
Connor Welsh
fb4d05f7e8 Wayland: Fix crash hiding titlebar on layer-shell windows
inform_compositor_of_window_geometry() calls xdg_surface_set_window_geometry()
unconditionally, but layer-shell surfaces (e.g. those from `kitten panel`) have
no xdg_surface. With hide_window_decorations set to titlebar-only, the panel hits
this geometry call during creation and dereferences the NULL proxy, crashing in
wl_proxy_get_version() with SIGSEGV.

Guard on window->wl.xdg.surface: layer-shell surfaces manage geometry via the
layer surface, so the xdg call is skipped. Normal toplevels are unaffected.
2026-05-30 16:14:55 -04:00
Kovid Goyal
6bd62a5242 Merge branch 'master' of https://github.com/codeasone/kitty 2026-05-30 07:35:10 +05:30
Kovid Goyal
4aa0cd6215 bump go image mod version for CVE 2026-05-30 05:17:19 +05:30
Mark Stuart
852fc4a662 Add equalize action and equalize_on_close option to Splits layout
Adds an `equalize` layout action that redistributes split sizes so each
window receives a proportional share of space along each axis.

Also adds an `equalize_on_close` layout option that automatically
equalizes splits whenever a window is closed, keeping the remaining
windows balanced without requiring an explicit key binding.

These two features compose well. For example, to keep splits balanced
at all times - equalizing on every open and close:

    enabled_layouts splits:equalize_on_close=true
    map ctrl+' combine : launch --location=hsplit --cwd=current : layout_action equalize
    map ctrl+/ combine : launch --location=vsplit --cwd=current : layout_action equalize

A standalone key binding for manual rebalancing is also supported:

    map ctrl+shift+e layout_action equalize
2026-05-29 20:02:42 +01:00
Kovid Goyal
2b7d8af55a Fix #10089 2026-05-29 14:55:14 +05:30
Kovid Goyal
9ffabc7caf ... 2026-05-29 14:52:30 +05:30
Kovid Goyal
52b44f4f1a Ensure we dont double copy 2026-05-29 07:52:38 +05:30
Kovid Goyal
d6b662e706 macOS: Fix regression in 0.47.0 that broke passing Cmd+C on to terminal applications when no text is selected
Fixes #10087
2026-05-29 07:47:29 +05:30
Kovid Goyal
74b80e9a29 Update changelog 2026-05-29 07:14:28 +05:30
Kovid Goyal
a6aa51e823 Merge branch 'master' of https://github.com/pakhromov/kitty 2026-05-29 07:13:17 +05:30
Pavel
0fedf69d87 scrollbar: start drag after track click when jump_on_click is enabled
When scrollbar_jump_on_click is on and the user clicks the track, immediately
jump to the clicked position and begin a drag so holding the button and
moving the mouse continues scrolling. Matches the behavior of Firefox and
GTK apps.
2026-05-28 21:19:10 +02:00