Add a configurable keyboard shortcut and remote command to set the font size to a specific value
Fixes #388
This commit is contained in:
parent
5a905dfe7f
commit
c6da374aa9
@ -288,19 +288,16 @@ class Boss:
|
|||||||
tm.resize()
|
tm.resize()
|
||||||
|
|
||||||
def increase_font_size(self):
|
def increase_font_size(self):
|
||||||
self.change_font_size(
|
self.set_font_size(
|
||||||
min(
|
min(
|
||||||
self.opts.font_size * 5, self.current_font_size +
|
self.opts.font_size * 5, self.current_font_size +
|
||||||
self.opts.font_size_delta))
|
self.opts.font_size_delta))
|
||||||
|
|
||||||
def decrease_font_size(self):
|
def decrease_font_size(self):
|
||||||
self.change_font_size(
|
self.set_font_size(self.current_font_size - self.opts.font_size_delta)
|
||||||
max(
|
|
||||||
MINIMUM_FONT_SIZE, self.current_font_size -
|
|
||||||
self.opts.font_size_delta))
|
|
||||||
|
|
||||||
def restore_font_size(self):
|
def restore_font_size(self):
|
||||||
self.change_font_size(self.opts.font_size)
|
self.set_font_size(self.opts.font_size)
|
||||||
|
|
||||||
def _change_font_size(self, new_size=None, on_dpi_change=False):
|
def _change_font_size(self, new_size=None, on_dpi_change=False):
|
||||||
if new_size is not None:
|
if new_size is not None:
|
||||||
@ -318,7 +315,8 @@ class Boss:
|
|||||||
tm.refresh_sprite_positions()
|
tm.refresh_sprite_positions()
|
||||||
glfw_post_empty_event()
|
glfw_post_empty_event()
|
||||||
|
|
||||||
def change_font_size(self, new_size):
|
def set_font_size(self, new_size):
|
||||||
|
new_size = max(MINIMUM_FONT_SIZE, new_size)
|
||||||
if new_size == self.current_font_size:
|
if new_size == self.current_font_size:
|
||||||
return
|
return
|
||||||
self._change_font_size(new_size)
|
self._change_font_size(new_size)
|
||||||
|
|||||||
@ -113,6 +113,8 @@ def parse_key_action(action):
|
|||||||
args = (max(0, int(rest)), )
|
args = (max(0, int(rest)), )
|
||||||
elif func == 'goto_layout':
|
elif func == 'goto_layout':
|
||||||
args = [rest]
|
args = [rest]
|
||||||
|
elif func == 'set_font_size':
|
||||||
|
args = (float(rest),)
|
||||||
elif func in shlex_actions:
|
elif func in shlex_actions:
|
||||||
args = shlex.split(rest)
|
args = shlex.split(rest)
|
||||||
return KeyAction(func, args)
|
return KeyAction(func, args)
|
||||||
@ -351,7 +353,7 @@ def parse_config(lines, check_keys=True):
|
|||||||
|
|
||||||
Options, defaults = init_config(default_config_path, parse_config)
|
Options, defaults = init_config(default_config_path, parse_config)
|
||||||
actions = frozenset(a.func for a in defaults.keymap.values()) | frozenset(
|
actions = frozenset(a.func for a in defaults.keymap.values()) | frozenset(
|
||||||
'combine send_text goto_tab goto_layout new_tab_with_cwd new_window_with_cwd new_os_window_with_cwd'.
|
'combine send_text goto_tab goto_layout set_font_size new_tab_with_cwd new_window_with_cwd new_os_window_with_cwd'.
|
||||||
split()
|
split()
|
||||||
)
|
)
|
||||||
no_op_actions = frozenset({'noop', 'no-op', 'no_op'})
|
no_op_actions = frozenset({'noop', 'no-op', 'no_op'})
|
||||||
|
|||||||
@ -354,6 +354,7 @@ map ctrl+shift+, move_tab_backward
|
|||||||
# Miscellaneous
|
# Miscellaneous
|
||||||
map ctrl+shift+equal increase_font_size
|
map ctrl+shift+equal increase_font_size
|
||||||
map ctrl+shift+minus decrease_font_size
|
map ctrl+shift+minus decrease_font_size
|
||||||
|
# map ctrl+shift+f6 set_font_size 20.0
|
||||||
map ctrl+shift+backspace restore_font_size
|
map ctrl+shift+backspace restore_font_size
|
||||||
map ctrl+shift+f11 toggle_fullscreen
|
map ctrl+shift+f11 toggle_fullscreen
|
||||||
map ctrl+shift+u input_unicode_character
|
map ctrl+shift+u input_unicode_character
|
||||||
|
|||||||
@ -16,10 +16,11 @@ from .tabs import SpecialWindow
|
|||||||
from .utils import non_blocking_read, parse_address_spec, read_with_timeout
|
from .utils import non_blocking_read, parse_address_spec, read_with_timeout
|
||||||
|
|
||||||
|
|
||||||
def cmd(short_desc, desc=None, options_spec=None, no_response=False):
|
def cmd(short_desc, desc=None, options_spec=None, no_response=False, argspec='...'):
|
||||||
|
|
||||||
def w(func):
|
def w(func):
|
||||||
func.short_desc = short_desc
|
func.short_desc = short_desc
|
||||||
|
func.argspec = argspec
|
||||||
func.desc = desc or short_desc
|
func.desc = desc or short_desc
|
||||||
func.name = func.__name__[4:].replace('_', '-')
|
func.name = func.__name__[4:].replace('_', '-')
|
||||||
func.options_spec = options_spec
|
func.options_spec = options_spec
|
||||||
@ -31,7 +32,7 @@ def cmd(short_desc, desc=None, options_spec=None, no_response=False):
|
|||||||
|
|
||||||
|
|
||||||
def parse_subcommand_cli(func, args):
|
def parse_subcommand_cli(func, args):
|
||||||
opts, items = parse_args(args[1:], (func.options_spec or '\n').format, '...', func.desc, '{} @ {}'.format(appname, func.name))
|
opts, items = parse_args(args[1:], (func.options_spec or '\n').format, func.argspec, func.desc, '{} @ {}'.format(appname, func.name))
|
||||||
return opts, items
|
return opts, items
|
||||||
|
|
||||||
|
|
||||||
@ -42,7 +43,8 @@ def parse_subcommand_cli(func, args):
|
|||||||
' of |_ tabs|. Each tab has its own |_ id|, a |_ title| and a list of |_ windows|.'
|
' of |_ tabs|. Each tab has its own |_ id|, a |_ title| and a list of |_ windows|.'
|
||||||
' Each window has an |_ id|, |_ title|, |_ current working directory|, |_ process id (PID)| and'
|
' Each window has an |_ id|, |_ title|, |_ current working directory|, |_ process id (PID)| and'
|
||||||
' |_ command-line| of the process running in the window.\n\n'
|
' |_ command-line| of the process running in the window.\n\n'
|
||||||
'You can use these criteria to select windows/tabs for the other commands.'.format(appname=appname)
|
'You can use these criteria to select windows/tabs for the other commands.'.format(appname=appname),
|
||||||
|
argspec=''
|
||||||
)
|
)
|
||||||
def cmd_ls(global_opts, opts, args):
|
def cmd_ls(global_opts, opts, args):
|
||||||
pass
|
pass
|
||||||
@ -54,6 +56,19 @@ def ls(boss, window):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
@cmd(
|
||||||
|
'Set the font size in all windows',
|
||||||
|
'Sets the font size to the specified size, in pts.',
|
||||||
|
argspec='FONT_SIZE'
|
||||||
|
)
|
||||||
|
def cmd_set_font_size(global_opts, opts, args):
|
||||||
|
return {'size': float(args[0])}
|
||||||
|
|
||||||
|
|
||||||
|
def set_font_size(boss, window, payload):
|
||||||
|
boss.set_font_size(payload['size'])
|
||||||
|
|
||||||
|
|
||||||
MATCH_WINDOW_OPTION = '''\
|
MATCH_WINDOW_OPTION = '''\
|
||||||
--match -m
|
--match -m
|
||||||
The window to match. Match specifications are of the form:
|
The window to match. Match specifications are of the form:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user