diff options
| author | Stefan Monnier | 2020-03-03 11:34:49 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2020-03-03 11:34:49 -0500 |
| commit | 620f672518b1c009a028ebdb0fd1d4a0aabfa1d0 (patch) | |
| tree | 1b2c9e878b5b0365bbf94f9c23aeb52d7bda002a | |
| parent | 0f94f698aa7ade7bad73ccae95dee69175460504 (diff) | |
| download | emacs-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.el | 31 |
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\ | ||
| 259 | mouse-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. |
| 237 | Commands: | 264 | Commands: |
| 238 | Delete converts tabs to spaces as it moves back. | 265 | Delete 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) |