summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/core/fm.py6
-rw-r--r--ranger/core/main.py11
-rw-r--r--ranger/ext/vcs/vcs.py23
3 files changed, 22 insertions, 18 deletions
diff --git a/ranger/core/fm.py b/ranger/core/fm.py
index 8168b7d6..fb6dd6b9 100644
--- a/ranger/core/fm.py
+++ b/ranger/core/fm.py
@@ -49,7 +49,7 @@ class FM(Actions, SignalDispatcher):
             self.ui = ui
         self.start_paths = paths
         self.directories = dict()
-        self.log = deque(maxlen=20)
+        self.log = deque(maxlen=1000)
         self.bookmarks = bookmarks
         self.current_tab = 1
         self.tabs = {}
@@ -70,9 +70,9 @@ class FM(Actions, SignalDispatcher):
         self.hostname = socket.gethostname()
         self.home_path = os.path.expanduser('~')
 
-        self.log.append('ranger {0} started! Process ID is {1}.'
+        self.log.appendleft('ranger {0} started! Process ID is {1}.'
                 .format(__version__, os.getpid()))
-        self.log.append('Running on Python ' + sys.version.replace('\n', ''))
+        self.log.appendleft('Running on Python ' + sys.version.replace('\n', ''))
 
         mimetypes.knownfiles.append(os.path.expanduser('~/.mime.types'))
         mimetypes.knownfiles.append(self.relpath('data/mime.types'))
diff --git a/ranger/core/main.py b/ranger/core/main.py
index 118a7480..93c71e81 100644
--- a/ranger/core/main.py
+++ b/ranger/core/main.py
@@ -112,7 +112,7 @@ def main():
         if fm.username == 'root':
             fm.settings.preview_files = False
             fm.settings.use_preview_script = False
-            fm.log.append("Running as root, disabling the file previews.")
+            fm.log.appendleft("Running as root, disabling the file previews.")
         if not arg.debug:
             from ranger.ext import curses_interrupt_handler
             curses_interrupt_handler.install_interrupt_handler()
@@ -313,12 +313,11 @@ def load_settings(fm, clean):
                     else:
                         module = importlib.import_module('plugins.' + plugin)
                         fm.commands.load_commands_from_module(module)
-                    fm.log.append("Loaded plugin '%s'." % plugin)
-                except Exception as e:
-                    fm.log.append("Error in plugin '%s'" % plugin)
+                    fm.log.appendleft("Loaded plugin '%s'." % plugin)
+                except Exception:
                     import traceback
-                    for line in traceback.format_exception_only(type(e), e):
-                        fm.log.append(line)
+                    fm.log.extendleft(reversed(traceback.format_exc().splitlines()))
+                    fm.notify("Error in plugin '%s'" % plugin, bad=True)
             ranger.fm = None
 
         # COMPAT: Load the outdated options.py
diff --git a/ranger/ext/vcs/vcs.py b/ranger/ext/vcs/vcs.py
index 1ef23000..a101e3f4 100644
--- a/ranger/ext/vcs/vcs.py
+++ b/ranger/ext/vcs/vcs.py
@@ -466,15 +466,20 @@ class VcsThread(threading.Thread):  # pylint: disable=too-many-instance-attribut
             self.paused.clear()
             self.awoken.clear()
 
-            self._queue_process()
-
-            if self.redraw:
-                self.redraw = False
-                for column in self.ui.browser.columns:
-                    if column.target and column.target.is_directory:
-                        column.need_redraw = True
-                self.ui.status.need_redraw = True
-                self.ui.redraw()
+            try:
+                self._queue_process()
+
+                if self.redraw:
+                    self.redraw = False
+                    for column in self.ui.browser.columns:
+                        if column.target and column.target.is_directory:
+                            column.need_redraw = True
+                    self.ui.status.need_redraw = True
+                    self.ui.redraw()
+            except Exception:  # pylint: disable=broad-except
+                import traceback
+                self.ui.fm.log.extendleft(reversed(traceback.format_exc().splitlines()))
+                self.ui.fm.notify('VCS Exception', bad=True)
 
     def pause(self):
         """Pause thread"""