kitty @ new-window: Add a new option --window-type
To create top-level OS windows. Fixes #770
This commit is contained in:
parent
b4269199b4
commit
78def6e6bf
@ -35,6 +35,9 @@ Changelog
|
|||||||
- diff kitten: Fix error when right hand side file is binary and left hand side
|
- diff kitten: Fix error when right hand side file is binary and left hand side
|
||||||
file is text (:pull:`752`)
|
file is text (:pull:`752`)
|
||||||
|
|
||||||
|
- kitty @ new-window: Add a new option :option:`kitty @ new-window --window-type`
|
||||||
|
to create top-level OS windows. (:iss:`770`)
|
||||||
|
|
||||||
|
|
||||||
0.11.3 [2018-07-10]
|
0.11.3 [2018-07-10]
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|||||||
@ -190,17 +190,20 @@ class Boss:
|
|||||||
yield tab
|
yield tab
|
||||||
|
|
||||||
def set_active_window(self, window):
|
def set_active_window(self, window):
|
||||||
for tm in self.os_window_map.values():
|
for os_window_id, tm in self.os_window_map.items():
|
||||||
for tab in tm:
|
for tab in tm:
|
||||||
for w in tab:
|
for w in tab:
|
||||||
if w.id == window.id:
|
if w.id == window.id:
|
||||||
if tab is not self.active_tab:
|
if tab is not self.active_tab:
|
||||||
tm.set_active_tab(tab)
|
tm.set_active_tab(tab)
|
||||||
tab.set_active_window(w)
|
tab.set_active_window(w)
|
||||||
return
|
return os_window_id
|
||||||
|
|
||||||
def _new_os_window(self, args, cwd_from=None):
|
def _new_os_window(self, args, cwd_from=None):
|
||||||
sw = self.args_to_special_window(args, cwd_from) if args else None
|
if isinstance(args, SpecialWindowInstance):
|
||||||
|
sw = args
|
||||||
|
else:
|
||||||
|
sw = self.args_to_special_window(args, cwd_from) if args else None
|
||||||
startup_session = create_session(self.opts, special_window=sw, cwd_from=cwd_from)
|
startup_session = create_session(self.opts, special_window=sw, cwd_from=cwd_from)
|
||||||
return self.add_os_window(startup_session)
|
return self.add_os_window(startup_session)
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import sys
|
|||||||
from .cli import parse_args
|
from .cli import parse_args
|
||||||
from .config import parse_config, parse_send_text_bytes
|
from .config import parse_config, parse_send_text_bytes
|
||||||
from .constants import appname
|
from .constants import appname
|
||||||
|
from .fast_data_types import focus_os_window
|
||||||
from .tabs import SpecialWindow
|
from .tabs import SpecialWindow
|
||||||
from .utils import natsort_ints
|
from .utils import natsort_ints
|
||||||
|
|
||||||
@ -402,6 +403,12 @@ type=bool-set
|
|||||||
Keep the current window focused instead of switching to the newly opened window
|
Keep the current window focused instead of switching to the newly opened window
|
||||||
|
|
||||||
|
|
||||||
|
--window-type
|
||||||
|
default=kitty
|
||||||
|
choices=kitty,os
|
||||||
|
What kind of window to open. A kitty window or a top-level OS window.
|
||||||
|
|
||||||
|
|
||||||
--new-tab
|
--new-tab
|
||||||
type=bool-set
|
type=bool-set
|
||||||
Open a new tab
|
Open a new tab
|
||||||
@ -415,6 +422,7 @@ When using --new-tab set the title of the tab.
|
|||||||
def cmd_new_window(global_opts, opts, args):
|
def cmd_new_window(global_opts, opts, args):
|
||||||
return {'match': opts.match, 'title': opts.title, 'cwd': opts.cwd,
|
return {'match': opts.match, 'title': opts.title, 'cwd': opts.cwd,
|
||||||
'new_tab': opts.new_tab, 'tab_title': opts.tab_title,
|
'new_tab': opts.new_tab, 'tab_title': opts.tab_title,
|
||||||
|
'window_type': opts.window_type,
|
||||||
'keep_focus': opts.keep_focus, 'args': args or []}
|
'keep_focus': opts.keep_focus, 'args': args or []}
|
||||||
|
|
||||||
|
|
||||||
@ -431,6 +439,15 @@ def new_window(boss, window, payload):
|
|||||||
boss.set_active_window(old_window)
|
boss.set_active_window(old_window)
|
||||||
return str(wid)
|
return str(wid)
|
||||||
|
|
||||||
|
if payload['window_type'] == 'os':
|
||||||
|
boss._new_os_window(w)
|
||||||
|
wid = boss.active_window.id
|
||||||
|
if payload['keep_focus'] and old_window:
|
||||||
|
os_window_id = boss.set_active_window(old_window)
|
||||||
|
if os_window_id:
|
||||||
|
focus_os_window(os_window_id)
|
||||||
|
return str(wid)
|
||||||
|
|
||||||
match = payload['match']
|
match = payload['match']
|
||||||
if match:
|
if match:
|
||||||
tabs = tuple(boss.match_tabs(match))
|
tabs = tuple(boss.match_tabs(match))
|
||||||
|
|||||||
@ -543,6 +543,11 @@ destroy_os_window(OSWindow *w) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
focus_os_window(OSWindow *w) {
|
||||||
|
if (w->handle) glfwFocusWindow(w->handle);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
bool
|
bool
|
||||||
application_quit_requested() {
|
application_quit_requested() {
|
||||||
|
|||||||
@ -497,6 +497,16 @@ PYWRAP1(mark_os_window_for_close) {
|
|||||||
Py_RETURN_FALSE;
|
Py_RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PYWRAP1(focus_os_window) {
|
||||||
|
id_type os_window_id;
|
||||||
|
PA("K", &os_window_id);
|
||||||
|
WITH_OS_WINDOW(os_window_id)
|
||||||
|
if (!os_window->is_focused) focus_os_window(os_window);
|
||||||
|
Py_RETURN_TRUE;
|
||||||
|
END_WITH_OS_WINDOW
|
||||||
|
Py_RETURN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
PYWRAP1(set_titlebar_color) {
|
PYWRAP1(set_titlebar_color) {
|
||||||
id_type os_window_id;
|
id_type os_window_id;
|
||||||
unsigned int color;
|
unsigned int color;
|
||||||
@ -718,6 +728,7 @@ static PyMethodDef module_methods[] = {
|
|||||||
MW(cell_size_for_window, METH_VARARGS),
|
MW(cell_size_for_window, METH_VARARGS),
|
||||||
MW(mark_os_window_for_close, METH_VARARGS),
|
MW(mark_os_window_for_close, METH_VARARGS),
|
||||||
MW(set_titlebar_color, METH_VARARGS),
|
MW(set_titlebar_color, METH_VARARGS),
|
||||||
|
MW(focus_os_window, METH_VARARGS),
|
||||||
MW(mark_tab_bar_dirty, METH_O),
|
MW(mark_tab_bar_dirty, METH_O),
|
||||||
MW(change_background_opacity, METH_VARARGS),
|
MW(change_background_opacity, METH_VARARGS),
|
||||||
MW(background_opacity_of, METH_O),
|
MW(background_opacity_of, METH_O),
|
||||||
|
|||||||
@ -170,6 +170,7 @@ void swap_window_buffers(OSWindow *w);
|
|||||||
void make_window_context_current(OSWindow *w);
|
void make_window_context_current(OSWindow *w);
|
||||||
void hide_mouse(OSWindow *w);
|
void hide_mouse(OSWindow *w);
|
||||||
void destroy_os_window(OSWindow *w);
|
void destroy_os_window(OSWindow *w);
|
||||||
|
void focus_os_window(OSWindow *w);
|
||||||
void set_os_window_title(OSWindow *w, const char *title);
|
void set_os_window_title(OSWindow *w, const char *title);
|
||||||
OSWindow* os_window_for_kitty_window(id_type);
|
OSWindow* os_window_for_kitty_window(id_type);
|
||||||
OSWindow* add_os_window();
|
OSWindow* add_os_window();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user