aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/subr.el51
2 files changed, 32 insertions, 25 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f754e5e852b..6c457ba6282 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12014-04-03 Daniel Colascione <dancol@dancol.org>
2
3 * subr.el (set-transient-map): Remove rms's workaround entirely;
4 use new `suspicious-object' subr to mark our lambda for closer
5 scrutiny during gc.
6
12014-04-02 Richard Stallman <rms@gnu.org> 72014-04-02 Richard Stallman <rms@gnu.org>
2 8
3 * subr.el (set-transient-map): Comment out previous change. 9 * subr.el (set-transient-map): Comment out previous change.
diff --git a/lisp/subr.el b/lisp/subr.el
index 79d90862ed5..5de69d92e33 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -4292,33 +4292,34 @@ lookup sequence then continues."
4292 ;; Don't use letrec, because equal (in add/remove-hook) would get trapped 4292 ;; Don't use letrec, because equal (in add/remove-hook) would get trapped
4293 ;; in a cycle. 4293 ;; in a cycle.
4294 (fset clearfun 4294 (fset clearfun
4295 (lambda () 4295 (suspicious-object
4296 (with-demoted-errors "set-transient-map PCH: %S" 4296 (lambda ()
4297 (unless (cond 4297 (with-demoted-errors "set-transient-map PCH: %S"
4298 ((not (eq map (cadr overriding-terminal-local-map))) 4298 (unless (cond
4299 ;; There's presumably some other transient-map in 4299 ((not (eq map (cadr overriding-terminal-local-map)))
4300 ;; effect. Wait for that one to terminate before we 4300 ;; There's presumably some other transient-map in
4301 ;; remove ourselves. 4301 ;; effect. Wait for that one to terminate before we
4302 ;; For example, if isearch and C-u both use transient 4302 ;; remove ourselves.
4303 ;; maps, then the lifetime of the C-u should be nested 4303 ;; For example, if isearch and C-u both use transient
4304 ;; within isearch's, so the pre-command-hook of 4304 ;; maps, then the lifetime of the C-u should be nested
4305 ;; isearch should be suspended during the C-u one so 4305 ;; within isearch's, so the pre-command-hook of
4306 ;; we don't exit isearch just because we hit 1 after 4306 ;; isearch should be suspended during the C-u one so
4307 ;; C-u and that 1 exits isearch whereas it doesn't 4307 ;; we don't exit isearch just because we hit 1 after
4308 ;; exit C-u. 4308 ;; C-u and that 1 exits isearch whereas it doesn't
4309 t) 4309 ;; exit C-u.
4310 ((null keep-pred) nil) 4310 t)
4311 ((eq t keep-pred) 4311 ((null keep-pred) nil)
4312 (eq this-command 4312 ((eq t keep-pred)
4313 (lookup-key map (this-command-keys-vector)))) 4313 (eq this-command
4314 (t (funcall keep-pred))) 4314 (lookup-key map (this-command-keys-vector))))
4315 (internal-pop-keymap map 'overriding-terminal-local-map) 4315 (t (funcall keep-pred)))
4316 (remove-hook 'pre-command-hook clearfun) 4316 (internal-pop-keymap map 'overriding-terminal-local-map)
4317 (when on-exit (funcall on-exit)) 4317 (remove-hook 'pre-command-hook clearfun)
4318;; Comment out the fset if you want to debug the GC bug. 4318 (when on-exit (funcall on-exit))
4319 ;; Comment out the fset if you want to debug the GC bug.
4319;;; (fset clearfun nil) 4320;;; (fset clearfun nil)
4320;;; (set clearfun nil) 4321;;; (set clearfun nil)
4321 )))) 4322 )))))
4322 (add-hook 'pre-command-hook clearfun) 4323 (add-hook 'pre-command-hook clearfun)
4323 (internal-push-keymap map 'overriding-terminal-local-map))) 4324 (internal-push-keymap map 'overriding-terminal-local-map)))
4324 4325