From e0e0d5770f599ab928c91a53cc5bd805c16cce95 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Sun, 10 Mar 2019 20:57:36 +0100 Subject: Temporarily disable open_all_images if there are too many images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In extreme cases, all the images may be too much to handle by the system ("Argument list too long", errno 7). In such cases, let's Do The Right Thing™ and temporarily disable the open_all_images setting. Without this option we'll only open the single image. Fixes #1488. --- ranger/core/actions.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ranger/core/actions.py b/ranger/core/actions.py index 8e98432a..6c98e363 100644 --- a/ranger/core/actions.py +++ b/ranger/core/actions.py @@ -410,7 +410,7 @@ class Actions( # pylint: disable=too-many-instance-attributes,too-many-public-m raise self.notify('Error in line `%s\':\n %s' % (line, str(ex)), bad=True) - def execute_file(self, files, **kw): + def execute_file(self, files, **kw): # pylint: disable=too-many-branches """Uses the "rifle" module to open/execute a file Arguments are the same as for ranger.ext.rifle.Rifle.execute: @@ -457,8 +457,22 @@ class Actions( # pylint: disable=too-many-instance-attributes,too-many-public-m self.signal_emit('execute.before', keywords=kw) filenames = [f.path for f in files] label = kw.get('label', kw.get('app', None)) - try: + + def execute(): return self.rifle.execute(filenames, mode, label, flags, None) + try: + return execute() + except OSError as err: + # Argument list too long. + if err.errno == 7 and self.settings.open_all_images: + old_value = self.settings.open_all_images + try: + self.settings.open_all_images = False + return execute() + finally: + self.settings.open_all_images = old_value + else: + raise finally: self.signal_emit('execute.after') -- cgit 1.4.1-2-gfad0