summaryrefslogtreecommitdiff
path: root/lisp/emulation/pc-select.el
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1997-06-10 19:44:44 +0000
committerKarl Heuer <kwzh@gnu.org>1997-06-10 19:44:44 +0000
commitb50c87ee6edc482eb9c453d2bc3439d74f6008ea (patch)
treef853c97501b0c6f38fa3ed8a3b15cbc58c0fe077 /lisp/emulation/pc-select.el
parent38bd9da2df4b7702bc74a3fbb64a5af8afe98c21 (diff)
downloademacs-b50c87ee6edc482eb9c453d2bc3439d74f6008ea.tar.gz
(pc-select-selection-keys-only): New variable.
(pc-select-meta-moves-sexps): New variable. (exchange-point-and-mark-nomark): New function. (forward-sexp-mark, forward-sexp-nomark): New functions. (backward-sexp-mark, backward-sexp-nomark): New functions. (pc-selection-mode): Doc fix. Bind exchange-point-and-mark-nomark, C-escape. Honor pc-select-meta-moves-sexps, pc-select-selection-keys-only. Unset highlight-nonselected-windows.
Diffstat (limited to 'lisp/emulation/pc-select.el')
-rw-r--r--lisp/emulation/pc-select.el165
1 files changed, 114 insertions, 51 deletions
diff --git a/lisp/emulation/pc-select.el b/lisp/emulation/pc-select.el
index fb001e8295a..e0e6aa2c215 100644
--- a/lisp/emulation/pc-select.el
+++ b/lisp/emulation/pc-select.el
@@ -1,8 +1,8 @@
-;;; pc-select.el --- emulate mark, cut, copy and paste from motif
-;;; (or MAC GUI) or MS-windoze (bah)) look-and-feel
-;;; including key bindings
+;;; pc-select.el --- emulate mark, cut, copy and paste from Motif
+;;; (or MAC GUI or MS-windoze (bah)) look-and-feel
+;;; including key bindings.
-;; Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
;; Author: Michael Staats <michael@thp.Uni-Duisburg.DE>
;; Created: 26 Sep 1995
@@ -57,6 +57,8 @@
;; concerning setting of this-command.
;; Dan Nicolaescu <done@nexus.sorostm.ro> suggested suppressing the
;; scroll-up/scroll-down error.
+;; Eli Barzilay (eli@cs.bgu.ac.il) suggested the sexps functions and
+;; keybindings.
;;
;; Ok, some details about the idea of pc-selection-mode:
;;
@@ -84,6 +86,14 @@ past the top or bottom of the buffer. This is annoying when selecting
text with these commands. If you set this variable to non-nil, these
errors are suppressed.")
+(defvar pc-select-selection-keys-only nil
+ "*Non-nil means only bind the basic selection keys when started.
+Other keys that emulate pc-behavior will be untouched.
+This gives mostly Emacs-like behaviour with only the selection keys enabled.")
+
+(defvar pc-select-meta-moves-sexps nil
+ "*Non-nil means move sexp-wise with Meta key, otherwise move word-wise.")
+
;;;;
;; misc
;;;;
@@ -102,6 +112,11 @@ and transient-mark-mode."
(setq mark-active nil)
(message "Region saved"))
+(defun exchange-point-and-mark-nomark ()
+ (interactive)
+ (exchange-point-and-mark)
+ (setq mark-active nil))
+
;;;;
;; non-interactive
;;;;
@@ -138,6 +153,14 @@ and nil is returned."
(setq this-command 'forward-line)
)
+(defun forward-sexp-mark (&optional arg)
+ "Ensure mark is active; move forward across one balanced expression (sexp).
+With argument, do it that many times. Negative arg -N means
+move backward across N balanced expressions."
+ (interactive "p")
+ (ensure-mark)
+ (forward-sexp arg))
+
(defun forward-paragraph-mark (&optional arg)
"Ensure mark is active; move forward to end of paragraph.
With arg N, do it N times; negative arg -N means move backward N paragraphs.
@@ -263,6 +286,14 @@ and nil is returned."
(setq this-command 'forward-line)
)
+(defun forward-sexp-nomark (&optional arg)
+ "Deactivate mark; move forward across one balanced expression (sexp).
+With argument, do it that many times. Negative arg -N means
+move backward across N balanced expressions."
+ (interactive "p")
+ (setq mark-active nil)
+ (forward-sexp arg))
+
(defun forward-paragraph-nomark (&optional arg)
"Deactivate mark; move forward to end of paragraph.
With arg N, do it N times; negative arg -N means move backward N paragraphs.
@@ -379,6 +410,14 @@ With argument, do this that many times."
(ensure-mark)
(backward-word arg))
+(defun backward-sexp-mark (&optional arg)
+ "Ensure mark is active; move backward across one balanced expression (sexp).
+With argument, do it that many times. Negative arg -N means
+move forward across N balanced expressions."
+ (interactive "p")
+ (ensure-mark)
+ (backward-sexp arg))
+
(defun backward-paragraph-mark (&optional arg)
"Ensure mark is active; move backward to start of paragraph.
With arg N, do it N times; negative arg -N means move forward N paragraphs.
@@ -473,6 +512,14 @@ With argument, do this that many times."
(setq mark-active nil)
(backward-word arg))
+(defun backward-sexp-nomark (&optional arg)
+ "Deactivate mark; move backward across one balanced expression (sexp).
+With argument, do it that many times. Negative arg -N means
+move forward across N balanced expressions."
+ (interactive "p")
+ (setq mark-active nil)
+ (backward-sexp arg))
+
(defun backward-paragraph-nomark (&optional arg)
"Deactivate mark; move backward to start of paragraph.
With arg N, do it N times; negative arg -N means move forward N paragraphs.
@@ -559,6 +606,12 @@ The shift-arrow keys move, leaving the mark behind.
C-LEFT and C-RIGHT move back or forward one word, disabling the mark.
S-C-LEFT and S-C-RIGHT move back or forward one word, leaving the mark behind.
+M-LEFT and M-RIGHT move back or forward one word or sexp, disabling the mark.
+S-M-LEFT and S-M-RIGHT move back or forward one word or sexp, leaving the mark
+behind. To control wether these keys move word-wise or sexp-wise set the
+variable pc-select-meta-moves-sexps after loading pc-select.el but before
+turning pc-selection-mode on.
+
C-DOWN and C-UP move back or forward a paragraph, disabling the mark.
S-C-DOWN and S-C-UP move back or forward a paragraph, leaving the mark behind.
@@ -577,7 +630,9 @@ S-DELETE kills the region (`kill-region').
S-INSERT yanks text from the kill ring (`yank').
C-INSERT copies the region into the kill ring (`copy-region-as-kill').
-In addition, certain other PC bindings are imitated:
+In addition, certain other PC bindings are imitated (to avoid this, set
+the variable pc-select-selection-keys-only to t after loading pc-select.el
+but before calling pc-selection-mode):
F6 other-window
DELETE delete-char
@@ -594,11 +649,11 @@ In addition, certain other PC bindings are imitated:
;; This is to avoid confusion with the delete-selection-mode
;; On simple displays you can't see that a region is active and
- ;; will be deleted on the next keypress. IMHO especially for
- ;; copy-region-as-kill this is confusing
+ ;; will be deleted on the next keypress. IMHO especially for
+ ;; copy-region-as-kill this is confusing.
+ ;; The same goes for exchange-point-and-mark
(define-key global-map "\M-w" 'copy-region-as-kill-nomark)
-
-
+ (define-key global-map "\C-x\C-x" 'exchange-point-and-mark-nomark)
;; The following keybindings are for standard ISO keyboards
;; as they are used with IBM compatible PCs, IBM RS/6000,
;; MACs, many X-Stations and probably more
@@ -606,8 +661,20 @@ In addition, certain other PC bindings are imitated:
(define-key global-map [right] 'forward-char-nomark)
(define-key global-map [C-S-right] 'forward-word-mark)
(define-key global-map [C-right] 'forward-word-nomark)
- (define-key global-map [M-S-right] 'forward-word-mark)
- (define-key global-map [M-right] 'forward-word-nomark)
+ (define-key global-map [S-left] 'backward-char-mark)
+ (define-key global-map [left] 'backward-char-nomark)
+ (define-key global-map [C-S-left] 'backward-word-mark)
+ (define-key global-map [C-left] 'backward-word-nomark)
+ (cond (pc-select-meta-moves-sexps
+ (define-key global-map [M-S-right] 'forward-sexp-mark)
+ (define-key global-map [M-right] 'forward-sexp-nomark)
+ (define-key global-map [M-S-left] 'backward-sexp-mark)
+ (define-key global-map [M-left] 'backward-sexp-nomark))
+ (t
+ (define-key global-map [M-S-right] 'forward-word-mark)
+ (define-key global-map [M-right] 'forward-word-nomark)
+ (define-key global-map [M-S-left] 'backward-word-mark)
+ (define-key global-map [M-left] 'backward-word-nomark)))
(define-key global-map [S-down] 'next-line-mark)
(define-key global-map [down] 'next-line-nomark)
@@ -622,13 +689,6 @@ In addition, certain other PC bindings are imitated:
(define-key global-map [S-next] 'scroll-up-mark)
(define-key global-map [next] 'scroll-up-nomark)
- (define-key global-map [S-left] 'backward-char-mark)
- (define-key global-map [left] 'backward-char-nomark)
- (define-key global-map [C-S-left] 'backward-word-mark)
- (define-key global-map [C-left] 'backward-word-nomark)
- (define-key global-map [M-S-left] 'backward-word-mark)
- (define-key global-map [M-left] 'backward-word-nomark)
-
(define-key global-map [S-up] 'previous-line-mark)
(define-key global-map [up] 'previous-line-nomark)
@@ -639,50 +699,53 @@ In addition, certain other PC bindings are imitated:
(global-set-key [S-M-home] 'beginning-of-buffer-mark)
(global-set-key [M-home] 'beginning-of-buffer-nomark)
- (define-key global-map [S-prior] 'scroll-down-mark)
- (define-key global-map [prior] 'scroll-down-nomark)
-
- (define-key global-map [S-insert] 'yank)
- (define-key global-map [C-insert] 'copy-region-as-kill)
- (define-key global-map [S-delete] 'kill-region)
-
(define-key global-map [M-S-down] 'forward-line-mark)
(define-key global-map [M-down] 'forward-line-nomark)
(define-key global-map [M-S-up] 'backward-line-mark)
(define-key global-map [M-up] 'backward-line-nomark)
- ;; The following bindings are useful on Sun Type 3 keyboards
- ;; They implement the Get-Delete-Put (copy-cut-paste)
- ;; functions from sunview on the L6, L8 and L10 keys
- ;; Sam Steingold <sds@ptc.com> says that f16 is copy and f18 is paste.
- (define-key global-map [f16] 'copy-region-as-kill)
- (define-key global-map [f18] 'yank)
- (define-key global-map [f20] 'kill-region)
-
- ;; The following bindings are from Pete Forman.
- ;; I modified them a little to work together with the
- ;; mark functionality I added.
-
- (global-set-key [f6] 'other-window) ; KNextPane F6
- (global-set-key [delete] 'delete-char) ; KDelete Del
- (global-set-key [C-delete] 'kill-line) ; KEraseEndLine cDel
- (global-set-key [M-backspace] 'undo) ; KUndo aBS
- (global-set-key [C-down] 'forward-paragraph-nomark) ; KNextPara cDn
- (global-set-key [C-up] 'backward-paragraph-nomark) ; KPrevPara cUp
+ (define-key global-map [S-prior] 'scroll-down-mark)
+ (define-key global-map [prior] 'scroll-down-nomark)
+
+ ;; Next four lines are from Pete Forman.
+ (global-set-key [C-down] 'forward-paragraph-nomark) ; KNextPara cDn
+ (global-set-key [C-up] 'backward-paragraph-nomark) ; KPrevPara cUp
(global-set-key [S-C-down] 'forward-paragraph-mark)
(global-set-key [S-C-up] 'backward-paragraph-mark)
- ;; The following bindings are taken from pc-mode.el
- ;; as suggested by RMS.
- ;; I only used the ones that are not covered above.
- (define-key function-key-map [M-delete] [?\M-d])
- (global-set-key [C-M-delete] 'kill-sexp)
- (global-set-key [C-backspace] 'backward-kill-word)
- (global-set-key [C-escape] 'list-buffers)
-
+ (or pc-select-selection-keys-only
+ (progn
+ (define-key global-map [S-insert] 'yank)
+ (define-key global-map [C-insert] 'copy-region-as-kill)
+ (define-key global-map [S-delete] 'kill-region)
+
+ ;; The following bindings are useful on Sun Type 3 keyboards
+ ;; They implement the Get-Delete-Put (copy-cut-paste)
+ ;; functions from sunview on the L6, L8 and L10 keys
+ ;; Sam Steingold <sds@ptc.com> says that f16 is copy and f18 is paste.
+ (define-key global-map [f16] 'copy-region-as-kill)
+ (define-key global-map [f18] 'yank)
+ (define-key global-map [f20] 'kill-region)
+
+ ;; The following bindings are from Pete Forman.
+ (global-set-key [f6] 'other-window) ; KNextPane F6
+ (global-set-key [delete] 'delete-char) ; KDelete Del
+ (global-set-key [C-delete] 'kill-line) ; KEraseEndLine cDel
+ (global-set-key [M-backspace] 'undo) ; KUndo aBS
+
+ ;; The following bindings are taken from pc-mode.el
+ ;; as suggested by RMS.
+ ;; I only used the ones that are not covered above.
+ (define-key function-key-map [M-delete] [?\M-d])
+ (global-set-key [C-M-delete] 'kill-sexp)
+ (global-set-key [C-backspace] 'backward-kill-word)
+ ;; Next line proposed by Eli Barzilay
+ (global-set-key [C-escape] 'electric-buffer-list)))
;;
;; setup
;;
+ ;; Next line proposed by Eli Barzilay
+ (setq highlight-nonselected-windows nil)
(setq transient-mark-mode t)
(setq mark-even-if-inactive t)
(delete-selection-mode 1)