* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) @ 2017-12-14 17:05 Hariharan Rangasamy 2017-12-14 19:24 ` Noam Postavsky 0 siblings, 1 reply; 6+ messages in thread From: Hariharan Rangasamy @ 2017-12-14 17:05 UTC (permalink / raw To: 29710 Emacs becomes unresponsive when typing {-[]-} when both haskell mode and electric pair mode are enabled. Install haskell mode from https://github.com/haskell/haskell-mode * emacs -Q * enable electric-pair-mode * enable haskell mode in scratch buffer * type {--} * try to input brackets {-[]-} On pressing [ emacs becomes unresponsive, the mouse pointer rotates continuously. On giving C-g repeatedly, the brackets are inserted and emacs becomes responsive again. Also when i send SIGUSR2 signal emacs becomes responsive. The bug was posted in https://www.reddit.com/r/emacs/comments/7jb4qu/bug_with_haskellmode_and_electricpairmode_doesnt/ In the original post the user mentioned emacs was crashing but i was able to reproduce the emacs hang only. I was able to reproduce this issue easily on two different systems. Let me know if you are unable to reproduce the issue or if you need more info. In GNU Emacs 27.0.50 (build 4, x86_64-pc-linux-gnu, GTK+ Version 2.24.30) of 2017-12-10 built on hari-VirtualBox Repository revision: 94179453039a23b7f2aefa990e317f72a3df03d5 Windowing system distributor 'The X.Org Foundation', version 11.0.11903000 System Description: Ubuntu 16.04.3 LTS Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. Error during redisplay: (internal--syntax-propertize 148) signaled (quit) [2 times] Quit Configured using: 'configure --enable-checking=yes,glyphs --enable-check-lisp-object-type --prefix=/home/hari/.install --without-pop 'CFLAGS=-O0 -g3'' Configured features: XPM JPEG TIFF GIF PNG SOUND GSETTINGS NOTIFY GNUTLS FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS GTK2 X11 Important settings: value of $LANG: en_IN value of $XMODIFIERS: @im=ibus locale-coding-system: iso-latin-1-unix Major mode: Haskell Minor modes in effect: shell-dirtrack-mode: t haskell-indentation-mode: t ivy-mode: t electric-pair-mode: t global-company-mode: t company-mode: t show-paren-mode: t override-global-mode: t global-auto-revert-mode: t auto-compile-on-load-mode: t auto-compile-on-save-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny format-spec rfc822 mml mml-sec epa derived epg gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils haskell-doc inf-haskell haskell-decl-scan imenu shell pcomplete haskell haskell-load haskell-commands highlight-uses-mode haskell-modules haskell-sandbox haskell-navigate-imports haskell-repl haskell-collapse hideshow haskell-debug haskell-hoogle haskell-completions haskell-interactive-mode haskell-presentation-mode haskell-compile haskell-process haskell-session url-util json map haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation haskell-string haskell-sort-imports haskell-lexeme haskell-align-imports haskell-compat haskell-complete-module haskell-ghc-support noutline outline flymake-proc flymake warnings dabbrev haskell-customize colir color counsel dired dired-loaddefs compile comint ansi-color esh-util swiper ivy delsel ivy-overlay ffap company-oddmuse company-keywords company-etags etags xref project ring company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-css company-nxml company-bbdb elec-pair company-c-headers rx company pcase highlight-symbol thingatpt paren smex ido two-column edmacro kmacro diminish cl-extra help-mode use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core autorevert filenotify jka-compr auto-compile advice packed finder-inf info package easymenu epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote inotify dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 256157 11502) (symbols 48 32465 1) (miscs 40 56 142) (strings 32 81273 4132) (string-bytes 1 2196417) (vectors 16 31144) (vector-slots 8 748034 12446) (floats 8 246 393) (intervals 56 389 11) (buffers 992 11) (heap 1024 36431 1849)) ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) 2017-12-14 17:05 bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) Hariharan Rangasamy @ 2017-12-14 19:24 ` Noam Postavsky 2017-12-15 2:31 ` Noam Postavsky 0 siblings, 1 reply; 6+ messages in thread From: Noam Postavsky @ 2017-12-14 19:24 UTC (permalink / raw To: Hariharan Rangasamy; +Cc: 29710 On Thu, Dec 14, 2017 at 12:05 PM, Hariharan Rangasamy <hariharanrangasamy@gmail.com> wrote: > Emacs becomes unresponsive when typing {-[]-} when both haskell mode and > electric pair mode are enabled. > > Install haskell mode from https://github.com/haskell/haskell-mode > > * emacs -Q > * enable electric-pair-mode > * enable haskell mode in scratch buffer > * type {--} > * try to input brackets > {-[]-} > > On pressing [ emacs becomes unresponsive, the mouse pointer rotates > continuously. On giving C-g repeatedly, the brackets are inserted and > emacs becomes responsive again. Also when i send SIGUSR2 signal emacs > becomes responsive. > > The bug was posted in > https://www.reddit.com/r/emacs/comments/7jb4qu/bug_with_haskellmode_and_electricpairmode_doesnt/ > In the original post the user mentioned emacs was crashing but i was > able to reproduce the emacs hang only. > > I was able to reproduce this issue easily on two different systems. > Let me know if you are unable to reproduce the issue or if you need > more info. I can reproduce also in 25.3, not in 24.5. Probably same issue as Bug#23443, i.e., electric-pair-mode needs to clear the cache after it finishes messing with the syntax table. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) 2017-12-14 19:24 ` Noam Postavsky @ 2017-12-15 2:31 ` Noam Postavsky 2017-12-15 3:32 ` Hariharan Rangasamy 2017-12-15 8:54 ` Eli Zaretskii 0 siblings, 2 replies; 6+ messages in thread From: Noam Postavsky @ 2017-12-15 2:31 UTC (permalink / raw To: Hariharan Rangasamy; +Cc: 29710, Linus Shoravi [-- Attachment #1: Type: text/plain, Size: 282 bytes --] tags 29710 + patch quit Noam Postavsky <npostavs@users.sourceforge.net> writes: > I can reproduce also in 25.3, not in 24.5. Probably same issue as > Bug#23443, i.e., electric-pair-mode needs to clear the cache after it > finishes messing with the syntax table. Here's a patch: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: patch --] [-- Type: text/x-diff, Size: 3315 bytes --] From 5b3f0dfb1673617e4646be2be0874b168acc46c4 Mon Sep 17 00:00:00 2001 From: Noam Postavsky <npostavs@gmail.com> Date: Thu, 14 Dec 2017 21:25:13 -0500 Subject: [PATCH v1] Don't mess up syntax-ppss cache in electric-pair (Bug#29710) In Emacs 25 and above, calling `scan-sexps', `parse-partial-sexp', or similar may update the syntax-ppss cache if `parse-sexp-lookup-properties' is non-nil. Therefore, when calling any of these functions with a different than normal syntax-table, the cache must be cleaned afterwards. * lisp/elec-pair.el (electric-pair--with-uncached-syntax): New macro. (electric-pair--syntax-ppss, electric-pair--balance-info): Use it. --- lisp/elec-pair.el | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el index 7f523d1df4..bdf4bd14b5 100644 --- a/lisp/elec-pair.el +++ b/lisp/elec-pair.el @@ -24,6 +24,7 @@ ;;; Code: (require 'electric) +(eval-when-compile (require 'cl-lib)) ;;; Electric pairing. @@ -222,6 +223,18 @@ electric-pair--insert (electric-pair-mode nil)) (self-insert-command 1))) +(cl-defmacro electric-pair--with-uncached-syntax ((table &optional start-scan) &rest body) + "Like `with-syntax-table', but flush the syntax-ppss cache after." + ;; See Bug#29710 and Bug#23443. + (declare (debug ((form &optional form) body)) (indent 1)) + (let ((start-scan-var (make-symbol "start-scan"))) + `(let ((syntax-propertize-function nil) + (,start-scan-var ,(or start-scan '(point)))) + (unwind-protect + (with-syntax-table ,table + ,@body) + (syntax-ppss-flush-cache ,start-scan-var))))) + (defun electric-pair--syntax-ppss (&optional pos where) "Like `syntax-ppss', but sometimes fallback to `parse-partial-sexp'. @@ -240,7 +253,8 @@ electric-pair--syntax-ppss (skip-syntax-forward " >!") (point))))) (if s-or-c-start - (with-syntax-table electric-pair-text-syntax-table + (electric-pair--with-uncached-syntax (electric-pair-text-syntax-table + s-or-c-start) (parse-partial-sexp s-or-c-start pos)) ;; HACK! cc-mode apparently has some `syntax-ppss' bugs (if (memq major-mode '(c-mode c++ mode)) @@ -293,7 +307,8 @@ electric-pair--balance-info (cond ((< direction 0) (condition-case nil (eq (char-after pos) - (with-syntax-table table + (electric-pair--with-uncached-syntax + (table) (matching-paren (char-before (scan-sexps (point) 1))))) @@ -323,7 +338,7 @@ electric-pair--balance-info (save-excursion (while (not outermost) (condition-case err - (with-syntax-table table + (electric-pair--with-uncached-syntax (table) (scan-sexps (point) (if (> direction 0) (point-max) (- (point-max)))) -- 2.11.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) 2017-12-15 2:31 ` Noam Postavsky @ 2017-12-15 3:32 ` Hariharan Rangasamy 2017-12-15 8:54 ` Eli Zaretskii 1 sibling, 0 replies; 6+ messages in thread From: Hariharan Rangasamy @ 2017-12-15 3:32 UTC (permalink / raw To: Noam Postavsky; +Cc: 29710, Linus Shoravi Hi Noam, After applying the patch, the issue is fixed. Thanks, Hari On Fri, Dec 15, 2017 at 8:01 AM, Noam Postavsky <npostavs@users.sourceforge.net> wrote: > tags 29710 + patch > quit > > Noam Postavsky <npostavs@users.sourceforge.net> writes: > >> I can reproduce also in 25.3, not in 24.5. Probably same issue as >> Bug#23443, i.e., electric-pair-mode needs to clear the cache after it >> finishes messing with the syntax table. > > Here's a patch: > ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) 2017-12-15 2:31 ` Noam Postavsky 2017-12-15 3:32 ` Hariharan Rangasamy @ 2017-12-15 8:54 ` Eli Zaretskii 2017-12-17 2:05 ` Noam Postavsky 1 sibling, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2017-12-15 8:54 UTC (permalink / raw To: Noam Postavsky; +Cc: hariharanrangasamy, 29710, linusshoravi > From: Noam Postavsky <npostavs@users.sourceforge.net> > Date: Thu, 14 Dec 2017 21:31:20 -0500 > Cc: 29710@debbugs.gnu.org, Linus Shoravi <linusshoravi@gmail.com> > > > I can reproduce also in 25.3, not in 24.5. Probably same issue as > > Bug#23443, i.e., electric-pair-mode needs to clear the cache after it > > finishes messing with the syntax table. > > Here's a patch: Thanks, this is okay for the release branch, but please add some commentary to the new macro explaining why it is needed and when it should be used. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) 2017-12-15 8:54 ` Eli Zaretskii @ 2017-12-17 2:05 ` Noam Postavsky 0 siblings, 0 replies; 6+ messages in thread From: Noam Postavsky @ 2017-12-17 2:05 UTC (permalink / raw To: Eli Zaretskii; +Cc: hariharanrangasamy, 29710, linusshoravi tags 29710 fixed close 29710 26.1 quit Eli Zaretskii <eliz@gnu.org> writes: > Thanks, this is okay for the release branch, but please add some > commentary to the new macro explaining why it is needed and when it > should be used. Done. [1: 89cfdbf729]: 2017-12-16 21:02:38 -0500 Don't mess up syntax-ppss cache in electric-pair (Bug#29710) https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=89cfdbf729bc731331358e0efc69547547aa3ca2 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-12-17 2:05 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-12-14 17:05 bug#29710: Emacs becomes unresponsive when typing brackets (haskell-mode) Hariharan Rangasamy 2017-12-14 19:24 ` Noam Postavsky 2017-12-15 2:31 ` Noam Postavsky 2017-12-15 3:32 ` Hariharan Rangasamy 2017-12-15 8:54 ` Eli Zaretskii 2017-12-17 2:05 ` Noam Postavsky
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.