Commit graph

1402 commits

Author SHA1 Message Date
Kovid Goyal
950497ac0c
Cleanup previous PR 2026-04-03 22:25:05 +05:30
z3rco
b39f88c6a2 Fix multiple security vulnerabilities across C, Python, and Go code
Timing-safe comparisons:
- crypto.c: Replace memcmp with CRYPTO_memcmp for Secret equality,
  require equal lengths before comparing
- remote_control.py: Constant-time password lookup to avoid leaking
  valid passwords via dict hash timing
- file_transmission.py: Use hmac.compare_digest for bypass token
  comparison instead of ==

Memory safety:
- child-monitor.c: Fix inverted condition in write_to_peer that
  prevented memmove from ever executing on partial writes
- ibus_glfw.c: Null-terminate IBUS_ADDRESS copy to prevent string
  overread when strlen >= PATH_MAX
- x11_window.c: Add NULL checks after realloc in clipboard/DnD
  data handling (two sites)
- dnd.c: Cap accepted_mimes at 1MB to prevent unbounded growth,
  fix realloc to not lose the original pointer on failure
- png-reader.c: Cast to size_t before multiplication to prevent
  integer overflow on 32-bit platforms

Secrets hygiene:
- disk-cache.c: Zero encryption_key with explicit_bzero before free

Tar extraction hardening:
- tar.go: Validate hardlink targets against destination prefix to
  prevent writing outside extraction directory
- tar.go: Strip setuid/setgid/sticky bits from extracted files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:10:46 +01:00
copilot-swe-agent[bot]
1853c48561
tui/password: make lock emoji blink at 500ms via repeating timer
Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/3ee6840f-29cc-43bb-a4b6-bf9ae604ea11

Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
2026-04-01 02:51:40 +00:00
copilot-swe-agent[bot]
8aa83221e8
Improve password input: hide cursor and show lock emoji (U+1F512)
Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/cf06c199-5837-41da-bebf-eb3c220684db

Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
2026-04-01 02:43:55 +00:00
Jake Stewart
1a62cde212
Add option to generate 256 color palette from first 16 colors
Needs more work to test and possibly implement reporting and setting
of the nullable color table colors.

Fixes #9426
2026-03-27 20:01:14 +05:30
copilot-swe-agent[bot]
6a0efbfdba
Refactor ShortcutTracker.Match() to respect AllowFallback priority order
Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/85fbf706-4688-4901-9a23-907cebc91da3
2026-03-26 04:31:37 +00:00
Kovid Goyal
88ee80b327
Cleanup previous PR
Actually respect the fallback order when finding matching shortcuts
2026-03-26 09:30:14 +05:30
Павел Мешалкин
8ffdf7d7ee feat: add per-mapping --allow-fallback for layout-independent shortcuts
Add --allow-fallback option to the map command that controls shifted
and ascii (alternate_key) fallback for individual key mappings.

For non-Latin keyboard layouts, when the current layout key is
non-ascii (codepoint > 127 and < 0xE000), the alternate_key from
the base layout is used for matching if the mapping opts in via
--allow-fallback=shifted,ascii.

Default kitty bindings use --allow-fallback=shifted,ascii so they
work out of the box with non-Latin layouts. User custom mappings
default to --allow-fallback=shifted (preserving existing shifted_key
behavior without ascii fallback).

--allow-fallback=none disables all fallback for a mapping.

Python side: parse_options_for_map() in options/utils.py handles flag
parsing, ShortcutMapping uses it in __init__. get_shortcut() filters
candidates by per-mapping allow_fallback.

Go side: ParseMap() handles --allow-fallback, KeyAction stores
AllowFallback, ShortcutTracker.Match passes it to matching.
MatchesParsedShortcut defaults to shifted,ascii for hardcoded shortcuts.

Migrated kittens (themes, command_palette, diff, choose_files) to
use ShortcutTracker with configurable map entries.

Tests added for Python (5 test methods) and Go (ParseMap + key matching).
2026-03-25 19:34:13 +03:00
Kovid Goyal
59117ff5fd
... 2026-03-21 08:41:48 +05:30
Kovid Goyal
27ad4bc070
Fix some more misc bugs in the DnD code 2026-03-21 08:41:48 +05:30
Kovid Goyal
1704d27004
... 2026-03-21 08:41:47 +05:30
Kovid Goyal
eddaaed3e3
Modernize Go code 2026-03-21 08:41:47 +05:30
copilot-swe-agent[bot]
3d13cf1ca5
Fix three bugs in mouse demo kitten DnD drop handling
Fixes #9631
2026-03-21 08:41:47 +05:30
copilot-swe-agent[bot]
9ee058eaf9
Initial implementation of drop client in mouse_demo
Fixes #9623
2026-03-21 08:41:47 +05:30
Kovid Goyal
7b9b8834a8
... 2026-03-12 13:48:20 +05:30
copilot-swe-agent[bot]
f4bf9cf1c9
Add not_index_byte and not_index_byte2 functions to simdstring package
Fixes #9646
2026-03-12 13:47:05 +05:30
Kovid Goyal
b66703ec85
Merge branch 'pane-title-bar' of https://github.com/mcrmck/kitty 2026-03-05 08:31:50 +05:30
mcrmck
cc32af250b Rename pane → window title bar per reviewer feedback
- Rename all options from pane_title_* to window_title_*
- Use foreground/background instead of fg/bg in color option names
- Change color options to to_color_or_none defaulting to None,
  falling back to corresponding tab bar colors
- Add bell_symbol, activity_symbol, progress_percent template vars
  using existing bell_on_tab and tab_activity_symbol options
- Add custom script support via window_title_bar.py in config dir
  (draw_window_title function exposed as {custom} in templates)
- Update C structs, Python references, and regenerate config files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-01 23:53:28 -05:00
mcrmck
ab3a8ca56a Add pane title bar feature for window splits
Add an optional title bar that displays above or below each window pane
when multiple windows are visible in a tab. This is similar to tmux's
pane-border-format or Terminator's pane title bars.

New configuration options:
- pane_title_bar: none/top/bottom (default: none)
- pane_title_template: f-string template (same syntax as tab_title_template)
- active_pane_title_template: override for active pane
- pane_title_bar_active_fg/bg: colors for active pane title
- pane_title_bar_inactive_fg/bg: colors for inactive pane titles
- pane_title_bar_align: left/center/right text alignment

The title bars are rendered using virtual Screen objects registered with
the GPU, following the same model as the tab bar. Title bars are
automatically hidden when only a single window is visible.

Ref: https://github.com/kovidgoyal/kitty/discussions/9448

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-01 23:52:24 -05:00
Daniel M German
723363601f Fix CI error by changing order of imports 2026-02-22 21:24:00 -08:00
Daniel M German
33b5b0a339 Add command_palette command to display bound keys
Add a Go-based command_palette kitten that provides a searchable,
interactive overlay for browsing and triggering keyboard shortcuts
and actions.

- New Go kitten at kittens/command_palette/ with FZF fuzzy search,
  grouped/flat views, and remote control action triggering
- Python collect_keys_data() does data collection, passed via stdin
- Navigation: arrows, ctrl+j/k (vim), ctrl+n/p (emacs), page up/down
- Enter triggers the selected action via RC command
- Help text displayed in footer for selected binding
- Added Go tests (main_test.go) and Python tests (command_palette.py)
2026-02-22 20:46:47 -08:00
newwares
828bd56fa5 ssh kitten: Push and pop keyboard encoding flags 2026-02-07 20:26:28 -05:00
ad-chaos
4897537481 better fix for kitty +lnum path 2026-01-26 15:50:54 +05:30
ad-chaos
17f2d2c574 Revert "Fix edit-in-kitty +lnum path"
This reverts commit 0f80229468.
2026-01-26 14:15:10 +05:30
Kovid Goyal
10273d5aa2
kitten @: Fix relative paths for --password-file being resolved relative to CWD instead of the kitty config directory 2026-01-25 20:30:11 +05:30
Kovid Goyal
75ce50400e
Remote control: scroll-window: Allow fractional scrolling since we now have pixel scroll 2026-01-22 13:05:22 +05:30
phanium
0f80229468 Fix edit-in-kitty +lnum path 2026-01-01 18:28:07 +08:00
Kovid Goyal
e14e34948e
More cleanups for color parsing
Using rounding when converting float to uint8 for more accuracy.
Fix rgb:3 and rgbi: parsing in Go code. Various other minor cleanups.
2025-12-31 09:35:09 +05:30
Kovid Goyal
a4d88beddb
Micro-optimisation 2025-12-30 13:40:49 +05:30
Jökull Sólberg
64abd87a9e Add wide gamut color support with OKLCH and LAB formats
Implements modern wide gamut color formats with CSS Color Module Level 4
gamut mapping, addressing PR feedback with Go implementation, performance
benchmarks, and reorganized documentation.

Features:
- OKLCH (perceptually uniform color space)
- CIE LAB (device-independent color space)
- CSS Color 4 compliant gamut mapping algorithm
- Inline comment support in color config parsing

Addressing PR Feedback:

1. Go Implementation (tools/utils/style/):
   - Complete OKLCH and LAB parsing with gamut mapping
   - Matches Python implementation structure
   - Comprehensive test suite (all tests passing)
   - Performance benchmarks showing acceptable overhead

2. Performance Benchmarks:
   - OKLCH: ~4.6 µs/op
   - LAB: ~1.5 µs/op
   - 10 mixed colors: ~13 µs total
   - Typical config (50 colors): <0.5ms startup impact

3. Documentation Reorganization:
   - Moved detailed color docs to docs/wide-gamut-colors.rst
   - Configuration docs now link to separate documentation
   - Reduces size of main configuration documentation

Gamut Mapping:
- Binary search chroma reduction from CSS Color Module Level 4
- Preserves lightness and hue while reducing chroma for out-of-gamut colors
- Uses deltaE OK (JND threshold: 0.02) for perceptual difference
- Ensures graceful degradation on sRGB displays

Python Implementation:
- parse_oklch(): OKLCH color parsing with gamut mapping
- parse_lab(): CIE LAB parsing with gamut mapping via OKLCH conversion
- lab_to_oklch(): LAB to OKLCH conversion for consistent gamut mapping
- oklch_to_srgb_gamut_map(): CSS Color 4 gamut mapping algorithm
- srgb_to_oklab(): Reverse conversion for deltaE calculations
- deltaE_ok(): Perceptual color difference in OKLab space

Go Implementation:
- colorspaces.go: All color space conversions and gamut mapping
- wrapper.go: ParseColor() updated to support OKLCH and LAB
- Comprehensive test coverage with benchmarks
- Matches Python implementation behavior

Robustness:
- NaN and infinity validation in all color parsing functions
- Defense-in-depth with validation at parsing and gamut mapping levels
- Returns None/error for invalid input (consistent error handling)
- Validates before clamping operations to prevent NaN propagation

Files changed:
- Python: kitty/rgb.py, kitty_tests/datatypes.py (+250 lines)
- Go: tools/utils/style/colorspaces.go, wrapper.go (+350 lines, tests)
- Docs: docs/wide-gamut-colors.rst (moved from inline)
- Config: kitty/options/definition.py (simplified, links to docs)

References:
- CSS Color Module Level 4: https://www.w3.org/TR/css-color-4/
- OKLCH Color Space: https://bottosson.github.io/posts/oklab/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 14:34:34 +00:00
Kovid Goyal
f1cc676ea6
... 2025-12-08 20:47:20 +05:30
Kovid Goyal
fee4cb0975
fix warning from linter 2025-12-02 23:37:53 +05:30
Kovid Goyal
f8db2702db
choose files: Add a few more output formats 2025-11-26 21:13:57 +05:30
Kovid Goyal
fae50137a9
Add a clear cache action 2025-11-23 12:15:29 +05:30
Kovid Goyal
6de4e5237f
Resize method should not use bounds 2025-11-17 12:59:04 +05:30
Kovid Goyal
68805850a5
Preserve opacity when resizing on image load 2025-11-15 14:56:21 +05:30
Kovid Goyal
25cf8622bc
Avoid double is_opaque scan 2025-11-15 13:06:17 +05:30
Kovid Goyal
fb6332d8e2
Resize frames in parallel 2025-11-15 12:41:14 +05:30
Kovid Goyal
1d19942811
Store more metadata about pixel data shape when serializing 2025-11-15 12:23:56 +05:30
Kovid Goyal
9bc29a7fa6
Dont write to ~/.gitconfig in the tests
Just in case the tests are run without setting HOME
2025-11-13 18:50:42 +05:30
Kovid Goyal
9be602f94f
... 2025-11-11 21:39:12 +05:30
Kovid Goyal
6f588a0c29
run modernize 2025-11-11 17:09:37 +05:30
Kovid Goyal
d19fc375ba
Switch to external shm package 2025-11-10 12:01:05 +05:30
Kovid Goyal
1c8e8e9530
Switch over to the new imaging backend for icat
Greatly simplifies a whole bunch of code. The new backend takes care of
falling back to ImageMagick efficiently itself.
2025-11-10 11:34:56 +05:30
Kovid Goyal
57f7c8f65e
Bump version of imaging for a few more fixes 2025-11-08 10:27:56 +05:30
Kovid Goyal
375aeae689
Clean up imagemagick disposal processing 2025-11-07 14:44:26 +05:30
Kovid Goyal
f8c78909fa
Use an explicit APNG identifier for apng files with ImageMagick
Required as per Imagemgick docs: https://imagemagick.org/script/formats.php
2025-11-07 11:33:13 +05:30
Kovid Goyal
1e6d67b975
Update to the latest version of imaging
Gives us a bunch of new features and allows us to move a bunch of code
into imaging
2025-11-06 22:31:31 +05:30
Eng Zer Jun
d5455ab072
Update github.com/shirou/gopsutil to v4
v4 is the latest version with bug fixes and enhancements, notably the
removal of CGO implementations on Darwin in v4.24.9 [1].

Note: Due to the library's versioning policy, v4.24.5 is the first v4
release [2].

[1]: https://github.com/shirou/gopsutil/releases/tag/v4.24.9
[2]: https://github.com/shirou/gopsutil/releases/tag/v4.24.5

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2025-10-31 23:14:38 +08:00
Kovid Goyal
1e1a1851d0
Add support for Unicode 17
This is preliminary, all tests pass, but needs more careful review.
2025-10-18 09:59:53 +05:30
Kovid Goyal
1c2c01722b
Bump version of imaging
Fixes an out of bounds error when processing opaque images
2025-10-15 08:29:23 +05:30
Kovid Goyal
284ae74201
icat: Report panics in the render function correctly
Also, only fallback to imagemagick on error when the engine is not
specified as builtin
2025-10-15 08:17:53 +05:30
Kovid Goyal
b627d2e4ab
Move error handling code into its own library 2025-10-12 13:51:16 +05:30
Kovid Goyal
471831831b
move more imaging code into the imaging module 2025-10-12 08:29:30 +05:30
Kovid Goyal
44df0c85c4
Mark the netPBM image types as decodable 2025-10-11 13:43:00 +05:30
Kovid Goyal
a1168be6c7
... 2025-10-11 13:25:46 +05:30
Kovid Goyal
4c0c5c01f2
Bump version of imaging 2025-10-11 13:17:15 +05:30
Kovid Goyal
29e80f2c1b
Remove unused code 2025-10-10 08:23:22 +05:30
Kovid Goyal
b543956638
... 2025-10-09 20:29:15 +05:30
Kovid Goyal
ec7da87905
An endpoint to develop resizing code 2025-10-09 20:09:15 +05:30
Kovid Goyal
436ab9a95a
Add a convenient entry point to test and work on the image serialization code 2025-10-09 19:26:05 +05:30
Kovid Goyal
35093d2105
Fix frame origins not be de-serialized 2025-10-09 19:22:22 +05:30
Kovid Goyal
9212c08638
Faster conversion of plaette to NRGB for opaque colors 2025-10-09 16:57:28 +05:30
Kovid Goyal
2dea3087b3
Faster is_opaque implementation for paletted images 2025-10-09 16:52:13 +05:30
Kovid Goyal
c48ed15007
... 2025-10-09 16:12:39 +05:30
Kovid Goyal
127459012a
Fix incorrect alpha values returned by NRGB color model 2025-10-09 11:39:39 +05:30
Kovid Goyal
298daa4e83
Utility method to save frame as uncompressed PNG 2025-10-09 10:56:33 +05:30
Kovid Goyal
9be66bfe4a
When rendering with Go image libraries fails fallback to ImageMagick 2025-10-09 09:40:46 +05:30
Kovid Goyal
2ac2c17929
Fix transmission by file 2025-10-09 09:35:06 +05:30
Kovid Goyal
c6582e9f51
... 2025-10-09 09:25:47 +05:30
Kovid Goyal
ceb712f791
DRYer 2025-10-09 09:00:37 +05:30
Kovid Goyal
aecf13302a
Fix off-by-one in NRGB 2025-10-09 08:30:20 +05:30
Kovid Goyal
e61e95da3a
... 2025-10-09 08:04:58 +05:30
Kovid Goyal
37bd77f4a8
Bump version of imaging
imaging is now panic safe. Also format nested panics a bit better.
2025-10-09 08:00:31 +05:30
Kovid Goyal
f067e9cd92
Make various goroutines panic-safe 2025-10-09 07:17:53 +05:30
Kovid Goyal
49d8b1a9d0
More work on image preview rendering 2025-10-08 22:00:12 +05:30
Kovid Goyal
c2e75ba466
Fix disk cache not reading inode
Also use a faster atomic update mechanism
2025-10-08 08:35:35 +05:30
Kovid Goyal
16cdcf8cf8
Use inode number and size for more robust entries change tracking 2025-10-08 07:28:02 +05:30
Kovid Goyal
a6335777d9
disk cache: add a path based API
This allows maintaining only a single cache entry per path when the
path's contents change.
2025-10-08 06:41:12 +05:30
Kovid Goyal
a76f32df2d
Code to serialize/unserialize loaded images 2025-10-07 17:25:47 +05:30
Kovid Goyal
1f37f065ab
Improve API of disk cache
Allow getting all keys and also return get result for added keys
2025-10-07 13:01:09 +05:30
Kovid Goyal
224ccb170a
Micro optimisation 2025-10-07 09:23:22 +05:30
Kovid Goyal
328745cad9
removing a non-existent item from disk cache is not an error 2025-10-07 09:16:30 +05:30
Kovid Goyal
5d1ce327e0
Ensure adds to disk cache are atomic 2025-10-07 09:14:14 +05:30
alex-huff
86698e0b17 unicode-input: fix race condition causing incorrect results 2025-10-06 19:14:06 -05:00
Kovid Goyal
ca7ab7a57c
Get rid of os.Exit() from ExecAndHoldTillEnter 2025-09-30 13:25:22 +05:30
Kovid Goyal
712faa7aa5
Fix pruning on DiskCache object creation 2025-09-30 13:18:00 +05:30
Kovid Goyal
8fdbf8d7da
Make the paths returned by DiskCache stable even if the parent entry is removed/pruned for the life of the process 2025-09-30 12:53:08 +05:30
Kovid Goyal
16d411943a
Add integration test for go atexit implementation 2025-09-30 12:37:25 +05:30
Kovid Goyal
190e3e5891
Add atexit cleanup via worker process to kittens infrastructure 2025-09-30 11:52:13 +05:30
Kovid Goyal
4f9519d773
Cleanup __atexit__ 2025-09-30 11:29:49 +05:30
Kovid Goyal
ba96fa06fe
Allow using defer in KittenMain 2025-09-30 11:20:37 +05:30
Kovid Goyal
ca0ff68d8e
More tests for disk cache 2025-09-30 11:16:49 +05:30
Kovid Goyal
d7199f1f75
Start working on tests for disk cache 2025-09-28 21:35:36 +05:30
Kovid Goyal
30f7ed76c1
Start work on disk cache for choose files preview caching 2025-09-28 09:49:16 +05:30
Kovid Goyal
ee00bfa01a
... 2025-09-21 10:15:06 +05:30
Kovid Goyal
f98d5fce16
Remove multiple copies of imaging package
Move to an exiffix fork that does not depend on disintegration/imaging
Now we have only one copy of kovidgoyal/imaging package.
2025-09-19 21:41:23 +05:30
Kovid Goyal
80260e6eb1
Move back to individual settings for scrollbar
We need to split out the color settings so that they can be set in
themes anyway, so ...
2025-09-14 17:48:59 +05:30
Kovid Goyal
a28e9a0146
Fix infinite recursion in readline completer 2025-08-16 06:55:39 +05:30
Kovid Goyal
fd5876b94e
Use SIMD to replace C0 control codes in Go code 2025-07-21 08:54:22 +05:30