Allow copying current window/tab/os window titles when creating new ones via the launch command. Fixes #4933

This commit is contained in:
Kovid Goyal 2022-04-11 15:38:33 +05:30
parent 4c77b0c562
commit f4d44f30b4
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 39 additions and 9 deletions

View File

@ -1361,6 +1361,10 @@ def set_os_window_title(os_window_id: int, title: str) -> None:
pass
def get_os_window_title(os_window_id: int) -> Optional[str]:
pass
def update_ime_position_for_window(window_id: int, force: bool = False, update_focus: int = 0) -> bool:
pass

View File

@ -9,7 +9,9 @@ from .child import Child
from .cli import parse_args
from .cli_stub import LaunchCLIOptions
from .constants import kitty_exe, shell_path
from .fast_data_types import patch_color_profiles, set_clipboard_string
from .fast_data_types import (
get_os_window_title, patch_color_profiles, set_clipboard_string
)
from .options.utils import env as parse_env
from .tabs import Tab, TabManager
from .types import run_once
@ -32,12 +34,14 @@ def options_spec() -> str:
return '''
--window-title --title
The title to set for the new window. By default, title is controlled by the
child process.
child process. The special value :code:`current` will copy the title from the currently
active window.
--tab-title
The title for the new tab if launching in a new tab. By default, the title
of the active window in the tab is used as the tab title.
of the active window in the tab is used as the tab title. The special value
:code:`current` will copy the title form the title of the currently active tab.
--type
@ -175,7 +179,8 @@ Set the WM_NAME property on X11 for the newly created OS Window when using
--os-window-title
Set the title for the newly created OS window. This title will override any
titles set by programs running in kitty.
titles set by programs running in kitty. The special value :code:`current`
will use the title of the current OS Window, if any.
--logo
@ -344,6 +349,14 @@ def launch(
active_child = active.child
else:
active_child = None
if opts.window_title == 'current':
opts.window_title = active.title if active else None
if opts.tab_title == 'current':
atab = boss.active_tab
opts.tab_title = atab.title if atab else None
if opts.os_window_title == 'current':
tm = boss.active_tab_manager
opts.os_window_title = get_os_window_title(tm.os_window_id) if tm else None
env = get_env(opts, active_child)
kw: LaunchKwds = {
'allow_remote_control': opts.allow_remote_control,

View File

@ -927,12 +927,15 @@ PYWRAP1(sync_os_window_title) {
PYWRAP1(set_os_window_title) {
id_type os_window_id;
const char *title;
PA("Ks", &os_window_id, &title);
PyObject *title;
PA("KU", &os_window_id, &title);
WITH_OS_WINDOW(os_window_id)
if (strlen(title)) {
if (PyUnicode_GetLength(title)) {
os_window->title_is_overriden = true;
set_os_window_title(os_window, title);
Py_XDECREF(os_window->window_title);
os_window->window_title = title;
Py_INCREF(title);
set_os_window_title(os_window, PyUnicode_AsUTF8(title));
} else {
os_window->title_is_overriden = false;
if (os_window->window_title) set_os_window_title(os_window, PyUnicode_AsUTF8(os_window->window_title));
@ -942,6 +945,15 @@ PYWRAP1(set_os_window_title) {
Py_RETURN_NONE;
}
PYWRAP1(get_os_window_title) {
id_type os_window_id;
PA("K", &os_window_id);
WITH_OS_WINDOW(os_window_id)
if (os_window->window_title) return Py_BuildValue("O", os_window->window_title);
END_WITH_OS_WINDOW
Py_RETURN_NONE;
}
PYWRAP1(pt_to_px) {
@ -1280,6 +1292,7 @@ static PyMethodDef module_methods[] = {
MW(background_opacity_of, METH_O),
MW(update_window_visibility, METH_VARARGS),
MW(sync_os_window_title, METH_VARARGS),
MW(get_os_window_title, METH_VARARGS),
MW(set_os_window_title, METH_VARARGS),
MW(global_font_size, METH_VARARGS),
MW(set_background_image, METH_VARARGS),

View File

@ -564,7 +564,7 @@ class Window:
return dict(
id=self.id,
is_focused=is_focused,
title=self.override_title or self.title,
title=self.title,
pid=self.child.pid,
cwd=self.child.current_cwd or self.child.cwd,
cmdline=self.child.cmdline,