The inhibit-mouse package allows the disabling of mouse input in Emacs using inhibit-mouse-mode
.
Instead of modifying the keymap of its own mode as the disable-mouse package does, enabling inhibit-mouse-mode only modifies input-decode-map to disable mouse events, making it more efficient and faster than disable-mouse.
Additionally, the inhibit-mouse package allows for the restoration of mouse input when inhibit-mouse-mode
is disabled.
To install outline-indent
from MELPA:
(use-package inhibit-mouse :ensure t :custom ;; Disable highlighting of clickable text such as URLs and hyperlinks when ;; hovered by the mouse pointer. (inhibit-mouse-adjust-mouse-highlight t) ;; Disables the use of tooltips (show-help-function) during mouse events. (inhibit-mouse-adjust-show-help-function t) :config (if (daemonp) (add-hook 'server-after-make-frame-hook #'inhibit-mouse-mode) (inhibit-mouse-mode 1)))Customizing the mouse buttons disabled by inhibit-mouse?
The inhibit-mouse custom variables allow you to fine-tune which mouse interactions are disabled.
You can use the following configuration to specify which mouse buttons and events you want to disable:
;; This variable specifies which mouse buttons should be inhibited from ;; triggering events. (setq inhibit-mouse-button-numbers '(1 2 3 4 5)) ;; List of mouse button events to be inhibited. (setq inhibit-mouse-button-events '("mouse" "up-mouse" "down-mouse" "drag-mouse")) ;; List of miscellaneous mouse events to be inhibited. (setq inhibit-mouse-misc-events '("wheel-up" "wheel-down" "wheel-left" "wheel-right" "pinch")) ;; List of mouse multiplier events to be inhibited. (setq inhibit-mouse-multipliers '("double" "triple")) ;; List of key modifier combinations to be inhibited for mouse events. (setq inhibit-mouse-key-modifiers '((control) (meta) (shift) (control meta shift) (control meta) (control shift) (meta shift)))Enabling/Disabling the context menu
To enable or disable the context menu based on the state of inhibit-mouse-mode
, the following code dynamically toggles context-menu-mode
accordingly:
(add-hook 'inhibit-mouse-mode-hook #'(lambda() ;; Enable or disable the context menu based on the state of ;; `inhibit-mouse-mode', the following code dynamically toggles ;; `context-menu-mode' accordingly. (when (fboundp 'context-menu-mode) (if (bound-and-true-p inhibit-mouse-mode) (context-menu-mode -1) (context-menu-mode 1)))))
This ensures that the context menu is disabled when inhibit-mouse-mode
is active and enabled when it is inactive.
When tooltip-mode
is enabled, Emacs displays certain UI hints (e.g., help text and mouse-hover messages) as popup windows near the cursor, instead of in the echo area. This behavior is useful in graphical Emacs sessions.
To toggle tooltip-mode
dynamically based on the state of inhibit-mouse-mode
, you can use the following hook:
(add-hook 'inhibit-mouse-mode-hook #'(lambda() ;; Enable or disable `tooltip-mode'. When tooltip-mode is ;; enabled, certain UI elements (e.g., help text, mouse-hover ;; hints) will appear as native system tooltips (pop-up ;; windows), rather than as echo area messages. This is useful ;; in graphical Emacs sessions where tooltips can appear near ;; the cursor. (when (fboundp 'tooltip-mode) (if (bound-and-true-p inhibit-mouse-mode) (tooltip-mode -1) (tooltip-mode 1)))))Enabling/disabling pixel scroll precision mode
The following configuration toggles pixel-scroll-precision-mode
based on the state of inhibit-mouse-mode
, excluding macOS Carbon environments where pixel scrolling is natively supported and does not require explicit activation.
(add-hook 'inhibit-mouse-mode-hook #'(lambda() (unless (and ;; Exclude macOS Carbon environments where pixel ;; scrolling is natively supported and does not ;; require explicit activation. (eq window-system 'mac) (bound-and-true-p mac-carbon-version-string)) (when (fboundp 'pixel-scroll-precision-mode) (if (bound-and-true-p inhibit-mouse-mode) (pixel-scroll-precision-mode -1) (pixel-scroll-precision-mode 1))))))Frequently Asked Question What motivates the author to disable the mouse in Emacs?
The author disables the mouse in Emacs:
Some may suggest that the author could modify the touchpad settings at the OS level. However, he prefers not to disable the touchpad entirely, as it remains useful in other applications, such as web browsers.
What is the difference between the disable-mouse and inhibit-mouse packages?The inhibit-mouse package is a efficient alternative to the disable-mouse package, as it only modifies input-decode-map to disable mouse events.
In contrast, disable-mouse applies mouse events to its own mode, and sometimes the user has to apply it to other modes that are not affected by the disable-mouse mode using the disable-mouse-in-keymap
function (e.g, evil-mode, tab-bar...).
Additionally, inhibit-mouse:
disable-mouse-in-keymap
function is used. The disable-mouse-in-keymap
function overwrites the key mappings of other modes (e.g., evil, tab-bar), and there is no straightforward way to make disable-mouse restore them.This concept of utilizing input-decode-map
to disable the mouse was introduced by Stefan Monnier in an emacs-devel mailing list thread initiated by Daniel Radetsky, who proposed a patch to the Emacs developers. Additionally, here is an interesting discussion on GitHub: Add recipe for inhibit-mouse.
The inhibit-mouse
Emacs package has been written by James Cherti and is distributed under terms of the GNU General Public License version 3, or, at your choice, any later version.
Copyright (C) 2024-2025 James Cherti
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program.
Other Emacs packages by the same author:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4