A new mappable action to show kitty docs in the browser

This commit is contained in:
Kovid Goyal 2022-08-19 14:00:30 +05:30
parent 2bb42e67d7
commit 5350eb29c1
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
5 changed files with 42 additions and 3 deletions

View File

@ -44,6 +44,8 @@ Detailed list of changes
- A new option :opt:`modify_font` to adjust various font metrics like underlines, cell sizes etc. (:pull:`5265`) - A new option :opt:`modify_font` to adjust various font metrics like underlines, cell sizes etc. (:pull:`5265`)
- A new mappable action :ac:`show_kitty_doc` to display the kitty docs in a browser
- Graphics protocol: Only delete temp files if they have the string - Graphics protocol: Only delete temp files if they have the string
:code:`tty-graphics-protocol` in their file paths. This prevents deletion of arbitrary files in :file:`/tmp`. :code:`tty-graphics-protocol` in their file paths. This prevents deletion of arbitrary files in :file:`/tmp`.

View File

@ -136,7 +136,7 @@ def detach_tab_parse(func: str, rest: str) -> FuncArgsType:
return func, (rest,) return func, (rest,)
@func_with_args('set_background_opacity', 'goto_layout', 'toggle_layout', 'kitty_shell') @func_with_args('set_background_opacity', 'goto_layout', 'toggle_layout', 'kitty_shell', 'show_kitty_doc')
def simple_parse(func: str, rest: str) -> FuncArgsType: def simple_parse(func: str, rest: str) -> FuncArgsType:
return func, [rest] return func, [rest]

View File

@ -1069,3 +1069,18 @@ def safer_fork() -> int:
import atexit import atexit
atexit._clear() atexit._clear()
return pid return pid
def docs_url(which: str = '', local_docs_root: str = '') -> str:
from urllib.parse import quote
from .constants import local_docs, website_url
ld = local_docs_root or local_docs()
base, frag = which.partition('#')[::2]
if ld:
base = base or 'index'
url = f'file://{ld}/' + quote(base) + '.html'
else:
url = website_url(base)
if frag:
url += '#' + frag
return url

View File

@ -48,8 +48,8 @@ from .terminfo import get_capabilities
from .types import MouseEvent, WindowGeometry, ac, run_once from .types import MouseEvent, WindowGeometry, ac, run_once
from .typing import BossType, ChildType, EdgeLiteral, TabType, TypedDict from .typing import BossType, ChildType, EdgeLiteral, TabType, TypedDict
from .utils import ( from .utils import (
get_primary_selection, kitty_ansi_sanitizer_pat, load_shaders, log_error, docs_url, get_primary_selection, kitty_ansi_sanitizer_pat, load_shaders,
open_cmd, open_url, parse_color_set, path_from_osc7_url, log_error, open_cmd, open_url, parse_color_set, path_from_osc7_url,
resolve_custom_file, resolved_shell, sanitize_title, set_primary_selection resolve_custom_file, resolved_shell, sanitize_title, set_primary_selection
) )
@ -1669,4 +1669,18 @@ class Window:
if pid is not None: if pid is not None:
for sig in signals: for sig in signals:
os.kill(pid, sig) os.kill(pid, sig)
@ac('misc', '''
Display the specified kitty documentation, preferring a local copy, if found.
For example::
# show the config docs
map F1 show_kitty_doc conf
# show the ssh kitten docs
map F1 show_kitty_doc kittens/ssh
''')
def show_kitty_doc(self, which: str = '') -> None:
url = docs_url(which)
get_boss().open_url(url)
# }}} # }}}

View File

@ -5,6 +5,7 @@
import os import os
import sys import sys
import unittest import unittest
from functools import partial
from . import BaseTest from . import BaseTest
@ -74,6 +75,13 @@ class TestBuild(BaseTest):
import pygments import pygments
del pygments del pygments
def test_docs_url(self):
from kitty.utils import docs_url
p = partial(docs_url, local_docs_root='/docs')
self.ae(p(), 'file:///docs/index.html')
self.ae(p('conf'), 'file:///docs/conf.html')
self.ae(p('kittens/ssh#frag'), 'file:///docs/kittens/ssh.html#frag')
def main() -> None: def main() -> None:
tests = unittest.defaultTestLoader.loadTestsFromTestCase(TestBuild) tests = unittest.defaultTestLoader.loadTestsFromTestCase(TestBuild)