summaryrefslogtreecommitdiff
path: root/lisp/obsolete/crisp.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/obsolete/crisp.el')
-rw-r--r--lisp/obsolete/crisp.el387
1 files changed, 387 insertions, 0 deletions
diff --git a/lisp/obsolete/crisp.el b/lisp/obsolete/crisp.el
new file mode 100644
index 00000000000..47cf898190b
--- /dev/null
+++ b/lisp/obsolete/crisp.el
@@ -0,0 +1,387 @@
+;;; crisp.el --- CRiSP/Brief Emacs emulator
+
+;; Copyright (C) 1997-1999, 2001-2014 Free Software Foundation, Inc.
+
+;; Author: Gary D. Foster <Gary.Foster@Corp.Sun.COM>
+;; Keywords: emulations brief crisp
+;; Obsolete-since: 24.5
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Keybindings and minor functions to duplicate the functionality and
+;; finger-feel of the CRiSP/Brief editor. This package is designed to
+;; facilitate transitioning from Brief to (XE|E)macs with a minimum
+;; amount of hassles.
+
+;; Enable this package by putting (require 'crisp) in your .emacs and
+;; use M-x crisp-mode to toggle it on or off.
+
+;; This package will automatically load the scroll-all.el package if
+;; you put (setq crisp-load-scroll-all t) in your .emacs before
+;; loading this package. If this feature is enabled, it will bind
+;; meta-f1 to the scroll-all mode toggle. The scroll-all package
+;; duplicates the scroll-all feature in CRiSP.
+
+;; Also, the default keybindings for brief/CRiSP override the M-x
+;; key to exit the editor. If you don't like this functionality, you
+;; can prevent this behavior (or redefine it dynamically) by setting
+;; the value of `crisp-override-meta-x' either in your .emacs or
+;; interactively. The default setting is t, which means that M-x will
+;; by default run `save-buffers-kill-emacs' instead of the command
+;; `execute-extended-command'.
+
+;; Finally, if you want to change the string displayed in the mode
+;; line when this mode is in effect, override the definition of
+;; `crisp-mode-mode-line-string' in your .emacs. The default value is
+;; " *Crisp*" which may be a bit lengthy if you have a lot of things
+;; being displayed there.
+
+;; All these overrides should go *before* the (require 'crisp) statement.
+
+;;; Code:
+
+;; local variables
+
+(defgroup crisp nil
+ "Emulator for CRiSP and Brief key bindings."
+ :prefix "crisp-"
+ :group 'emulations)
+
+(defvar crisp-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [(f1)] 'other-window)
+
+ (define-key map [(f2) (down)] 'enlarge-window)
+ (define-key map [(f2) (left)] 'shrink-window-horizontally)
+ (define-key map [(f2) (right)] 'enlarge-window-horizontally)
+ (define-key map [(f2) (up)] 'shrink-window)
+ (define-key map [(f3) (down)] 'split-window-below)
+ (define-key map [(f3) (right)] 'split-window-right)
+
+ (define-key map [(f4)] 'delete-window)
+ (define-key map [(control f4)] 'delete-other-windows)
+
+ (define-key map [(f5)] 'search-forward-regexp)
+ (define-key map [(f19)] 'search-forward-regexp)
+ (define-key map [(meta f5)] 'search-backward-regexp)
+
+ (define-key map [(f6)] 'query-replace)
+
+ (define-key map [(f7)] 'start-kbd-macro)
+ (define-key map [(meta f7)] 'end-kbd-macro)
+
+ (define-key map [(f8)] 'call-last-kbd-macro)
+ (define-key map [(meta f8)] 'save-kbd-macro)
+
+ (define-key map [(f9)] 'find-file)
+ (define-key map [(meta f9)] 'load-library)
+
+ (define-key map [(f10)] 'execute-extended-command)
+ (define-key map [(meta f10)] 'compile)
+
+ (define-key map [(SunF37)] 'kill-buffer)
+ (define-key map [(kp-add)] 'crisp-copy-line)
+ (define-key map [(kp-subtract)] 'crisp-kill-line)
+ ;; just to cover all the bases (GNU Emacs, for instance)
+ (define-key map [(f24)] 'crisp-kill-line)
+ (define-key map [(insert)] 'crisp-yank-clipboard)
+ (define-key map [(f16)] 'crisp-set-clipboard) ; copy on Sun5 kbd
+ (define-key map [(f20)] 'crisp-kill-region) ; cut on Sun5 kbd
+ (define-key map [(f18)] 'crisp-yank-clipboard) ; paste on Sun5 kbd
+
+ (define-key map [(control f)] 'fill-paragraph-or-region)
+ (define-key map [(meta d)] (lambda ()
+ (interactive)
+ (beginning-of-line) (kill-line)))
+ (define-key map [(meta e)] 'find-file)
+ (define-key map [(meta g)] 'goto-line)
+ (define-key map [(meta h)] 'help)
+ (define-key map [(meta i)] 'overwrite-mode)
+ (define-key map [(meta j)] 'bookmark-jump)
+ (define-key map [(meta l)] 'crisp-mark-line)
+ (define-key map [(meta m)] 'set-mark-command)
+ (define-key map [(meta n)] 'bury-buffer)
+ (define-key map [(meta p)] 'crisp-unbury-buffer)
+ (define-key map [(meta u)] 'undo)
+ (define-key map [(f14)] 'undo)
+ (define-key map [(meta w)] 'save-buffer)
+ (define-key map [(meta x)] 'crisp-meta-x-wrapper)
+ (define-key map [(meta ?0)] (lambda ()
+ (interactive)
+ (bookmark-set "0")))
+ (define-key map [(meta ?1)] (lambda ()
+ (interactive)
+ (bookmark-set "1")))
+ (define-key map [(meta ?2)] (lambda ()
+ (interactive)
+ (bookmark-set "2")))
+ (define-key map [(meta ?3)] (lambda ()
+ (interactive)
+ (bookmark-set "3")))
+ (define-key map [(meta ?4)] (lambda ()
+ (interactive)
+ (bookmark-set "4")))
+ (define-key map [(meta ?5)] (lambda ()
+ (interactive)
+ (bookmark-set "5")))
+ (define-key map [(meta ?6)] (lambda ()
+ (interactive)
+ (bookmark-set "6")))
+ (define-key map [(meta ?7)] (lambda ()
+ (interactive)
+ (bookmark-set "7")))
+ (define-key map [(meta ?8)] (lambda ()
+ (interactive)
+ (bookmark-set "8")))
+ (define-key map [(meta ?9)] (lambda ()
+ (interactive)
+ (bookmark-set "9")))
+
+ (define-key map [(shift delete)] 'kill-word)
+ (define-key map [(shift backspace)] 'backward-kill-word)
+ (define-key map [(control left)] 'backward-word)
+ (define-key map [(control right)] 'forward-word)
+
+ (define-key map [(home)] 'crisp-home)
+ (define-key map [(control home)] (lambda ()
+ (interactive)
+ (move-to-window-line 0)))
+ (define-key map [(meta home)] 'beginning-of-line)
+ (define-key map [(end)] 'crisp-end)
+ (define-key map [(control end)] (lambda ()
+ (interactive)
+ (move-to-window-line -1)))
+ (define-key map [(meta end)] 'end-of-line)
+ map)
+ "Local keymap for CRiSP emulation mode.
+All the bindings are done here instead of globally to try and be
+nice to the world.")
+
+(define-obsolete-variable-alias 'crisp-mode-modeline-string
+ 'crisp-mode-mode-line-string "24.3")
+
+(defcustom crisp-mode-mode-line-string " *CRiSP*"
+ "String to display in the mode line when CRiSP emulation mode is enabled."
+ :type 'string
+ :group 'crisp)
+
+;;;###autoload
+(defcustom crisp-mode nil
+ "Track status of CRiSP emulation mode.
+A value of nil means CRiSP mode is not enabled. A value of t
+indicates CRiSP mode is enabled.
+
+Setting this variable directly does not take effect;
+use either M-x customize or the function `crisp-mode'."
+ :set (lambda (symbol value) (crisp-mode (if value 1 0)))
+ :initialize 'custom-initialize-default
+ :require 'crisp
+ :version "20.4"
+ :type 'boolean
+ :group 'crisp)
+
+(defcustom crisp-override-meta-x t
+ "Controls overriding the normal Emacs M-x key binding in the CRiSP emulator.
+Normally the CRiSP emulator rebinds M-x to `save-buffers-exit-emacs', and
+provides the usual M-x functionality on the F10 key. If this variable
+is non-nil, M-x will exit Emacs."
+ :type 'boolean
+ :group 'crisp)
+
+(defcustom crisp-load-scroll-all nil
+ "Controls loading of the Scroll Lock in the CRiSP emulator.
+Its default behavior is to load and enable the Scroll Lock minor mode
+package when enabling the CRiSP emulator.
+
+If this variable is nil when you start the CRiSP emulator, it
+does not load the scroll-all package."
+ :type 'boolean
+ :group 'crisp)
+
+(defcustom crisp-load-hook nil
+ "Hooks to run after loading the CRiSP emulator package."
+ :type 'hook
+ :group 'crisp)
+
+(defcustom crisp-mode-hook nil
+ "Hook run by the function `crisp-mode'."
+ :type 'hook
+ :group 'crisp)
+
+(defconst crisp-version "1.34"
+ "The version of the CRiSP emulator.")
+
+(defconst crisp-mode-help-address "gfoster@suzieq.ml.org"
+ "The email address of the CRiSP mode author/maintainer.")
+
+;; Silence the byte-compiler.
+(defvar crisp-last-last-command nil
+ "The previous value of `last-command'.")
+
+;; The cut and paste routines are different between XEmacs and Emacs
+;; so we need to set up aliases for the functions.
+
+(defalias 'crisp-set-clipboard
+ (if (fboundp 'clipboard-kill-ring-save)
+ 'clipboard-kill-ring-save
+ 'copy-primary-selection))
+
+(defalias 'crisp-kill-region
+ (if (fboundp 'clipboard-kill-region)
+ 'clipboard-kill-region
+ 'kill-primary-selection))
+
+(defalias 'crisp-yank-clipboard
+ (if (fboundp 'clipboard-yank)
+ 'clipboard-yank
+ 'yank-clipboard-selection))
+
+(defun crisp-region-active ()
+ "Compatibility function to test for an active region."
+ (if (featurep 'xemacs)
+ zmacs-region-active-p
+ mark-active))
+
+(defun crisp-version (&optional arg)
+ "Version number of the CRiSP emulator package.
+If ARG, insert results at point."
+ (interactive "P")
+ (let ((foo (concat "CRiSP version " crisp-version)))
+ (if arg
+ (insert (message foo))
+ (message foo))))
+
+(defun crisp-mark-line (arg)
+ "Set mark at the end of the line.
+Arg works as in `end-of-line'."
+ (interactive "p")
+ (let (newmark)
+ (save-excursion
+ (end-of-line arg)
+ (setq newmark (point)))
+ (push-mark newmark nil t)))
+
+(defun crisp-kill-line (arg)
+ "Mark and kill line(s).
+Marks from point to end of the current line (honoring prefix arguments),
+copies the region to the kill ring and clipboard, and then deletes it."
+ (interactive "*p")
+ (if (crisp-region-active)
+ (call-interactively 'crisp-kill-region)
+ (crisp-mark-line arg)
+ (call-interactively 'crisp-kill-region)))
+
+(defun crisp-copy-line (arg)
+ "Mark and copy line(s).
+Marks from point to end of the current line (honoring prefix arguments),
+copies the region to the kill ring and clipboard, and then deactivates
+the region."
+ (interactive "*p")
+ (if (crisp-region-active)
+ (call-interactively 'crisp-set-clipboard)
+ (crisp-mark-line arg)
+ (call-interactively 'crisp-set-clipboard))
+ ;; clear the region after the operation is complete
+ ;; XEmacs does this automagically, Emacs doesn't.
+ (if (boundp 'mark-active)
+ (setq mark-active nil)))
+
+(defun crisp-home ()
+ "\"Home\" the point, the way CRiSP would do it.
+The first use moves point to beginning of the line. Second
+consecutive use moves point to beginning of the screen. Third
+consecutive use moves point to the beginning of the buffer."
+ (interactive nil)
+ (cond
+ ((and (eq last-command 'crisp-home)
+ (eq crisp-last-last-command 'crisp-home))
+ (goto-char (point-min)))
+ ((eq last-command 'crisp-home)
+ (move-to-window-line 0))
+ (t
+ (beginning-of-line)))
+ (setq crisp-last-last-command last-command))
+
+(defun crisp-end ()
+ "\"End\" the point, the way CRiSP would do it.
+The first use moves point to end of the line. Second
+consecutive use moves point to the end of the screen. Third
+consecutive use moves point to the end of the buffer."
+ (interactive nil)
+ (cond
+ ((and (eq last-command 'crisp-end)
+ (eq crisp-last-last-command 'crisp-end))
+ (goto-char (point-max)))
+ ((eq last-command 'crisp-end)
+ (move-to-window-line -1)
+ (end-of-line))
+ (t
+ (end-of-line)))
+ (setq crisp-last-last-command last-command))
+
+(defun crisp-unbury-buffer ()
+ "Go back one buffer."
+ (interactive)
+ (switch-to-buffer (car (last (buffer-list)))))
+
+(defun crisp-meta-x-wrapper ()
+ "Wrapper function to conditionally override the normal M-x bindings.
+When `crisp-override-meta-x' is non-nil, M-x will exit Emacs (the
+normal CRiSP binding) and when it is nil M-x will run
+`execute-extended-command' (the normal Emacs binding)."
+ (interactive)
+ (if crisp-override-meta-x
+ (save-buffers-kill-emacs)
+ (call-interactively 'execute-extended-command)))
+
+;;;###autoload
+(define-minor-mode crisp-mode
+ "Toggle CRiSP/Brief emulation (CRiSP mode).
+With a prefix argument ARG, enable CRiSP mode if ARG is positive,
+and disable it otherwise. If called from Lisp, enable the mode
+if ARG is omitted or nil."
+ :keymap crisp-mode-map
+ :lighter crisp-mode-mode-line-string
+ (when crisp-mode
+ ;; Make menu entries show M-u or f14 in preference to C-x u.
+ (put 'undo :advertised-binding
+ `([?\M-u] [f14] ,@(get 'undo :advertised-binding)))
+ ;; Force transient-mark-mode, so that the marking routines work as
+ ;; expected. If the user turns off transient mark mode, most
+ ;; things will still work fine except the crisp-(copy|kill)
+ ;; functions won't work quite as nicely when regions are marked
+ ;; differently and could really confuse people. Caveat emptor.
+ (if (fboundp 'transient-mark-mode)
+ (transient-mark-mode t))
+ (if crisp-load-scroll-all
+ (require 'scroll-all))
+ (if (featurep 'scroll-all)
+ (define-key crisp-mode-map [(meta f1)] 'scroll-all-mode))))
+
+;; People might use Apropos on `brief'.
+;;;###autoload
+(defalias 'brief-mode 'crisp-mode)
+
+;; Interaction with other packages.
+(put 'crisp-home 'CUA 'move)
+(put 'crisp-end 'CUA 'move)
+
+(run-hooks 'crisp-load-hook)
+(provide 'crisp)
+
+;;; crisp.el ends here