I have heavily customised keybindings on a dvorak layout and this necessitates rebinding quit away from its default value of C-g. I have rebound C-g in keymaps where it is already defined (such as global-map, minibuffer-local-map and query-replace-map), and have found this to work in most cases with one major issue in flyspell-mode. flyspell-post-command-hook calls flyspell-check-word-p, which calls sit-for, which ultimately calls read_char in keyboard.c. quit_char in keyboard.c is by default set to ?\C-g and as a consequence in flyspell-mode if C-g is pressed immediately after entering some text a quit is signalled rather than running the command bound to C-g. set-quit-char should be able to change quit_char to my desired value of ?\C-p, however I run emacs in a graphical window and set-quit-char silently does nothing if emacs does not have a controlling tty. To reproduce this issue in emacs 25.0.91.7 with emacs -Q in a graphical window: (define-key global-map [?\C-g] 'backward-delete-char) (define-key global-map [?\C-p] 'keyboard-quit) (set-quit-char ?\C-p) ;; observe that quit_char is unchanged from original value of ?\C-g (current-input-mode) By running flyspell mode, typing something and pressing C-g it can be observed that backward-delete-char is not run as would be expected. I have attached a patch that changes the behaviour of set-quit-char so that quit_char is set even if emacs does not have a controlling tty.