Merge from emacs-23
[bpt/emacs.git] / lisp / emulation / viper-init.el
index c91886e..f18cd55 100644 (file)
@@ -1,16 +1,17 @@
 ;;; viper-init.el --- some common definitions for Viper
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
+;; Package: viper
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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, or (at your option)
-;; any later version.
+;; 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
@@ -18,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -37,7 +36,6 @@
 (defvar default-input-method)
 (defvar describe-current-input-method-function)
 (defvar bar-cursor)
-(defvar default-cursor-type)
 (defvar cursor-type)
 ;; end pacifier
 
 
 ;; Tell whether we are running as a window application or on a TTY
 
-;; This is used to avoid compilation warnings. When emacs/xemacs forms can
-;; generate compile time warnings, we use this macro.
-;; In this case, the macro will expand into the form that is appropriate to the
-;; compiler at hand.
-;; Suggested by rms.
-(defmacro viper-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form)
-  (if (featurep 'xemacs)
-      xemacs-form emacs-form))
-
-
 (defsubst viper-device-type ()
-  (viper-cond-compile-for-xemacs-or-emacs
-   (device-type (selected-device))
-   window-system
-   ))
+  (if (featurep 'xemacs)
+      (device-type (selected-device))
+    window-system))
 
 (defun viper-color-display-p ()
   (condition-case nil
-      (viper-cond-compile-for-xemacs-or-emacs
-       (eq (device-class (selected-device)) 'color) ; xemacs form
-       (if (fboundp 'display-color-p) ; emacs form
-          (display-color-p)
-        (x-display-color-p))
-       )
+      (if (featurep 'xemacs)
+          (eq (device-class (selected-device)) 'color)
+        (display-color-p))
     (error nil)))
 
 ;; in XEmacs: device-type is tty on tty and stream in batch.
 (defun viper-window-display-p ()
   (and (viper-device-type) (not (memq (viper-device-type) '(tty stream pc)))))
 
-(defcustom viper-ms-style-os-p (memq system-type
-                                    '(ms-dos windows-nt windows-95))
-  "Tells if Emacs is running under an MS-style OS: ms-dos, windows-nt, W95."
+(defcustom viper-ms-style-os-p
+  (memq system-type (if (featurep 'emacs) '(ms-dos windows-nt)
+                     '(ms-dos windows-nt windows-95)))
+  "Non-nil if Emacs is running under an MS-style OS: MS-DOS, or MS-Windows."
   :type 'boolean
   :tag "Is it Microsoft-made OS?"
   :group 'viper-misc)
-(defcustom viper-vms-os-p (memq system-type '(vax-vms axp-vms))
-  "Tells if Emacs is running under VMS."
-  :type 'boolean
-  :tag "Is it VMS?"
-  :group 'viper-misc)
 
 (defcustom viper-suppress-input-method-change-message nil
   "If t, the message notifying about changes in the input method is not displayed.
@@ -353,7 +333,7 @@ Use `M-x viper-set-expert-level' to change this.")
   (cond ((and (featurep 'emacs) (fboundp 'inactivate-input-method))
         (inactivate-input-method))
        ((and (featurep 'xemacs) (boundp 'current-input-method))
-        ;; XEmacs had broken quil-mode for some time, so we are working around
+        ;; XEmacs had broken quail-mode for some time, so we are working around
         ;; it here
         (setq quail-mode nil)
         (if (featurep 'quail)
@@ -444,11 +424,14 @@ delete the text being replaced, as in standard Vi."
 ;; internal var, used to remember the default cursor color of emacs frames
 (defvar viper-vi-state-cursor-color nil)
 
-(if (fboundp 'make-variable-frame-local)
-    (dolist (v '(viper-replace-overlay-cursor-color
-                 viper-insert-state-cursor-color viper-emacs-state-cursor-color
-                 viper-vi-state-cursor-color))
-      (make-variable-frame-local v)))
+;; Frame-local variables are obsolete from Emacs 22.2 onwards, so we
+;; do it by hand with viper-frame-value (qv).
+(when (and (featurep 'xemacs)
+           (fboundp 'make-variable-frame-local))
+  (make-variable-frame-local 'viper-replace-overlay-cursor-color)
+  (make-variable-frame-local 'viper-insert-state-cursor-color)
+  (make-variable-frame-local 'viper-emacs-state-cursor-color)
+  (make-variable-frame-local 'viper-vi-state-cursor-color))
 
 (viper-deflocalvar viper-replace-overlay nil "")
 (put 'viper-replace-overlay 'permanent-local t)
@@ -480,19 +463,13 @@ color displays.  By default, the delimiters are used only on TTYs."
   :group 'viper)
 
 ;; XEmacs requires glyphs
-(viper-cond-compile-for-xemacs-or-emacs
- (progn ; xemacs
-   (or (glyphp viper-replace-region-end-delimiter)
-       (setq viper-replace-region-end-delimiter
-            (make-glyph viper-replace-region-end-delimiter)))
-   (or (glyphp viper-replace-region-start-delimiter)
-       (setq viper-replace-region-start-delimiter
-            (make-glyph viper-replace-region-start-delimiter)))
-   )
-  nil ; emacs
- )
-
-
+(when (featurep 'xemacs)
+  (or (glyphp viper-replace-region-end-delimiter)
+      (setq viper-replace-region-end-delimiter
+            (make-glyph viper-replace-region-end-delimiter)))
+  (or (glyphp viper-replace-region-start-delimiter)
+      (setq viper-replace-region-start-delimiter
+            (make-glyph viper-replace-region-start-delimiter))))
 
 ;; These are local marker that must be initialized to nil and moved with
 ;; `viper-move-marker-locally'
@@ -549,27 +526,10 @@ will make it hard to use Vi-style timeout macros."
   :type 'integer
   :group 'viper-misc)
 
-(defcustom viper-ESC-keyseq-timeout (if (viper-window-display-p)
-                                     0 viper-fast-keyseq-timeout)
-  "*Key sequence beginning with ESC and separated by no more than this many milliseconds is considered to be generated by a keyboard function key.
-Setting this too high may slow down switching from insert to vi state.  Setting
-this value too low will make it impossible to use function keys in insert mode
-on a dumb terminal."
-  :type 'integer
-  :group 'viper-misc)
-
-(defcustom viper-translate-all-ESC-keysequences (not (viper-window-display-p))
-  "Allow translation of all key sequences into commands.
-Normally, Viper lets Emacs translate only those ESC key sequences that are
-defined in the low-level key-translation-map or function-key-map, such as those
-emitted by the arrow and function keys. Other sequences, e.g., \\e/, are
-treated as ESC command followed by a `/'. This is done for people who type fast
-and tend to hit other characters right after they hit ESC. Other people like
-Emacs to translate ESC sequences all the time.
-The default is to translate all sequences only when using a dumb terminal.
-This permits you to use ESC as a meta key in insert mode."
-  :type 'boolean
-  :group 'viper-misc)
+;; This function determines if ESC key sequences are to be translated into
+;; commands.
+(defun viper-translate-all-ESC-keysequences ()
+  (not (viper-window-display-p)))
 
 ;; Modes and related variables
 
@@ -782,7 +742,7 @@ If nil, the cursor will move backwards without deleting anything."
   :type '(choice (const nil) character)
   :group 'viper-search)
 
-(defcustom viper-search-wrap-around-t t
+(defcustom viper-search-wrap-around t
   "*If t, search wraps around."
   :type 'boolean
   :tag "Search Wraps Around"
@@ -825,7 +785,7 @@ Related buffers can be cycled through via :R and :P commands."
 
 ;; These two vars control the interaction of jumps performed by ' and `.
 ;; In this new version, '' doesn't erase the marks set by ``, so one can
-;; use both kinds of jumps interchangeably and without loosing positions
+;; use both kinds of jumps interchangeably and without losing positions
 ;; inside the lines.
 
 ;; Remembers position of the last jump done using ``'.
@@ -1012,7 +972,7 @@ Should be set in `~/.viper' file."
   (condition-case nil
       (if (featurep 'xemacs)
          (set (make-local-variable 'bar-cursor) nil)
-       (setq cursor-type default-cursor-type))
+       (setq cursor-type (default-value 'cursor-type)))
     (error nil)))
 
 (defun viper-set-insert-cursor-type ()
@@ -1020,6 +980,15 @@ Should be set in `~/.viper' file."
       (set (make-local-variable 'bar-cursor) 2)
     (setq cursor-type '(bar . 2))))
 
+(defun viper-ESC-keyseq-timeout ()
+  "*Key sequence beginning with ESC and separated by no more than this many milliseconds is considered to be generated by a keyboard function key.
+Setting this too high may slow down switching from insert to vi state.  Setting
+this value too low will make it impossible to use function keys in insert mode
+on a dumb terminal."
+  (if (viper-window-display-p)
+      0 viper-fast-keyseq-timeout))
+
+
 
 (provide 'viper-init)
 
@@ -1028,5 +997,4 @@ Should be set in `~/.viper' file."
 ;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
 ;; End:
 
-;; arch-tag: 4efa2416-1fcb-4690-be10-1a2a0248d250
 ;;; viper-init.el ends here