;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands.
;; Copyright (C) 1985, 1996, 1997 Free Software Foundation, Inc.
-;; Copyright (C) 1995 Tinker Systems
+;; Copyright (C) 1995 Tinker Systems.
;; Maintainer: FSF
;; Keywords: lisp, languages, dumped
;; The base major mode for editing Lisp code (used also for Emacs Lisp).
;; This mode is documented in the Emacs manual
-;; July/05/97 slb Converted to use easymenu.
-
;;; Code:
(defgroup lisp nil
(defvar lisp-mode-abbrev-table nil)
;; XEmacs change
-(defvar lisp-interaction-mode-popup-menu nil)
-(defvar lisp-interaction-mode-popup-menu-1
+(defvar lisp-interaction-mode-popup-menu
(purecopy '("Lisp-Interaction"
- ["Evaluate Last S-expression" eval-last-sexp]
- ["Evaluate Entire Buffer" eval-current-buffer]
- ["Evaluate Region" eval-region
+ ["Evaluate Last %_S-expression" eval-last-sexp]
+ ["Evaluate %_Whole Buffer" eval-current-buffer]
+ ["Evaluate Re%_gion" eval-region
:active (region-exists-p)]
"---"
- ["Evaluate This Defun" eval-defun]
- ;; FSF says "Instrument Function for Debugging"
- ["Debug This Defun" edebug-defun]
+ ["%_Evaluate This Defun" eval-defun]
+ ["%_Instrument This Defun for Debugging" edebug-defun]
"---"
- ["Trace a Function" trace-function-background]
- ["Untrace All Functions" untrace-all
+ ["Find %_Function Source..." find-function
+ :active (fboundp 'find-function)]
+ ["Find %_Variable Source..." find-variable
+ :active (fboundp 'find-variable)]
+ ["%_Trace Function..." trace-function-background]
+ ["%_Untrace All Functions" untrace-all
:active (fboundp 'untrace-all)]
"---"
- ["Comment Out Region" comment-region
- :active (region-exists-p)]
- ["Indent Region" indent-region
+ ["%_Comment Out Region" comment-region
:active (region-exists-p)]
- ["Indent Line" lisp-indent-line]
"---"
- ["Debug On Error" (setq debug-on-error (not debug-on-error))
- :style toggle :selected debug-on-error]
- ["Debug On Quit" (setq debug-on-quit (not debug-on-quit))
- :style toggle :selected debug-on-quit]
- ["Debug on Signal" (setq debug-on-signal (not debug-on-signal))
- :style toggle :selected debug-on-signal]
+ ["Indent %_Line or Region"
+ (if (region-exists-p)
+ (call-interactively 'indent-region)
+ (call-interactively 'lisp-indent-line))]
+ ["Indent B%_alanced Expression" indent-sexp]
+ ["Indent %_Defun"
+ (progn
+ (beginning-of-defun)
+ (indent-sexp))]
+ "---"
+ "Look for debug-on-error under Options->General"
)))
-(defvar emacs-lisp-mode-popup-menu nil)
-(defvar emacs-lisp-mode-popup-menu-1
+(defvar emacs-lisp-mode-popup-menu
(purecopy
(nconc
'("Emacs-Lisp"
- ["Byte-compile This File" emacs-lisp-byte-compile]
- ["Byte-compile/load This" emacs-lisp-byte-compile-and-load]
- ["Byte-recompile Directory..." byte-recompile-directory]
+ ["%_Byte-Compile This File" emacs-lisp-byte-compile]
+ ["B%_yte-Compile/Load This File" emacs-lisp-byte-compile-and-load]
+ ["Byte-%_Recompile Directory..." byte-recompile-directory]
"---")
- (cdr lisp-interaction-mode-popup-menu-1))))
+ (cdr lisp-interaction-mode-popup-menu))))
;Don't have a menubar entry in Lisp Interaction mode. Otherwise, the
;*scratch* buffer has a Lisp menubar item! Very confusing.
-;(defvar lisp-interaction-mode-menubar-menu
-; (purecopy (cons "Lisp" (cdr lisp-interaction-mode-popup-menu))))
+;Jan Vroonhof really wants this, so it's back. --ben
+(defvar lisp-interaction-mode-menubar-menu
+ (purecopy (cons "%_Lisp" (cdr lisp-interaction-mode-popup-menu))))
-(defvar emacs-lisp-mode-menubar-menu nil)
-(defvar emacs-lisp-mode-menubar-menu-1
- (purecopy (cons "Lisp" (cdr emacs-lisp-mode-popup-menu-1))))
+(defvar emacs-lisp-mode-menubar-menu
+ (purecopy (cons "%_Lisp" (cdr emacs-lisp-mode-popup-menu))))
(if (not emacs-lisp-mode-syntax-table)
(let ((i 0))
(set-syntax-table emacs-lisp-mode-syntax-table)
;; XEmacs changes
(setq major-mode 'emacs-lisp-mode
- ;; mode-popup-menu emacs-lisp-mode-popup-menu
+ mode-popup-menu emacs-lisp-mode-popup-menu
mode-name "Emacs-Lisp")
- ;; (if (and (featurep 'menubar)
- ;; current-menubar)
- ;; (progn
+ (if (and (featurep 'menubar)
+ current-menubar)
+ (progn
;; make a local copy of the menubar, so our modes don't
;; change the global menubar
- ;; (set-buffer-menubar current-menubar)
- ;; (add-submenu nil emacs-lisp-mode-menubar-menu)))
- (unless emacs-lisp-mode-popup-menu
- (easy-menu-define emacs-lisp-mode-popup-menu emacs-lisp-mode-map ""
- emacs-lisp-mode-popup-menu-1))
- (easy-menu-add emacs-lisp-mode-popup-menu)
+ (set-buffer-menubar current-menubar)
+ (add-submenu nil emacs-lisp-mode-menubar-menu)))
(lisp-mode-variables nil)
(run-hooks 'emacs-lisp-mode-hook))
+(put 'emacs-lisp-mode 'font-lock-lisp-like t)
+
(defvar lisp-mode-map ()
"Keymap for ordinary Lisp mode.
All commands in `shared-lisp-mode-map' are inherited by this map.")
(use-local-map lisp-interaction-mode-map)
(setq major-mode 'lisp-interaction-mode)
(setq mode-name "Lisp Interaction")
- ;; XEmacs change
- ;; (setq mode-popup-menu lisp-interaction-mode-popup-menu)
- (unless lisp-interaction-mode-popup-menu
- (easy-menu-define lisp-interaction-mode-popup-menu
- lisp-interaction-mode-map
- ""
- lisp-interaction-mode-popup-menu-1))
- (easy-menu-add lisp-interaction-mode-popup-menu)
-
+ (setq mode-popup-menu lisp-interaction-mode-popup-menu)
+ (if (and (featurep 'menubar)
+ current-menubar)
+ (progn
+ ;; make a local copy of the menubar, so our modes don't
+ ;; change the global menubar
+ (set-buffer-menubar current-menubar)
+ (add-submenu nil lisp-interaction-mode-menubar-menu)))
(set-syntax-table emacs-lisp-mode-syntax-table)
(lisp-mode-variables nil)
(run-hooks 'lisp-interaction-mode-hook))
(put 'let 'lisp-indent-function 1)
(put 'let* 'lisp-indent-function 1)
(put 'let-specifier 'lisp-indent-function 1)
+(put 'flet 'lisp-indent-function 1)
(put 'while 'lisp-indent-function 1)
(put 'if 'lisp-indent-function 2)
(put 'catch 'lisp-indent-function 1)
(put 'unwind-protect 'lisp-indent-function 1)
(put 'save-current-buffer 'lisp-indent-function 0)
(put 'with-current-buffer 'lisp-indent-function 1)
+(put 'with-string-as-buffer-contents 'lisp-indent-function 1)
(put 'with-temp-file 'lisp-indent-function 1)
(put 'with-temp-buffer 'lisp-indent-function 0)
(put 'with-output-to-string 'lisp-indent-function 0)