about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/gui/curses_shortcuts.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/ranger/gui/curses_shortcuts.py b/ranger/gui/curses_shortcuts.py
index a977beda..4a3bb4b9 100644
--- a/ranger/gui/curses_shortcuts.py
+++ b/ranger/gui/curses_shortcuts.py
@@ -21,6 +21,10 @@ from ranger.ext.iter_tools import flatten
 from ranger.gui.color import get_color
 from ranger.core.shared import SettingsAware
 
+def _fix_surrogates(args):
+	return [isinstance(arg, str) and arg.encode('utf-8', 'surrogateescape')
+			.decode('utf-8', 'replace') or arg for arg in args]
+
 class CursesShortcuts(SettingsAware):
 	"""
 	This class defines shortcuts to faciliate operations with curses.
@@ -35,13 +39,19 @@ class CursesShortcuts(SettingsAware):
 		try:
 			self.win.addstr(*args)
 		except:
-			pass
+			try:
+				self.win.addstr(*_fix_surrogates(args))
+			except:
+				pass
 
 	def addnstr(self, *args):
 		try:
 			self.win.addnstr(*args)
 		except:
-			pass
+			try:
+				self.win.addnstr(*_fix_surrogates(args))
+			except:
+				pass
 
 	def addch(self, *args):
 		try: