2018-05-29 18:33:50 +03:00
|
|
|
Frequently Asked Questions
|
|
|
|
==============================
|
|
|
|
|
|
|
|
.. highlight:: sh
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
|
|
|
|
Some special symbols are rendered small/truncated in kitty?
|
2018-12-20 02:31:57 +03:00
|
|
|
-----------------------------------------------------------
|
2018-05-29 18:33:50 +03:00
|
|
|
|
|
|
|
The number of cells a unicode character takes up are controlled by the unicode
|
|
|
|
standard. All characters are rendered in a single cell unless the unicode
|
|
|
|
standard says they should be rendered in two cells. When a symbol does not fit,
|
|
|
|
it will either be rescaled to be smaller or truncated (depending on how much
|
|
|
|
extra space it needs). This is often different from other terminals which just
|
|
|
|
let the character overflow into neighboring cells, which is fine if the
|
|
|
|
neighboring cell is empty, but looks terrible if it is not.
|
|
|
|
|
|
|
|
Some programs, like powerline, vim with fancy gutter symbols/status-bar, etc.
|
|
|
|
misuse unicode characters from the private use area to represent symbols. Often
|
|
|
|
these symbols are square and should be rendered in two cells. However, since
|
|
|
|
private use area symbols all have their width set to one in the unicode
|
|
|
|
standard, |kitty| renders them either smaller or truncated. The exception is if
|
|
|
|
these characters are followed by a space or empty cell in which case kitty
|
|
|
|
makes use of the extra cell to render them in two cells.
|
|
|
|
|
|
|
|
|
|
|
|
Using a color theme with a background color does not work well in vim?
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
|
|
|
|
First make sure you have not changed the TERM environment variable, it should
|
|
|
|
be ``xterm-kitty``. vim uses *background color erase* even if the terminfo file
|
|
|
|
does not contain the ``bce`` capability. This is a bug in vim. You can work around
|
|
|
|
it by adding the following to your vimrc::
|
|
|
|
|
|
|
|
let &t_ut=''
|
|
|
|
|
2018-05-30 09:38:20 +03:00
|
|
|
See :ref:`here <ext_styles>` for why |kitty| does not support background color erase.
|
2018-05-29 18:33:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
I get errors about the terminal being unknown or opening the terminal failing when SSHing into a different computer?
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
This happens because the |kitty| terminfo files are not available on the server.
|
|
|
|
You can ssh in using the following command which will automatically copy the
|
|
|
|
terminfo files to the server::
|
|
|
|
|
|
|
|
kitty +kitten ssh myserver
|
|
|
|
|
2020-12-18 14:29:42 +03:00
|
|
|
This ssh kitten takes all the same command line arguments
|
|
|
|
as ssh, you can alias it to ssh in your shell's rc files to avoid having to
|
2020-12-24 11:26:17 +03:00
|
|
|
type it each time::
|
|
|
|
|
|
|
|
alias ssh="kitty +kitten ssh"
|
2020-12-18 14:29:42 +03:00
|
|
|
|
2018-05-29 18:33:50 +03:00
|
|
|
If for some reason that does not work (typically because the server is using a
|
2021-01-31 06:34:46 +03:00
|
|
|
non POSIX compliant shell), you can try using it with python instead::
|
|
|
|
|
|
|
|
kitty +kitten ssh use-python myserver
|
|
|
|
|
|
|
|
If that also fails, perhaps because python is not installed on the remote
|
|
|
|
server, use the following one-liner instead (it
|
2018-06-04 12:44:16 +03:00
|
|
|
is slower as it needs to ssh into the server twice, but will work with most
|
|
|
|
servers)::
|
2018-05-29 18:33:50 +03:00
|
|
|
|
|
|
|
infocmp xterm-kitty | ssh myserver tic -x -o \~/.terminfo /dev/stdin
|
|
|
|
|
2018-12-20 02:31:57 +03:00
|
|
|
If you are behind a proxy (like Balabit) that prevents this, you must redirect the
|
|
|
|
1st command to a file, copy that to the server and run ``tic`` manually. If you
|
|
|
|
connect to a server, embedded or Android system that doesn't have ``tic``, copy over
|
|
|
|
your local file terminfo to the other system as :file:`~/.terminfo/x/xterm-kitty`.
|
|
|
|
|
2018-05-29 18:33:50 +03:00
|
|
|
Really, the correct solution for this is to convince the OpenSSH maintainers to
|
2018-12-20 02:31:57 +03:00
|
|
|
have ssh do this automatically, if possible, when connecting to a server, so that
|
|
|
|
all terminals work transparently.
|
|
|
|
|
2019-09-17 23:15:52 +03:00
|
|
|
If the server is running FreeBSD, or another system that relies on termcap
|
|
|
|
rather than terminfo, you will need to convert the terminfo file on your local
|
|
|
|
machine by running (on local machine with |kitty|)::
|
|
|
|
|
|
|
|
infocmp -C xterm-kitty
|
|
|
|
|
|
|
|
The output of this command is the termcap description, which should be appended
|
2019-09-18 07:19:09 +03:00
|
|
|
to :file:`/usr/share/misc/termcap` on the remote server. Then run the following
|
2019-09-17 23:15:52 +03:00
|
|
|
command to apply your change (on the server)::
|
|
|
|
|
|
|
|
cap_mkdb /usr/share/misc/termcap
|
|
|
|
|
2018-12-20 02:31:57 +03:00
|
|
|
|
2018-12-25 06:18:57 +03:00
|
|
|
Keys such as arrow keys, backspace, delete, home/end, etc. do not work when using su or sudo?
|
|
|
|
-------------------------------------------------------------------------------------------------
|
2018-12-20 02:31:57 +03:00
|
|
|
|
|
|
|
Make sure the TERM environment variable, is ``xterm-kitty``. And either the
|
|
|
|
TERMINFO environment variable points to a directory containing :file:`x/xterm-kitty`
|
|
|
|
or that file is under :file:`~/.terminfo/x/`.
|
|
|
|
|
2018-12-25 06:18:57 +03:00
|
|
|
Note that ``sudo`` might remove TERMINFO. Then setting it at the shell prompt can
|
2018-12-20 02:31:57 +03:00
|
|
|
be too late, because command line editing may not be reinitialized. In that case
|
|
|
|
you can either ask ``sudo`` to set it or if that is not supported, insert an ``env``
|
2018-12-25 06:18:57 +03:00
|
|
|
command before starting the shell, or, if not possible, after sudo start another
|
|
|
|
Shell providing the right terminfo path::
|
2018-12-20 02:31:57 +03:00
|
|
|
|
|
|
|
sudo … TERMINFO=$HOME/.terminfo bash -i
|
|
|
|
sudo … env TERMINFO=$HOME/.terminfo bash -i
|
|
|
|
TERMINFO=/home/ORIGINALUSER/.terminfo exec bash -i
|
|
|
|
|
2019-02-21 06:11:56 +03:00
|
|
|
You can configure sudo to preserve TERMINFO by running ``sudo
|
2019-02-21 06:08:39 +03:00
|
|
|
visudo`` and adding the following line::
|
2019-02-21 02:04:40 +03:00
|
|
|
|
|
|
|
Defaults env_keep += "TERM TERMINFO"
|
|
|
|
|
2018-12-25 06:18:57 +03:00
|
|
|
If you have double width characters in your prompt, you may also need to
|
|
|
|
explicitly set a UTF-8 locale, like::
|
2018-12-20 02:31:57 +03:00
|
|
|
|
|
|
|
export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
|
2018-05-29 18:33:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
How do I change the colors in a running kitty instance?
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
|
|
|
You can either use the
|
2019-04-24 02:27:24 +03:00
|
|
|
`OSC terminal escape codes <https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Commands>`_
|
2019-10-21 12:13:35 +03:00
|
|
|
to set colors or you can define keyboard shortcuts to set colors, for example::
|
|
|
|
|
|
|
|
map f1 set_colors --configured /path/to/some/config/file/colors.conf
|
|
|
|
|
|
|
|
Or you can enable :doc:`remote control <remote-control>` for |kitty| and use :ref:`at_set-colors`.
|
|
|
|
The shortcut mapping technique has the same syntax as the remote control
|
|
|
|
command, for details, see :ref:`at_set-colors`.
|
2018-05-29 18:33:50 +03:00
|
|
|
|
2019-04-14 05:56:37 +03:00
|
|
|
A list of pre-made color themes for kitty is available at:
|
|
|
|
`kitty-themes <https://github.com/dexpota/kitty-themes>`_
|
|
|
|
|
2019-06-23 05:35:19 +03:00
|
|
|
Examples of using OSC escape codes to set colors::
|
|
|
|
|
|
|
|
Change the default foreground color:
|
|
|
|
printf '\x1b]10;#ff0000\x1b\\'
|
|
|
|
Change the default background color:
|
|
|
|
printf '\x1b]11;blue\x1b\\'
|
|
|
|
Change the cursor color:
|
|
|
|
printf '\x1b]12;blue\x1b\\'
|
|
|
|
Change the selection background color:
|
|
|
|
printf '\x1b]17;blue\x1b\\'
|
|
|
|
Change the selection foreground color:
|
|
|
|
printf '\x1b]19;blue\x1b\\'
|
|
|
|
Change the nth color (0 - 255):
|
|
|
|
printf '\x1b]4;n;green\x1b\\'
|
|
|
|
|
|
|
|
You can use various syntaxes/names for color specifications in the above
|
|
|
|
examples. See `XParseColor <https://linux.die.net/man/3/xparsecolor>`_
|
|
|
|
for full details.
|
|
|
|
|
|
|
|
If a ``?`` is given rather than a color specification, kitty will respond
|
|
|
|
with the current value for the specified color.
|
|
|
|
|
2018-05-29 18:33:50 +03:00
|
|
|
|
|
|
|
How do I specify command line options for kitty on macOS?
|
|
|
|
---------------------------------------------------------------
|
|
|
|
|
|
|
|
Apple does not want you to use command line options with GUI applications. To
|
|
|
|
workaround that limitation, |kitty| will read command line options from the file
|
|
|
|
:file:`<kitty config dir>/macos-launch-services-cmdline` when it is launched
|
|
|
|
from the GUI, i.e. by clicking the |kitty| application icon or using ``open -a kitty``.
|
|
|
|
Note that this file is *only read* when running via the GUI.
|
|
|
|
|
|
|
|
You can, of course, also run |kitty| from a terminal with command line options, using:
|
|
|
|
:file:`/Applications/kitty.app/Contents/MacOS/kitty`.
|
|
|
|
|
|
|
|
And within |kitty| itself, you can always run |kitty| using just `kitty` as it
|
|
|
|
cleverly adds itself to the ``PATH``.
|
|
|
|
|
|
|
|
|
|
|
|
kitty is not able to use my favorite font?
|
|
|
|
---------------------------------------------
|
|
|
|
|
|
|
|
|kitty| achieves its stellar performance by caching alpha masks of each rendered
|
|
|
|
character on the GPU, so that every character needs to be rendered only once.
|
|
|
|
This means it is a strictly character cell based display. As such it can use
|
2020-10-21 19:27:35 +03:00
|
|
|
only monospace fonts, since every cell in the grid has to be the same size.
|
|
|
|
Furthermore, it needs fonts to be freely resizable, so it does not support
|
|
|
|
bitmapped fonts.
|
|
|
|
|
|
|
|
If your font is not listed in ``kitty list-fonts`` it means that it is not
|
|
|
|
monospace or is a bitmapped font. On Linux you can list all monospace fonts with::
|
2018-05-29 18:33:50 +03:00
|
|
|
|
2020-06-06 05:20:43 +03:00
|
|
|
fc-list : family spacing outline scalable | grep -e spacing=100 -e spacing=90 | grep -e outline=True | grep -e scalable=True
|
2018-09-10 05:27:33 +03:00
|
|
|
|
2019-09-15 01:39:26 +03:00
|
|
|
Note that the spacing property is calculated by fontconfig based on actual
|
|
|
|
glyph widths in the font. If for some reason fontconfig concludes your favorite
|
|
|
|
monospace font does not have ``spacing=100`` you can override it by using the
|
|
|
|
following :file:`~/.config/fontconfig/fonts.conf`::
|
|
|
|
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
|
|
|
<fontconfig>
|
2020-12-14 03:04:14 +03:00
|
|
|
<match target="scan">
|
2019-09-15 01:39:26 +03:00
|
|
|
<test name="family">
|
|
|
|
<string>Your Font Family Name</string>
|
|
|
|
</test>
|
|
|
|
<edit name="spacing">
|
|
|
|
<int>100</int>
|
|
|
|
</edit>
|
|
|
|
</match>
|
|
|
|
</fontconfig>
|
|
|
|
|
2019-11-26 22:02:23 +03:00
|
|
|
After creating (or modifying) this file, you may need to run the following
|
|
|
|
command to rebuild your fontconfig cache::
|
|
|
|
|
|
|
|
fc-cache -r
|
|
|
|
|
2019-09-15 01:39:26 +03:00
|
|
|
Then, the font will be available in ``kitty list-fonts``.
|
|
|
|
|
2018-09-10 05:27:33 +03:00
|
|
|
|
|
|
|
How can I assign a single global shortcut to bring up the kitty terminal?
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
2018-09-10 05:38:16 +03:00
|
|
|
Bringing up applications on a single key press is the job of the window
|
2018-09-10 05:27:33 +03:00
|
|
|
manager/desktop environment. For ways to do it with kitty (or indeed any
|
|
|
|
terminal) in different environments,
|
|
|
|
see `here <https://github.com/kovidgoyal/kitty/issues/45>`_.
|
2019-07-29 01:36:56 +03:00
|
|
|
|
2019-07-29 06:43:16 +03:00
|
|
|
|
|
|
|
How do I map key presses in kitty to different keys in the terminal program?
|
2019-07-29 01:36:56 +03:00
|
|
|
--------------------------------------------------------------------------------------
|
|
|
|
|
2019-07-29 06:43:16 +03:00
|
|
|
This is accomplished by using ``map`` with :sc:`send_text <send_text>` in :file:`kitty.conf`.
|
|
|
|
For example::
|
2019-07-29 01:36:56 +03:00
|
|
|
|
2019-07-29 06:43:16 +03:00
|
|
|
map alt+s send_text all \x13
|
2019-07-29 01:36:56 +03:00
|
|
|
|
2019-09-15 03:49:27 +03:00
|
|
|
This maps :kbd:`alt+s` to :kbd:`ctrl+s`. To figure out what bytes to use for
|
2021-04-29 10:40:20 +03:00
|
|
|
the :sc:`send_text <send_text>` you can use the ``show_key`` kitten. Run::
|
2019-07-29 01:36:56 +03:00
|
|
|
|
2021-04-29 10:40:20 +03:00
|
|
|
kitty +kitten show_key
|
2019-07-29 01:36:56 +03:00
|
|
|
|
2021-04-29 10:40:20 +03:00
|
|
|
Then press the key you want to emulate.
|
2020-08-22 09:06:01 +03:00
|
|
|
|
2020-11-25 15:17:20 +03:00
|
|
|
How do I open a new window or tab with the same working directory as the current window?
|
|
|
|
--------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
In :file:`kitty.conf` add the following::
|
|
|
|
|
|
|
|
map f1 launch --cwd=current
|
|
|
|
map f2 launch --cwd=current --type=tab
|
|
|
|
|
|
|
|
Pressing :kbd:`F1` will open a new kitty window with the same working directory
|
|
|
|
as the current window. The :doc:`launch command <launch>` is very powerful,
|
|
|
|
explore :doc:`its documentation <launch>`.
|
|
|
|
|
2020-08-22 09:06:01 +03:00
|
|
|
|
2021-03-03 12:41:05 +03:00
|
|
|
Things behave differently when running kitty from system launcher vs. from another terminal?
|
|
|
|
-----------------------------------------------------------------------------------------------
|
2021-03-03 12:36:30 +03:00
|
|
|
|
|
|
|
This will be because of environment variables. When you run kitty from the
|
|
|
|
system launcher, it gets a default set of system environment variables. When
|
|
|
|
you run kitty from another terminal, you are actually running it from a shell,
|
|
|
|
and the shell's rc files will have setup a whole different set of environment
|
|
|
|
variables which kitty will now inherit.
|
|
|
|
|
|
|
|
You need to make sure that the environment variables you define in your shell's
|
2021-03-03 13:34:08 +03:00
|
|
|
rc files are either also defined system wide or via the :opt:`env` directive in
|
|
|
|
:file:`kitty.conf`. Common environment variables that cause issues are those
|
|
|
|
related to localization, such as ``LANG, LC_*`` and loading of configuration
|
|
|
|
files such as ``XDG_*, KITTY_CONFIG_DIRECTORY``.
|
|
|
|
|
|
|
|
To see the environment variables that kitty sees, you can add the following
|
|
|
|
mapping to :file:`kitty.conf`::
|
|
|
|
|
|
|
|
map f1 show_kitty_env_vars
|
|
|
|
|
|
|
|
then pressing :kbd:`F1` will show you the environment variables kitty sees.
|
2021-03-03 12:36:30 +03:00
|
|
|
|
|
|
|
This problem is most common on macOS, as Apple makes it exceedingly difficult to
|
|
|
|
setup environment variables system-wide, so people end up putting them in all
|
|
|
|
sorts of places where they may or may not work.
|
|
|
|
|
|
|
|
|
2020-08-22 09:06:01 +03:00
|
|
|
I am using tmux and have a problem
|
|
|
|
--------------------------------------
|
|
|
|
|
|
|
|
First, terminal multiplexers are `a bad idea
|
|
|
|
<https://github.com/kovidgoyal/kitty/issues/391#issuecomment-638320745>`_, do
|
|
|
|
not use them, if at all possible. kitty contains features that do all of what
|
|
|
|
tmux does, but better, with the exception of remote persistence (:iss:`391`).
|
2020-08-22 09:08:05 +03:00
|
|
|
If you still want to use tmux, read on.
|
2020-08-22 09:06:01 +03:00
|
|
|
|
|
|
|
Image display will not work, see `tmux issue
|
|
|
|
<https://github.com/tmux/tmux/issues/1391>`_.
|
|
|
|
|
|
|
|
If you are using tmux with multiple terminals or you start it under one
|
2020-08-22 09:08:05 +03:00
|
|
|
terminal and then switch to another and these terminals have different TERM
|
|
|
|
variables, tmux will break. You will need to restart it as tmux does not
|
|
|
|
support multiple terminfo definitions.
|
2020-08-22 09:06:01 +03:00
|
|
|
|
|
|
|
Copying to clipboard via OSC 52 will not work, because tmux does not support
|
|
|
|
the extended version of that protocol, you will need to add ``no-append`` to
|
|
|
|
:opt:`clipboard_control` in kitty.conf.
|
|
|
|
|
|
|
|
If you use any of the advanced features that kitty has innovated, such as
|
|
|
|
styled underlines, desktop notifications, extended keyboard support, etc.
|
|
|
|
they may or may not work, depending on the whims of tmux's maintainer, your
|
|
|
|
version of tmux, etc.
|
2021-04-10 11:53:28 +03:00
|
|
|
|
|
|
|
|
|
|
|
I opened and closed a lot of windows/tabs and top shows kitty's memory usage is very high?
|
|
|
|
-------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
``top`` is not a good way to measure process memory usage. That is because on
|
|
|
|
modern systems, when allocating memory to a process, the C library functions
|
|
|
|
will typically allocate memory in large blocks, and give the process chunks of
|
|
|
|
these blocks. When the process frees a chunk, the C library will not
|
|
|
|
necessarily release the underlying block back to the OS. So even though the
|
|
|
|
application has released the memory, ``top`` will still claim the process is
|
|
|
|
using it.
|
|
|
|
|
|
|
|
To check for memory leaks, instead use a tool like ``valgrind``. Run::
|
|
|
|
|
|
|
|
PYTHONMALLOC=malloc valgrind --tool=massif kitty
|
|
|
|
|
|
|
|
Now open lots of tabs/windows, generate lots of output using tools like find/yes
|
|
|
|
etc. Then close all but one window. Do some random work for a few seconds in
|
2021-04-10 12:06:31 +03:00
|
|
|
that window, maybe run yes or find again. Then quit kitty and run::
|
2021-04-10 11:53:28 +03:00
|
|
|
|
|
|
|
massif-visualizer massif.out.*
|
|
|
|
|
|
|
|
You will see the allocations graph goes up when you opened the windows, then
|
|
|
|
goes back down when you closed them, indicating there were no memory leaks.
|
|
|
|
|
|
|
|
For those interested, you can get a similar profile out of ``valgrind`` as you get
|
|
|
|
with ``top`` by adding ``--pages-as-heap=yes`` then you will see that memory
|
|
|
|
allocated in malloc is not freed in free. This can be further refined if you
|
|
|
|
use `glibc`` as your C library by setting the environment variable
|
|
|
|
``MALLOC_MMAP_THRESHOLD_=64``. This will cause free to actually free memory
|
|
|
|
allocated in sizes of more than 64 bytes. With this set, memory usage will
|
|
|
|
climb high, then fall when closing windows, but not fall all the way back. The
|
|
|
|
remaining used memory can be investigated using valgrind again, and it will
|
2021-04-10 12:02:13 +03:00
|
|
|
come from arenas in the GPU drivers and the per thread arenas glibc's malloc
|
|
|
|
maintains. These too allocate memory in large blocks and dont release it back
|
|
|
|
to the OS immediately.
|