aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2020-03-03 11:34:49 -0500
committerStefan Monnier2020-03-03 11:34:49 -0500
commit620f672518b1c009a028ebdb0fd1d4a0aabfa1d0 (patch)
tree1b2c9e878b5b0365bbf94f9c23aeb52d7bda002a
parent0f94f698aa7ade7bad73ccae95dee69175460504 (diff)
downloademacs-620f672518b1c009a028ebdb0fd1d4a0aabfa1d0.tar.gz
emacs-620f672518b1c009a028ebdb0fd1d4a0aabfa1d0.zip
* lisp/progmodes/elisp-mode.el (elisp-enable-lexical-binding): New command
(emacs-lisp-mode): Indicate lex/dyn binding mode in the mode line. (elisp--dynlex-modeline-map): New var.
-rw-r--r--lisp/progmodes/elisp-mode.el31
1 files changed, 29 insertions, 2 deletions
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 813b628bc35..20ec370dcb6 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -231,8 +231,35 @@ Comments in the form will be lost."
231 (setq-local electric-pair-text-pairs elisp-pairs))))) 231 (setq-local electric-pair-text-pairs elisp-pairs)))))
232 (remove-hook 'electric-pair-mode-hook #'emacs-lisp-set-electric-text-pairs)) 232 (remove-hook 'electric-pair-mode-hook #'emacs-lisp-set-electric-text-pairs))
233 233
234(defun elisp-enable-lexical-binding (&optional interactive)
235 "Make the current buffer use `lexical-binding'."
236 (interactive "p")
237 (if lexical-binding
238 (when interactive
239 (message "lexical-binding already enabled!")
240 (ding))
241 (when (or (not interactive)
242 (y-or-n-p (format "Enable lexical-binding in this %s? "
243 (if buffer-file-name "file" "buffer"))))
244 (setq-local lexical-binding t)
245 (add-file-local-variable-prop-line 'lexical-binding t interactive))))
246
247(defvar elisp--dynlex-modeline-map
248 (let ((map (make-sparse-keymap)))
249 (define-key map [mode-line mouse-1] 'elisp-enable-lexical-binding)
250 map))
251
234;;;###autoload 252;;;###autoload
235(define-derived-mode emacs-lisp-mode prog-mode "Emacs-Lisp" 253(define-derived-mode emacs-lisp-mode prog-mode
254 `("ELisp"
255 (lexical-binding (:propertize "/l"
256 help-echo "Using lexical-binding mode")
257 (:propertize "/d"
258 help-echo "Using old dynamic scoping mode\n\
259mouse-1: Enable lexical-binding mode"
260 face warning
261 mouse-face mode-line-highlight
262 local-map ,elisp--dynlex-modeline-map)))
236 "Major mode for editing Lisp code to run in Emacs. 263 "Major mode for editing Lisp code to run in Emacs.
237Commands: 264Commands:
238Delete converts tabs to spaces as it moves back. 265Delete converts tabs to spaces as it moves back.
@@ -245,7 +272,7 @@ Blank lines separate paragraphs. Semicolons start comments.
245 (add-hook 'after-load-functions #'elisp--font-lock-flush-elisp-buffers) 272 (add-hook 'after-load-functions #'elisp--font-lock-flush-elisp-buffers)
246 (if (boundp 'electric-pair-text-pairs) 273 (if (boundp 'electric-pair-text-pairs)
247 (setq-local electric-pair-text-pairs 274 (setq-local electric-pair-text-pairs
248 (append '((?\` . ?\') (?‘ . ?’)) 275 (append '((?\` . ?\') (?\‘ . ?\’))
249 electric-pair-text-pairs)) 276 electric-pair-text-pairs))
250 (add-hook 'electric-pair-mode-hook #'emacs-lisp-set-electric-text-pairs)) 277 (add-hook 'electric-pair-mode-hook #'emacs-lisp-set-electric-text-pairs))
251 (setq-local electric-quote-string t) 278 (setq-local electric-quote-string t)