diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/subr.el | 51 |
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 @@ | |||
| 1 | 2014-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 | |||
| 1 | 2014-04-02 Richard Stallman <rms@gnu.org> | 7 | 2014-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 | ||