A new theme for the kitty website
Supports dark mode. Also re-organize the documentation a bit, making it more hierarchical. Have a nicer landing page
This commit is contained in:
parent
7c1b819728
commit
f787a377c3
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -76,7 +76,7 @@ jobs:
|
|||||||
python-version: 3.8
|
python-version: 3.8
|
||||||
|
|
||||||
- name: Install build-only deps
|
- name: Install build-only deps
|
||||||
run: pip install flake8 mypy types-requests types-docutils sphinx
|
run: pip install -r docs/requirements.txt flake8 mypy types-requests types-docutils
|
||||||
|
|
||||||
- name: Run pyflakes
|
- name: Run pyflakes
|
||||||
run: python -m flake8 --count .
|
run: python -m flake8 --count .
|
||||||
|
|||||||
4
Makefile
4
Makefile
@ -44,3 +44,7 @@ website:
|
|||||||
./publish.py --only website
|
./publish.py --only website
|
||||||
|
|
||||||
docs: man html
|
docs: man html
|
||||||
|
|
||||||
|
|
||||||
|
develop-docs:
|
||||||
|
$(MAKE) -C docs develop-docs
|
||||||
|
|||||||
@ -18,3 +18,7 @@ help:
|
|||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
%: Makefile
|
%: Makefile
|
||||||
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
|
||||||
|
develop-docs:
|
||||||
|
sphinx-autobuild --ignore "/home/kovid/work/kitty/docs/generated/*" --watch ../kitty --watch ../kittens -b dirhtml "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||||
|
|||||||
111
docs/_static/custom.css
vendored
111
docs/_static/custom.css
vendored
@ -5,118 +5,11 @@
|
|||||||
* Distributed under terms of the MIT license.
|
* Distributed under terms of the MIT license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.float-left-img {
|
.sidebar-logo {
|
||||||
float: left;
|
max-height: 128px;
|
||||||
margin-right: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.float-right-img { float: right; margin-left: 1em; margin-bottom: 1em }
|
|
||||||
|
|
||||||
.half-with-img { max-width: 50% }
|
|
||||||
|
|
||||||
.fit-img { max-width: 95% }
|
|
||||||
|
|
||||||
div.body {
|
|
||||||
min-width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre.pre {
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[href], input[type="submit"] { cursor: pointer; }
|
|
||||||
|
|
||||||
img[style] {
|
|
||||||
/* Used for :scale: images to have them render properly but still popup when clicked */
|
|
||||||
width: auto !important;
|
|
||||||
height: auto !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none !important;
|
|
||||||
border-bottom: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
body div.document {
|
|
||||||
margin-top: 1ex;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.major-features li {
|
.major-features li {
|
||||||
margin-top: 0.75ex;
|
|
||||||
margin-bottom: 0.75ex;
|
margin-bottom: 0.75ex;
|
||||||
}
|
|
||||||
|
|
||||||
.support-form input[type=submit] {
|
|
||||||
border-radius: 6px;
|
|
||||||
box-shadow: rgb(255, 246, 175) 0px 1px 0px 0px;
|
|
||||||
background: linear-gradient(rgb(255, 236, 100) 5%, rgb(255, 171, 35) 100%) rgb(255, 236, 100);
|
|
||||||
border: 1px solid rgb(255, 170, 34);
|
|
||||||
display: inline-block;
|
|
||||||
color: rgb(51, 51, 51);
|
|
||||||
font-family: Arial;
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 6px 24px;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: rgb(255, 238, 102) 0px 1px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.support-form input[type=submit]:hover {
|
|
||||||
background: linear-gradient(rgb(255, 171, 35) 5%, rgb(255, 236, 100) 100%) rgb(255, 171, 35);
|
|
||||||
}
|
|
||||||
|
|
||||||
.support-form input[type=submit]:focus {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
font-size: inherit;
|
|
||||||
line-height: inherit;
|
|
||||||
max-height: 100%;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebartoc li {
|
|
||||||
margin-top: 0.75ex;
|
margin-top: 0.75ex;
|
||||||
margin-bottom: 0.75ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebartoc ul {
|
|
||||||
list-style: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebartoc a[href]:hover {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.green {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cyan {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.env {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.italic {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bold {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: larger;
|
|
||||||
font-weight: bold
|
|
||||||
}
|
}
|
||||||
|
|||||||
19
docs/_templates/base.html
vendored
Normal file
19
docs/_templates/base.html
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{% extends "!base.html" %}
|
||||||
|
{% block extrahead %}
|
||||||
|
{{ super() }}
|
||||||
|
{%- if analytics_id %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', '{{ analytics_id }}']);
|
||||||
|
_gaq.push(['_setDomainName', 'none']);
|
||||||
|
_gaq.push(['_setAllowLinker', true]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{% endif -%}
|
||||||
|
{% endblock %}
|
||||||
6
docs/_templates/localtoc.html
vendored
6
docs/_templates/localtoc.html
vendored
@ -1,6 +0,0 @@
|
|||||||
{%- if display_toc %}
|
|
||||||
<div> </div>
|
|
||||||
<div id="sidebartoc">
|
|
||||||
{{ toc }}
|
|
||||||
</div>
|
|
||||||
{%- endif %}
|
|
||||||
22
docs/_templates/searchbox.html
vendored
22
docs/_templates/searchbox.html
vendored
@ -1,22 +0,0 @@
|
|||||||
{#
|
|
||||||
basic/searchbox.html
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Sphinx sidebar template: quick search box.
|
|
||||||
|
|
||||||
:copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
||||||
:license: BSD, see LICENSE for details.
|
|
||||||
#}
|
|
||||||
{%- if pagename != "search" and builder != "singlehtml" %}
|
|
||||||
<div id="searchbox" style="display: none" role="search">
|
|
||||||
<div class="searchformwrapper">
|
|
||||||
<form class="search" action="{{ pathto('search') }}" method="get">
|
|
||||||
<input type="text" name="q" placeholder="{{ _('Search') }}" />
|
|
||||||
<input type="submit" value="{{ _('Go') }}" style="cursor: pointer" />
|
|
||||||
<input type="hidden" name="check_keywords" value="yes" />
|
|
||||||
<input type="hidden" name="area" value="default" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
||||||
{%- endif %}
|
|
||||||
7
docs/_templates/support.html
vendored
7
docs/_templates/support.html
vendored
@ -1,7 +0,0 @@
|
|||||||
{% if pagename != "support" %}
|
|
||||||
<div id="support" style="text-align: center">
|
|
||||||
<form class="support-form" action="{{ pathto('support') }}" title="{{ _('Donate to support kitty development') }}">
|
|
||||||
<input type="submit" value="{{ _('Support kitty') }}">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
@ -1,15 +1,9 @@
|
|||||||
:tocdepth: 2
|
|
||||||
|
|
||||||
Mappable actions
|
Mappable actions
|
||||||
===================
|
==================
|
||||||
|
|
||||||
.. highlight:: conf
|
.. highlight:: conf
|
||||||
|
|
||||||
The actions described below can be mapped to any key press or mouse action
|
The actions described below can be mapped to any key press or mouse action
|
||||||
using the ``map`` and ``mouse_map`` directives in :file:`kitty.conf`.
|
using the ``map`` and ``mouse_map`` directives in :file:`kitty.conf`.
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
:depth: 1
|
|
||||||
|
|
||||||
.. include:: /generated/actions.rst
|
.. include:: /generated/actions.rst
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
kitty - Binary install
|
Install kitty
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
Binary install
|
||||||
|
----------------
|
||||||
|
|
||||||
.. |ins| replace:: curl -L :literal:`https://sw.kovidgoyal.net/kitty/installer.sh` | sh /dev/stdin
|
.. |ins| replace:: curl -L :literal:`https://sw.kovidgoyal.net/kitty/installer.sh` | sh /dev/stdin
|
||||||
|
|
||||||
.. highlight:: sh
|
.. highlight:: sh
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
Building kitty from source
|
Build from source
|
||||||
==============================
|
==================
|
||||||
|
|
||||||
.. image:: https://github.com/kovidgoyal/kitty/workflows/CI/badge.svg
|
.. image:: https://github.com/kovidgoyal/kitty/workflows/CI/badge.svg
|
||||||
:alt: Build status
|
:alt: Build status
|
||||||
@ -78,8 +78,8 @@ you might have to rebuild the app.
|
|||||||
.. note::
|
.. note::
|
||||||
The released :file:`kitty.dmg` includes all dependencies, unlike the
|
The released :file:`kitty.dmg` includes all dependencies, unlike the
|
||||||
:file:`kitty.app` built above and is built automatically by using the
|
:file:`kitty.app` built above and is built automatically by using the
|
||||||
<https://github.com/kovidgoyal/bypy>`_ however, that is designed to
|
`bypy framework <https://github.com/kovidgoyal/bypy>`_ however, that is
|
||||||
run on Linux and is not for the faint of heart.
|
designed to run on Linux and is not for the faint of heart.
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|||||||
@ -37,6 +37,8 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
|
|||||||
- Wayland: Fix :opt:`initial_window_width/height <remember_window_size>` specified
|
- Wayland: Fix :opt:`initial_window_width/height <remember_window_size>` specified
|
||||||
in cells not working on High DPI screens (:iss:`3834`)
|
in cells not working on High DPI screens (:iss:`3834`)
|
||||||
|
|
||||||
|
- A new theme for the kitty website with support for dark mode.
|
||||||
|
|
||||||
|
|
||||||
0.21.2 [2021-06-28]
|
0.21.2 [2021-06-28]
|
||||||
----------------------
|
----------------------
|
||||||
@ -1716,8 +1718,7 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
|
|||||||
using standard keyboards) via `IBus
|
using standard keyboards) via `IBus
|
||||||
<https://github.com/ibus/ibus/wiki/ReadMe>`_ (:iss:`469`)
|
<https://github.com/ibus/ibus/wiki/ReadMe>`_ (:iss:`469`)
|
||||||
|
|
||||||
- Implement completion for the kitty command in bash and zsh. See
|
- Implement completion for the kitty command in bash and zsh
|
||||||
:ref:`completion`.
|
|
||||||
|
|
||||||
- Render the text under the cursor in a fixed color, configurable via
|
- Render the text under the cursor in a fixed color, configurable via
|
||||||
the option :opt:`cursor_text_color` (:iss:`126`)
|
the option :opt:`cursor_text_color` (:iss:`126`)
|
||||||
|
|||||||
29
docs/clipboard.rst
Normal file
29
docs/clipboard.rst
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Pasting to clipboard
|
||||||
|
=======================
|
||||||
|
|
||||||
|
|kitty| implements the OSC 52 escape code protocol to get/set the clipboard
|
||||||
|
contents (controlled via the :opt:`clipboard_control` setting). There is one
|
||||||
|
difference in kitty's implementation compared to some other terminal emulators.
|
||||||
|
|kitty| allows sending arbitrary amounts of text to the clipboard. It does so
|
||||||
|
by modifying the protocol slightly. Successive OSC 52 escape codes to set the
|
||||||
|
clipboard will concatenate, so::
|
||||||
|
|
||||||
|
<ESC>]52;c;<payload1><ESC>\
|
||||||
|
<ESC>]52;c;<payload2><ESC>\
|
||||||
|
|
||||||
|
will result in the clipboard having the contents ``payload1 + payload2``. To
|
||||||
|
send a new string to the clipboard send an OSC 52 sequence with an invalid payload
|
||||||
|
first, for example::
|
||||||
|
|
||||||
|
<ESC>]52;c;!<ESC>\
|
||||||
|
|
||||||
|
Here ``!`` is not valid base64 encoded text, so it clears the clipboard.
|
||||||
|
Further, since it is invalid, it should be ignored by terminal emulators
|
||||||
|
that do not support this extension, thereby making it safe to use, simply
|
||||||
|
always send it before starting a new OSC 52 paste, even if you aren't chunking
|
||||||
|
up large pastes, that way kitty won't concatenate your paste, and it will have
|
||||||
|
no ill-effects in other terminal emulators.
|
||||||
|
|
||||||
|
In case you're using software that can't be easily adapted to this
|
||||||
|
protocol extension, it can be disabled by specifying ``no-append`` to the
|
||||||
|
:opt:`clipboard_control` setting.
|
||||||
26
docs/color-stack.rst
Normal file
26
docs/color-stack.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Saving and restoring colors
|
||||||
|
==============================
|
||||||
|
|
||||||
|
It is often useful for a full screen application with its own color themes to
|
||||||
|
set the default foreground, background, selection and cursor colors and the
|
||||||
|
ANSI color table. This allows for various performance optimizations when
|
||||||
|
drawing the screen. The problem is that if the user previously used the escape
|
||||||
|
codes to change these colors herself, then running the full screen application
|
||||||
|
will lose her changes even after it exits. To avoid this, kitty introduces a
|
||||||
|
new pair of *OSC* escape codes to push and pop the current color values from a
|
||||||
|
stack::
|
||||||
|
|
||||||
|
<ESC>]30001<ESC>\ # push onto stack
|
||||||
|
<ESC>]30101<ESC>\ # pop from stack
|
||||||
|
|
||||||
|
These escape codes save/restore the colors, default
|
||||||
|
background, default foreground, selection background, selection foreground and
|
||||||
|
cursor color and the 256 colors of the ANSI color table.
|
||||||
|
|
||||||
|
.. note:: In July 2020, after several years, XTerm copied this protocol
|
||||||
|
extension, without acknowledgement, and using incompatible escape codes
|
||||||
|
(XTPUSHCOLORS, XTPOPCOLORS, XTREPORTCOLORS). And they decided to save not
|
||||||
|
just the dynamic colors but the entire ANSI color table. In the interests of
|
||||||
|
promoting interoperability, kitty added support for XTerm's escape codes as
|
||||||
|
well, and changed this extension to also save/restore the entire ANSI color
|
||||||
|
table.
|
||||||
72
docs/conf.py
72
docs/conf.py
@ -22,7 +22,6 @@ from pygments.token import ( # type: ignore
|
|||||||
Comment, Keyword, Literal, Name, Number, String, Whitespace
|
Comment, Keyword, Literal, Name, Number, String, Whitespace
|
||||||
)
|
)
|
||||||
from sphinx import addnodes, version_info # type: ignore
|
from sphinx import addnodes, version_info # type: ignore
|
||||||
from sphinx.environment.adapters.toctree import TocTree # type: ignore
|
|
||||||
from sphinx.util.logging import getLogger # type: ignore
|
from sphinx.util.logging import getLogger # type: ignore
|
||||||
|
|
||||||
kitty_src = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
kitty_src = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
@ -60,8 +59,14 @@ extensions = [
|
|||||||
'sphinx.ext.ifconfig',
|
'sphinx.ext.ifconfig',
|
||||||
'sphinx.ext.viewcode',
|
'sphinx.ext.viewcode',
|
||||||
'sphinx.ext.githubpages',
|
'sphinx.ext.githubpages',
|
||||||
|
'sphinx_copybutton',
|
||||||
|
'sphinx_inline_tabs',
|
||||||
|
"sphinxext.opengraph",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# URL for OpenGraph tags
|
||||||
|
ogp_site_url = 'https://sw.kovidgoyal.net/kitty/'
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|
||||||
@ -85,13 +90,10 @@ language: Optional[str] = None
|
|||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
# This pattern also affects html_static_path and html_extra_path .
|
# This pattern also affects html_static_path and html_extra_path .
|
||||||
exclude_patterns = [
|
exclude_patterns = [
|
||||||
'_build', 'Thumbs.db', '.DS_Store',
|
'_build', 'Thumbs.db', '.DS_Store', 'basic.rst',
|
||||||
'generated/cli-*.rst', 'generated/conf-*.rst', 'generated/actions.rst'
|
'generated/cli-*.rst', 'generated/conf-*.rst', 'generated/actions.rst'
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
rst_prolog = '''
|
rst_prolog = '''
|
||||||
.. |kitty| replace:: *kitty*
|
.. |kitty| replace:: *kitty*
|
||||||
.. |version| replace:: VERSION
|
.. |version| replace:: VERSION
|
||||||
@ -111,32 +113,23 @@ rst_prolog = '''
|
|||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
#
|
#
|
||||||
html_theme = 'alabaster'
|
html_theme = 'furo'
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
# documentation.
|
# documentation.
|
||||||
#
|
#
|
||||||
html_theme_options = {
|
html_theme_options: Dict[str, Any] = {
|
||||||
'logo': 'kitty.png',
|
'sidebar_hide_name': True,
|
||||||
'show_powered_by': False,
|
'navigation_with_keys': True,
|
||||||
'fixed_sidebar': True,
|
|
||||||
'sidebar_collapse': True,
|
|
||||||
'github_button': False,
|
|
||||||
'github_banner': True,
|
|
||||||
'github_user': 'kovidgoyal',
|
|
||||||
'github_repo': 'kitty',
|
|
||||||
# increase contrast of link color with text color
|
|
||||||
'link': '#00587d',
|
|
||||||
'link_hover': 'green',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ['_static', '../logo/kitty.png']
|
html_static_path = ['_static']
|
||||||
html_favicon = '../logo/kitty.png'
|
html_favicon = html_logo = '../logo/kitty.svg'
|
||||||
|
|
||||||
# Custom sidebar templates, must be a dictionary that maps document names
|
# Custom sidebar templates, must be a dictionary that maps document names
|
||||||
# to template names.
|
# to template names.
|
||||||
@ -146,16 +139,8 @@ html_favicon = '../logo/kitty.png'
|
|||||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||||
# 'searchbox.html']``.
|
# 'searchbox.html']``.
|
||||||
#
|
#
|
||||||
html_sidebars = {
|
|
||||||
'**': [
|
|
||||||
'about.html',
|
|
||||||
'support.html',
|
|
||||||
'searchbox.html',
|
|
||||||
'localtoc.html',
|
|
||||||
'relations.html',
|
|
||||||
]
|
|
||||||
}
|
|
||||||
html_show_sourcelink = False
|
html_show_sourcelink = False
|
||||||
|
html_show_sphinx = False
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ------------------------------------------
|
# -- Options for manual page output ------------------------------------------
|
||||||
@ -220,28 +205,6 @@ def commit_role(name: str, rawtext: str, text: str, lineno: int, inliner: Any, o
|
|||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
# Sidebar ToC {{{
|
|
||||||
def create_toc(app: Any, pagename: str) -> Optional[Any]:
|
|
||||||
tt = TocTree(app.env)
|
|
||||||
toctree = tt.get_toc_for(pagename, app.builder)
|
|
||||||
if toctree is not None:
|
|
||||||
subtree = toctree[toctree.first_child_matching_class(nodes.list_item)]
|
|
||||||
bl = subtree.first_child_matching_class(nodes.bullet_list)
|
|
||||||
if bl is None:
|
|
||||||
return None # Empty ToC
|
|
||||||
subtree = subtree[bl]
|
|
||||||
# for li in subtree.traverse(nodes.list_item):
|
|
||||||
# modify_li(li)
|
|
||||||
# subtree['ids'] = [ID]
|
|
||||||
return app.builder.render_partial(subtree)['fragment']
|
|
||||||
|
|
||||||
|
|
||||||
def add_html_context(app: Any, pagename: str, templatename: str, context: Any, *args: Any) -> None:
|
|
||||||
if 'toc' in context:
|
|
||||||
context['toc'] = create_toc(app, pagename) or context['toc']
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
|
|
||||||
# CLI docs {{{
|
# CLI docs {{{
|
||||||
def write_cli_docs(all_kitten_names: Iterable[str]) -> None:
|
def write_cli_docs(all_kitten_names: Iterable[str]) -> None:
|
||||||
from kitty.cli import option_spec_as_rst
|
from kitty.cli import option_spec_as_rst
|
||||||
@ -519,6 +482,10 @@ def write_conf_docs(app: Any, all_kitten_names: Iterable[str]) -> None:
|
|||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
|
def add_html_context(app: Any, pagename: str, templatename: str, context: Any, *args: Any) -> None:
|
||||||
|
context['analytics_id'] = app.config.analytics_id
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Any) -> None:
|
def setup(app: Any) -> None:
|
||||||
os.makedirs('generated/conf', exist_ok=True)
|
os.makedirs('generated/conf', exist_ok=True)
|
||||||
from kittens.runner import all_kitten_names
|
from kittens.runner import all_kitten_names
|
||||||
@ -526,10 +493,11 @@ def setup(app: Any) -> None:
|
|||||||
write_cli_docs(kn)
|
write_cli_docs(kn)
|
||||||
write_remote_control_protocol_docs()
|
write_remote_control_protocol_docs()
|
||||||
write_conf_docs(app, kn)
|
write_conf_docs(app, kn)
|
||||||
|
app.add_config_value('analytics_id', '', 'env')
|
||||||
|
app.connect('html-page-context', add_html_context)
|
||||||
app.add_css_file('custom.css')
|
app.add_css_file('custom.css')
|
||||||
app.add_lexer('session', SessionLexer() if version_info[0] < 3 else SessionLexer)
|
app.add_lexer('session', SessionLexer() if version_info[0] < 3 else SessionLexer)
|
||||||
app.add_role('link', link_role)
|
app.add_role('link', link_role)
|
||||||
app.add_role('iss', partial(num_role, 'issues'))
|
app.add_role('iss', partial(num_role, 'issues'))
|
||||||
app.add_role('pull', partial(num_role, 'pull'))
|
app.add_role('pull', partial(num_role, 'pull'))
|
||||||
app.add_role('commit', commit_role)
|
app.add_role('commit', commit_role)
|
||||||
app.connect('html-page-context', add_html_context)
|
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
:tocdepth: 2
|
Configure kitty
|
||||||
|
|
||||||
Configuring kitty
|
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. highlight:: conf
|
.. highlight:: conf
|
||||||
@ -42,7 +40,7 @@ expanded, so :code:`${USER}.conf` becomes :file:`name.conf` if
|
|||||||
|
|
||||||
|
|
||||||
Sample kitty.conf
|
Sample kitty.conf
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
--------------------
|
||||||
|
|
||||||
.. only:: html
|
.. only:: html
|
||||||
|
|
||||||
@ -57,3 +55,14 @@ Sample kitty.conf
|
|||||||
file with full documentation and all settings commented out. If you
|
file with full documentation and all settings commented out. If you
|
||||||
have a pre-existing kitty.conf, then that will be used instead, delete
|
have a pre-existing kitty.conf, then that will be used instead, delete
|
||||||
it to see the sample file.
|
it to see the sample file.
|
||||||
|
|
||||||
|
|
||||||
|
All mappable actions
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
See the :doc:`list of all the things you can make kitty can do </actions>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
actions
|
||||||
|
|||||||
21
docs/deccara.rst
Normal file
21
docs/deccara.rst
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Setting text styles/colors in arbitrary regions of the screen
|
||||||
|
------------------------------------------------------------------
|
||||||
|
|
||||||
|
There already exists an escape code to set *some* text attributes in arbitrary
|
||||||
|
regions of the screen, `DECCARA
|
||||||
|
<https://vt100.net/docs/vt510-rm/DECCARA.html>`_. However, it is limited to
|
||||||
|
only a few attributes. |kitty| extends this to work with *all* SGR attributes.
|
||||||
|
So, for example, this can be used to set the background color in an arbitrary
|
||||||
|
region of the screen.
|
||||||
|
|
||||||
|
The motivation for this extension is the various problems with the existing
|
||||||
|
solution for erasing to background color, namely the *background color erase
|
||||||
|
(bce)* capability. See
|
||||||
|
`this discussion <https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545>`_
|
||||||
|
and `this FAQ <https://invisible-island.net/ncurses/ncurses.faq.html#bce_mismatches>`_
|
||||||
|
for a summary of problems with *bce*.
|
||||||
|
|
||||||
|
For example, to set the background color to blue in a
|
||||||
|
rectangular region of the screen from (3, 4) to (10, 11), you use::
|
||||||
|
|
||||||
|
<ESC>[2*x<ESC>[4;3;11;10;44$r<ESC>[*x
|
||||||
122
docs/desktop-notifications.rst
Normal file
122
docs/desktop-notifications.rst
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
.. _desktop_notifications:
|
||||||
|
|
||||||
|
|
||||||
|
Desktop notifications
|
||||||
|
=======================
|
||||||
|
|
||||||
|
|kitty| implements an extensible escape code (OSC 99) to show desktop
|
||||||
|
notifications. It is easy to use from shell scripts and fully extensible to
|
||||||
|
show title and body. Clicking on the notification can optionally focus the
|
||||||
|
window it came from, and/or send an escape code back to the application running
|
||||||
|
in that window.
|
||||||
|
|
||||||
|
The design of the escape code is partially based on the discussion in
|
||||||
|
the defunct
|
||||||
|
`terminal-wg <https://gitlab.freedesktop.org/terminal-wg/specifications/-/issues/13>`_
|
||||||
|
|
||||||
|
The escape code has the form::
|
||||||
|
|
||||||
|
<OSC> 99 ; metadata ; payload <terminator>
|
||||||
|
|
||||||
|
Here ``<OSC>`` is :code:`<ESC>]` and ``<terminator>`` is
|
||||||
|
:code:`<ESC><backslash>`. The metadata is a section of colon separated
|
||||||
|
:code:`key=value` pairs. Every key must be a single character from the set
|
||||||
|
:code:`a-zA-Z` and every value must be a word consisting of characters from
|
||||||
|
the set :code:`a-zA-Z0-9-_/\+.,(){}[]*&^%$#@!`~`. The payload must be
|
||||||
|
interpreted based on the metadata section. The two semi-colons *must* always be
|
||||||
|
present even when no metadata is present.
|
||||||
|
|
||||||
|
Before going into details, lets see how one can display a simple, single line
|
||||||
|
notification from a shell script::
|
||||||
|
|
||||||
|
printf '\x1b]99;;Hello world\x1b\\'
|
||||||
|
|
||||||
|
To show a message with a title and a body::
|
||||||
|
|
||||||
|
printf '\x1b]99;i=1:d=0;Hello world\x1b\\'
|
||||||
|
printf '\x1b]99;i=1:d=1:p=body;This is cool\x1b\\'
|
||||||
|
|
||||||
|
The most important key in the metadata is the ``p`` key, it controls how the
|
||||||
|
payload is interpreted. A value of ``title`` means the payload is setting the
|
||||||
|
title for the notification. A value of ``body`` means it is setting the body,
|
||||||
|
and so on, see the table below for full details.
|
||||||
|
|
||||||
|
The design of the escape code is fundamentally chunked, this is because
|
||||||
|
different terminal emulators have different limits on how large a single escape
|
||||||
|
code can be. Chunking is accomplished by the ``i`` and ``d`` keys. The ``i``
|
||||||
|
key is the *notification id* which can be any string containing the characters
|
||||||
|
``[a-zA-Z0-9_-+.]``. The ``d`` key stands for *done* and
|
||||||
|
can only take the values ``0`` and ``1``. A value of ``0`` means the
|
||||||
|
notification is not yet done and the terminal emulator should hold off
|
||||||
|
displaying it. A value of ``1`` means the notification is done, and should be
|
||||||
|
displayed. You can specify the title or body multiple times and the terminal
|
||||||
|
emulator will concatenate them, thereby allowing arbitrarily long text
|
||||||
|
(terminal emulators are free to impose a sensible limit to avoid
|
||||||
|
Denial-of-Service attacks).
|
||||||
|
|
||||||
|
Both the ``title`` and ``body`` payloads must be either UTF-8 encoded plain
|
||||||
|
text with no embedded escape codes, or UTF-8 text that is base64 encoded, in
|
||||||
|
which case there must be an ``e=1`` key in the metadata to indicate the payload
|
||||||
|
is base64 encoded.
|
||||||
|
|
||||||
|
When the user clicks the notification, a couple of things can happen, the
|
||||||
|
terminal emulator can focus the window from which the notification came, and/or
|
||||||
|
it can send back an escape code to the application indicating the notification
|
||||||
|
was activated. This is controlled by the ``a`` key which takes a comma
|
||||||
|
separated set of values, ``report`` and ``focus``. The value ``focus`` means
|
||||||
|
focus the window from which the notification was issued and is the default.
|
||||||
|
``report`` means send an escape code back to the application. The format of the
|
||||||
|
returned escape code is::
|
||||||
|
|
||||||
|
<OSC> 99 ; i=identifier ; <terminator>
|
||||||
|
|
||||||
|
The value of ``identifier`` comes from the ``i`` key in the escape code sent by
|
||||||
|
the application. If the application sends no identifier, then the terminal
|
||||||
|
*must* use ``i=0``. Actions can be preceded by a negative sign to turn them
|
||||||
|
off, so for example if you do not want any action, turn off the default
|
||||||
|
``focus`` action with::
|
||||||
|
|
||||||
|
a=-focus
|
||||||
|
|
||||||
|
Complete specification of all the metadata keys is in the table below. If a
|
||||||
|
terminal emulator encounters a key in the metadata it does not understand,
|
||||||
|
the key *must* be ignored, to allow for future extensibility of this escape
|
||||||
|
code. Similarly if values for known keys are unknown, the terminal emulator
|
||||||
|
*should* either ignore the entire escape code or perform a best guess effort
|
||||||
|
to display it based on what it does understand.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
It is possible to extend this escape code to allow specifying an icon for
|
||||||
|
the notification, however, given that some platforms, such as macOS, dont
|
||||||
|
allow displaying custom icons on a notification, at all, it was decided to
|
||||||
|
leave it out of the spec for the time being.
|
||||||
|
|
||||||
|
Similarly, features such as scheduled notifications could be added in future
|
||||||
|
revisions.
|
||||||
|
|
||||||
|
|
||||||
|
======= ==================== ========= =================
|
||||||
|
Key Value Default Description
|
||||||
|
======= ==================== ========= =================
|
||||||
|
``a`` Comma separated list ``focus`` What action to perform when the
|
||||||
|
of ``report``, notification is clicked
|
||||||
|
``focus``, with
|
||||||
|
optional leading
|
||||||
|
``-``
|
||||||
|
|
||||||
|
``d`` ``0`` or ``1`` ``1`` Indicates if the notification is
|
||||||
|
complete or not.
|
||||||
|
|
||||||
|
``e`` ``0`` or ``1`` ``0`` If set to ``1`` means the payload is base64 encoded UTF-8,
|
||||||
|
otherwise it is plain UTF-8 text with no C0 control codes in it
|
||||||
|
|
||||||
|
``i`` ``[a-zA-Z0-9-_+.]`` ``0`` Identifier for the notification
|
||||||
|
|
||||||
|
``p`` One of ``title`` or ``title`` Whether the payload is the notification title or body. If a
|
||||||
|
``body``. notification has no title, the body will be used as title.
|
||||||
|
======= ==================== ========= =================
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|kitty| also supports the legacy OSC 9 protocol developed by iTerm2 for
|
||||||
|
desktop notifications.
|
||||||
@ -3,9 +3,6 @@ Frequently Asked Questions
|
|||||||
|
|
||||||
.. highlight:: sh
|
.. highlight:: sh
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Some special symbols are rendered small/truncated in kitty?
|
Some special symbols are rendered small/truncated in kitty?
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
|
||||||
@ -36,7 +33,7 @@ it by adding the following to your vimrc::
|
|||||||
|
|
||||||
let &t_ut=''
|
let &t_ut=''
|
||||||
|
|
||||||
See :ref:`here <ext_styles>` for why |kitty| does not support background color erase.
|
See :doc:`here <deccara>` for why |kitty| does not support background color erase.
|
||||||
|
|
||||||
|
|
||||||
I get errors about the terminal being unknown or opening the terminal failing when SSHing into a different computer?
|
I get errors about the terminal being unknown or opening the terminal failing when SSHing into a different computer?
|
||||||
@ -54,8 +51,6 @@ type it each time::
|
|||||||
|
|
||||||
alias ssh="kitty +kitten ssh"
|
alias ssh="kitty +kitten ssh"
|
||||||
|
|
||||||
Remember to also setup :ref:`completion`.
|
|
||||||
|
|
||||||
If for some reason that does not work (typically because the server is using a
|
If for some reason that does not work (typically because the server is using a
|
||||||
non POSIX compliant shell as ``/bin/sh``), you can try using it with ``python``
|
non POSIX compliant shell as ``/bin/sh``), you can try using it with ``python``
|
||||||
instead::
|
instead::
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
:orphan:
|
||||||
|
|
||||||
Glossary
|
Glossary
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
|||||||
@ -1,18 +1,16 @@
|
|||||||
:tocdepth: 3
|
|
||||||
|
|
||||||
The terminal graphics protocol
|
The terminal graphics protocol
|
||||||
==================================
|
=================================
|
||||||
|
|
||||||
The goal of this specification is to create a flexible and performant protocol
|
The goal of this specification is to create a flexible and performant protocol
|
||||||
that allows the program running in the terminal, hereafter called the *client*,
|
that allows the program running in the terminal, hereafter called the *client*,
|
||||||
to render arbitrary pixel (raster) graphics to the screen of the terminal
|
to render arbitrary pixel (raster) graphics to the screen of the terminal
|
||||||
emulator. The major design goals are
|
emulator. The major design goals are:
|
||||||
|
|
||||||
* Should not require terminal emulators to understand image formats.
|
* Should not require terminal emulators to understand image formats.
|
||||||
* Should allow specifying graphics to be drawn at individual pixel positions.
|
* Should allow specifying graphics to be drawn at individual pixel positions.
|
||||||
* The graphics should integrate with the text, in particular it should be possible to draw graphics
|
* The graphics should integrate with the text, in particular it should be possible to draw graphics
|
||||||
below as well as above the text, with alpha blending. The graphics should also scroll with the text, automatically.
|
below as well as above the text, with alpha blending. The graphics should also scroll with the text, automatically.
|
||||||
* Should use optimizations when the client is running on the same computer as the terminal emulator.
|
* Should use optimizations when the client is running on the same computer as the terminal emulator.
|
||||||
|
|
||||||
For some discussion regarding the design choices, see `#33
|
For some discussion regarding the design choices, see `#33
|
||||||
<https://github.com/kovidgoyal/kitty/issues/33>`_.
|
<https://github.com/kovidgoyal/kitty/issues/33>`_.
|
||||||
@ -30,23 +28,19 @@ alpha-blending and text over graphics.
|
|||||||
|
|
||||||
Some programs and libraries that use the kitty graphics protocol:
|
Some programs and libraries that use the kitty graphics protocol:
|
||||||
|
|
||||||
* `termpdf.py <https://github.com/dsanson/termpdf.py>`_ - a terminal PDF/DJVU/CBR viewer
|
* `termpdf.py <https://github.com/dsanson/termpdf.py>`_ - a terminal PDF/DJVU/CBR viewer
|
||||||
* `ranger <https://github.com/ranger/ranger>`_ - a terminal file manager, with
|
* `ranger <https://github.com/ranger/ranger>`_ - a terminal file manager, with
|
||||||
image previews, see this `PR <https://github.com/ranger/ranger/pull/1077>`_
|
image previews, see this `PR <https://github.com/ranger/ranger/pull/1077>`_
|
||||||
* :doc:`kitty-diff <kittens/diff>` - a side-by-side terminal diff program with support for images
|
* :doc:`kitty-diff <kittens/diff>` - a side-by-side terminal diff program with support for images
|
||||||
* `pixcat <https://github.com/mirukana/pixcat>`_ - a third party CLI and python library that wraps the graphics protocol
|
* `pixcat <https://github.com/mirukana/pixcat>`_ - a third party CLI and python library that wraps the graphics protocol
|
||||||
* `neofetch <https://github.com/dylanaraps/neofetch>`_ - A command line system
|
* `neofetch <https://github.com/dylanaraps/neofetch>`_ - A command line system
|
||||||
information tool
|
information tool
|
||||||
* `viu <https://github.com/atanunq/viu>`_ - a terminal image viewer
|
* `viu <https://github.com/atanunq/viu>`_ - a terminal image viewer
|
||||||
* `glkitty <https://github.com/michaeljclark/glkitty>`_ - C library to draw OpenGL shaders in the terminal with a glgears demo
|
* `glkitty <https://github.com/michaeljclark/glkitty>`_ - C library to draw OpenGL shaders in the terminal with a glgears demo
|
||||||
* `ctx.graphics <https://ctx.graphics/>`_ - Library for drawing graphics
|
* `ctx.graphics <https://ctx.graphics/>`_ - Library for drawing graphics
|
||||||
* `timg <https://github.com/hzeller/timg>`_ - a terminal image and video viewer
|
* `timg <https://github.com/hzeller/timg>`_ - a terminal image and video viewer
|
||||||
* `notcurses <https://github.com/dankamongmen/notcurses>`_ - C library for terminal graphics with bindings for C++, Rust and Python
|
* `notcurses <https://github.com/dankamongmen/notcurses>`_ - C library for terminal graphics with bindings for C++, Rust and Python
|
||||||
* `rasterm <https://github.com/BourgeoisBear/rasterm>`_ - Go library to display images in the the terminal
|
* `rasterm <https://github.com/BourgeoisBear/rasterm>`_ - Go library to display images in the the terminal
|
||||||
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
|
|
||||||
Getting the window size
|
Getting the window size
|
||||||
|
|||||||
452
docs/index.rst
452
docs/index.rst
@ -1,426 +1,66 @@
|
|||||||
:tocdepth: 2
|
kitty
|
||||||
|
|
||||||
==========================================================
|
|
||||||
kitty - the fast, featureful, GPU based terminal emulator
|
|
||||||
==========================================================
|
==========================================================
|
||||||
|
|
||||||
.. container:: major-features
|
*The fast, feature-rich, GPU based terminal emulator*
|
||||||
|
|
||||||
* Offloads rendering to the GPU for :doc:`lower system load <performance>` and
|
.. toctree::
|
||||||
buttery smooth scrolling. Uses threaded rendering to minimize input latency.
|
:hidden:
|
||||||
|
|
||||||
* Supports all modern terminal features: :doc:`graphics (images)
|
quickstart
|
||||||
<graphics-protocol>`, unicode, `true-color
|
overview
|
||||||
<https://gist.github.com/XVilka/8346728>`_,
|
faq
|
||||||
OpenType ligatures, mouse protocol, :doc:`hyperlinks <open_actions>`,
|
support
|
||||||
focus tracking, `bracketed paste <https://cirw.in/blog/bracketed-paste>`_
|
performance
|
||||||
and several :doc:`new terminal protocol extensions
|
changelog
|
||||||
<protocol-extensions>`.
|
integrations
|
||||||
|
protocol-extensions
|
||||||
|
|
||||||
* Supports tiling multiple terminal :term:`windows <window>` side by side in different
|
|
||||||
:ref:`layouts <layouts>` without needing to use an extra program like tmux
|
|
||||||
|
|
||||||
* Can be :doc:`controlled from scripts or the shell prompt <remote-control>`,
|
.. tab:: Fast
|
||||||
even over SSH.
|
|
||||||
|
|
||||||
* Has a framework for :ref:`kittens`, small terminal programs that can be used to
|
* Offloads rendering to the GPU for :doc:`lower system load <performance>`
|
||||||
extend |kitty|'s functionality. For example, they are used for
|
* Uses threaded rendering for absolutely minimal latency
|
||||||
:doc:`Unicode input <kittens/unicode-input>`, :doc:`Hints <kittens/hints>` and
|
* Performance tradeoffs can be :ref:`tuned <conf-kitty-performance>`
|
||||||
:doc:`Side-by-side diff <kittens/diff>`.
|
|
||||||
|
|
||||||
* Supports :ref:`startup sessions <sessions>` which allow you to specify
|
.. tab:: Capable
|
||||||
the :term:`window`/:term:`tab` layout, working directories and programs to run on startup.
|
|
||||||
|
|
||||||
* Cross-platform: |kitty| works on Linux and macOS, but because it uses only
|
* Graphics, with :doc:`images and animations <graphics-protocol>`
|
||||||
OpenGL for rendering, it should be trivial to port to other Unix-like platforms.
|
* Ligatures and emoji, with :opt:`per glyph font substitution <symbol_map>`
|
||||||
|
* Hyperlinks, with :doc:`configurable actions <open_actions>`
|
||||||
|
|
||||||
* Allows you to open :ref:`the scrollback buffer <scrollback>` in a
|
.. tab:: Scriptable
|
||||||
separate :term:`overlay window <overlay>` using arbitrary programs of
|
|
||||||
your choice. This is useful for browsing the history comfortably in a
|
|
||||||
pager or editor.
|
|
||||||
|
|
||||||
* Has :ref:`multiple copy/paste buffers <cpbuf>`, like vim.
|
* Control from :doc:`scripts or the shell <remote-control>`
|
||||||
|
* Extend with :ref:`kittens <kittens>` using the Python language
|
||||||
|
* Use :ref:`startup sessions <sessions>` to specify working environments
|
||||||
|
|
||||||
|
.. tab:: Composable
|
||||||
|
|
||||||
|
* Programmble tabs, :ref:`splits <splits_layout>` and multiple :doc:`layouts <layouts>` to manage windows
|
||||||
|
* Browse the :ref:`entire history <scrollback>` or the output from the last command comfortably in pagers and editors
|
||||||
|
* Edit or download :doc:`remote files <kittens/remote_file>` in an existin SSH session
|
||||||
|
|
||||||
|
.. tab:: Cross-platform
|
||||||
|
|
||||||
|
* Linux
|
||||||
|
* macOS
|
||||||
|
* Various BSDs
|
||||||
|
|
||||||
|
.. tab:: Innovative
|
||||||
|
|
||||||
|
Pioneered various extensions to move the entire terminal ecosystem forward
|
||||||
|
|
||||||
|
* :doc:`graphics-protocol`
|
||||||
|
* :doc:`keyboard-protocol`
|
||||||
|
* Lots more in :doc:`protocol-extensions`
|
||||||
|
|
||||||
|
|
||||||
.. figure:: screenshots/screenshot.png
|
.. figure:: screenshots/screenshot.png
|
||||||
:alt: Screenshot, showing three programs in the 'Tall' layout
|
:alt: Screenshot, showing three programs in the 'Tall' layout
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Screenshot, showing vim, tig and git running in |kitty| with the 'Tall' layout
|
Screenshot, showing vim, tig and git running in |kitty| with the 'Tall' layout
|
||||||
|
|
||||||
|
|
||||||
|
To get started see :doc:`quickstart`.
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
:depth: 1
|
|
||||||
|
|
||||||
|
|
||||||
.. _quickstart:
|
|
||||||
|
|
||||||
Quickstart
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Pre-built binaries of |kitty| are available for both macOS and Linux.
|
|
||||||
See the :doc:`binary install instructions </binary>`. You can also
|
|
||||||
:doc:`build from source </build>`.
|
|
||||||
|
|
||||||
Additionally, you can use your favorite package manager to install the |kitty|
|
|
||||||
package, but note that some Linux distribution packages are woefully outdated.
|
|
||||||
|kitty| is available in a vast number of package repositories for macOS
|
|
||||||
and Linux.
|
|
||||||
|
|
||||||
.. image:: https://repology.org/badge/tiny-repos/kitty.svg
|
|
||||||
:target: https://repology.org/project/kitty/versions
|
|
||||||
:alt: Number of repositories kitty is available in
|
|
||||||
|
|
||||||
See :doc:`Configuring kitty <conf>` for help on configuring |kitty| and
|
|
||||||
:doc:`Invocation <invocation>` for the command line arguments |kitty| supports.
|
|
||||||
|
|
||||||
|
|
||||||
Design philosophy
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
|kitty| is designed for power keyboard users. To that end all its controls
|
|
||||||
work with the keyboard (although it fully supports mouse interactions as
|
|
||||||
well). Its configuration is a simple, human editable, single file for
|
|
||||||
easy reproducibility (I like to store configuration in source control).
|
|
||||||
|
|
||||||
The code in |kitty| is designed to be simple, modular and hackable. It is
|
|
||||||
written in a mix of C (for performance sensitive parts) and Python (for
|
|
||||||
easy hackability of the UI). It does not depend on any large and complex
|
|
||||||
UI toolkit, using only OpenGL for rendering everything.
|
|
||||||
|
|
||||||
Finally, |kitty| is designed from the ground up to support all modern
|
|
||||||
terminal features, such as unicode, true color, bold/italic fonts, text
|
|
||||||
formatting, etc. It even extends existing text formatting escape codes,
|
|
||||||
to add support for features not available elsewhere, such as colored and
|
|
||||||
styled (curly) underlines. One of the design goals of |kitty| is to be
|
|
||||||
easily extensible so that new features can be added in the future with
|
|
||||||
relatively little effort.
|
|
||||||
|
|
||||||
.. include:: basic.rst
|
|
||||||
|
|
||||||
.. _layouts:
|
|
||||||
|
|
||||||
Layouts
|
|
||||||
----------
|
|
||||||
|
|
||||||
A :term:`layout` is an arrangement of multiple :term:`kitty windows <window>`
|
|
||||||
inside a top-level :term:`OS window <os_window>`. You can create a new
|
|
||||||
:term:`window` using the :sc:`new_window` key combination.
|
|
||||||
|
|
||||||
Currently, there are seven layouts available:
|
|
||||||
|
|
||||||
* **Fat** -- One (or optionally more) windows are shown full width on the top, the rest of the windows are shown side-by-side on the bottom
|
|
||||||
* **Grid** -- All windows are shown in a grid
|
|
||||||
* **Horizontal** -- All windows are shown side-by-side
|
|
||||||
* **Splits** -- Windows arranged in arbitrary patterns created using horizontal and vertical splits
|
|
||||||
* **Stack** -- Only a single maximized window is shown at a time
|
|
||||||
* **Tall** -- One (or optionally more) windows are shown full height on the left, the rest of the windows are shown one below the other on the right
|
|
||||||
* **Vertical** -- All windows are shown one below the other
|
|
||||||
|
|
||||||
By default, all layouts are enabled and you can switch between layouts using
|
|
||||||
the :sc:`next_layout` key combination. You can also create shortcuts to select
|
|
||||||
particular layouts, and choose which layouts you want to enable/disable, see
|
|
||||||
:ref:`conf-kitty-shortcuts.layout` for examples. The first layout listed in
|
|
||||||
:opt:`enabled_layouts` becomes the default layout.
|
|
||||||
|
|
||||||
For more details on the layouts and how to use them see :doc:`layouts`.
|
|
||||||
|
|
||||||
.. _kittens:
|
|
||||||
|
|
||||||
Kittens
|
|
||||||
------------------
|
|
||||||
|
|
||||||
|kitty| has a framework for easily creating terminal programs that make use of
|
|
||||||
its advanced features. These programs are called kittens. They are used both
|
|
||||||
to add features to |kitty| itself and to create useful standalone programs.
|
|
||||||
Some prominent kittens:
|
|
||||||
|
|
||||||
:doc:`icat <kittens/icat>`
|
|
||||||
Display images in the terminal
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`diff <kittens/diff>`
|
|
||||||
A fast, side-by-side diff for the terminal with syntax highlighting and
|
|
||||||
images
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Unicode Input <kittens/unicode-input>`
|
|
||||||
Easily input arbitrary unicode characters in |kitty| by name or hex code.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Hints <kittens/hints>`
|
|
||||||
Select and open/paste/insert arbitrary text snippets such as URLs,
|
|
||||||
filenames, words, lines, etc. from the terminal screen.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Remote file <kittens/remote_file>`
|
|
||||||
Edit, open, or download remote files over SSH easily, by simply clicking on
|
|
||||||
the filename.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Hyperlinked grep <kittens/hyperlinked_grep>`
|
|
||||||
Search your files using `ripgrep <https://github.com/BurntSushi/ripgrep>`_
|
|
||||||
and open the results directly in your favorite editor in the terminal,
|
|
||||||
at the line containing the search result, simply by clicking on the result you want.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Broadcast <kittens/broadcast>`
|
|
||||||
Type in one :term:`kitty window <window>` and have it broadcast to all (or a subset) of
|
|
||||||
other :term:`kitty windows <window>`.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Panel <kittens/panel>`
|
|
||||||
Draw a GPU accelerated dock panel on your desktop showing the output
|
|
||||||
from an arbitrary terminal program.
|
|
||||||
|
|
||||||
|
|
||||||
:doc:`Clipboard <kittens/clipboard>`
|
|
||||||
Copy/paste to the clipboard from shell scripts, even over SSH.
|
|
||||||
|
|
||||||
You can also :doc:`Learn to create your own kittens <kittens/custom>`.
|
|
||||||
|
|
||||||
|
|
||||||
Configuring kitty
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
|kitty| is highly configurable, everything from keyboard shortcuts to
|
|
||||||
painting frames-per-second. Press :sc:`edit_config_file` in kitty
|
|
||||||
to open its fully commented sample config file in your text editor.
|
|
||||||
For details see the :doc:`configuration docs <conf>`.
|
|
||||||
|
|
||||||
|
|
||||||
Remote control
|
|
||||||
------------------
|
|
||||||
|
|
||||||
|kitty| has a very powerful system that allows you to control it from the
|
|
||||||
:doc:`shell prompt, even over SSH <remote-control>`. You can change colors,
|
|
||||||
fonts, open new :term:`windows <window>`, :term:`tabs <tab>`, set their titles,
|
|
||||||
change window layout, get text
|
|
||||||
from one window and send text to another, etc, etc. The possibilities are
|
|
||||||
endless. See the :doc:`tutorial <remote-control>` to get started.
|
|
||||||
|
|
||||||
.. _sessions:
|
|
||||||
|
|
||||||
Startup Sessions
|
|
||||||
------------------
|
|
||||||
|
|
||||||
You can control the :term:`tabs <tab>`, `:term:`kitty window <window>` layout,
|
|
||||||
working directory, startup programs,
|
|
||||||
etc. by creating a "session" file and using the :option:`kitty --session`
|
|
||||||
command line flag or the :opt:`startup_session` option in :file:`kitty.conf`.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
.. code-block:: session
|
|
||||||
|
|
||||||
# Set the layout for the current tab
|
|
||||||
layout tall
|
|
||||||
# Set the working directory for windows in the current tab
|
|
||||||
cd ~
|
|
||||||
# Create a window and run the specified command in it
|
|
||||||
launch zsh
|
|
||||||
# Create a window with some environment variables set and run
|
|
||||||
# vim in it
|
|
||||||
launch --env FOO=BAR vim
|
|
||||||
# Set the title for the next window
|
|
||||||
launch --title "Chat with x" irssi --profile x
|
|
||||||
|
|
||||||
# Create a new tab (the part after new_tab is the optional tab
|
|
||||||
# name which will be displayed in the tab bar, if omitted, the
|
|
||||||
# title of the active window will be used instead)
|
|
||||||
new_tab my tab
|
|
||||||
cd ~/somewhere
|
|
||||||
# Set the layouts allowed in this tab
|
|
||||||
enabled_layouts tall, stack
|
|
||||||
# Set the current layout
|
|
||||||
layout stack
|
|
||||||
launch zsh
|
|
||||||
|
|
||||||
# Create a new OS window
|
|
||||||
new_os_window
|
|
||||||
# set new window size to 80x25 cells
|
|
||||||
os_window_size 80c 25c
|
|
||||||
# set the --class for the new OS window
|
|
||||||
os_window_class mywindow
|
|
||||||
launch sh
|
|
||||||
# Make the current window the active (focused) window
|
|
||||||
focus
|
|
||||||
launch emacs
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
The :doc:`launch <launch>` command when used in a session file
|
|
||||||
cannot create new OS windows, or tabs.
|
|
||||||
|
|
||||||
|
|
||||||
Mouse features
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
* You can click on a URL to open it in a browser.
|
|
||||||
* You can double click to select a word and then drag to select more words.
|
|
||||||
* You can triple click to select a line and then drag to select more lines.
|
|
||||||
* You can triple click while holding :kbd:`ctrl+alt` to select from clicked
|
|
||||||
point to end of line.
|
|
||||||
* You can right click to extend a previous selection.
|
|
||||||
* You can hold down :kbd:`ctrl+alt` and drag with the mouse to select in
|
|
||||||
columns.
|
|
||||||
* Selecting text automatically copies it to the primary clipboard (on
|
|
||||||
platforms with a primary clipboard).
|
|
||||||
* You can middle click to paste from the primary clipboard (on platforms
|
|
||||||
with a primary clipboard).
|
|
||||||
* You can select text with kitty even when a terminal program has grabbed
|
|
||||||
the mouse by holding down the :kbd:`shift` key.
|
|
||||||
|
|
||||||
All these actions can be customized in :file:`kitty.conf` as described
|
|
||||||
:ref:`here <conf-kitty-mouse.mousemap>`.
|
|
||||||
|
|
||||||
|
|
||||||
Font control
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
|kitty| has extremely flexible and powerful font selection features. You can
|
|
||||||
specify individual families for the regular, bold, italic and bold+italic
|
|
||||||
fonts. You can even specify specific font families for specific ranges of
|
|
||||||
unicode characters. This allows precise control over text rendering. It can
|
|
||||||
come in handy for applications like powerline, without the need to use patched
|
|
||||||
fonts. See the various font related configuration directives in
|
|
||||||
:ref:`conf-kitty-fonts`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _scrollback:
|
|
||||||
|
|
||||||
The scrollback buffer
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
|kitty| supports scrolling back to view history, just like most terminals. You
|
|
||||||
can use either keyboard shortcuts or the mouse scroll wheel to do so. However,
|
|
||||||
|kitty| has an extra, neat feature. Sometimes you need to explore the
|
|
||||||
scrollback buffer in more detail, maybe search for some text or refer to it
|
|
||||||
side-by-side while typing in a follow-up command. |kitty| allows you to do this
|
|
||||||
by pressing the :sc:`show_scrollback` key-combination, which will open the
|
|
||||||
scrollback buffer in your favorite pager program (which is ``less`` by default).
|
|
||||||
Colors and text formatting are preserved. You can explore the scrollback buffer
|
|
||||||
comfortably within the pager.
|
|
||||||
|
|
||||||
Additionally, you can pipe the contents of the scrollback buffer to an
|
|
||||||
arbitrary, command running in a new :term:`window`, :term:`tab` or :term:`overlay`,
|
|
||||||
for example::
|
|
||||||
|
|
||||||
map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting less +G -R
|
|
||||||
|
|
||||||
Would open the scrollback buffer in a new :term:`window` when you press the :kbd:`F1`
|
|
||||||
key. See :sc:`show_scrollback` for details.
|
|
||||||
|
|
||||||
If you want to use it with an editor such as vim to get more powerful features,
|
|
||||||
you can see tips for doing so, in
|
|
||||||
`this thread <https://github.com/kovidgoyal/kitty/issues/719>`_.
|
|
||||||
|
|
||||||
If you wish to store very large amounts of scrollback to view using the piping or
|
|
||||||
:sc:`show_scrollback` features, you can use the :opt:`scrollback_pager_history_size`
|
|
||||||
option.
|
|
||||||
|
|
||||||
.. _cpbuf:
|
|
||||||
|
|
||||||
Multiple copy/paste buffers
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
In addition to being able to copy/paste from the system clipboard, in |kitty| you
|
|
||||||
can also setup an arbitrary number of copy paste buffers. To do so, simply add
|
|
||||||
something like the following to your :file:`kitty.conf`::
|
|
||||||
|
|
||||||
map f1 copy_to_buffer a
|
|
||||||
map f2 paste_from_buffer a
|
|
||||||
|
|
||||||
This will allow you to press :kbd:`F1` to copy the current selection to an
|
|
||||||
internal buffer named ``a`` and :kbd:`F2` to paste from that buffer. The buffer
|
|
||||||
names are arbitrary strings, so you can define as many such buffers as you
|
|
||||||
need.
|
|
||||||
|
|
||||||
Marks
|
|
||||||
-------------
|
|
||||||
|
|
||||||
kitty has the ability to mark text on the screen based on regular expressions.
|
|
||||||
This can be useful to highlight words or phrases when browsing output from long
|
|
||||||
running programs or similar. To learn how this feature works, see :doc:`marks`.
|
|
||||||
|
|
||||||
|
|
||||||
Frequently Asked Questions
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
The list of Frequently Asked Questions (*FAQ*) is :doc:`available here <faq>`.
|
|
||||||
|
|
||||||
|
|
||||||
Cool integrations for kitty with other CLI tools
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
kitty provides extremely powerful interfaces such as :doc:`remote-control` and
|
|
||||||
:doc:`kittens/custom` and :doc:`kittens/icat`
|
|
||||||
that allow it to be integrated with other tools seamlessly. For a list of such
|
|
||||||
user created integrations, see: :doc:`integrations`.
|
|
||||||
|
|
||||||
.. _completion:
|
|
||||||
|
|
||||||
Completion for kitty
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
|kitty| comes with completion for the ``kitty`` command for popular shells.
|
|
||||||
|
|
||||||
|
|
||||||
bash
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
Add the following to your :file:`~/.bashrc`
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
source <(kitty + complete setup bash)
|
|
||||||
|
|
||||||
Older versions of bash (for example, v3.2) do not support
|
|
||||||
process substitution with the source command, in which
|
|
||||||
case you can try an alternative:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$(kitty + complete setup bash)"
|
|
||||||
|
|
||||||
|
|
||||||
zsh
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
Add the following to your :file:`~/.zshrc`
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
autoload -Uz compinit
|
|
||||||
compinit
|
|
||||||
# Completion for kitty
|
|
||||||
kitty + complete setup zsh | source /dev/stdin
|
|
||||||
|
|
||||||
The important thing above is to make sure the call to |kitty| to load the zsh
|
|
||||||
completions happens after the call to :file:`compinit`.
|
|
||||||
|
|
||||||
|
|
||||||
fish
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
For versions of fish earlier than 3.0.0, add the following to your
|
|
||||||
:file:`~/.config/fish/config.fish`. Later versions source completions by default.
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
kitty + complete setup fish | source
|
|
||||||
|
|
||||||
|
|
||||||
Changelog
|
|
||||||
------------------
|
|
||||||
|
|
||||||
See :doc:`changelog`.
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:hidden:
|
|
||||||
:glob:
|
|
||||||
|
|
||||||
*
|
|
||||||
kittens/*
|
|
||||||
generated/rc
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
:orphan:
|
||||||
|
|
||||||
The kitty command line interface
|
The kitty command line interface
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
A protocol for comprehensive keyboard handling in terminals
|
Comprehensive keyboard handling in terminals
|
||||||
=================================================================
|
==============================================
|
||||||
|
|
||||||
There are various problems with the current state of keyboard handling in
|
There are various problems with the current state of keyboard handling in
|
||||||
terminals. They include:
|
terminals. They include:
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
kitty-diff - A fast side-by-side diff tool with syntax highlighting and images
|
kitty-diff
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
*A fast side-by-side diff tool with syntax highlighting and images*
|
||||||
|
|
||||||
.. highlight:: sh
|
.. highlight:: sh
|
||||||
|
|
||||||
Major Features
|
Major Features
|
||||||
@ -21,13 +23,10 @@ Major Features
|
|||||||
.. figure:: ../screenshots/diff.png
|
.. figure:: ../screenshots/diff.png
|
||||||
:alt: Screenshot, showing a sample diff
|
:alt: Screenshot, showing a sample diff
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Screenshot, showing a sample diff
|
Screenshot, showing a sample diff
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
---------------
|
---------------
|
||||||
@ -121,8 +120,8 @@ Why does this work only in kitty?
|
|||||||
|
|
||||||
The diff kitten makes use of various features that are :doc:`kitty only
|
The diff kitten makes use of various features that are :doc:`kitty only
|
||||||
</protocol-extensions>`, such as the :doc:`kitty graphics protocol
|
</protocol-extensions>`, such as the :doc:`kitty graphics protocol
|
||||||
</graphics-protocol>`, the :ref:`extended keyboard protocol
|
</graphics-protocol>`, the :doc:`extended keyboard protocol
|
||||||
<extended-key-protocol>`, etc. It also leverages terminal program
|
</keyboard-protocol>`, etc. It also leverages terminal program
|
||||||
infrastructure I created for all of kitty's other kittens to reduce the amount
|
infrastructure I created for all of kitty's other kittens to reduce the amount
|
||||||
of code needed (the entire implementation is under 2000 lines of code).
|
of code needed (the entire implementation is under 2000 lines of code).
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ browser.
|
|||||||
.. figure:: ../screenshots/hints_mode.png
|
.. figure:: ../screenshots/hints_mode.png
|
||||||
:alt: URL hints mode
|
:alt: URL hints mode
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
URL hints mode
|
URL hints mode
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ Then, for example, for ZSH, add the following to :file:`.zshrc`::
|
|||||||
compdef _rg hg
|
compdef _rg hg
|
||||||
|
|
||||||
To learn more about kitty's powerful framework for customizing URL click
|
To learn more about kitty's powerful framework for customizing URL click
|
||||||
actions, :doc:`see here <../open_actions>`.
|
actions, :doc:`see here </open_actions>`.
|
||||||
|
|
||||||
Hopefully, someday this functionality will make it into some `upstream grep
|
Hopefully, someday this functionality will make it into some `upstream grep
|
||||||
<https://github.com/BurntSushi/ripgrep/issues/665>`_
|
<https://github.com/BurntSushi/ripgrep/issues/665>`_
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
icat - Display images in the terminal
|
icat
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
|
*Display images in the terminal*
|
||||||
|
|
||||||
The ``icat`` kitten can be used to display arbitrary images in the |kitty|
|
The ``icat`` kitten can be used to display arbitrary images in the |kitty|
|
||||||
terminal. Using it is as simple as::
|
terminal. Using it is as simple as::
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@ using terminal programs instead of GUI toolkits.
|
|||||||
.. figure:: ../screenshots/panel.png
|
.. figure:: ../screenshots/panel.png
|
||||||
:alt: Screenshot, showing a sample panel
|
:alt: Screenshot, showing a sample panel
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Screenshot, showing a sample panel
|
Screenshot, showing a sample panel
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ Then hold down :kbd:`ctrl+shift` and click the name of the file.
|
|||||||
.. figure:: ../screenshots/remote_file.png
|
.. figure:: ../screenshots/remote_file.png
|
||||||
:alt: Remote file actions
|
:alt: Remote file actions
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Remote file actions
|
Remote file actions
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@ Press :sc:`input_unicode_character` to start the unicode input widget, shown bel
|
|||||||
.. figure:: ../screenshots/unicode.png
|
.. figure:: ../screenshots/unicode.png
|
||||||
:alt: A screenshot of the unicode input widget
|
:alt: A screenshot of the unicode input widget
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
A screenshot of the unicode input widget
|
A screenshot of the unicode input widget
|
||||||
|
|
||||||
|
|||||||
66
docs/kittens_intro.rst
Normal file
66
docs/kittens_intro.rst
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
.. _kittens:
|
||||||
|
|
||||||
|
Extend kitty
|
||||||
|
================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
kittens/icat
|
||||||
|
kittens/diff
|
||||||
|
kittens/unicode-input
|
||||||
|
kittens/hints
|
||||||
|
kittens/remote_file
|
||||||
|
kittens/hyperlinked_grep
|
||||||
|
kittens/custom
|
||||||
|
kittens/*
|
||||||
|
|
||||||
|
|kitty| has a framework for easily creating terminal programs that make use of
|
||||||
|
its advanced features. These programs are called kittens. They are used both
|
||||||
|
to add features to |kitty| itself and to create useful standalone programs.
|
||||||
|
Some prominent kittens:
|
||||||
|
|
||||||
|
:doc:`icat <kittens/icat>`
|
||||||
|
Display images in the terminal
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`diff <kittens/diff>`
|
||||||
|
A fast, side-by-side diff for the terminal with syntax highlighting and
|
||||||
|
images
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Unicode Input <kittens/unicode-input>`
|
||||||
|
Easily input arbitrary unicode characters in |kitty| by name or hex code.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Hints <kittens/hints>`
|
||||||
|
Select and open/paste/insert arbitrary text snippets such as URLs,
|
||||||
|
filenames, words, lines, etc. from the terminal screen.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Remote file <kittens/remote_file>`
|
||||||
|
Edit, open, or download remote files over SSH easily, by simply clicking on
|
||||||
|
the filename.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Hyperlinked grep <kittens/hyperlinked_grep>`
|
||||||
|
Search your files using `ripgrep <https://github.com/BurntSushi/ripgrep>`_
|
||||||
|
and open the results directly in your favorite editor in the terminal,
|
||||||
|
at the line containing the search result, simply by clicking on the result you want.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Broadcast <kittens/broadcast>`
|
||||||
|
Type in one :term:`kitty window <window>` and have it broadcast to all (or a subset) of
|
||||||
|
other :term:`kitty windows <window>`.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Panel <kittens/panel>`
|
||||||
|
Draw a GPU accelerated dock panel on your desktop showing the output
|
||||||
|
from an arbitrary terminal program.
|
||||||
|
|
||||||
|
|
||||||
|
:doc:`Clipboard <kittens/clipboard>`
|
||||||
|
Copy/paste to the clipboard from shell scripts, even over SSH.
|
||||||
|
|
||||||
|
You can also :doc:`Learn to create your own kittens <kittens/custom>`.
|
||||||
@ -1,4 +1,4 @@
|
|||||||
Launching programs in new windows/tabs
|
Launching new tabs/windows
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
.. program:: launch
|
.. program:: launch
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
Layouts
|
Arrange windows
|
||||||
============
|
===================
|
||||||
|
|
||||||
kitty has the ability to define its own windows that can be tiled next to each
|
kitty has the ability to define its own windows that can be tiled next to each
|
||||||
other in arbitrary arrangements, based on *Layouts*, see below for examples:
|
other in arbitrary arrangements, based on *Layouts*, see below for examples:
|
||||||
@ -8,7 +8,7 @@ other in arbitrary arrangements, based on *Layouts*, see below for examples:
|
|||||||
.. figure:: screenshots/screenshot.png
|
.. figure:: screenshots/screenshot.png
|
||||||
:alt: Screenshot, showing three programs in the 'Tall' layout
|
:alt: Screenshot, showing three programs in the 'Tall' layout
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Screenshot, showing vim, tig and git running in |kitty| with the 'Tall' layout
|
Screenshot, showing vim, tig and git running in |kitty| with the 'Tall' layout
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ other in arbitrary arrangements, based on *Layouts*, see below for examples:
|
|||||||
.. figure:: screenshots/splits.png
|
.. figure:: screenshots/splits.png
|
||||||
:alt: Screenshot, showing windows in the 'Splits' layout
|
:alt: Screenshot, showing windows in the 'Splits' layout
|
||||||
:align: center
|
:align: center
|
||||||
:scale: 100%
|
:width: 100%
|
||||||
|
|
||||||
Screenshot, showing windows with arbitrary arrangement in the 'Splits'
|
Screenshot, showing windows with arbitrary arrangement in the 'Splits'
|
||||||
layout
|
layout
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
Marks
|
Mark text on screen
|
||||||
=================
|
========================
|
||||||
|
|
||||||
|
|
||||||
kitty has the ability to mark text on the screen based on regular expressions.
|
kitty has the ability to mark text on the screen based on regular expressions.
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
Customizing the actions taken when clicking on links
|
Scripting the mouse click
|
||||||
======================================================
|
======================================================
|
||||||
|
|
||||||
|kitty| has support for `terminal hyperlinks <https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda>`_. These
|
|kitty| has support for `terminal hyperlinks
|
||||||
|
<https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda>`_. These
|
||||||
are generated by many terminal programs, such as ``ls``, ``gcc``, ``systemd``,
|
are generated by many terminal programs, such as ``ls``, ``gcc``, ``systemd``,
|
||||||
``mdcat``, etc. You can customize exactly what happens when clicking on these hyperlinks
|
``mdcat``, etc. You can customize exactly what happens when clicking on these
|
||||||
in |kitty|.
|
hyperlinks in |kitty|.
|
||||||
|
|
||||||
You can tell kitty to take arbitrarily many, complex actions
|
You can tell kitty to take arbitrarily many, complex actions
|
||||||
when a link is clicked. Let us illustrate with some examples, first. Create
|
when a link is clicked. Let us illustrate with some examples, first. Create
|
||||||
|
|||||||
287
docs/overview.rst
Normal file
287
docs/overview.rst
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
Overview
|
||||||
|
==============
|
||||||
|
|
||||||
|
Design philosophy
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
|kitty| is designed for power keyboard users. To that end all its controls
|
||||||
|
work with the keyboard (although it fully supports mouse interactions as
|
||||||
|
well). Its configuration is a simple, human editable, single file for
|
||||||
|
easy reproducibility (I like to store configuration in source control).
|
||||||
|
|
||||||
|
The code in |kitty| is designed to be simple, modular and hackable. It is
|
||||||
|
written in a mix of C (for performance sensitive parts) and Python (for
|
||||||
|
easy hackability of the UI). It does not depend on any large and complex
|
||||||
|
UI toolkit, using only OpenGL for rendering everything.
|
||||||
|
|
||||||
|
Finally, |kitty| is designed from the ground up to support all modern
|
||||||
|
terminal features, such as unicode, true color, bold/italic fonts, text
|
||||||
|
formatting, etc. It even extends existing text formatting escape codes,
|
||||||
|
to add support for features not available elsewhere, such as colored and
|
||||||
|
styled (curly) underlines. One of the design goals of |kitty| is to be
|
||||||
|
easily extensible so that new features can be added in the future with
|
||||||
|
relatively little effort.
|
||||||
|
|
||||||
|
.. include:: basic.rst
|
||||||
|
|
||||||
|
|
||||||
|
Configuring kitty
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
|kitty| is highly configurable, everything from keyboard shortcuts to
|
||||||
|
painting frames-per-second. Press :sc:`edit_config_file` in kitty
|
||||||
|
to open its fully commented sample config file in your text editor.
|
||||||
|
For details see the :doc:`configuration docs <conf>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
conf
|
||||||
|
|
||||||
|
|
||||||
|
.. _layouts:
|
||||||
|
|
||||||
|
Layouts
|
||||||
|
----------
|
||||||
|
|
||||||
|
A :term:`layout` is an arrangement of multiple :term:`kitty windows <window>`
|
||||||
|
inside a top-level :term:`OS window <os_window>`. The layout manages all its
|
||||||
|
windows automatically, resizing and moving them as needed. You can create a new
|
||||||
|
:term:`window` using the :sc:`new_window` key combination.
|
||||||
|
|
||||||
|
Currently, there are seven layouts available:
|
||||||
|
|
||||||
|
* **Fat** -- One (or optionally more) windows are shown full width on the top, the rest of the windows are shown side-by-side on the bottom
|
||||||
|
* **Grid** -- All windows are shown in a grid
|
||||||
|
* **Horizontal** -- All windows are shown side-by-side
|
||||||
|
* **Splits** -- Windows arranged in arbitrary patterns created using horizontal and vertical splits
|
||||||
|
* **Stack** -- Only a single maximized window is shown at a time
|
||||||
|
* **Tall** -- One (or optionally more) windows are shown full height on the left, the rest of the windows are shown one below the other on the right
|
||||||
|
* **Vertical** -- All windows are shown one below the other
|
||||||
|
|
||||||
|
By default, all layouts are enabled and you can switch between layouts using
|
||||||
|
the :sc:`next_layout` key combination. You can also create shortcuts to select
|
||||||
|
particular layouts, and choose which layouts you want to enable/disable, see
|
||||||
|
:ref:`conf-kitty-shortcuts.layout` for examples. The first layout listed in
|
||||||
|
:opt:`enabled_layouts` becomes the default layout.
|
||||||
|
|
||||||
|
For more details on the layouts and how to use them see :doc:`the documentation
|
||||||
|
<layouts>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
layouts
|
||||||
|
|
||||||
|
Extending kitty
|
||||||
|
------------------
|
||||||
|
|
||||||
|
kitty has a powerful framework for scripting. You can create small terminal
|
||||||
|
programs called :doc:`kittens <kittens_intro>`. These can used to add features
|
||||||
|
to kitty, for example, :doc:`editing remote files <kittens/remote_file>` or
|
||||||
|
:doc:`inputting unicode characters <kittens/unicode-input>`. They can also be
|
||||||
|
used to create programs that leverage kitty's powerful features, for example,
|
||||||
|
:doc:`viewing images <kittens/icat>` or :doc:`diffing files with images
|
||||||
|
<kittens/diff>`.
|
||||||
|
|
||||||
|
You can :doc:`create your own kittens to scratch your own itches
|
||||||
|
<kittens/custom>`.
|
||||||
|
|
||||||
|
For a list of all the builtin kittens, :ref:`see here <kittens>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
kittens_intro
|
||||||
|
|
||||||
|
|
||||||
|
Remote control
|
||||||
|
------------------
|
||||||
|
|
||||||
|
|kitty| has a very powerful system that allows you to control it from the
|
||||||
|
:doc:`shell prompt, even over SSH <remote-control>`. You can change colors,
|
||||||
|
fonts, open new :term:`windows <window>`, :term:`tabs <tab>`, set their titles,
|
||||||
|
change window layout, get text
|
||||||
|
from one window and send text to another, etc, etc. The possibilities are
|
||||||
|
endless. See the :doc:`tutorial <remote-control>` to get started.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
remote-control
|
||||||
|
|
||||||
|
|
||||||
|
.. _sessions:
|
||||||
|
|
||||||
|
Startup Sessions
|
||||||
|
------------------
|
||||||
|
|
||||||
|
You can control the :term:`tabs <tab>`, `:term:`kitty window <window>` layout,
|
||||||
|
working directory, startup programs,
|
||||||
|
etc. by creating a "session" file and using the :option:`kitty --session`
|
||||||
|
command line flag or the :opt:`startup_session` option in :file:`kitty.conf`.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code-block:: session
|
||||||
|
|
||||||
|
# Set the layout for the current tab
|
||||||
|
layout tall
|
||||||
|
# Set the working directory for windows in the current tab
|
||||||
|
cd ~
|
||||||
|
# Create a window and run the specified command in it
|
||||||
|
launch zsh
|
||||||
|
# Create a window with some environment variables set and run
|
||||||
|
# vim in it
|
||||||
|
launch --env FOO=BAR vim
|
||||||
|
# Set the title for the next window
|
||||||
|
launch --title "Chat with x" irssi --profile x
|
||||||
|
|
||||||
|
# Create a new tab (the part after new_tab is the optional tab
|
||||||
|
# name which will be displayed in the tab bar, if omitted, the
|
||||||
|
# title of the active window will be used instead)
|
||||||
|
new_tab my tab
|
||||||
|
cd ~/somewhere
|
||||||
|
# Set the layouts allowed in this tab
|
||||||
|
enabled_layouts tall, stack
|
||||||
|
# Set the current layout
|
||||||
|
layout stack
|
||||||
|
launch zsh
|
||||||
|
|
||||||
|
# Create a new OS window
|
||||||
|
new_os_window
|
||||||
|
# set new window size to 80x25 cells
|
||||||
|
os_window_size 80c 25c
|
||||||
|
# set the --class for the new OS window
|
||||||
|
os_window_class mywindow
|
||||||
|
launch sh
|
||||||
|
# Make the current window the active (focused) window
|
||||||
|
focus
|
||||||
|
launch emacs
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The :doc:`launch <launch>` command when used in a session file
|
||||||
|
cannot create new OS windows, or tabs.
|
||||||
|
|
||||||
|
|
||||||
|
Launching new tabs/windows
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
kitty can be told to run arbitrary programs in new :term:`tabs <tab>`,
|
||||||
|
:term:`windows <window>` or :term:`overlays <overlay>` at a keypress.
|
||||||
|
To learn how to do this, see :doc:`here <launch>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
launch
|
||||||
|
|
||||||
|
|
||||||
|
Mouse features
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* You can click on a URL to open it in a browser.
|
||||||
|
* You can double click to select a word and then drag to select more words.
|
||||||
|
* You can triple click to select a line and then drag to select more lines.
|
||||||
|
* You can triple click while holding :kbd:`ctrl+alt` to select from clicked
|
||||||
|
point to end of line.
|
||||||
|
* You can right click to extend a previous selection.
|
||||||
|
* You can hold down :kbd:`ctrl+alt` and drag with the mouse to select in
|
||||||
|
columns.
|
||||||
|
* Selecting text automatically copies it to the primary clipboard (on
|
||||||
|
platforms with a primary clipboard).
|
||||||
|
* You can middle click to paste from the primary clipboard (on platforms
|
||||||
|
with a primary clipboard).
|
||||||
|
* You can select text with kitty even when a terminal program has grabbed
|
||||||
|
the mouse by holding down the :kbd:`shift` key.
|
||||||
|
|
||||||
|
All these actions can be customized in :file:`kitty.conf` as described
|
||||||
|
:ref:`here <conf-kitty-mouse.mousemap>`.
|
||||||
|
|
||||||
|
|
||||||
|
Scripting the mouse click
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
You can customize what happens when clicking on hyperlinks in kitty,
|
||||||
|
having it open files in your editor, download remote files, open things
|
||||||
|
in your browser, etc.
|
||||||
|
|
||||||
|
For details, see :doc:`here <open_actions>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
open_actions
|
||||||
|
|
||||||
|
Font control
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
|kitty| has extremely flexible and powerful font selection features. You can
|
||||||
|
specify individual families for the regular, bold, italic and bold+italic
|
||||||
|
fonts. You can even specify specific font families for specific ranges of
|
||||||
|
unicode characters. This allows precise control over text rendering. It can
|
||||||
|
come in handy for applications like powerline, without the need to use patched
|
||||||
|
fonts. See the various font related configuration directives in
|
||||||
|
:ref:`conf-kitty-fonts`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _scrollback:
|
||||||
|
|
||||||
|
The scrollback buffer
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
|kitty| supports scrolling back to view history, just like most terminals. You
|
||||||
|
can use either keyboard shortcuts or the mouse scroll wheel to do so. However,
|
||||||
|
|kitty| has an extra, neat feature. Sometimes you need to explore the
|
||||||
|
scrollback buffer in more detail, maybe search for some text or refer to it
|
||||||
|
side-by-side while typing in a follow-up command. |kitty| allows you to do this
|
||||||
|
by pressing the :sc:`show_scrollback` key-combination, which will open the
|
||||||
|
scrollback buffer in your favorite pager program (which is ``less`` by default).
|
||||||
|
Colors and text formatting are preserved. You can explore the scrollback buffer
|
||||||
|
comfortably within the pager.
|
||||||
|
|
||||||
|
Additionally, you can pipe the contents of the scrollback buffer to an
|
||||||
|
arbitrary, command running in a new :term:`window`, :term:`tab` or :term:`overlay`,
|
||||||
|
for example::
|
||||||
|
|
||||||
|
map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting less +G -R
|
||||||
|
|
||||||
|
Would open the scrollback buffer in a new :term:`window` when you press the :kbd:`F1`
|
||||||
|
key. See :sc:`show_scrollback` for details.
|
||||||
|
|
||||||
|
If you want to use it with an editor such as vim to get more powerful features,
|
||||||
|
you can see tips for doing so, in
|
||||||
|
`this thread <https://github.com/kovidgoyal/kitty/issues/719>`_.
|
||||||
|
|
||||||
|
If you wish to store very large amounts of scrollback to view using the piping or
|
||||||
|
:sc:`show_scrollback` features, you can use the :opt:`scrollback_pager_history_size`
|
||||||
|
option.
|
||||||
|
|
||||||
|
.. _cpbuf:
|
||||||
|
|
||||||
|
Multiple copy/paste buffers
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
In addition to being able to copy/paste from the system clipboard, in |kitty| you
|
||||||
|
can also setup an arbitrary number of copy paste buffers. To do so, simply add
|
||||||
|
something like the following to your :file:`kitty.conf`::
|
||||||
|
|
||||||
|
map f1 copy_to_buffer a
|
||||||
|
map f2 paste_from_buffer a
|
||||||
|
|
||||||
|
This will allow you to press :kbd:`F1` to copy the current selection to an
|
||||||
|
internal buffer named ``a`` and :kbd:`F2` to paste from that buffer. The buffer
|
||||||
|
names are arbitrary strings, so you can define as many such buffers as you
|
||||||
|
need.
|
||||||
|
|
||||||
|
|
||||||
|
Marks
|
||||||
|
-------------
|
||||||
|
|
||||||
|
kitty has the ability to mark text on the screen based on regular expressions.
|
||||||
|
This can be useful to highlight words or phrases when browsing output from long
|
||||||
|
running programs or similar. To learn how this feature works, see :doc:`marks`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
marks
|
||||||
@ -1,4 +1,4 @@
|
|||||||
|kitty| Performance
|
Performance
|
||||||
===================
|
===================
|
||||||
|
|
||||||
The main goals for |kitty| performance are user perceived latency while typing
|
The main goals for |kitty| performance are user perceived latency while typing
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
:orphan:
|
||||||
|
|
||||||
Working with the screen and history buffer contents
|
Working with the screen and history buffer contents
|
||||||
======================================================
|
======================================================
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
Extensions to the xterm protocol
|
Terminal protocol extensions
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
|kitty| has a few extensions to the xterm protocol, to enable advanced features.
|
|kitty| has extensions to the legacy terminal protocol, to enable advanced features.
|
||||||
These are typically in the form of new or re-purposed escape codes. While these
|
These are typically in the form of new or re-purposed escape codes. While these
|
||||||
extensions are currently |kitty| specific, it would be nice to get some of them
|
extensions are currently |kitty| specific, it would be nice to get some of them
|
||||||
adopted more broadly, to push the state of terminal emulators forward.
|
adopted more broadly, to push the state of terminal emulators forward.
|
||||||
@ -19,301 +19,15 @@ If you wish to discuss these extensions, propose additions/changes to them
|
|||||||
please do so by opening issues in the `GitHub
|
please do so by opening issues in the `GitHub
|
||||||
<https://github.com/kovidgoyal/kitty/issues>`_ bug tracker.
|
<https://github.com/kovidgoyal/kitty/issues>`_ bug tracker.
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Colored and styled underlines
|
.. toctree::
|
||||||
-------------------------------
|
:maxdepth: 1
|
||||||
|
|
||||||
|kitty| supports colored and styled (wavy) underlines. This is of particular
|
underlines
|
||||||
use in terminal editors such as vim and emacs to display red, wavy underlines
|
graphics-protocol
|
||||||
under mis-spelled words and/or syntax errors. This is done by re-purposing some
|
keyboard-protocol
|
||||||
SGR escape codes that are not used in modern terminals (`CSI codes
|
desktop-notifications
|
||||||
<https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_(Control_Sequence_Introducer)_sequences>`_)
|
unscroll
|
||||||
|
clipboard
|
||||||
To set the underline style::
|
color-stack
|
||||||
|
deccara
|
||||||
<ESC>[4:0m # this is no underline
|
|
||||||
<ESC>[4:1m # this is a straight underline
|
|
||||||
<ESC>[4:2m # this is a double underline
|
|
||||||
<ESC>[4:3m # this is a curly underline
|
|
||||||
<ESC>[4:4m # this is a dotted underline (not implemented in kitty)
|
|
||||||
<ESC>[4:5m # this is a dashed underline (not implemented in kitty)
|
|
||||||
<ESC>[4m # this is a straight underline (for backwards compat)
|
|
||||||
<ESC>[24m # this is no underline (for backwards compat)
|
|
||||||
|
|
||||||
To set the underline color (this is reserved and as far as I can tell not actually used for anything)::
|
|
||||||
|
|
||||||
<ESC>[58...m
|
|
||||||
|
|
||||||
This works exactly like the codes ``38, 48`` that are used to set foreground and
|
|
||||||
background color respectively.
|
|
||||||
|
|
||||||
To reset the underline color (also previously reserved and unused)::
|
|
||||||
|
|
||||||
<ESC>[59m
|
|
||||||
|
|
||||||
The underline color must remain the same under reverse video, if it has a
|
|
||||||
color, if not, it should follow the foreground color.
|
|
||||||
|
|
||||||
To detect support for this feature in a terminal emulator, query the terminfo database
|
|
||||||
for the ``Su`` boolean capability.
|
|
||||||
|
|
||||||
Graphics rendering
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
See :doc:`/graphics-protocol` for a description
|
|
||||||
of this protocol to enable drawing of arbitrary raster images in the terminal.
|
|
||||||
|
|
||||||
|
|
||||||
.. _extended-key-protocol:
|
|
||||||
|
|
||||||
Keyboard handling
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
kitty has a :doc:`keyboard protocol <keyboard-protocol>` for reporting key
|
|
||||||
presses to terminal applications that solves all key handling issues in
|
|
||||||
terminal applications.
|
|
||||||
|
|
||||||
.. _ext_styles:
|
|
||||||
|
|
||||||
Setting text styles/colors in arbitrary regions of the screen
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
There already exists an escape code to set *some* text attributes in arbitrary
|
|
||||||
regions of the screen, `DECCARA
|
|
||||||
<https://vt100.net/docs/vt510-rm/DECCARA.html>`_. However, it is limited to
|
|
||||||
only a few attributes. |kitty| extends this to work with *all* SGR attributes.
|
|
||||||
So, for example, this can be used to set the background color in an arbitrary
|
|
||||||
region of the screen.
|
|
||||||
|
|
||||||
The motivation for this extension is the various problems with the existing
|
|
||||||
solution for erasing to background color, namely the *background color erase
|
|
||||||
(bce)* capability. See
|
|
||||||
`this discussion <https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545>`_
|
|
||||||
and `this FAQ <https://invisible-island.net/ncurses/ncurses.faq.html#bce_mismatches>`_
|
|
||||||
for a summary of problems with *bce*.
|
|
||||||
|
|
||||||
For example, to set the background color to blue in a
|
|
||||||
rectangular region of the screen from (3, 4) to (10, 11), you use::
|
|
||||||
|
|
||||||
<ESC>[2*x<ESC>[4;3;11;10;44$r<ESC>[*x
|
|
||||||
|
|
||||||
|
|
||||||
Saving and restoring colors
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
It is often useful for a full screen application with its own color themes to
|
|
||||||
set the default foreground, background, selection and cursor colors and the
|
|
||||||
ANSI color table. This allows for various performance optimizations when
|
|
||||||
drawing the screen. The problem is that if the user previously used the escape
|
|
||||||
codes to change these colors herself, then running the full screen application
|
|
||||||
will lose her changes even after it exits. To avoid this, kitty introduces a
|
|
||||||
new pair of *OSC* escape codes to push and pop the current color values from a
|
|
||||||
stack::
|
|
||||||
|
|
||||||
<ESC>]30001<ESC>\ # push onto stack
|
|
||||||
<ESC>]30101<ESC>\ # pop from stack
|
|
||||||
|
|
||||||
These escape codes save/restore the colors, default
|
|
||||||
background, default foreground, selection background, selection foreground and
|
|
||||||
cursor color and the 256 colors of the ANSI color table.
|
|
||||||
|
|
||||||
.. note:: In July 2020, after several years, XTerm copied this protocol
|
|
||||||
extension, without acknowledgement, and using incompatible escape codes
|
|
||||||
(XTPUSHCOLORS, XTPOPCOLORS, XTREPORTCOLORS). And they decided to save not
|
|
||||||
just the dynamic colors but the entire ANSI color table. In the interests of
|
|
||||||
promoting interoperability, kitty added support for XTerm's escape codes as
|
|
||||||
well, and changed this extension to also save/restore the entire ANSI color
|
|
||||||
table.
|
|
||||||
|
|
||||||
|
|
||||||
Pasting to clipboard
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
|kitty| implements the OSC 52 escape code protocol to get/set the clipboard
|
|
||||||
contents (controlled via the :opt:`clipboard_control` setting). There is one
|
|
||||||
difference in kitty's implementation compared to some other terminal emulators.
|
|
||||||
|kitty| allows sending arbitrary amounts of text to the clipboard. It does so
|
|
||||||
by modifying the protocol slightly. Successive OSC 52 escape codes to set the
|
|
||||||
clipboard will concatenate, so::
|
|
||||||
|
|
||||||
<ESC>]52;c;<payload1><ESC>\
|
|
||||||
<ESC>]52;c;<payload2><ESC>\
|
|
||||||
|
|
||||||
will result in the clipboard having the contents ``payload1 + payload2``. To
|
|
||||||
send a new string to the clipboard send an OSC 52 sequence with an invalid payload
|
|
||||||
first, for example::
|
|
||||||
|
|
||||||
<ESC>]52;c;!<ESC>\
|
|
||||||
|
|
||||||
Here ``!`` is not valid base64 encoded text, so it clears the clipboard.
|
|
||||||
Further, since it is invalid, it should be ignored by terminal emulators
|
|
||||||
that do not support this extension, thereby making it safe to use, simply
|
|
||||||
always send it before starting a new OSC 52 paste, even if you aren't chunking
|
|
||||||
up large pastes, that way kitty won't concatenate your paste, and it will have
|
|
||||||
no ill-effects in other terminal emulators.
|
|
||||||
|
|
||||||
In case you're using software that can't be easily adapted to this
|
|
||||||
protocol extension, it can be disabled by specifying ``no-append`` to the
|
|
||||||
:opt:`clipboard_control` setting.
|
|
||||||
|
|
||||||
|
|
||||||
.. _unscroll:
|
|
||||||
|
|
||||||
Unscrolling the screen
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
This is a small extension to the `SD (Pan up) escape code
|
|
||||||
<https://vt100.net/docs/vt510-rm/SD.html>`_ from the VT-420 terminal. The
|
|
||||||
``SD`` escape code normally causes the text on screen to scroll down by the
|
|
||||||
specified number of lines, with empty lines appearing at the top of the screen.
|
|
||||||
This extension allows the new lines to be filled in from the scrollback buffer
|
|
||||||
instead of being blank.
|
|
||||||
|
|
||||||
The motivation for this is that many modern shells will show completions in a
|
|
||||||
block of lines under the cursor, this causes some of the on-screen text to be
|
|
||||||
lost even after the completion is completed, because it has scrolled off
|
|
||||||
screen. This escape code allows that text to be restored.
|
|
||||||
|
|
||||||
If the scrollback buffer is empty or there is no scrollback buffer, such as for
|
|
||||||
the alternate screen, then the newly inserted lines must be empty, just as with
|
|
||||||
the original ``SD`` escape code. The maximum number of lines that can be
|
|
||||||
scrolled down is implementation defined, but must be at least one screen worth.
|
|
||||||
|
|
||||||
The syntax of the escape code is identical to that of ``SD`` except that it has
|
|
||||||
a trailing ``+`` modifier. This is legal under the `ECMA 48 standard
|
|
||||||
<https://www.ecma-international.org/publications-and-standards/standards/ecma-48/>`_
|
|
||||||
and unused for any other purpose as far as I can tell. So for example, to
|
|
||||||
unscroll three lines, the escape code would be::
|
|
||||||
|
|
||||||
CSI 3 + T
|
|
||||||
|
|
||||||
See `discussion here
|
|
||||||
<https://gitlab.freedesktop.org/terminal-wg/specifications/-/issues/30>`_.
|
|
||||||
|
|
||||||
.. versionadded:: 0.20.2
|
|
||||||
|
|
||||||
|
|
||||||
.. _desktop_notifications:
|
|
||||||
|
|
||||||
|
|
||||||
Desktop notifications
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
|kitty| implements an extensible escape code (OSC 99) to show desktop
|
|
||||||
notifications. It is easy to use from shell scripts and fully extensible to
|
|
||||||
show title and body. Clicking on the notification can optionally focus the
|
|
||||||
window it came from, and/or send an escape code back to the application running
|
|
||||||
in that window.
|
|
||||||
|
|
||||||
The design of the escape code is partially based on the discussion in
|
|
||||||
the defunct
|
|
||||||
`terminal-wg <https://gitlab.freedesktop.org/terminal-wg/specifications/-/issues/13>`_
|
|
||||||
|
|
||||||
The escape code has the form::
|
|
||||||
|
|
||||||
<OSC> 99 ; metadata ; payload <terminator>
|
|
||||||
|
|
||||||
Here ``<OSC>`` is :code:`<ESC>]` and ``<terminator>`` is
|
|
||||||
:code:`<ESC><backslash>`. The metadata is a section of colon separated
|
|
||||||
:code:`key=value` pairs. Every key must be a single character from the set
|
|
||||||
:code:`a-zA-Z` and every value must be a word consisting of characters from
|
|
||||||
the set :code:`a-zA-Z0-9-_/\+.,(){}[]*&^%$#@!`~`. The payload must be
|
|
||||||
interpreted based on the metadata section. The two semi-colons *must* always be
|
|
||||||
present even when no metadata is present.
|
|
||||||
|
|
||||||
Before going into details, lets see how one can display a simple, single line
|
|
||||||
notification from a shell script::
|
|
||||||
|
|
||||||
printf '\x1b]99;;Hello world\x1b\\'
|
|
||||||
|
|
||||||
To show a message with a title and a body::
|
|
||||||
|
|
||||||
printf '\x1b]99;i=1:d=0;Hello world\x1b\\'
|
|
||||||
printf '\x1b]99;i=1:d=1:p=body;This is cool\x1b\\'
|
|
||||||
|
|
||||||
The most important key in the metadata is the ``p`` key, it controls how the
|
|
||||||
payload is interpreted. A value of ``title`` means the payload is setting the
|
|
||||||
title for the notification. A value of ``body`` means it is setting the body,
|
|
||||||
and so on, see the table below for full details.
|
|
||||||
|
|
||||||
The design of the escape code is fundamentally chunked, this is because
|
|
||||||
different terminal emulators have different limits on how large a single escape
|
|
||||||
code can be. Chunking is accomplished by the ``i`` and ``d`` keys. The ``i``
|
|
||||||
key is the *notification id* which can be any string containing the characters
|
|
||||||
``[a-zA-Z0-9_-+.]``. The ``d`` key stands for *done* and
|
|
||||||
can only take the values ``0`` and ``1``. A value of ``0`` means the
|
|
||||||
notification is not yet done and the terminal emulator should hold off
|
|
||||||
displaying it. A value of ``1`` means the notification is done, and should be
|
|
||||||
displayed. You can specify the title or body multiple times and the terminal
|
|
||||||
emulator will concatenate them, thereby allowing arbitrarily long text
|
|
||||||
(terminal emulators are free to impose a sensible limit to avoid
|
|
||||||
Denial-of-Service attacks).
|
|
||||||
|
|
||||||
Both the ``title`` and ``body`` payloads must be either UTF-8 encoded plain
|
|
||||||
text with no embedded escape codes, or UTF-8 text that is base64 encoded, in
|
|
||||||
which case there must be an ``e=1`` key in the metadata to indicate the payload
|
|
||||||
is base64 encoded.
|
|
||||||
|
|
||||||
When the user clicks the notification, a couple of things can happen, the
|
|
||||||
terminal emulator can focus the window from which the notification came, and/or
|
|
||||||
it can send back an escape code to the application indicating the notification
|
|
||||||
was activated. This is controlled by the ``a`` key which takes a comma
|
|
||||||
separated set of values, ``report`` and ``focus``. The value ``focus`` means
|
|
||||||
focus the window from which the notification was issued and is the default.
|
|
||||||
``report`` means send an escape code back to the application. The format of the
|
|
||||||
returned escape code is::
|
|
||||||
|
|
||||||
<OSC> 99 ; i=identifier ; <terminator>
|
|
||||||
|
|
||||||
The value of ``identifier`` comes from the ``i`` key in the escape code sent by
|
|
||||||
the application. If the application sends no identifier, then the terminal
|
|
||||||
*must* use ``i=0``. Actions can be preceded by a negative sign to turn them
|
|
||||||
off, so for example if you do not want any action, turn off the default
|
|
||||||
``focus`` action with::
|
|
||||||
|
|
||||||
a=-focus
|
|
||||||
|
|
||||||
Complete specification of all the metadata keys is in the table below. If a
|
|
||||||
terminal emulator encounters a key in the metadata it does not understand,
|
|
||||||
the key *must* be ignored, to allow for future extensibility of this escape
|
|
||||||
code. Similarly if values for known keys are unknown, the terminal emulator
|
|
||||||
*should* either ignore the entire escape code or perform a best guess effort
|
|
||||||
to display it based on what it does understand.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
It is possible to extend this escape code to allow specifying an icon for
|
|
||||||
the notification, however, given that some platforms, such as macOS, dont
|
|
||||||
allow displaying custom icons on a notification, at all, it was decided to
|
|
||||||
leave it out of the spec for the time being.
|
|
||||||
|
|
||||||
Similarly, features such as scheduled notifications could be added in future
|
|
||||||
revisions.
|
|
||||||
|
|
||||||
|
|
||||||
======= ==================== ========= =================
|
|
||||||
Key Value Default Description
|
|
||||||
======= ==================== ========= =================
|
|
||||||
``a`` Comma separated list ``focus`` What action to perform when the
|
|
||||||
of ``report``, notification is clicked
|
|
||||||
``focus``, with
|
|
||||||
optional leading
|
|
||||||
``-``
|
|
||||||
|
|
||||||
``d`` ``0`` or ``1`` ``1`` Indicates if the notification is
|
|
||||||
complete or not.
|
|
||||||
|
|
||||||
``e`` ``0`` or ``1`` ``0`` If set to ``1`` means the payload is base64 encoded UTF-8,
|
|
||||||
otherwise it is plain UTF-8 text with no C0 control codes in it
|
|
||||||
|
|
||||||
``i`` ``[a-zA-Z0-9-_+.]`` ``0`` Identifier for the notification
|
|
||||||
|
|
||||||
``p`` One of ``title`` or ``title`` Whether the payload is the notification title or body. If a
|
|
||||||
``body``. notification has no title, the body will be used as title.
|
|
||||||
======= ==================== ========= =================
|
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|kitty| also supports the legacy OSC 9 protocol developed by iTerm2 for
|
|
||||||
desktop notifications.
|
|
||||||
|
|||||||
28
docs/quickstart.rst
Normal file
28
docs/quickstart.rst
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
.. _quickstart:
|
||||||
|
|
||||||
|
Quickstart
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
binary
|
||||||
|
build
|
||||||
|
|
||||||
|
Pre-built binaries of |kitty| are available for both macOS and Linux.
|
||||||
|
See the :doc:`binary install instructions </binary>`. You can also
|
||||||
|
:doc:`build from source </build>`.
|
||||||
|
|
||||||
|
Additionally, you can use your favorite package manager to install the |kitty|
|
||||||
|
package, but note that some Linux distribution packages are woefully outdated.
|
||||||
|
|kitty| is available in a vast number of package repositories for macOS
|
||||||
|
and Linux.
|
||||||
|
|
||||||
|
.. image:: https://repology.org/badge/tiny-repos/kitty.svg
|
||||||
|
:target: https://repology.org/project/kitty/versions
|
||||||
|
:alt: Number of repositories kitty is available in
|
||||||
|
|
||||||
|
See :doc:`Configuring kitty <conf>` for help on configuring |kitty| and
|
||||||
|
:doc:`Invocation <invocation>` for the command line arguments |kitty| supports.
|
||||||
|
|
||||||
|
For a tour of kitty's design and features, see the :doc:`/overview`.
|
||||||
@ -1,5 +1,5 @@
|
|||||||
Documentation for the kitty remote control protocol
|
The kitty remote control protocol
|
||||||
======================================================
|
==================================
|
||||||
|
|
||||||
The kitty remote control protocol is a simple protocol that involves sending
|
The kitty remote control protocol is a simple protocol that involves sending
|
||||||
data to kitty in the form of JSON. Any individual command of kitty has the
|
data to kitty in the form of JSON. Any individual command of kitty has the
|
||||||
@ -37,5 +37,4 @@ with the following command line::
|
|||||||
|
|
||||||
echo -en '\eP@kitty-cmd{"cmd":"ls","version":[0,14,2]}\e\' | socat - unix:/tmp/test | awk '{ print substr($0, 13, length($0) - 14) }' | jq -c '.data | fromjson' | jq .
|
echo -en '\eP@kitty-cmd{"cmd":"ls","version":[0,14,2]}\e\' | socat - unix:/tmp/test | awk '{ print substr($0, 13, length($0) - 14) }' | jq -c '.data | fromjson' | jq .
|
||||||
|
|
||||||
|
|
||||||
.. include:: generated/rc.rst
|
.. include:: generated/rc.rst
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
:tocdepth: 2
|
Control kitty from scripts
|
||||||
|
|
||||||
Controlling kitty from scripts or the shell
|
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
.. highlight:: sh
|
.. highlight:: sh
|
||||||
@ -174,10 +172,15 @@ Now press, F1 and start typing, what you type will be sent to all windows,
|
|||||||
live, as you type it.
|
live, as you type it.
|
||||||
|
|
||||||
|
|
||||||
Documentation for the remote control protocol
|
The remote control protocol
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
If you wish to develop your own client to talk to |kitty|, you
|
If you wish to develop your own client to talk to |kitty|, you
|
||||||
can use the :doc:`rc_protocol`.
|
can use the :doc:`protocol specification <rc_protocol>`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
rc_protocol
|
||||||
|
|
||||||
.. include:: generated/cli-kitty-at.rst
|
.. include:: generated/cli-kitty-at.rst
|
||||||
|
|||||||
5
docs/requirements.txt
Normal file
5
docs/requirements.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
sphinx
|
||||||
|
furo
|
||||||
|
sphinx-copybutton
|
||||||
|
sphinxext-opengraph
|
||||||
|
sphinx-inline-tabs
|
||||||
36
docs/underlines.rst
Normal file
36
docs/underlines.rst
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Colored and styled underlines
|
||||||
|
================================
|
||||||
|
|
||||||
|
|kitty| supports colored and styled (wavy) underlines. This is of particular
|
||||||
|
use in terminal editors such as vim and emacs to display red, wavy underlines
|
||||||
|
under mis-spelled words and/or syntax errors. This is done by re-purposing some
|
||||||
|
SGR escape codes that are not used in modern terminals (`CSI codes
|
||||||
|
<https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_(Control_Sequence_Introducer)_sequences>`_)
|
||||||
|
|
||||||
|
To set the underline style::
|
||||||
|
|
||||||
|
<ESC>[4:0m # this is no underline
|
||||||
|
<ESC>[4:1m # this is a straight underline
|
||||||
|
<ESC>[4:2m # this is a double underline
|
||||||
|
<ESC>[4:3m # this is a curly underline
|
||||||
|
<ESC>[4:4m # this is a dotted underline (not implemented in kitty)
|
||||||
|
<ESC>[4:5m # this is a dashed underline (not implemented in kitty)
|
||||||
|
<ESC>[4m # this is a straight underline (for backwards compat)
|
||||||
|
<ESC>[24m # this is no underline (for backwards compat)
|
||||||
|
|
||||||
|
To set the underline color (this is reserved and as far as I can tell not actually used for anything)::
|
||||||
|
|
||||||
|
<ESC>[58...m
|
||||||
|
|
||||||
|
This works exactly like the codes ``38, 48`` that are used to set foreground and
|
||||||
|
background color respectively.
|
||||||
|
|
||||||
|
To reset the underline color (also previously reserved and unused)::
|
||||||
|
|
||||||
|
<ESC>[59m
|
||||||
|
|
||||||
|
The underline color must remain the same under reverse video, if it has a
|
||||||
|
color, if not, it should follow the foreground color.
|
||||||
|
|
||||||
|
To detect support for this feature in a terminal emulator, query the terminfo database
|
||||||
|
for the ``Su`` boolean capability.
|
||||||
34
docs/unscroll.rst
Normal file
34
docs/unscroll.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
.. _unscroll:
|
||||||
|
|
||||||
|
Unscrolling the screen
|
||||||
|
========================
|
||||||
|
|
||||||
|
This is a small extension to the `SD (Pan up) escape code
|
||||||
|
<https://vt100.net/docs/vt510-rm/SD.html>`_ from the VT-420 terminal. The
|
||||||
|
``SD`` escape code normally causes the text on screen to scroll down by the
|
||||||
|
specified number of lines, with empty lines appearing at the top of the screen.
|
||||||
|
This extension allows the new lines to be filled in from the scrollback buffer
|
||||||
|
instead of being blank.
|
||||||
|
|
||||||
|
The motivation for this is that many modern shells will show completions in a
|
||||||
|
block of lines under the cursor, this causes some of the on-screen text to be
|
||||||
|
lost even after the completion is completed, because it has scrolled off
|
||||||
|
screen. This escape code allows that text to be restored.
|
||||||
|
|
||||||
|
If the scrollback buffer is empty or there is no scrollback buffer, such as for
|
||||||
|
the alternate screen, then the newly inserted lines must be empty, just as with
|
||||||
|
the original ``SD`` escape code. The maximum number of lines that can be
|
||||||
|
scrolled down is implementation defined, but must be at least one screen worth.
|
||||||
|
|
||||||
|
The syntax of the escape code is identical to that of ``SD`` except that it has
|
||||||
|
a trailing ``+`` modifier. This is legal under the `ECMA 48 standard
|
||||||
|
<https://www.ecma-international.org/publications-and-standards/standards/ecma-48/>`_
|
||||||
|
and unused for any other purpose as far as I can tell. So for example, to
|
||||||
|
unscroll three lines, the escape code would be::
|
||||||
|
|
||||||
|
CSI 3 + T
|
||||||
|
|
||||||
|
See `discussion here
|
||||||
|
<https://gitlab.freedesktop.org/terminal-wg/specifications/-/issues/30>`_.
|
||||||
|
|
||||||
|
.. versionadded:: 0.20.2
|
||||||
@ -91,17 +91,13 @@ def as_rst() -> str:
|
|||||||
a(title)
|
a(title)
|
||||||
a('-' * len(title))
|
a('-' * len(title))
|
||||||
a('')
|
a('')
|
||||||
a('.. contents::')
|
|
||||||
a(' :local:')
|
|
||||||
a(' :depth: 1')
|
|
||||||
a('')
|
|
||||||
|
|
||||||
for action in allg[group]:
|
for action in allg[group]:
|
||||||
a('')
|
a('')
|
||||||
a(f'.. _action-{action.name}:')
|
a(f'.. _action-{action.name}:')
|
||||||
a('')
|
a('')
|
||||||
a(action.name)
|
a(action.name)
|
||||||
a('^' * len(action.name))
|
a('+' * len(action.name))
|
||||||
a('')
|
a('')
|
||||||
a(action.short_help)
|
a(action.short_help)
|
||||||
a('')
|
a('')
|
||||||
|
|||||||
@ -428,7 +428,7 @@ class Group:
|
|||||||
a(f'.. _conf-{conf_name}-{self.name}:')
|
a(f'.. _conf-{conf_name}-{self.name}:')
|
||||||
a('')
|
a('')
|
||||||
a(self.title)
|
a(self.title)
|
||||||
heading_level = '+' if level > 1 else '^'
|
heading_level = '+' if level > 1 else '-'
|
||||||
a(heading_level * (len(self.title) + 20))
|
a(heading_level * (len(self.title) + 20))
|
||||||
a('')
|
a('')
|
||||||
if self.start_text:
|
if self.start_text:
|
||||||
|
|||||||
@ -63,7 +63,7 @@ def run_man(args: Any) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def run_html(args: Any) -> None:
|
def run_html(args: Any) -> None:
|
||||||
call('make FAIL_WARN=-W "OPTS=-D html_theme_options.analytics_id=UA-20736318-2" dirhtml', cwd=docs_dir)
|
call('make FAIL_WARN=-W "OPTS=-D analytics_id=UA-20736318-2" dirhtml', cwd=docs_dir)
|
||||||
add_old_redirects('docs/_build/dirhtml')
|
add_old_redirects('docs/_build/dirhtml')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user