summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/defaults/options.py3
-rw-r--r--ranger/gui/ui.py33
-rw-r--r--ranger/shared/settings.py1
3 files changed, 25 insertions, 12 deletions
diff --git a/ranger/defaults/options.py b/ranger/defaults/options.py
index 6b2a0dc9..d96955b7 100644
--- a/ranger/defaults/options.py
+++ b/ranger/defaults/options.py
@@ -61,6 +61,9 @@ draw_bookmark_borders = True
 # How many columns are there, and what are their relative widths?
 column_ratios = (1, 1, 4, 3)
 
+# Enable the mouse support?
+mouse_enabled = True
+
 # Display the file size in the main column or status bar?
 display_size_in_main_column = True
 display_size_in_status_bar = False
diff --git a/ranger/gui/ui.py b/ranger/gui/ui.py
index 68285718..cdaf6cde 100644
--- a/ranger/gui/ui.py
+++ b/ranger/gui/ui.py
@@ -27,9 +27,25 @@ TERMINALS_WITH_TITLE = ("xterm", "xterm-256color", "rxvt",
 		"rxvt-256color", "rxvt-unicode", "aterm", "Eterm",
 		"screen", "screen-256color")
 
+MOUSEMASK = curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION
+
+def _setup_mouse(signal):
+	if signal['value']:
+		curses.mousemask(MOUSEMASK)
+		curses.mouseinterval(0)
+
+		## this line solves this problem:
+		## If an action, following a mouse click, includes the
+		## suspension and re-initializion of the ui (e.g. running a
+		## file by clicking on its preview) and the next key is another
+		## mouse click, the bstate of this mouse event will be invalid.
+		## (atm, invalid bstates are recognized as scroll-down)
+		curses.ungetmouse(0,0,0,0,0)
+	else:
+		curses.mousemask(0)
+
 class UI(DisplayableContainer):
 	is_set_up = False
-	mousemask = curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION
 	load_mode = False
 	def __init__(self, commandlist=None, env=None, fm=None):
 		self._draw_title = os.environ["TERM"] in TERMINALS_WITH_TITLE
@@ -66,16 +82,8 @@ class UI(DisplayableContainer):
 		curses.start_color()
 		curses.use_default_colors()
 
-		curses.mousemask(self.mousemask)
-		curses.mouseinterval(0)
-
-		## this line solves this problem:
-		## If an action, following a mouse click, includes the
-		## suspension and re-initializion of the ui (e.g. running a
-		## file by clicking on its preview) and the next key is another
-		## mouse click, the bstate of this mouse event will be invalid.
-		## (atm, invalid bstates are recognized as scroll-down)
-		curses.ungetmouse(0,0,0,0,0)
+		self.settings.signal_bind('setopt.mouse_enabled', _setup_mouse)
+		_setup_mouse(dict(value=self.settings.mouse_enabled))
 
 		if not self.is_set_up:
 			self.is_set_up = True
@@ -91,7 +99,8 @@ class UI(DisplayableContainer):
 			curses.curs_set(1)
 		except:
 			pass
-		curses.mousemask(0)
+		if self.settings.mouse_enabled:
+			_setup_mouse(dict(value=False))
 		curses.endwin()
 
 	def set_load_mode(self, boolean):
diff --git a/ranger/shared/settings.py b/ranger/shared/settings.py
index a4a58e6e..6933957a 100644
--- a/ranger/shared/settings.py
+++ b/ranger/shared/settings.py
@@ -39,6 +39,7 @@ ALLOWED_SETTINGS = {
 	'scroll_offset': int,
 	'preview_files': bool,
 	'preview_directories': bool,
+	'mouse_enabled': bool,
 	'flushinput': bool,
 	'colorscheme': str,
 	'colorscheme_overlay': (type(None), type(lambda:0)),