Add a configurable keyboard shortcut and remote command to set the font size to a specific value

Fixes #388
This commit is contained in:
Kovid Goyal 2018-03-15 11:15:35 +05:30
parent 5a905dfe7f
commit c6da374aa9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 27 additions and 11 deletions

View File

@ -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)

View File

@ -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'})

View File

@ -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

View File

@ -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: