2020-02-15 19:01:54 +01:00
|
|
|
|
# -*- conf -*-
|
|
|
|
|
|
|
2021-01-07 11:16:29 +01:00
|
|
|
|
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
|
2021-02-09 19:42:55 +01:00
|
|
|
|
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
|
2021-01-07 11:16:29 +01:00
|
|
|
|
# login-shell=no
|
|
|
|
|
|
|
2023-05-02 01:53:01 +10:00
|
|
|
|
# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode
|
2021-07-04 17:59:40 +02:00
|
|
|
|
# title=foot
|
|
|
|
|
|
# locked-title=no
|
|
|
|
|
|
|
2020-12-31 12:48:20 +01:00
|
|
|
|
# font=monospace:size=8
|
2020-10-20 21:04:47 +02:00
|
|
|
|
# font-bold=<bold variant of regular font>
|
|
|
|
|
|
# font-italic=<italic variant of regular font>
|
|
|
|
|
|
# font-bold-italic=<bold+italic variant of regular font>
|
2022-12-17 10:18:55 +01:00
|
|
|
|
# font-size-adjustment=0.5
|
2021-01-07 11:16:29 +01:00
|
|
|
|
# line-height=<font metrics>
|
2021-01-07 11:46:18 +01:00
|
|
|
|
# letter-spacing=0
|
2021-01-07 11:16:29 +01:00
|
|
|
|
# horizontal-letter-offset=0
|
|
|
|
|
|
# vertical-letter-offset=0
|
2021-06-17 17:52:38 +02:00
|
|
|
|
# underline-offset=<font metrics>
|
2022-08-19 02:54:49 +02:00
|
|
|
|
# underline-thickness=<font underline thickness>
|
2024-08-25 11:28:21 +03:00
|
|
|
|
# strikeout-thickness=<font strikeout thickness>
|
2021-04-09 23:19:20 +02:00
|
|
|
|
# box-drawings-uses-font-glyphs=no
|
2023-06-26 17:55:04 +02:00
|
|
|
|
# dpi-aware=no
|
2025-05-01 08:09:08 +02:00
|
|
|
|
# gamma-correct-blending=no
|
2021-01-07 11:16:29 +01:00
|
|
|
|
|
2025-04-21 12:19:11 +02:00
|
|
|
|
# initial-color-theme=1
|
2020-09-08 19:17:29 +02:00
|
|
|
|
# initial-window-size-pixels=700x500 # Or,
|
|
|
|
|
|
# initial-window-size-chars=<COLSxROWS>
|
2020-03-28 12:04:00 +01:00
|
|
|
|
# initial-window-mode=windowed
|
2025-05-23 08:38:00 +02:00
|
|
|
|
# pad=0x0 center-when-maximized-and-fullscreen
|
2024-06-08 08:54:12 +02:00
|
|
|
|
# resize-by-cells=yes
|
2024-08-14 10:35:58 -04:00
|
|
|
|
# resize-keep-grid=yes
|
2021-01-21 15:14:43 +01:00
|
|
|
|
# resize-delay-ms=100
|
2021-01-07 11:16:29 +01:00
|
|
|
|
|
2020-11-14 11:21:51 +01:00
|
|
|
|
# bold-text-in-bright=no
|
2020-10-09 19:44:23 +02:00
|
|
|
|
# word-delimiters=,│`|:"'()[]{}<>
|
2021-01-16 11:26:03 +01:00
|
|
|
|
# selection-target=primary
|
2021-01-07 11:16:29 +01:00
|
|
|
|
# workers=<number of logical CPUs>
|
2023-05-17 20:51:40 +02:00
|
|
|
|
# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux)
|
|
|
|
|
|
# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD)
|
2019-07-21 15:35:01 +02:00
|
|
|
|
|
2025-08-07 08:18:38 -04:00
|
|
|
|
# uppercase-regex-insert=yes
|
|
|
|
|
|
|
2022-05-28 19:27:29 +02:00
|
|
|
|
[environment]
|
|
|
|
|
|
# name=value
|
|
|
|
|
|
|
2024-12-21 06:52:00 +01:00
|
|
|
|
[security]
|
|
|
|
|
|
# osc52=enabled # disabled|copy-enabled|paste-enabled|enabled
|
|
|
|
|
|
|
2021-04-29 04:12:55 -05:00
|
|
|
|
[bell]
|
2025-01-17 10:10:10 +01:00
|
|
|
|
# system=yes
|
2021-05-07 07:16:48 -05:00
|
|
|
|
# urgent=no
|
|
|
|
|
|
# notify=no
|
2023-10-07 19:37:04 +02:00
|
|
|
|
# visual=no
|
2021-04-29 04:12:55 -05:00
|
|
|
|
# command=
|
2021-05-22 10:53:09 -07:00
|
|
|
|
# command-focused=no
|
2021-04-29 04:12:55 -05:00
|
|
|
|
|
osc: kitty notifications: implement focus|report
This patch adds support for window focusing, and sending events back
to the client application when a notification is closed.
* Refactor notification related configuration options:
- add desktop-notifications sub-section
- deprecate 'notify' in favor of 'desktop-notifications.command'
- deprecate 'notify-focus-inhibit' in favor of
'desktop-notifications.inhibit-when-focused'
* Refactor: rename 'struct kitty_notification' to 'struct
notification'
* Pass a 'struct notification' to notify_notify(), instead of many
arguments.
* notify_notify() now registers a reaper callback. When the notifier
process has terminated, the notification is considered closed, and we
either try to focus (activate) the window, or send an event to the
client application, depending on the notification setting.
* For the window activation, we need an XDG activation token. For now,
assume *everything* written on stdout is part of the token.
* Refactor: remove much of the warnings from OSC-99; we don't
typically log anything when an OSC/CSI has invalid values.
* Add icon support to OSC-99. This isn't part of the upstream
spec. Foot's implementation:
- uses the 'I' parameter
- the value is expected to be a symbolic icon name
- a quick check for absolute paths is done, and such icon requests
are ignored.
* Added ${icon} to the 'desktop-notifications.command' template. Uses
the icon specified in the notification, or ${app-id} if not set.
2024-07-23 06:59:46 +02:00
|
|
|
|
[desktop-notifications]
|
2024-08-04 15:21:06 +02:00
|
|
|
|
# command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body}
|
osc: kitty notifications: cleanup and update to latest version of spec
* Don't store a list of unfinished notifications. Use a single one. If
the notification ID of the 'current' notification doesn't match the
previous, unfinished one, the 'current' notification replaces the
previous one, instead of updating it.
* Update xstrjoin() to take an optional delimiter (for example ','),
and use that when joining categories and 'alive IDs'.
* Rename ${action-arg} to ${action-argument}
* Update handling of the 'n' parameter (symbolic icon name); the spec
allows it to be used multiple times, and the terminal is supposed to
pick the first one it can resolve. Foot can't resolve icons at all,
neither can 'notify-send' or 'fyi' (which is what foot typically
executes to display a notification); it's the notification daemon that
resolves icons.
The spec _could_ be interpreted to mean the terminal should lookup
.desktop files, and use the value of the 'Icon' key from the first
matching .desktop files. But foot doesn't read .desktop files, and I
don't intend to implement XDG directory scanning and parsing of
.desktop files just to figure out which icon to use.
Instead, use a simple heuristics; use the *shortest* symbolic
names. The idea is pretty simple: plain icon names are typically
shorter than .desktop file IDs.
2024-08-02 08:07:13 +02:00
|
|
|
|
# command-action-argument=--action ${action-name}=${action-label}
|
2024-07-25 19:24:28 +02:00
|
|
|
|
# close=""
|
osc: kitty notifications: implement focus|report
This patch adds support for window focusing, and sending events back
to the client application when a notification is closed.
* Refactor notification related configuration options:
- add desktop-notifications sub-section
- deprecate 'notify' in favor of 'desktop-notifications.command'
- deprecate 'notify-focus-inhibit' in favor of
'desktop-notifications.inhibit-when-focused'
* Refactor: rename 'struct kitty_notification' to 'struct
notification'
* Pass a 'struct notification' to notify_notify(), instead of many
arguments.
* notify_notify() now registers a reaper callback. When the notifier
process has terminated, the notification is considered closed, and we
either try to focus (activate) the window, or send an event to the
client application, depending on the notification setting.
* For the window activation, we need an XDG activation token. For now,
assume *everything* written on stdout is part of the token.
* Refactor: remove much of the warnings from OSC-99; we don't
typically log anything when an OSC/CSI has invalid values.
* Add icon support to OSC-99. This isn't part of the upstream
spec. Foot's implementation:
- uses the 'I' parameter
- the value is expected to be a symbolic icon name
- a quick check for absolute paths is done, and such icon requests
are ignored.
* Added ${icon} to the 'desktop-notifications.command' template. Uses
the icon specified in the notification, or ${app-id} if not set.
2024-07-23 06:59:46 +02:00
|
|
|
|
# inhibit-when-focused=yes
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-07-29 17:41:24 +02:00
|
|
|
|
[scrollback]
|
|
|
|
|
|
# lines=1000
|
2020-09-29 09:50:17 +02:00
|
|
|
|
# multiplier=3.0
|
2020-07-29 17:41:24 +02:00
|
|
|
|
# indicator-position=relative
|
2022-12-01 15:06:13 +01:00
|
|
|
|
# indicator-format=""
|
2020-07-29 17:41:24 +02:00
|
|
|
|
|
2021-05-20 17:56:56 +02:00
|
|
|
|
[url]
|
|
|
|
|
|
# launch=xdg-open ${url}
|
|
|
|
|
|
# label-letters=sadfjklewcmpgh
|
|
|
|
|
|
# osc8-underline=url-mode
|
2025-04-02 08:41:46 +02:00
|
|
|
|
# regex=(((https?://|mailto:|ftp://|file:|ssh:|ssh://|git://|tel:|magnet:|ipfs://|ipns://|gemini://|gopher://|news:)|www\.)([0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]+|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*')+([0-9a-zA-Z/#@$&*+=~_%^\-]|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*'))
|
2025-01-30 12:33:58 +01:00
|
|
|
|
|
2025-02-03 09:05:46 +01:00
|
|
|
|
# You can define your own regex's, by adding a section called
|
|
|
|
|
|
# 'regex:<ID>' with a 'regex' and 'launch' key. These can then be tied
|
2025-02-04 10:10:10 +01:00
|
|
|
|
# to a key-binding. See foot.ini(5) for details
|
2025-02-03 09:05:46 +01:00
|
|
|
|
|
2025-02-03 08:55:47 +01:00
|
|
|
|
# [regex:your-fancy-name]
|
|
|
|
|
|
# regex=<a POSIX-Extended Regular Expression>
|
2025-02-03 14:08:23 +01:00
|
|
|
|
# launch=<path to script or application> ${match}
|
2025-02-03 09:05:46 +01:00
|
|
|
|
#
|
|
|
|
|
|
# [key-bindings]
|
|
|
|
|
|
# regex-launch=[your-fancy-name] Control+Shift+q
|
|
|
|
|
|
# regex-copy=[your-fancy-name] Control+Alt+Shift+q
|
2021-05-20 17:58:06 +02:00
|
|
|
|
|
2019-07-22 20:15:14 +02:00
|
|
|
|
[cursor]
|
|
|
|
|
|
# style=block
|
2020-06-30 17:45:34 +02:00
|
|
|
|
# blink=no
|
2024-05-20 11:00:02 +02:00
|
|
|
|
# blink-rate=500
|
2021-04-30 20:31:47 +02:00
|
|
|
|
# beam-thickness=1.5
|
2021-05-18 18:52:10 +02:00
|
|
|
|
# underline-thickness=<font underline thickness>
|
2020-08-04 07:33:15 +02:00
|
|
|
|
|
|
|
|
|
|
[mouse]
|
2020-07-31 17:09:06 +02:00
|
|
|
|
# hide-when-typing=no
|
2020-09-15 19:09:00 +02:00
|
|
|
|
# alternate-scroll-mode=yes
|
2019-07-22 20:15:14 +02:00
|
|
|
|
|
2023-07-05 00:19:21 +08:00
|
|
|
|
[touch]
|
|
|
|
|
|
# long-press-delay=400
|
|
|
|
|
|
|
2019-07-21 15:35:01 +02:00
|
|
|
|
[colors]
|
2020-03-02 18:47:35 +01:00
|
|
|
|
# alpha=1.0
|
2025-04-18 13:59:43 +02:00
|
|
|
|
# alpha-mode=default # Can be `default`, `matching` or `all`
|
2023-07-18 16:18:53 +02:00
|
|
|
|
# background=242424
|
|
|
|
|
|
# foreground=ffffff
|
2023-10-07 19:37:04 +02:00
|
|
|
|
# flash=7f7f00
|
2023-10-10 08:11:13 +02:00
|
|
|
|
# flash-alpha=0.5
|
2021-11-03 14:25:38 +01:00
|
|
|
|
|
2025-04-20 07:16:18 +02:00
|
|
|
|
# cursor=<inverse foreground/background>
|
|
|
|
|
|
|
2021-11-03 14:25:38 +01:00
|
|
|
|
## Normal/regular colors (color palette 0-7)
|
2023-07-18 16:18:53 +02:00
|
|
|
|
# regular0=242424 # black
|
|
|
|
|
|
# regular1=f62b5a # red
|
|
|
|
|
|
# regular2=47b413 # green
|
|
|
|
|
|
# regular3=e3c401 # yellow
|
|
|
|
|
|
# regular4=24acd4 # blue
|
|
|
|
|
|
# regular5=f2affd # magenta
|
|
|
|
|
|
# regular6=13c299 # cyan
|
|
|
|
|
|
# regular7=e6e6e6 # white
|
2021-11-03 14:25:38 +01:00
|
|
|
|
|
|
|
|
|
|
## Bright colors (color palette 8-15)
|
2023-07-18 16:18:53 +02:00
|
|
|
|
# bright0=616161 # bright black
|
|
|
|
|
|
# bright1=ff4d51 # bright red
|
|
|
|
|
|
# bright2=35d450 # bright green
|
|
|
|
|
|
# bright3=e9e836 # bright yellow
|
|
|
|
|
|
# bright4=5dc5f8 # bright blue
|
|
|
|
|
|
# bright5=feabf2 # bright magenta
|
|
|
|
|
|
# bright6=24dfc4 # bright cyan
|
2020-07-25 13:21:27 +02:00
|
|
|
|
# bright7=ffffff # bright white
|
2021-11-03 14:25:38 +01:00
|
|
|
|
|
|
|
|
|
|
## dimmed colors (see foot.ini(5) man page)
|
Allow any theme to be dark or light, determine it automatically
By definition, "[colors]" is a dark theme and the alternate theme
("[colors2]") is light.
A user who doesn't know about this definition (or about "[colors2]"),
might configure "[colors]" to be a light theme.
This is a reasonable mistake because
a. "colors" is an innocuous name
b. users who failed to run
"git merge-file ~/.config/foot/foot.ini $old_foot/foot.ini $new_foot/foot.ini"
after upgrading foot might not have "colors2" in their config.
The wrongly reported color theme (CSI 997) causes issues when apps
use it for selecting colors. I don't know if any relevant app does,
but learning this cost me some time, and maybe it's a good idea to
address this, even though it's technically a user error.
Solution 1:
Stop responding to CSI 996.
The Contour spec is [ambiguous](https://github.com/contour-terminal/contour/issues/1659#issuecomment-3596983337).
Apps might want to prefer the more widely available OSC 10/11 for detecting dark/light mode.
I think Vim does; and at least NeoVim still uses the Contour protocol to subscribe to notifications.
We'd still send DSR 2031 notifications, however that would work just fine for apps like NeoVim that ignore the payload and only use it as trigger to query for the theme again via OSC 10/11.
(Since we can only switch between two themes, we wouldn't even waste bandwidth.)
Solution 2:
Assuming the themes are only meant for the dark/light mode toggle,
rename them to "colors-dark" and "colors-light",
and maybe report color theme only for those
(and not when the user has the legacy "colors" and "colors2").
Solution 3 (implemented here):
Assuming the themes are intended to be used for things other than
dark/light toggle,
- have foot automatically detect whether the current theme is dark or light
- if needed, allow users to override this (e.g. "colors.is_dark = true")
I guess I have a slight preference for solution 2 because it seems
relatively simple. But I don't know what's the goal.
Apparently switching to dark/light mode at dusk/dawn is a feature
of macOS and there are solutions like darkmon for other OSes, so I
guess dynamic switching is a useful feature in principle.
2025-12-10 20:47:32 +01:00
|
|
|
|
# dim-blend-towards=<black if dark mode else white>
|
2021-11-03 14:25:38 +01:00
|
|
|
|
# dim0=<not set>
|
|
|
|
|
|
# ...
|
|
|
|
|
|
# dim7=<not-set>
|
|
|
|
|
|
|
|
|
|
|
|
## The remaining 256-color palette
|
2021-05-08 02:18:45 -05:00
|
|
|
|
# 16 = <256-color palette #16>
|
|
|
|
|
|
# ...
|
|
|
|
|
|
# 255 = <256-color palette #255>
|
2021-11-03 14:25:38 +01:00
|
|
|
|
|
2024-10-23 08:35:30 +02:00
|
|
|
|
## Sixel colors
|
|
|
|
|
|
# sixel0 = 000000
|
|
|
|
|
|
# sixel1 = 3333cc
|
|
|
|
|
|
# sixel2 = cc2121
|
|
|
|
|
|
# sixel3 = 33cc33
|
|
|
|
|
|
# sixel4 = cc33cc
|
|
|
|
|
|
# sixel5 = 33cccc
|
|
|
|
|
|
# sixel6 = cccc33
|
|
|
|
|
|
# sixel7 = 878787
|
|
|
|
|
|
# sixel8 = 424242
|
|
|
|
|
|
# sixel9 = 545499
|
|
|
|
|
|
# sixel10 = 994242
|
|
|
|
|
|
# sixel11 = 549954
|
|
|
|
|
|
# sixel12 = 995499
|
|
|
|
|
|
# sixel13 = 549999
|
|
|
|
|
|
# sixel14 = 999954
|
|
|
|
|
|
# sixel15 = cccccc
|
|
|
|
|
|
|
2021-11-03 14:25:38 +01:00
|
|
|
|
## Misc colors
|
2020-08-12 18:53:32 +02:00
|
|
|
|
# selection-foreground=<inverse foreground/background>
|
|
|
|
|
|
# selection-background=<inverse foreground/background>
|
2022-07-27 19:14:27 +02:00
|
|
|
|
# jump-labels=<regular0> <regular3> # black-on-yellow
|
|
|
|
|
|
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
|
|
|
|
|
|
# search-box-no-match=<regular0> <regular1> # black-on-red
|
|
|
|
|
|
# search-box-match=<regular0> <regular3> # black-on-yellow
|
2021-02-06 11:10:40 +01:00
|
|
|
|
# urls=<regular3>
|
2020-03-02 18:42:49 +01:00
|
|
|
|
|
2025-04-20 07:36:58 +02:00
|
|
|
|
[colors2]
|
|
|
|
|
|
# Alternative color theme, see man page foot.ini(5)
|
Allow any theme to be dark or light, determine it automatically
By definition, "[colors]" is a dark theme and the alternate theme
("[colors2]") is light.
A user who doesn't know about this definition (or about "[colors2]"),
might configure "[colors]" to be a light theme.
This is a reasonable mistake because
a. "colors" is an innocuous name
b. users who failed to run
"git merge-file ~/.config/foot/foot.ini $old_foot/foot.ini $new_foot/foot.ini"
after upgrading foot might not have "colors2" in their config.
The wrongly reported color theme (CSI 997) causes issues when apps
use it for selecting colors. I don't know if any relevant app does,
but learning this cost me some time, and maybe it's a good idea to
address this, even though it's technically a user error.
Solution 1:
Stop responding to CSI 996.
The Contour spec is [ambiguous](https://github.com/contour-terminal/contour/issues/1659#issuecomment-3596983337).
Apps might want to prefer the more widely available OSC 10/11 for detecting dark/light mode.
I think Vim does; and at least NeoVim still uses the Contour protocol to subscribe to notifications.
We'd still send DSR 2031 notifications, however that would work just fine for apps like NeoVim that ignore the payload and only use it as trigger to query for the theme again via OSC 10/11.
(Since we can only switch between two themes, we wouldn't even waste bandwidth.)
Solution 2:
Assuming the themes are only meant for the dark/light mode toggle,
rename them to "colors-dark" and "colors-light",
and maybe report color theme only for those
(and not when the user has the legacy "colors" and "colors2").
Solution 3 (implemented here):
Assuming the themes are intended to be used for things other than
dark/light toggle,
- have foot automatically detect whether the current theme is dark or light
- if needed, allow users to override this (e.g. "colors.is_dark = true")
I guess I have a slight preference for solution 2 because it seems
relatively simple. But I don't know what's the goal.
Apparently switching to dark/light mode at dusk/dawn is a feature
of macOS and there are solutions like darkmon for other OSes, so I
guess dynamic switching is a useful feature in principle.
2025-12-10 20:47:32 +01:00
|
|
|
|
# Same builtin defaults as [color]
|
2025-04-20 07:36:58 +02:00
|
|
|
|
|
2020-03-02 18:42:49 +01:00
|
|
|
|
[csd]
|
|
|
|
|
|
# preferred=server
|
2020-03-03 18:18:59 +01:00
|
|
|
|
# size=26
|
2021-07-22 23:40:32 +02:00
|
|
|
|
# font=<primary font>
|
2020-03-03 18:18:59 +01:00
|
|
|
|
# color=<foreground color>
|
2023-06-27 17:00:31 +05:00
|
|
|
|
# hide-when-maximized=no
|
2023-07-14 12:03:35 +02:00
|
|
|
|
# double-click-to-maximize=yes
|
2021-10-27 18:27:08 +02:00
|
|
|
|
# border-width=0
|
2021-10-29 19:30:11 +02:00
|
|
|
|
# border-color=<csd.color>
|
2020-03-06 19:11:31 +01:00
|
|
|
|
# button-width=26
|
2021-06-20 10:44:50 +02:00
|
|
|
|
# button-color=<background color>
|
2021-02-06 10:35:00 +01:00
|
|
|
|
# button-minimize-color=<regular4>
|
|
|
|
|
|
# button-maximize-color=<regular2>
|
|
|
|
|
|
# button-close-color=<regular1>
|
2020-03-08 15:36:30 +01:00
|
|
|
|
|
|
|
|
|
|
[key-bindings]
|
2025-01-31 07:29:16 +01:00
|
|
|
|
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
|
2020-09-10 18:17:47 +02:00
|
|
|
|
# scrollback-up-half-page=none
|
|
|
|
|
|
# scrollback-up-line=none
|
2025-01-31 07:29:16 +01:00
|
|
|
|
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
|
2020-09-10 18:17:47 +02:00
|
|
|
|
# scrollback-down-half-page=none
|
|
|
|
|
|
# scrollback-down-line=none
|
2023-10-08 10:37:16 +02:00
|
|
|
|
# scrollback-home=none
|
|
|
|
|
|
# scrollback-end=none
|
2022-01-17 13:57:24 -05:00
|
|
|
|
# clipboard-copy=Control+Shift+c XF86Copy
|
|
|
|
|
|
# clipboard-paste=Control+Shift+v XF86Paste
|
2020-10-10 10:27:42 +02:00
|
|
|
|
# primary-paste=Shift+Insert
|
2021-03-04 08:59:37 +01:00
|
|
|
|
# search-start=Control+Shift+r
|
2020-03-08 15:36:30 +01:00
|
|
|
|
# font-increase=Control+plus Control+equal Control+KP_Add
|
|
|
|
|
|
# font-decrease=Control+minus Control+KP_Subtract
|
|
|
|
|
|
# font-reset=Control+0 Control+KP_0
|
2021-03-04 08:59:37 +01:00
|
|
|
|
# spawn-terminal=Control+Shift+n
|
2020-03-18 14:52:04 +01:00
|
|
|
|
# minimize=none
|
|
|
|
|
|
# maximize=none
|
|
|
|
|
|
# fullscreen=none
|
2021-02-26 09:24:40 +01:00
|
|
|
|
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
|
|
|
|
|
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
2020-07-31 17:02:53 +02:00
|
|
|
|
# pipe-selected=[xargs -r firefox] none
|
2024-02-07 17:09:01 +01:00
|
|
|
|
# pipe-command-output=[wl-copy] none # Copy last command's output to the clipboard
|
bind control-shift-u to unicode-input, move urls to o
Having a keybinding to invoke arbitrary unicode characters is very
useful. It's often used as a method of last resort to communicate with
people outside of your main language. For example, if you want to type
the last letter of my real name, you can invoke the latin-1 character
0xe9 or unicode 0x00e9.
You can also use this to type special characters, for example, unicode
U+1F4A9 is of course, the infamous PILE OF POO, which is sure to
produce million laughs everywhere you go.
In foot, there's no keybinding by default to invoke the very useful
unicode-input command. There is no "standard" (as in "ISO") keybinding
this either. But there *is* a de-facto standard currently deployed
by *both* GTK and Qt (a rare feat) *and* Chrome OS (an even rarer
feat) and it's control-shift-u.
Alternatives include Control-x 8 (emacs), Control V u (vim),
Alt (Windows, LibreOffice), or Option (Mac). I doubt we want to adopt
any of those.
So let's use control-shift-u for this. Unfortunately, it's currently
assigned to show-urls-launch, which is unfortunate, but
insurmountable. We can reassign this keybinding elsewhere. I have
picked control-shift-o in my configuration, because "o" is a good
mnemonic for "open URLs". Others have suggested "m" instead.
Closes: #1183
2022-12-15 11:49:51 -05:00
|
|
|
|
# show-urls-launch=Control+Shift+o
|
2021-02-04 20:55:08 +01:00
|
|
|
|
# show-urls-copy=none
|
2022-03-22 19:07:06 +01:00
|
|
|
|
# show-urls-persistent=none
|
osc: add support for OSC 133;A (prompt markers)
This patch adds support for the OSC-133;A sequence, introduced by
FinalTerm and implemented by iTerm2, Kitty and more. See
https://iterm2.com/documentation-one-page.html#documentation-escape-codes.html.
The shell emits the OSC just before printing the prompt. This lets the
terminal know where, in the scrollback, there are prompts.
We implement this using a simple boolean in the row struct ("this row
has a prompt"). The prompt marker must be reflowed along with the text
on window resizes.
In an ideal world, erasing, or overwriting the cell where the OSC was
emitted, would remove the prompt mark. Since we don't store this
information in the cell struct, we can't do that. The best we can do
is reset it in erase_line(). This works well enough in the "normal"
screen, when used with a "normal" shell. It doesn't really work in
fullscreen apps, on the alt screen. But that doesn't matter since we
don't support jumping between prompts on the alt screen anyway.
To be able to jump between prompts, two new key bindings have been
added: prompt-prev and prompt-next, bound to ctrl+shift+z and
ctrl+shift+x respectively.
prompt-prev will jump to the previous, not currently visible, prompt,
by moving the viewport, ensuring the prompt is at the top of the
screen.
prompt-next jumps to the next prompt, visible or not. Again, by moving
the viewport to ensure the prompt is at the top of the screen. If
we're at the bottom of the scrollback, the viewport is instead moved
as far down as possible.
Closes #30
2022-06-15 18:44:23 +02:00
|
|
|
|
# prompt-prev=Control+Shift+z
|
|
|
|
|
|
# prompt-next=Control+Shift+x
|
bind control-shift-u to unicode-input, move urls to o
Having a keybinding to invoke arbitrary unicode characters is very
useful. It's often used as a method of last resort to communicate with
people outside of your main language. For example, if you want to type
the last letter of my real name, you can invoke the latin-1 character
0xe9 or unicode 0x00e9.
You can also use this to type special characters, for example, unicode
U+1F4A9 is of course, the infamous PILE OF POO, which is sure to
produce million laughs everywhere you go.
In foot, there's no keybinding by default to invoke the very useful
unicode-input command. There is no "standard" (as in "ISO") keybinding
this either. But there *is* a de-facto standard currently deployed
by *both* GTK and Qt (a rare feat) *and* Chrome OS (an even rarer
feat) and it's control-shift-u.
Alternatives include Control-x 8 (emacs), Control V u (vim),
Alt (Windows, LibreOffice), or Option (Mac). I doubt we want to adopt
any of those.
So let's use control-shift-u for this. Unfortunately, it's currently
assigned to show-urls-launch, which is unfortunate, but
insurmountable. We can reassign this keybinding elsewhere. I have
picked control-shift-o in my configuration, because "o" is a good
mnemonic for "open URLs". Others have suggested "m" instead.
Closes: #1183
2022-12-15 11:49:51 -05:00
|
|
|
|
# unicode-input=Control+Shift+u
|
2025-04-20 07:58:02 +02:00
|
|
|
|
# color-theme-switch-1=none
|
|
|
|
|
|
# color-theme-switch-2=none
|
|
|
|
|
|
# color-theme-toggle=none
|
2021-10-24 11:49:37 +02:00
|
|
|
|
# noop=none
|
2024-12-03 00:13:28 -05:00
|
|
|
|
# quit=none
|
2020-07-31 17:02:53 +02:00
|
|
|
|
|
2020-07-29 17:27:01 +02:00
|
|
|
|
[search-bindings]
|
2021-07-02 09:12:57 +01:00
|
|
|
|
# cancel=Control+g Control+c Escape
|
2025-01-31 07:29:16 +01:00
|
|
|
|
# commit=Return KP_Enter
|
2020-07-29 17:27:01 +02:00
|
|
|
|
# find-prev=Control+r
|
|
|
|
|
|
# find-next=Control+s
|
|
|
|
|
|
# cursor-left=Left Control+b
|
|
|
|
|
|
# cursor-left-word=Control+Left Mod1+b
|
|
|
|
|
|
# cursor-right=Right Control+f
|
|
|
|
|
|
# cursor-right-word=Control+Right Mod1+f
|
|
|
|
|
|
# cursor-home=Home Control+a
|
|
|
|
|
|
# cursor-end=End Control+e
|
|
|
|
|
|
# delete-prev=BackSpace
|
|
|
|
|
|
# delete-prev-word=Mod1+BackSpace Control+BackSpace
|
|
|
|
|
|
# delete-next=Delete
|
|
|
|
|
|
# delete-next-word=Mod1+d Control+Delete
|
2025-03-03 14:27:30 +01:00
|
|
|
|
# delete-to-start=Control+u
|
|
|
|
|
|
# delete-to-end=Control+k
|
2023-10-08 10:16:48 +02:00
|
|
|
|
# extend-char=Shift+Right
|
|
|
|
|
|
# extend-to-word-boundary=Control+w Control+Shift+Right
|
2021-03-04 08:59:37 +01:00
|
|
|
|
# extend-to-next-whitespace=Control+Shift+w
|
2023-10-08 10:16:48 +02:00
|
|
|
|
# extend-line-down=Shift+Down
|
|
|
|
|
|
# extend-backward-char=Shift+Left
|
|
|
|
|
|
# extend-backward-to-word-boundary=Control+Shift+Left
|
|
|
|
|
|
# extend-backward-to-next-whitespace=none
|
|
|
|
|
|
# extend-line-up=Shift+Up
|
2022-04-26 18:34:18 +02:00
|
|
|
|
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
|
2020-11-01 12:39:57 +01:00
|
|
|
|
# primary-paste=Shift+Insert
|
2022-07-28 18:09:16 +02:00
|
|
|
|
# unicode-input=none
|
2025-01-31 07:29:16 +01:00
|
|
|
|
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
|
2023-10-08 10:37:16 +02:00
|
|
|
|
# scrollback-up-half-page=none
|
|
|
|
|
|
# scrollback-up-line=none
|
2025-01-31 07:29:16 +01:00
|
|
|
|
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
|
2023-10-08 10:37:16 +02:00
|
|
|
|
# scrollback-down-half-page=none
|
|
|
|
|
|
# scrollback-down-line=none
|
|
|
|
|
|
# scrollback-home=none
|
|
|
|
|
|
# scrollback-end=none
|
2020-07-29 17:27:01 +02:00
|
|
|
|
|
2021-01-30 12:43:59 +01:00
|
|
|
|
[url-bindings]
|
2021-07-02 09:12:57 +01:00
|
|
|
|
# cancel=Control+g Control+c Control+d Escape
|
2021-02-14 16:58:34 +01:00
|
|
|
|
# toggle-url-visible=t
|
2021-01-30 12:43:59 +01:00
|
|
|
|
|
2022-02-09 18:10:38 +01:00
|
|
|
|
[text-bindings]
|
|
|
|
|
|
# \x03=Mod4+c # Map Super+c -> Ctrl+c
|
|
|
|
|
|
|
2020-03-12 10:20:05 +01:00
|
|
|
|
[mouse-bindings]
|
input: don't map wheel events to BTN_{BACK,FORWARD}
BTN_BACK and BTN_FORWARD are separate buttons. The scroll wheel don't
have any button mappings in libinput/wayland, so make up our own
defines.
This allows us to map them in mouse bindings.
Also expose BTN_WHEEL_{LEFT,RIGHT}. These were already defined, and
used, internally, to handle wheel tilt events. With this, they can
also be used in mouse bindings.
Finally, fix encoding used for BTN_{BACK,FORWARD} when sending mouse
button events to the client application. Before this, they were mapped
to buttons 4/5. But, button 4/5 are for the scroll wheel, and as
mentioned above, BTN_{BACK,FORWARD} are not the same as scroll wheel
"buttons".
Closes #1763
2024-07-13 10:24:11 +02:00
|
|
|
|
# scrollback-up-mouse=BTN_WHEEL_BACK
|
|
|
|
|
|
# scrollback-down-mouse=BTN_WHEEL_FORWARD
|
|
|
|
|
|
# font-increase=Control+BTN_WHEEL_BACK
|
|
|
|
|
|
# font-decrease=Control+BTN_WHEEL_FORWARD
|
2021-11-29 22:06:35 +00:00
|
|
|
|
# selection-override-modifiers=Shift
|
2020-03-12 10:20:05 +01:00
|
|
|
|
# primary-paste=BTN_MIDDLE
|
2020-08-11 09:55:33 +02:00
|
|
|
|
# select-begin=BTN_LEFT
|
2020-08-11 10:52:02 +02:00
|
|
|
|
# select-begin-block=Control+BTN_LEFT
|
2020-08-11 10:17:19 +02:00
|
|
|
|
# select-extend=BTN_RIGHT
|
2021-01-06 11:11:46 +01:00
|
|
|
|
# select-extend-character-wise=Control+BTN_RIGHT
|
2020-08-11 09:55:33 +02:00
|
|
|
|
# select-word=BTN_LEFT-2
|
|
|
|
|
|
# select-word-whitespace=Control+BTN_LEFT-2
|
selection: add support for selecting the contents of a quote
This patch changes the default of triple clicking, from selecting the
current logical row, to first trying to select the contents of the
quote under the cursor, and if failing to find a quote, selecting the
current row (like before).
This is implemented by adding a new key binding, 'select-quote'.
It will search for surrounding quote characters, and if one is found
on each side of the cursor, the quote is selected. If not, the entire
row is selected instead.
Subsequent selection operations will behave as if the selection is
either a word selection (a quote was found), or a row selection (no
quote found).
Escaped quote characters are not supported: "foo \" bar" will match
'foo \', and not 'foo " bar'.
Mismatched quotes are not custom handled. They will simply not match.
Nested quotes ("123 'abc def' 456") are supported.
Closes #1364
2023-09-19 16:23:34 +02:00
|
|
|
|
# select-quote = BTN_LEFT-3
|
|
|
|
|
|
# select-row=BTN_LEFT-4
|
2022-02-09 17:22:53 +01:00
|
|
|
|
|
2022-03-06 12:58:48 +01:00
|
|
|
|
# vim: ft=dosini
|