From 677e8a1ae9947d161d1cb147d5d2a5a9e0cde9e4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 10 Jan 2018 13:37:43 +0530 Subject: [PATCH] Make the signal handler a little simpler --- kitty/icat.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/kitty/icat.py b/kitty/icat.py index b81a7187b..8c5aa0309 100755 --- a/kitty/icat.py +++ b/kitty/icat.py @@ -103,14 +103,18 @@ def options_spec(): Size = namedtuple('Size', 'rows cols width height') -def screen_size(refresh=False): - if refresh or getattr(screen_size, 'ans', None) is None: +def screen_size(): + if screen_size.changed: s = struct.pack('HHHH', 0, 0, 0, 0) x = fcntl.ioctl(1, termios.TIOCGWINSZ, s) screen_size.ans = Size(*struct.unpack('HHHH', x)) + screen_size.changed = False return screen_size.ans +screen_size.changed = True + + def write_gr_cmd(cmd, payload=None): cmd = ','.join('{}={}'.format(k, v) for k, v in cmd.items()) w = sys.stdout.buffer.write @@ -319,7 +323,7 @@ def main(args=sys.argv): ' Directories are scanned recursively for image files.') args, items = parse_args(args[1:], options_spec, 'image-file ...', msg, '{} icat'.format(appname)) - signal.signal(signal.SIGWINCH, lambda: screen_size(refresh=True)) + signal.signal(signal.SIGWINCH, lambda: setattr(screen_size, 'changed', True)) if not sys.stdout.isatty() or not sys.stdin.isatty(): raise SystemExit( 'Must be run in a terminal, stdout and/or stdin is currently not a terminal'