Mercurial > emacs
comparison lisp/simple.el @ 89943:4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-218
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-220
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-221
Restore deleted tagline in etc/TUTORIAL.ru
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-222
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-228
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-229
Remove TeX output files from the archive
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-230
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-247
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-248
src/lisp.h (CYCLE_CHECK): Macro moved from xfaces.c
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-249
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-256
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-258
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-263
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-264
Update from CVS: lispref/display.texi: emacs -> Emacs.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-265
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-274
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-275
Update from CVS: man/makefile.w32-in: Revert last change
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-276
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-295
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296
Allow restarting an existing debugger session that's exited
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-297
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-299
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-300
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-327
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-328
Update from CVS: src/.gdbinit (xsymbol): Fix last change.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-329
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-344
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-345
Tweak source regexps so that building in place won't cause problems
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-346
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-351
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-352
Update from CVS: lisp/flymake.el: New file.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-353
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-361
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-362
Support " [...]" style defaults in minibuffer-electric-default-mode
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-363
(read-number): Use canonical format for default in prompt.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-364
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-367
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-368
Improve display-supports-face-attributes-p on non-ttys
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369
Rewrite face-differs-from-default-p
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-370
Move `display-supports-face-attributes-p' entirely into C code
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-371
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Simplify face-differs-from-default-p; don't consider :stipple.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-373
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-374
(tty_supports_face_attributes_p): Ensure attributes differ from default
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-375
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377
(Fdisplay_supports_face_attributes_p): Work around bootstrapping problem
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381
Face merging cleanups
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-382
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-384
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-385
src/xfaces.c (push_named_merge_point): Return 0 if a cycle is detected
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-386
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-395
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396
Tweak arch tagging to make build/install-in-place less annoying
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-397
Work around vc-arch problems when building eshell
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398
Tweak permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399
Tweak directory permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401
More build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403
Yet more build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-409
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-410
Make sure image types are initialized for lookup too
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-411
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-416
Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Mon, 28 Jun 2004 07:56:49 +0000 |
parents | 68c22ea6027c a72ee0aaa7f9 |
children | 029a652ac817 |
comparison
equal
deleted
inserted
replaced
89942:9cb747ae49af | 89943:4c90ffeb71c5 |
---|---|
1 ;;; simple.el --- basic editing commands for Emacs | 1 ;;; simple.el --- basic editing commands for Emacs |
2 | 2 |
3 ;; Copyright (C) 1985, 86, 87, 93, 94, 95, 96, 97, 98, 99, | 3 ;; Copyright (C) 1985, 86, 87, 93, 94, 95, 96, 97, 98, 99, |
4 ;; 2000, 2001, 2002, 2003 | 4 ;; 2000, 01, 02, 03, 04 |
5 ;; Free Software Foundation, Inc. | 5 ;; Free Software Foundation, Inc. |
6 | 6 |
7 ;; Maintainer: FSF | 7 ;; Maintainer: FSF |
8 ;; Keywords: internal | 8 ;; Keywords: internal |
9 | 9 |
35 (autoload 'widget-convert "wid-edit") | 35 (autoload 'widget-convert "wid-edit") |
36 (autoload 'shell-mode "shell")) | 36 (autoload 'shell-mode "shell")) |
37 | 37 |
38 | 38 |
39 (defgroup killing nil | 39 (defgroup killing nil |
40 "Killing and yanking commands" | 40 "Killing and yanking commands." |
41 :group 'editing) | 41 :group 'editing) |
42 | 42 |
43 (defgroup paren-matching nil | 43 (defgroup paren-matching nil |
44 "Highlight (un)matching of parens and expressions." | 44 "Highlight (un)matching of parens and expressions." |
45 :group 'matching) | 45 :group 'matching) |
63 (if (and (not (get-buffer-window buffer)) | 63 (if (and (not (get-buffer-window buffer)) |
64 (not (string-match "\\` " (buffer-name buffer)))) | 64 (not (string-match "\\` " (buffer-name buffer)))) |
65 (setq found buffer))) | 65 (setq found buffer))) |
66 (setq list (cdr list))) | 66 (setq list (cdr list))) |
67 (switch-to-buffer found))) | 67 (switch-to-buffer found))) |
68 | |
69 ;;; next-error support framework | |
70 (defvar next-error-last-buffer nil | |
71 "The most recent next-error buffer. | |
72 A buffer becomes most recent when its compilation, grep, or | |
73 similar mode is started, or when it is used with \\[next-error] | |
74 or \\[compile-goto-error].") | |
75 | |
76 (defvar next-error-function nil | |
77 "Function to use to find the next error in the current buffer. | |
78 The function is called with 2 parameters: | |
79 ARG is an integer specifying by how many errors to move. | |
80 RESET is a boolean which, if non-nil, says to go back to the beginning | |
81 of the errors before moving. | |
82 Major modes providing compile-like functionality should set this variable | |
83 to indicate to `next-error' that this is a candidate buffer and how | |
84 to navigate in it.") | |
85 | |
86 (make-variable-buffer-local 'next-error-function) | |
87 | |
88 (defsubst next-error-buffer-p (buffer &optional extra-test) | |
89 "Test if BUFFER is a next-error capable buffer." | |
90 (with-current-buffer buffer | |
91 (or (and extra-test (funcall extra-test)) | |
92 next-error-function))) | |
93 | |
94 ;; Return a next-error capable buffer according to the following rules: | |
95 ;; 1. If the current buffer is a next-error capable buffer, return it. | |
96 ;; 2. If one window on the selected frame displays such buffer, return it. | |
97 ;; 3. If next-error-last-buffer is set to a live buffer, use that. | |
98 ;; 4. Otherwise, look for a next-error capable buffer in a buffer list. | |
99 ;; 5. Signal an error if there are none. | |
100 (defun next-error-find-buffer (&optional other-buffer extra-test) | |
101 (if (and (not other-buffer) | |
102 (next-error-buffer-p (current-buffer) extra-test)) | |
103 ;; The current buffer is a next-error capable buffer. | |
104 (current-buffer) | |
105 (or | |
106 (let ((window-buffers | |
107 (delete-dups | |
108 (delq nil | |
109 (mapcar (lambda (w) | |
110 (and (next-error-buffer-p (window-buffer w) extra-test) | |
111 (window-buffer w))) | |
112 (window-list)))))) | |
113 (if other-buffer | |
114 (setq window-buffers (delq (current-buffer) window-buffers))) | |
115 (if (eq (length window-buffers) 1) | |
116 (car window-buffers))) | |
117 (if (and next-error-last-buffer (buffer-name next-error-last-buffer) | |
118 (next-error-buffer-p next-error-last-buffer extra-test) | |
119 (or (not other-buffer) (not (eq next-error-last-buffer | |
120 (current-buffer))))) | |
121 next-error-last-buffer | |
122 (let ((buffers (buffer-list))) | |
123 (while (and buffers (or (not (next-error-buffer-p (car buffers) extra-test)) | |
124 (and other-buffer | |
125 (eq (car buffers) (current-buffer))))) | |
126 (setq buffers (cdr buffers))) | |
127 (if buffers | |
128 (car buffers) | |
129 (or (and other-buffer | |
130 (next-error-buffer-p (current-buffer) extra-test) | |
131 ;; The current buffer is a next-error capable buffer. | |
132 (progn | |
133 (if other-buffer | |
134 (message "This is the only next-error capable buffer.")) | |
135 (current-buffer))) | |
136 (error "No next-error capable buffer found")))))))) | |
137 | |
138 (defun next-error (arg &optional reset) | |
139 "Visit next next-error message and corresponding source code. | |
140 | |
141 If all the error messages parsed so far have been processed already, | |
142 the message buffer is checked for new ones. | |
143 | |
144 A prefix ARG specifies how many error messages to move; | |
145 negative means move back to previous error messages. | |
146 Just \\[universal-argument] as a prefix means reparse the error message buffer | |
147 and start at the first error. | |
148 | |
149 The RESET argument specifies that we should restart from the beginning. | |
150 | |
151 \\[next-error] normally uses the most recently started | |
152 compilation, grep, or occur buffer. It can also operate on any | |
153 buffer with output from the \\[compile], \\[grep] commands, or, | |
154 more generally, on any buffer in Compilation mode or with | |
155 Compilation Minor mode enabled, or any buffer in which | |
156 `next-error-function' is bound to an appropriate | |
157 function. To specify use of a particular buffer for error | |
158 messages, type \\[next-error] in that buffer. | |
159 | |
160 Once \\[next-error] has chosen the buffer for error messages, | |
161 it stays with that buffer until you use it in some other buffer which | |
162 uses Compilation mode or Compilation Minor mode. | |
163 | |
164 See variables `compilation-parse-errors-function' and | |
165 \`compilation-error-regexp-alist' for customization ideas." | |
166 (interactive "P") | |
167 (if (consp arg) (setq reset t arg nil)) | |
168 (when (setq next-error-last-buffer (next-error-find-buffer)) | |
169 ;; we know here that next-error-function is a valid symbol we can funcall | |
170 (with-current-buffer next-error-last-buffer | |
171 (funcall next-error-function (prefix-numeric-value arg) reset)))) | |
172 | |
173 (defalias 'goto-next-locus 'next-error) | |
174 (defalias 'next-match 'next-error) | |
175 | |
176 (define-key ctl-x-map "`" 'next-error) | |
177 | |
178 (defun previous-error (n) | |
179 "Visit previous next-error message and corresponding source code. | |
180 | |
181 Prefix arg N says how many error messages to move backwards (or | |
182 forwards, if negative). | |
183 | |
184 This operates on the output from the \\[compile] and \\[grep] commands." | |
185 (interactive "p") | |
186 (next-error (- n))) | |
187 | |
188 (defun first-error (n) | |
189 "Restart at the first error. | |
190 Visit corresponding source code. | |
191 With prefix arg N, visit the source code of the Nth error. | |
192 This operates on the output from the \\[compile] command, for instance." | |
193 (interactive "p") | |
194 (next-error n t)) | |
195 | |
196 (defun next-error-no-select (n) | |
197 "Move point to the next error in the next-error buffer and highlight match. | |
198 Prefix arg N says how many error messages to move forwards (or | |
199 backwards, if negative). | |
200 Finds and highlights the source line like \\[next-error], but does not | |
201 select the source buffer." | |
202 (interactive "p") | |
203 (next-error n) | |
204 (pop-to-buffer next-error-last-buffer)) | |
205 | |
206 (defun previous-error-no-select (n) | |
207 "Move point to the previous error in the next-error buffer and highlight match. | |
208 Prefix arg N says how many error messages to move backwards (or | |
209 forwards, if negative). | |
210 Finds and highlights the source line like \\[previous-error], but does not | |
211 select the source buffer." | |
212 (interactive "p") | |
213 (next-error-no-select (- n))) | |
214 | |
215 ;;; | |
68 | 216 |
69 (defun fundamental-mode () | 217 (defun fundamental-mode () |
70 "Major mode not specialized for anything in particular. | 218 "Major mode not specialized for anything in particular. |
71 Other major modes are defined by comparison with this one." | 219 Other major modes are defined by comparison with this one." |
72 (interactive) | 220 (interactive) |
157 ;; If rear-nonsticky is not "t", add 'hard to rear-nonsticky list | 305 ;; If rear-nonsticky is not "t", add 'hard to rear-nonsticky list |
158 (if (and (listp sticky) (not (memq 'hard sticky))) | 306 (if (and (listp sticky) (not (memq 'hard sticky))) |
159 (put-text-property from (point) 'rear-nonsticky | 307 (put-text-property from (point) 'rear-nonsticky |
160 (cons 'hard sticky))))) | 308 (cons 'hard sticky))))) |
161 | 309 |
162 (defun open-line (arg) | 310 (defun open-line (n) |
163 "Insert a newline and leave point before it. | 311 "Insert a newline and leave point before it. |
164 If there is a fill prefix and/or a left-margin, insert them on the new line | 312 If there is a fill prefix and/or a left-margin, insert them on the new line |
165 if the line would have been blank. | 313 if the line would have been blank. |
166 With arg N, insert N newlines." | 314 With arg N, insert N newlines." |
167 (interactive "*p") | 315 (interactive "*p") |
168 (let* ((do-fill-prefix (and fill-prefix (bolp))) | 316 (let* ((do-fill-prefix (and fill-prefix (bolp))) |
169 (do-left-margin (and (bolp) (> (current-left-margin) 0))) | 317 (do-left-margin (and (bolp) (> (current-left-margin) 0))) |
170 (loc (point)) | 318 (loc (point)) |
171 ;; Don't expand an abbrev before point. | 319 ;; Don't expand an abbrev before point. |
172 (abbrev-mode nil)) | 320 (abbrev-mode nil)) |
173 (newline arg) | 321 (newline n) |
174 (goto-char loc) | 322 (goto-char loc) |
175 (while (> arg 0) | 323 (while (> n 0) |
176 (cond ((bolp) | 324 (cond ((bolp) |
177 (if do-left-margin (indent-to (current-left-margin))) | 325 (if do-left-margin (indent-to (current-left-margin))) |
178 (if do-fill-prefix (insert-and-inherit fill-prefix)))) | 326 (if do-fill-prefix (insert-and-inherit fill-prefix)))) |
179 (forward-line 1) | 327 (forward-line 1) |
180 (setq arg (1- arg))) | 328 (setq n (1- n))) |
181 (goto-char loc) | 329 (goto-char loc) |
182 (end-of-line))) | 330 (end-of-line))) |
183 | 331 |
184 (defun split-line (&optional arg) | 332 (defun split-line (&optional arg) |
185 "Split current line, moving portion beyond point vertically down. | 333 "Split current line, moving portion beyond point vertically down. |
186 If the current line starts with `fill-prefix', insert it on the new | 334 If the current line starts with `fill-prefix', insert it on the new |
187 line as well. With prefix arg, don't insert fill-prefix on new line. | 335 line as well. With prefix ARG, don't insert fill-prefix on new line. |
188 | 336 |
189 When called from Lisp code, the arg may be a prefix string to copy." | 337 When called from Lisp code, ARG may be a prefix string to copy." |
190 (interactive "*P") | 338 (interactive "*P") |
191 (skip-chars-forward " \t") | 339 (skip-chars-forward " \t") |
192 (let* ((col (current-column)) | 340 (let* ((col (current-column)) |
193 (pos (point)) | 341 (pos (point)) |
194 ;; What prefix should we check for (nil means don't). | 342 ;; What prefix should we check for (nil means don't). |
635 If nil, don't change the value of `debug-on-error'." | 783 If nil, don't change the value of `debug-on-error'." |
636 :group 'lisp | 784 :group 'lisp |
637 :type 'boolean | 785 :type 'boolean |
638 :version "21.1") | 786 :version "21.1") |
639 | 787 |
788 (defun eval-expression-print-format (value) | |
789 "Format VALUE as a result of evaluated expression. | |
790 Return a formatted string which is displayed in the echo area | |
791 in addition to the value printed by prin1 in functions which | |
792 display the result of expression evaluation." | |
793 (if (and (integerp value) | |
794 (or (not (memq this-command '(eval-last-sexp eval-print-last-sexp))) | |
795 (eq this-command last-command) | |
796 (and (boundp 'edebug-active) edebug-active))) | |
797 (let ((char-string | |
798 (if (or (and (boundp 'edebug-active) edebug-active) | |
799 (memq this-command '(eval-last-sexp eval-print-last-sexp))) | |
800 (prin1-char value)))) | |
801 (if char-string | |
802 (format " (0%o, 0x%x) = %s" value value char-string) | |
803 (format " (0%o, 0x%x)" value value))))) | |
804 | |
640 ;; We define this, rather than making `eval' interactive, | 805 ;; We define this, rather than making `eval' interactive, |
641 ;; for the sake of completion of names like eval-region, eval-current-buffer. | 806 ;; for the sake of completion of names like eval-region, eval-current-buffer. |
642 (defun eval-expression (eval-expression-arg | 807 (defun eval-expression (eval-expression-arg |
643 &optional eval-expression-insert-value) | 808 &optional eval-expression-insert-value) |
644 "Evaluate EVAL-EXPRESSION-ARG and print value in the echo area. | 809 "Evaluate EVAL-EXPRESSION-ARG and print value in the echo area. |
669 (print-level eval-expression-print-level)) | 834 (print-level eval-expression-print-level)) |
670 (if eval-expression-insert-value | 835 (if eval-expression-insert-value |
671 (with-no-warnings | 836 (with-no-warnings |
672 (let ((standard-output (current-buffer))) | 837 (let ((standard-output (current-buffer))) |
673 (eval-last-sexp-print-value (car values)))) | 838 (eval-last-sexp-print-value (car values)))) |
674 (prin1 (car values) t)))) | 839 (prog1 |
840 (prin1 (car values) t) | |
841 (let ((str (eval-expression-print-format (car values)))) | |
842 (if str (princ str t))))))) | |
675 | 843 |
676 (defun edit-and-eval-command (prompt command) | 844 (defun edit-and-eval-command (prompt command) |
677 "Prompting with PROMPT, let user edit COMMAND and eval result. | 845 "Prompting with PROMPT, let user edit COMMAND and eval result. |
678 COMMAND is a Lisp expression. Let user edit that expression in | 846 COMMAND is a Lisp expression. Let user edit that expression in |
679 the minibuffer, then read and evaluate the result." | 847 the minibuffer, then read and evaluate the result." |
783 (let* ((enable-recursive-minibuffers t) | 951 (let* ((enable-recursive-minibuffers t) |
784 (regexp (read-from-minibuffer "Previous element matching (regexp): " | 952 (regexp (read-from-minibuffer "Previous element matching (regexp): " |
785 nil | 953 nil |
786 minibuffer-local-map | 954 minibuffer-local-map |
787 nil | 955 nil |
788 'minibuffer-history-search-history))) | 956 'minibuffer-history-search-history |
957 (car minibuffer-history-search-history)))) | |
789 ;; Use the last regexp specified, by default, if input is empty. | 958 ;; Use the last regexp specified, by default, if input is empty. |
790 (list (if (string= regexp "") | 959 (list (if (string= regexp "") |
791 (if minibuffer-history-search-history | 960 (if minibuffer-history-search-history |
792 (car minibuffer-history-search-history) | 961 (car minibuffer-history-search-history) |
793 (error "No previous history search regexp")) | 962 (error "No previous history search regexp")) |
985 (if undo-in-region | 1154 (if undo-in-region |
986 (undo-start (region-beginning) (region-end)) | 1155 (undo-start (region-beginning) (region-end)) |
987 (undo-start)) | 1156 (undo-start)) |
988 ;; get rid of initial undo boundary | 1157 ;; get rid of initial undo boundary |
989 (undo-more 1)) | 1158 (undo-more 1)) |
990 ;; If we got this far, the next command should be a consecutive undo. | 1159 ;; If we got this far, the next command should be a consecutive undo. |
991 (setq this-command 'undo) | 1160 (setq this-command 'undo) |
992 ;; Check to see whether we're hitting a redo record, and if | 1161 ;; Check to see whether we're hitting a redo record, and if |
993 ;; so, ask the user whether she wants to skip the redo/undo pair. | 1162 ;; so, ask the user whether she wants to skip the redo/undo pair. |
994 (let ((equiv (gethash pending-undo-list undo-equiv-table))) | 1163 (let ((equiv (gethash pending-undo-list undo-equiv-table))) |
995 (or (eq (selected-window) (minibuffer-window)) | 1164 (or (eq (selected-window) (minibuffer-window)) |
1933 If the buffer is read-only, Emacs will beep and refrain from deleting | 2102 If the buffer is read-only, Emacs will beep and refrain from deleting |
1934 the text, but put the text in the kill ring anyway. This means that | 2103 the text, but put the text in the kill ring anyway. This means that |
1935 you can use the killing commands to copy text from a read-only buffer. | 2104 you can use the killing commands to copy text from a read-only buffer. |
1936 | 2105 |
1937 This is the primitive for programs to kill text (as opposed to deleting it). | 2106 This is the primitive for programs to kill text (as opposed to deleting it). |
1938 Supply two arguments, character numbers indicating the stretch of text | 2107 Supply two arguments, character positions indicating the stretch of text |
1939 to be killed. | 2108 to be killed. |
1940 Any command that calls this function is a \"kill command\". | 2109 Any command that calls this function is a \"kill command\". |
1941 If the previous command was also a kill command, | 2110 If the previous command was also a kill command, |
1942 the text killed this time appends to the text killed last time | 2111 the text killed this time appends to the text killed last time |
1943 to make one entry in the kill ring. | 2112 to make one entry in the kill ring. |
2007 (opoint (point)) | 2176 (opoint (point)) |
2008 ;; Inhibit quitting so we can make a quit here | 2177 ;; Inhibit quitting so we can make a quit here |
2009 ;; look like a C-g typed as a command. | 2178 ;; look like a C-g typed as a command. |
2010 (inhibit-quit t)) | 2179 (inhibit-quit t)) |
2011 (if (pos-visible-in-window-p other-end (selected-window)) | 2180 (if (pos-visible-in-window-p other-end (selected-window)) |
2012 (unless transient-mark-mode | 2181 (unless (and transient-mark-mode |
2182 (face-background 'region)) | |
2013 ;; Swap point and mark. | 2183 ;; Swap point and mark. |
2014 (set-marker (mark-marker) (point) (current-buffer)) | 2184 (set-marker (mark-marker) (point) (current-buffer)) |
2015 (goto-char other-end) | 2185 (goto-char other-end) |
2016 (sit-for 1) | 2186 (sit-for blink-matching-delay) |
2017 ;; Swap back. | 2187 ;; Swap back. |
2018 (set-marker (mark-marker) other-end (current-buffer)) | 2188 (set-marker (mark-marker) other-end (current-buffer)) |
2019 (goto-char opoint) | 2189 (goto-char opoint) |
2020 ;; If user quit, deactivate the mark | 2190 ;; If user quit, deactivate the mark |
2021 ;; as C-g would as a command. | 2191 ;; as C-g would as a command. |
2049 yank-handler) | 2219 yank-handler) |
2050 "*Text properties to discard when yanking. | 2220 "*Text properties to discard when yanking. |
2051 The value should be a list of text properties to discard or t, | 2221 The value should be a list of text properties to discard or t, |
2052 which means to discard all text properties." | 2222 which means to discard all text properties." |
2053 :type '(choice (const :tag "All" t) (repeat symbol)) | 2223 :type '(choice (const :tag "All" t) (repeat symbol)) |
2054 :group 'editing | 2224 :group 'killing |
2055 :version "21.4") | 2225 :version "21.4") |
2056 | 2226 |
2057 (defvar yank-window-start nil) | 2227 (defvar yank-window-start nil) |
2058 (defvar yank-undo-function nil | 2228 (defvar yank-undo-function nil |
2059 "If non-nil, function used by `yank-pop' to delete last stretch of yanked text. | 2229 "If non-nil, function used by `yank-pop' to delete last stretch of yanked text. |
2259 "Kill current line. | 2429 "Kill current line. |
2260 With prefix arg, kill that many lines starting from the current line. | 2430 With prefix arg, kill that many lines starting from the current line. |
2261 If arg is negative, kill backward. Also kill the preceding newline. | 2431 If arg is negative, kill backward. Also kill the preceding newline. |
2262 \(This is meant to make C-x z work well with negative arguments.\) | 2432 \(This is meant to make C-x z work well with negative arguments.\) |
2263 If arg is zero, kill current line but exclude the trailing newline." | 2433 If arg is zero, kill current line but exclude the trailing newline." |
2264 (interactive "P") | 2434 (interactive "p") |
2265 (setq arg (prefix-numeric-value arg)) | |
2266 (if (and (> arg 0) (eobp) (save-excursion (forward-visible-line 0) (eobp))) | 2435 (if (and (> arg 0) (eobp) (save-excursion (forward-visible-line 0) (eobp))) |
2267 (signal 'end-of-buffer nil)) | 2436 (signal 'end-of-buffer nil)) |
2268 (if (and (< arg 0) (bobp) (save-excursion (end-of-visible-line) (bobp))) | 2437 (if (and (< arg 0) (bobp) (save-excursion (end-of-visible-line) (bobp))) |
2269 (signal 'beginning-of-buffer nil)) | 2438 (signal 'beginning-of-buffer nil)) |
2270 (unless (eq last-command 'kill-region) | 2439 (unless (eq last-command 'kill-region) |
3255 ;; when Auto-Fill mode is enabled. | 3424 ;; when Auto-Fill mode is enabled. |
3256 ;; It returns t if it really did any work. | 3425 ;; It returns t if it really did any work. |
3257 ;; (Actually some major modes use a different auto-fill function, | 3426 ;; (Actually some major modes use a different auto-fill function, |
3258 ;; but this one is the default one.) | 3427 ;; but this one is the default one.) |
3259 (defun do-auto-fill () | 3428 (defun do-auto-fill () |
3260 (let (fc justify bol give-up | 3429 (let (fc justify give-up |
3261 (fill-prefix fill-prefix)) | 3430 (fill-prefix fill-prefix)) |
3262 (if (or (not (setq justify (current-justification))) | 3431 (if (or (not (setq justify (current-justification))) |
3263 (null (setq fc (current-fill-column))) | 3432 (null (setq fc (current-fill-column))) |
3264 (and (eq justify 'left) | 3433 (and (eq justify 'left) |
3265 (<= (current-column) fc)) | 3434 (<= (current-column) fc)) |
3266 (save-excursion (beginning-of-line) | 3435 (and auto-fill-inhibit-regexp |
3267 (setq bol (point)) | 3436 (save-excursion (beginning-of-line) |
3268 (and auto-fill-inhibit-regexp | |
3269 (looking-at auto-fill-inhibit-regexp)))) | 3437 (looking-at auto-fill-inhibit-regexp)))) |
3270 nil ;; Auto-filling not required | 3438 nil ;; Auto-filling not required |
3271 (if (memq justify '(full center right)) | 3439 (if (memq justify '(full center right)) |
3272 (save-excursion (unjustify-current-line))) | 3440 (save-excursion (unjustify-current-line))) |
3273 | 3441 |
3286 | 3454 |
3287 (while (and (not give-up) (> (current-column) fc)) | 3455 (while (and (not give-up) (> (current-column) fc)) |
3288 ;; Determine where to split the line. | 3456 ;; Determine where to split the line. |
3289 (let* (after-prefix | 3457 (let* (after-prefix |
3290 (fill-point | 3458 (fill-point |
3291 (let ((opoint (point))) | 3459 (save-excursion |
3292 (save-excursion | 3460 (beginning-of-line) |
3293 (beginning-of-line) | 3461 (setq after-prefix (point)) |
3294 (setq after-prefix (point)) | 3462 (and fill-prefix |
3295 (and fill-prefix | 3463 (looking-at (regexp-quote fill-prefix)) |
3296 (looking-at (regexp-quote fill-prefix)) | 3464 (setq after-prefix (match-end 0))) |
3297 (setq after-prefix (match-end 0))) | 3465 (move-to-column (1+ fc)) |
3298 (move-to-column (1+ fc)) | 3466 (fill-move-to-break-point after-prefix) |
3299 (fill-move-to-break-point after-prefix) | 3467 (point)))) |
3300 (point))))) | |
3301 | 3468 |
3302 ;; See whether the place we found is any good. | 3469 ;; See whether the place we found is any good. |
3303 (if (save-excursion | 3470 (if (save-excursion |
3304 (goto-char fill-point) | 3471 (goto-char fill-point) |
3305 (or (bolp) | 3472 (or (bolp) |
4114 command to display the completion list buffer was run. | 4281 command to display the completion list buffer was run. |
4115 The completion list buffer is available as the value of `standard-output'.") | 4282 The completion list buffer is available as the value of `standard-output'.") |
4116 | 4283 |
4117 ;; This function goes in completion-setup-hook, so that it is called | 4284 ;; This function goes in completion-setup-hook, so that it is called |
4118 ;; after the text of the completion list buffer is written. | 4285 ;; after the text of the completion list buffer is written. |
4119 (defface completion-emphasis | 4286 (defface completions-first-difference |
4120 '((t (:inherit bold))) | 4287 '((t (:inherit bold))) |
4121 "Face put on the first uncommon character in completions in *Completions* buffer." | 4288 "Face put on the first uncommon character in completions in *Completions* buffer." |
4122 :group 'completion) | 4289 :group 'completion) |
4123 | 4290 |
4124 (defface completion-de-emphasis | 4291 (defface completions-common-part |
4125 '((t (:inherit default))) | 4292 '((t (:inherit default))) |
4126 "Face put on the common prefix substring in completions in *Completions* buffer." | 4293 "Face put on the common prefix substring in completions in *Completions* buffer. |
4294 The idea of `completions-common-part' is that you can use it to | |
4295 make the common parts less visible than normal, so that the rest | |
4296 of the differing parts is, by contrast, slightly highlighted." | |
4127 :group 'completion) | 4297 :group 'completion) |
4128 | 4298 |
4129 (defun completion-setup-function () | 4299 (defun completion-setup-function () |
4130 (save-excursion | 4300 (let ((mainbuf (current-buffer)) |
4131 (let ((mainbuf (current-buffer)) | 4301 (mbuf-contents (minibuffer-contents))) |
4132 (mbuf-contents (minibuffer-contents))) | 4302 ;; When reading a file name in the minibuffer, |
4133 ;; When reading a file name in the minibuffer, | 4303 ;; set default-directory in the minibuffer |
4134 ;; set default-directory in the minibuffer | 4304 ;; so it will get copied into the completion list buffer. |
4135 ;; so it will get copied into the completion list buffer. | 4305 (if minibuffer-completing-file-name |
4136 (if minibuffer-completing-file-name | 4306 (with-current-buffer mainbuf |
4137 (with-current-buffer mainbuf | 4307 (setq default-directory (file-name-directory mbuf-contents)))) |
4138 (setq default-directory (file-name-directory mbuf-contents)))) | 4308 (with-current-buffer standard-output |
4139 (set-buffer standard-output) | |
4140 (completion-list-mode) | 4309 (completion-list-mode) |
4141 (make-local-variable 'completion-reference-buffer) | 4310 (make-local-variable 'completion-reference-buffer) |
4142 (setq completion-reference-buffer mainbuf) | 4311 (setq completion-reference-buffer mainbuf) |
4143 (if minibuffer-completing-file-name | 4312 (if minibuffer-completing-file-name |
4144 ;; For file name completion, | 4313 ;; For file name completion, |
4145 ;; use the number of chars before the start of the | 4314 ;; use the number of chars before the start of the |
4146 ;; last file name component. | 4315 ;; last file name component. |
4147 (setq completion-base-size | 4316 (setq completion-base-size |
4148 (save-excursion | 4317 (with-current-buffer mainbuf |
4149 (set-buffer mainbuf) | 4318 (save-excursion |
4150 (goto-char (point-max)) | 4319 (goto-char (point-max)) |
4151 (skip-chars-backward "^/") | 4320 (skip-chars-backward "^/") |
4152 (- (point) (minibuffer-prompt-end)))) | 4321 (- (point) (minibuffer-prompt-end))))) |
4153 ;; Otherwise, in minibuffer, the whole input is being completed. | 4322 ;; Otherwise, in minibuffer, the whole input is being completed. |
4154 (save-match-data | 4323 (if (minibufferp mainbuf) |
4155 (if (minibufferp mainbuf) | 4324 (setq completion-base-size 0))) |
4156 (setq completion-base-size 0)))) | 4325 ;; Put faces on first uncommon characters and common parts. |
4157 ;; Put emphasis and de-emphasis faces on completions. | |
4158 (when completion-base-size | 4326 (when completion-base-size |
4159 (let ((common-string-length (length | 4327 (let* ((common-string-length |
4160 (substring mbuf-contents | 4328 (- (length mbuf-contents) completion-base-size)) |
4161 completion-base-size))) | 4329 (element-start (next-single-property-change |
4162 (element-start (next-single-property-change | 4330 (point-min) |
4163 (point-min) | 4331 'mouse-face)) |
4164 'mouse-face)) | 4332 (element-common-end |
4165 element-common-end) | 4333 (+ (or element-start nil) common-string-length)) |
4166 (while element-start | 4334 (maxp (point-max))) |
4167 (setq element-common-end (+ element-start common-string-length)) | 4335 (while (and element-start (< element-common-end maxp)) |
4168 (when (and (get-char-property element-start 'mouse-face) | 4336 (when (and (get-char-property element-start 'mouse-face) |
4169 (get-char-property element-common-end 'mouse-face)) | 4337 (get-char-property element-common-end 'mouse-face)) |
4170 (put-text-property element-start element-common-end | 4338 (put-text-property element-start element-common-end |
4171 'font-lock-face 'completion-de-emphasis) | 4339 'font-lock-face 'completions-common-part) |
4172 (put-text-property element-common-end (1+ element-common-end) | 4340 (put-text-property element-common-end (1+ element-common-end) |
4173 'font-lock-face 'completion-emphasis)) | 4341 'font-lock-face 'completions-first-difference)) |
4174 (setq element-start (next-single-property-change | 4342 (setq element-start (next-single-property-change |
4175 element-start | 4343 element-start |
4176 'mouse-face))))) | 4344 'mouse-face)) |
4345 (if element-start | |
4346 (setq element-common-end (+ element-start common-string-length)))))) | |
4177 ;; Insert help string. | 4347 ;; Insert help string. |
4178 (goto-char (point-min)) | 4348 (goto-char (point-min)) |
4179 (if (display-mouse-p) | 4349 (if (display-mouse-p) |
4180 (insert (substitute-command-keys | 4350 (insert (substitute-command-keys |
4181 "Click \\[mouse-choose-completion] on a completion to select it.\n"))) | 4351 "Click \\[mouse-choose-completion] on a completion to select it.\n"))) |
4622 ; 'insert-in-front-hooks '(minibuffer-prompt-insertion))) | 4792 ; 'insert-in-front-hooks '(minibuffer-prompt-insertion))) |
4623 ; | 4793 ; |
4624 | 4794 |
4625 (provide 'simple) | 4795 (provide 'simple) |
4626 | 4796 |
4627 ;;; arch-tag: 24af67c0-2a49-44f6-b3b1-312d8b570dfd | 4797 ;; arch-tag: 24af67c0-2a49-44f6-b3b1-312d8b570dfd |
4628 ;;; simple.el ends here | 4798 ;;; simple.el ends here |