1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-29 19:48:19 +00:00

Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-29

Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0

Patches applied:

 * lorentey@elte.hu--2004/emacs--multi-tty--0--patch-224
   Added sorted-doc to backup regex in lib-src.

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-479
 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-482
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-483
   Build-in-place tweak

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-484
 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-485
   Update from CVS
This commit is contained in:
Miles Bader 2004-08-10 07:46:40 +00:00
commit 1322bdcbf4
31 changed files with 856 additions and 613 deletions

View File

@ -1,3 +1,7 @@
2004-08-06 Andreas Schwab <schwab@suse.de>
* Makefile.in (install-arch-indep, uninstall): Add flymake.
2004-07-31 Eli Zaretskii <eliz@gnu.org>
* config.bat: Update URLs in the comments.

View File

@ -475,7 +475,7 @@ install-arch-indep: mkdir info
chmod a+r ${infodir}/dir); \
fi; \
cd ${srcdir}/info ; \
for f in ada-mode* autotype* calc* ccmode* cl* dired-x* ebrowse* ediff* efaq* eintr* elisp* emacs* emacs-xtra* eshell* eudc* forms* gnus* idlwave* info* message* mh-e* pcl-cvs* reftex* sc* ses* speedbar* tramp* vip* widget* woman* smtpmail*; do \
for f in ada-mode* autotype* calc* ccmode* cl* dired-x* ebrowse* ediff* efaq* eintr* elisp* emacs* emacs-xtra* eshell* eudc* flymake* forms* gnus* idlwave* info* message* mh-e* pcl-cvs* reftex* sc* ses* speedbar* tramp* vip* widget* woman* smtpmail*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \
@ -485,7 +485,7 @@ install-arch-indep: mkdir info
thisdir=`/bin/pwd`; \
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
for f in ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq elisp eintr emacs emacs-mime emacs-xtra eshell eudc forms gnus idlwave info message mh-e pcl-cvs reftex sc ses speedbar tramp vip viper widget woman smtpmail; do \
for f in ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq elisp eintr emacs emacs-mime emacs-xtra eshell eudc flymake forms gnus idlwave info message mh-e pcl-cvs reftex sc ses speedbar tramp vip viper widget woman smtpmail; do \
(cd $${thisdir}; \
${INSTALL_INFO} --info-dir=${infodir} ${infodir}/$$f); \
done; \
@ -551,7 +551,7 @@ uninstall:
done
(cd ${archlibdir} && rm -f fns-*)
-rm -rf ${libexecdir}/emacs/${version}
(cd ${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* forms* gnus* info* mh-e* sc* ses* vip* smtpmail*)
(cd ${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* sc* ses* vip* smtpmail*)
(cd ${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
(cd ${bindir} && rm -f $(EMACSFULL) $(EMACS))

View File

@ -2262,6 +2262,11 @@ configuration files.
* Lisp Changes in Emacs 21.4
+++
** Both the variable and the function `disabled-command-hook' have
been renamed to `disabled-command-function'. The variable
`disabled-command-hook' has been kept as an obsolete alias.
** Function `compute-motion' now calculates the usable window
width if the WIDTH argument is nil. If the TOPOS argument is nil,
the usable window height and width is used.

View File

@ -1,3 +1,7 @@
2004-08-06 Andreas Schwab <schwab@suse.de>
* Makefile.in (install): Remove .arch-inventory files.
2004-07-01 David Kastrup <dak@gnu.org>
* quail/greek.el ("((") ("))"): add quotation mark shorthands.

View File

@ -232,6 +232,7 @@ install: all
fi; \
rm -rf ${INSTALLDIR}/CVS ${INSTALLDIR}/*/CVS; \
rm -f ${INSTALLDIR}/.cvsignore ${INSTALLDIR}/*/.cvsignore; \
rm -f ${INSTALLDIR}/.arch-inventory ${INSTALLDIR}/*/.arch-inventory; \
rm -f ${INSTALLDIR}/\#* ${INSTALLDIR}/*/\#* ; \
rm -f ${INSTALLDIR}/.\#* ${INSTALLDIR}/*/.\#* ; \
rm -f ${INSTALLDIR}/*~ ${INSTALLDIR}/*/*~ ; \

View File

@ -1,5 +1,5 @@
# Ignore binaries
backup ^(test-distrib|make-docfile|profile|digest-doc|movemail|cvtmail|fakemail|yow|emacsserver|hexl|update-game-score|etags|ctags|emacsclient|b2m|ebrowse)$
backup ^(test-distrib|make-docfile|profile|digest-doc|movemail|cvtmail|fakemail|yow|emacsserver|hexl|update-game-score|etags|ctags|emacsclient|b2m|ebrowse|sorted-doc)$
# Building actually makes a copy/link of the source file
precious ^(ctags\.c)$

View File

@ -1,3 +1,67 @@
2004-08-09 Luc Teirlinck <teirllm@auburn.edu>
* help.el (describe-bindings): Doc fix.
* subr.el (kbd): Doc fix.
2004-08-08 John Paul Wallington <jpw@gnu.org>
* ibuffer.el (define-ibuffer-column size): Use `string-to-number'
instead of `string-to-int'.
(define-ibuffer-column mode): Fix indentation.
2004-08-08 Lars Hansen <larsh@math.ku.dk>
* wid-edit.el (widget-sexp-validate): Allow whitespace after
expression.
2004-08-08 Luc Teirlinck <teirllm@auburn.edu>
* subr.el (global-unset-key, local-unset-key): Doc fixes.
* novice.el (disabled-command-function): New variable renamed from
`disabled-command-hook'.
(disabled-command-hook): Keep the _variable_ as alias for
`disabled-command-function' and make obsolete.
(disabled-command-function): Function renamed from
`disabled-command-hook'. Adapt code to name change of the variable.
2004-08-07 Satyaki Das <satyaki@theforce.stanford.edu> (tiny change)
* simple.el (completion-root-regexp): New defvar.
(completion-setup-function): Use it instead of a literal string.
2004-08-07 John Paul Wallington <jpw@gnu.org>
* emacs-lisp/re-builder.el (reb-re-syntax): Add `rx' syntax.
(reb-lisp-mode): Require `rx' feature when `re-reb-syntax' is `rx'.
(reb-lisp-syntax-p, reb-change-syntax): `rx' is a Lisp syntax.
(reb-cook-regexp): Call `rx-to-string' when `re-reb-syntax' is `rx'.
2004-08-04 Kenichi Handa <handa@m17n.org>
* international/encoded-kb.el (encoded-kbd-setup-keymap): Fix
previous change.
2004-08-03 Kenichi Handa <handa@m17n.org>
* international/encoded-kb.el: The following changes are to
utilize key-translation-map instead of minor mode map.
(encoded-kbd-iso2022-non-ascii-map): Delete it.
(encoded-kbd-coding, encoded-kbd-handle-8bit): Delete them.
(encoded-kbd-last-key): New function.
(encoded-kbd-iso2022-single-shift): New function.
(encoded-kbd-iso2022-designation)
(encoded-kbd-self-insert-iso2022-7bit)
(encoded-kbd-self-insert-iso2022-8bit)
(encoded-kbd-self-insert-sjis, encoded-kbd-self-insert-big5)
(encoded-kbd-self-insert-ccl): Make them suitable for bindings in
key-translation-map.
(encoded-kbd-setup-keymap): Setup key-translation-map.
(saved-key-translation-map): New variable.
(encoded-kbd-mode): Save/restore key-translation-map. Adjusted
for the change of encoded-kbd-setup-keymap.
2004-08-02 Kim F. Storm <storm@cua.dk>
* avoid.el (mouse-avoidance-point-position): Use window-inside-edges

View File

@ -135,6 +135,7 @@ Can either be `read', `string', `sregex' or `lisp-re'."
(const :tag "String syntax" string)
(const :tag "`sregex' syntax" sregex)
(const :tag "`lisp-re' syntax" lisp-re)
(const :tag "`rx' syntax" rx)
(value: string)))
(defcustom reb-auto-match-limit 200
@ -261,7 +262,9 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
(cond ((eq reb-re-syntax 'lisp-re) ; Pull in packages
(require 'lisp-re)) ; as needed
((eq reb-re-syntax 'sregex) ; sregex is not autoloaded
(require 'sregex))) ; right now..
(require 'sregex)) ; right now..
((eq reb-re-syntax 'rx) ; rx-to-string is autoloaded
(require 'rx))) ; require rx anyway
(reb-mode-common))
;; Use the same "\C-c" keymap as `reb-mode' and use font-locking from
@ -320,7 +323,7 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
(defsubst reb-lisp-syntax-p ()
"Return non-nil if RE Builder uses a Lisp syntax."
(memq reb-re-syntax '(lisp-re sregex)))
(memq reb-re-syntax '(lisp-re sregex rx)))
(defmacro reb-target-binding (symbol)
"Return binding for SYMBOL in the RE Builder target buffer."
@ -466,10 +469,10 @@ Optional argument SYNTAX must be specified if called non-interactively."
(list (intern
(completing-read "Select syntax: "
(mapcar (lambda (el) (cons (symbol-name el) 1))
'(read string lisp-re sregex))
'(read string lisp-re sregex rx))
nil t (symbol-name reb-re-syntax)))))
(if (memq syntax '(read string lisp-re sregex))
(if (memq syntax '(read string lisp-re sregex rx))
(let ((buffer (get-buffer reb-buffer)))
(setq reb-re-syntax syntax)
(if buffer
@ -604,6 +607,8 @@ optional fourth argument FORCE is non-nil."
(lre-compile-string (eval (car (read-from-string re)))))
((eq reb-re-syntax 'sregex)
(apply 'sregex (eval (car (read-from-string re)))))
((eq reb-re-syntax 'rx)
(rx-to-string (eval (car (read-from-string re)))))
(t re)))
(defun reb-update-regexp ()
@ -670,7 +675,7 @@ If SUBEXP is non-nil mark only the corresponding sub-expressions."
(overlay-put overlay 'priority i)))
(setq i (1+ i))))))
(let ((count (if subexp submatches matches)))
(message"%s %smatch%s%s"
(message "%s %smatch%s%s"
(if (= 0 count) "No" (int-to-string count))
(if subexp "subexpression " "")
(if (= 1 count) "" "es")

View File

@ -428,7 +428,8 @@ We put that list in a buffer, and display the buffer.
The optional argument PREFIX, if non-nil, should be a key sequence;
then we display only bindings that start with that prefix.
The optional argument BUFFER specifies which buffer's bindings
to display (default, the current buffer)."
to display (default, the current buffer). BUFFER can be a buffer
or a buffer name."
(interactive)
(or buffer (setq buffer (current-buffer)))
(help-setup-xref (list #'describe-bindings prefix buffer) (interactive-p))

View File

@ -1644,16 +1644,17 @@ If point is on a group name, this function operates on that group."
(dolist (string column-strings)
(setq total
;; like, ewww ...
(+ (float (string-to-int string))
(+ (float (string-to-number string))
total)))
(format "%.0f" total))))
(format "%s" (buffer-size)))
(define-ibuffer-column mode (:inline t
:props
('mouse-face 'highlight
'keymap ibuffer-mode-name-map
'help-echo "mouse-2: filter by this mode"))
(define-ibuffer-column mode
(:inline t
:props
('mouse-face 'highlight
'keymap ibuffer-mode-name-map
'help-echo "mouse-2: filter by this mode"))
(format "%s" mode-name))
(define-ibuffer-column process
@ -2198,7 +2199,7 @@ Try to restore the previous window configuration iff
`ibuffer-restore-window-config-on-quit' is non-nil."
(interactive)
(if ibuffer-restore-window-config-on-quit
(progn
(progn
(bury-buffer)
(unless (= (count-windows) 1)
(set-window-configuration ibuffer-prev-window-config)))

View File

@ -28,6 +28,10 @@
;;; Code:
;; Usually this map is empty (even if Encoded-kbd mode is on), but if
;; the keyboard coding system is iso-2022-based, it defines dummy key
;; bindings for ESC $ ..., etc. so that those bindings in
;; key-translation-map take effect.
(defconst encoded-kbd-mode-map (make-sparse-keymap)
"Keymap for Encoded-kbd minor mode.")
@ -73,25 +77,6 @@
(fset 'encoded-kbd-iso2022-designation-prefix
encoded-kbd-iso2022-designation-map)
(defvar encoded-kbd-iso2022-non-ascii-map
(let ((map (make-keymap))
(i 32))
(while (< i 128)
(define-key map (char-to-string i) 'encoded-kbd-self-insert-iso2022-7bit)
(setq i (1+ i)))
(define-key map "\e" 'encoded-kbd-iso2022-esc-prefix)
(setq i 160)
(while (< i 256)
(define-key map (vector i) 'encoded-kbd-handle-8bit)
(setq i (1+ i)))
map)
"Keymap for handling non-ASCII character set in Encoded-kbd mode.")
;; One of the symbols `sjis', `iso2022-7', `iso2022-8', `big5', or
;; `utf-8' to denote what kind of coding-system we are now handling in
;; Encoded-kbd mode.
(defvar encoded-kbd-coding nil)
;; Keep information of designation state of ISO2022 encoding. When
;; Encoded-kbd mode is on, this is set to a vector of length 4, the
;; elements are character sets currently designated to graphic
@ -108,11 +93,14 @@
(defvar encoded-kbd-iso2022-invocations nil)
(put 'encoded-kbd-iso2022-invocations 'permanent-local t)
(defun encoded-kbd-iso2022-designation ()
(defsubst encoded-kbd-last-key ()
(let ((keys (this-single-command-keys)))
(aref keys (1- (length keys)))))
(defun encoded-kbd-iso2022-designation (ignore)
"Do ISO2022 designation according to the current key in Encoded-kbd mode.
The following key sequence may cause multilingual text insertion."
(interactive)
(let ((key-seq (this-command-keys))
(let ((key-seq (this-single-command-keys))
(prev-g0-charset (aref encoded-kbd-iso2022-designations
(aref encoded-kbd-iso2022-invocations 0)))
intermediate-char final-char
@ -136,109 +124,58 @@ The following key sequence may cause multilingual text insertion."
chars (if (< intermediate-char ?,) 94 96)
final-char (aref key-seq 2)
reg (mod intermediate-char 4))))
(if (setq charset (iso-charset dimension chars final-char))
(aset encoded-kbd-iso2022-designations reg charset)
(error "Character set of DIMENSION %s, CHARS %s, FINAL-CHAR `%c' is not supported"
dimension chars final-char))
(aset encoded-kbd-iso2022-designations reg
(iso-charset dimension chars final-char)))
"")
(if (memq (aref encoded-kbd-iso2022-designations
(aref encoded-kbd-iso2022-invocations 0))
'(ascii latin-jisx0201))
;; Graphic plane 0 (0x20..0x7f) is for ASCII. We don't have
;; to handle characters in this range specially.
(if (not (memq prev-g0-charset '(ascii latin-jisx0201)))
;; We must exit recursive edit now.
(throw 'exit nil))
;; Graphic plane 0 is for non-ASCII.
(if (memq prev-g0-charset '(ascii latin-jisx0201))
;; We must handle keys specially.
(let ((overriding-local-map encoded-kbd-iso2022-non-ascii-map))
(recursive-edit))))))
(defun encoded-kbd-iso2022-single-shift (ignore)
(let ((char (encoded-kbd-last-key)))
(aset encoded-kbd-iso2022-invocations 2
(aref encoded-kbd-iso2022-designations
(if (= char ?\216) 2 3))))
"")
(defun encoded-kbd-handle-8bit ()
"Handle an 8-bit character entered in Encoded-kbd mode."
(interactive)
(cond ((eq encoded-kbd-coding 'iso2022-7)
(error "Can't handle the character code %d" last-command-char))
((eq encoded-kbd-coding 'iso2022-8)
(cond ((= last-command-char ?\216)
(aset encoded-kbd-iso2022-invocations 2 2))
((= last-command-char ?\217)
(aset encoded-kbd-iso2022-invocations 2 3))
((>= last-command-char ?\240)
(encoded-kbd-self-insert-iso2022-8bit 1))
(t
(error "Can't handle the character code %d"
last-command-char))))
((eq encoded-kbd-coding 'sjis)
(encoded-kbd-self-insert-sjis))
(t
(encoded-kbd-self-insert-big5))))
(defun encoded-kbd-self-insert-iso2022-7bit ()
(interactive)
(let* ((charset (aref encoded-kbd-iso2022-designations
(or (aref encoded-kbd-iso2022-invocations 2)
(aref encoded-kbd-iso2022-invocations 0))))
(char (if (= (charset-dimension charset) 1)
(make-char charset last-command-char)
(make-char charset last-command-char (read-char-exclusive)))))
(defun encoded-kbd-self-insert-iso2022-7bit (ignore)
(let ((char (encoded-kbd-last-key))
(charset (aref encoded-kbd-iso2022-designations
(or (aref encoded-kbd-iso2022-invocations 2)
(aref encoded-kbd-iso2022-invocations 0)))))
(aset encoded-kbd-iso2022-invocations 2 nil)
(setq unread-command-events (cons char unread-command-events))))
(vector (if (= (charset-dimension charset) 1)
(make-char charset char)
(make-char charset char (read-char-exclusive))))))
(defun encoded-kbd-self-insert-iso2022-8bit (arg)
(interactive "p")
(cond
((= last-command-char ?\216) ; SS2 (Single Shift 2)
(aset encoded-kbd-iso2022-invocations 2 2))
((= last-command-char ?\217) ; SS3 (Single Shift 3)
(aset encoded-kbd-iso2022-invocations 2 3))
(t
(let* ((charset (aref encoded-kbd-iso2022-designations
(or (aref encoded-kbd-iso2022-invocations 2)
(aref encoded-kbd-iso2022-invocations 1))))
(char (if (= (charset-dimension charset) 1)
(make-char charset last-command-char)
(make-char charset last-command-char
(read-char-exclusive)))))
(aset encoded-kbd-iso2022-invocations 2 nil)
;; As simply setting unread-command-events may result in
;; infinite-loop for characters 160..255, this is a temporary
;; workaround until we found a better solution.
(let ((last-command-char char))
(self-insert-command arg))))))
(defun encoded-kbd-self-insert-iso2022-8bit (ignore)
(let ((char (encoded-kbd-last-key))
(charset (aref encoded-kbd-iso2022-designations
(or (aref encoded-kbd-iso2022-invocations 2)
(aref encoded-kbd-iso2022-invocations 1)))))
(aset encoded-kbd-iso2022-invocations 2 nil)
(vector (if (= (charset-dimension charset) 1)
(make-char charset char)
(make-char charset char (read-char-exclusive))))))
(defun encoded-kbd-self-insert-sjis ()
(interactive)
(let ((char (if (or (< last-command-char ?\xA0) (>= last-command-char ?\xE0))
(decode-sjis-char (+ (ash last-command-char 8)
(read-char-exclusive)))
(make-char 'katakana-jisx0201 last-command-char))))
(setq unread-command-events (cons char unread-command-events))))
(defun encoded-kbd-self-insert-sjis (ignore)
(let ((char (encoded-kbd-last-key)))
(vector
(if (or (< char ?\xA0) (>= char ?\xE0))
(decode-sjis-char (+ (ash char 8) (read-char-exclusive)))
(make-char 'katakana-jisx0201 char)))))
(defun encoded-kbd-self-insert-big5 ()
(interactive)
(let ((char (decode-big5-char (+ (ash last-command-char 8)
(read-char-exclusive)))))
(setq unread-command-events (cons char unread-command-events))))
(defun encoded-kbd-self-insert-big5 (ignore)
(let ((char (encoded-kbd-last-key)))
(vector
(decode-big5-char (+ (ash char 8) (read-char-exclusive))))))
(defun encoded-kbd-self-insert-ccl ()
(interactive)
(let ((str (char-to-string last-command-char))
(defun encoded-kbd-self-insert-ccl (ignore)
(let ((str (char-to-string (encoded-kbd-last-key)))
(ccl (coding-system-get (keyboard-coding-system) :ccl-decoder))
(vec [nil nil nil nil nil nil nil nil nil])
result)
(while (= (length (setq result (ccl-execute-on-string ccl vec str t))) 0)
(dotimes (i 9) (aset vec i nil))
(setq str (format "%s%c" str (read-char-exclusive))))
(setq unread-command-events
(append result unread-command-events))))
(vector (aref result 0))))
(defun encoded-kbd-self-insert-charset (arg)
(interactive "p")
@ -276,7 +213,7 @@ The following key sequence may cause multilingual text insertion."
(defun encoded-kbd-setup-keymap (coding)
;; At first, reset the keymap.
(setcdr encoded-kbd-mode-map nil)
(define-key encoded-kbd-mode-map "\e" nil)
;; Then setup the keymap according to the keyboard coding system.
(cond
((eq encoded-kbd-coding 'charset)
@ -289,38 +226,64 @@ The following key sequence may cause multilingual text insertion."
(vector from) 'encoded-kbd-self-insert-charset)
(setq from (1+ from)))))
((eq encoded-kbd-coding 'sjis)
((eq (coding-system-type coding) 1) ; SJIS
(let ((i 128))
(while (< i 256)
(define-key encoded-kbd-mode-map
(define-key key-translation-map
(vector i) 'encoded-kbd-self-insert-sjis)
(setq i (1+ i)))))
(setq i (1+ i))))
8)
((eq encoded-kbd-coding 'big5)
((eq (coding-system-type coding) 3) ; Big5
(let ((i 161))
(while (< i 255)
(define-key encoded-kbd-mode-map
(define-key key-translation-map
(vector i) 'encoded-kbd-self-insert-big5)
(setq i (1+ i)))))
(setq i (1+ i))))
8)
((eq encoded-kbd-coding 'iso2022-7)
(define-key encoded-kbd-mode-map "\e" 'encoded-kbd-iso2022-esc-prefix))
((eq (coding-system-type coding) 2) ; ISO-2022
(let ((flags (coding-system-flags coding))
use-designation)
(if (aref flags 8)
nil ; Don't support locking-shift.
(setq encoded-kbd-iso2022-designations (make-vector 4 nil)
encoded-kbd-iso2022-invocations (make-vector 3 nil))
(dotimes (i 4)
(if (aref flags i)
(if (charsetp (aref flags i))
(aset encoded-kbd-iso2022-designations
i (aref flags i))
(setq use-designation t)
(if (charsetp (car-safe (aref flags i)))
(aset encoded-kbd-iso2022-designations
i (car (aref flags i)))))))
(aset encoded-kbd-iso2022-invocations 0 0)
(if (aref encoded-kbd-iso2022-designations 1)
(aset encoded-kbd-iso2022-invocations 1 1))
(when use-designation
(define-key encoded-kbd-mode-map "\e" 'encoded-kbd-iso2022-esc-prefix)
(define-key key-translation-map "\e" 'encoded-kbd-iso2022-esc-prefix))
(when (or (aref flags 2) (aref flags 3))
(define-key key-translation-map
[?\216] 'encoded-kbd-iso2022-single-shift)
(define-key key-translation-map
[?\217] 'encoded-kbd-iso2022-single-shift))
(or (eq (aref flags 0) 'ascii)
(dotimes (i 96)
(define-key key-translation-map
(vector (+ 32 i)) 'encoded-kbd-self-insert-iso2022-7bit)))
(if (aref flags 7)
t
(dotimes (i 96)
(define-key key-translation-map
(vector (+ 160 i)) 'encoded-kbd-self-insert-iso2022-8bit))
8))))
((eq encoded-kbd-coding 'iso2022-8)
(define-key encoded-kbd-mode-map
(vector ?\216) 'encoded-kbd-self-insert-iso2022-8bit)
(define-key encoded-kbd-mode-map
(vector ?\217) 'encoded-kbd-self-insert-iso2022-8bit)
(let ((i 160))
(while (< i 256)
(define-key encoded-kbd-mode-map
(vector i) 'encoded-kbd-self-insert-iso2022-8bit)
(setq i (1+ i)))))
((eq encoded-kbd-coding 'ccl)
((eq (coding-system-type coding) 4) ; CCL-base
(let ((valid-codes (or (coding-system-get coding :valid)
'((128 . 255))))
elt from to)
elt from to valid)
(while valid-codes
(setq elt (car valid-codes) valid-codes (cdr valid-codes))
(if (consp elt)
@ -328,9 +291,10 @@ The following key sequence may cause multilingual text insertion."
(setq from (setq to elt)))
(while (<= from to)
(if (>= from 128)
(define-key encoded-kbd-mode-map
(define-key key-translation-map
(vector from) 'encoded-kbd-self-insert-ccl))
(setq from (1+ from))))))
(setq from (1+ from))))
8))
((eq encoded-kbd-coding 'utf-8)
(let ((i #xC0))
@ -340,8 +304,11 @@ The following key sequence may cause multilingual text insertion."
(setq i (1+ i)))))
(t
(error "Invalid value in encoded-kbd-coding: %s" encoded-kbd-coding))))
nil)))
;; key-translation-map at the time Encoded-kbd mode is turned on is
;; saved here.
(defvar saved-key-translation-map nil)
;; Input mode at the time Encoded-kbd mode is turned on is saved here.
(defvar saved-input-mode nil)

View File

@ -1434,374 +1434,388 @@ consing a string.)"
(if all (nreverse value-list) (car value-list))
))
(defcustom mail-extr-disable-voodoo "\\cj"
"*If it is a regexp, names matching it will never be modified.
If it is neither nil nor a string, modifying of names will never take
place. It affects how `mail-extract-address-components' works."
:type '(choice (regexp :size 0)
(const :tag "Always enabled" nil)
(const :tag "Always disabled" t))
:group 'mail-extr)
(defun mail-extr-voodoo (mbox-beg mbox-end canonicalization-buffer)
(let ((word-count 0)
(case-fold-search nil)
mixed-case-flag lower-case-flag ;;upper-case-flag
suffix-flag last-name-comma-flag
;;cbeg cend
initial
begin-again-flag
drop-this-word-if-trailing-flag
drop-last-word-if-trailing-flag
word-found-flag
this-word-beg last-word-beg
name-beg name-end
name-done-flag
)
(save-excursion
(set-syntax-table mail-extr-address-text-syntax-table)
(unless (and mail-extr-disable-voodoo
(or (not (stringp mail-extr-disable-voodoo))
(progn
(goto-char (point-min))
(re-search-forward mail-extr-disable-voodoo nil t))))
(let ((word-count 0)
(case-fold-search nil)
mixed-case-flag lower-case-flag ;;upper-case-flag
suffix-flag last-name-comma-flag
;;cbeg cend
initial
begin-again-flag
drop-this-word-if-trailing-flag
drop-last-word-if-trailing-flag
word-found-flag
this-word-beg last-word-beg
name-beg name-end
name-done-flag
)
(save-excursion
(set-syntax-table mail-extr-address-text-syntax-table)
;; Get rid of comments.
(goto-char (point-min))
(while (not (eobp))
;; Initialize for this iteration of the loop.
(skip-chars-forward "^({[\"'`")
(let ((cbeg (point)))
(set-syntax-table mail-extr-address-text-comment-syntax-table)
(if (memq (following-char) '(?\' ?\`))
(search-forward "'" nil 'move
(if (eq ?\' (following-char)) 2 1))
(or (mail-extr-safe-move-sexp 1)
(goto-char (point-max))))
(set-syntax-table mail-extr-address-text-syntax-table)
(when (eq (char-after cbeg) ?\()
;; Delete the comment itself.
(delete-region cbeg (point))
;; Canonicalize whitespace where the comment was.
(skip-chars-backward " \t")
(if (looking-at "\\([ \t]+$\\|[ \t]+,\\)")
(replace-match "")
(setq cbeg (point))
(skip-chars-forward " \t")
(if (bobp)
(delete-region (point) cbeg)
(just-one-space))))))
;; This was moved above.
;; Fix . used as space
;; But it belongs here because it occurs not only as
;; rypens@reks.uia.ac.be (Piet.Rypens)
;; but also as
;; "Piet.Rypens" <rypens@reks.uia.ac.be>
;;(goto-char (point-min))
;;(while (re-search-forward mail-extr-bad-dot-pattern nil t)
;; (replace-match "\\1 \\2" t))
(unless (search-forward " " nil t)
;; Get rid of comments.
(goto-char (point-min))
(cond ((search-forward "_" nil t)
;; Handle the *idiotic* use of underlines as spaces.
;; Example: fml@foo.bar.dom (First_M._Last)
(goto-char (point-min))
(while (search-forward "_" nil t)
(replace-match " " t)))
((search-forward "." nil t)
;; Fix . used as space
;; Example: danj1@cb.att.com (daniel.jacobson)
(goto-char (point-min))
(while (re-search-forward mail-extr-bad-dot-pattern nil t)
(replace-match "\\1 \\2" t)))))
(while (not (eobp))
;; Initialize for this iteration of the loop.
(skip-chars-forward "^({[\"'`")
(let ((cbeg (point)))
(set-syntax-table mail-extr-address-text-comment-syntax-table)
(if (memq (following-char) '(?\' ?\`))
(search-forward "'" nil 'move
(if (eq ?\' (following-char)) 2 1))
(or (mail-extr-safe-move-sexp 1)
(goto-char (point-max))))
(set-syntax-table mail-extr-address-text-syntax-table)
(when (eq (char-after cbeg) ?\()
;; Delete the comment itself.
(delete-region cbeg (point))
;; Canonicalize whitespace where the comment was.
(skip-chars-backward " \t")
(if (looking-at "\\([ \t]+$\\|[ \t]+,\\)")
(replace-match "")
(setq cbeg (point))
(skip-chars-forward " \t")
(if (bobp)
(delete-region (point) cbeg)
(just-one-space))))))
;; Loop over the words (and other junk) in the name.
(goto-char (point-min))
(while (not name-done-flag)
;; This was moved above.
;; Fix . used as space
;; But it belongs here because it occurs not only as
;; rypens@reks.uia.ac.be (Piet.Rypens)
;; but also as
;; "Piet.Rypens" <rypens@reks.uia.ac.be>
;;(goto-char (point-min))
;;(while (re-search-forward mail-extr-bad-dot-pattern nil t)
;; (replace-match "\\1 \\2" t))
(when word-found-flag
;; Last time through this loop we skipped over a word.
(setq last-word-beg this-word-beg)
(setq drop-last-word-if-trailing-flag
drop-this-word-if-trailing-flag)
(setq word-found-flag nil))
(unless (search-forward " " nil t)
(goto-char (point-min))
(cond ((search-forward "_" nil t)
;; Handle the *idiotic* use of underlines as spaces.
;; Example: fml@foo.bar.dom (First_M._Last)
(goto-char (point-min))
(while (search-forward "_" nil t)
(replace-match " " t)))
((search-forward "." nil t)
;; Fix . used as space
;; Example: danj1@cb.att.com (daniel.jacobson)
(goto-char (point-min))
(while (re-search-forward mail-extr-bad-dot-pattern nil t)
(replace-match "\\1 \\2" t)))))
(when begin-again-flag
;; Last time through the loop we found something that
;; indicates we should pretend we are beginning again from
;; the start.
(setq word-count 0)
(setq last-word-beg nil)
(setq drop-last-word-if-trailing-flag nil)
(setq mixed-case-flag nil)
(setq lower-case-flag nil)
;; (setq upper-case-flag nil)
(setq begin-again-flag nil))
;; Loop over the words (and other junk) in the name.
(goto-char (point-min))
(while (not name-done-flag)
;; Initialize for this iteration of the loop.
(mail-extr-skip-whitespace-forward)
(if (eq word-count 0) (narrow-to-region (point) (point-max)))
(setq this-word-beg (point))
(setq drop-this-word-if-trailing-flag nil)
(when word-found-flag
;; Last time through this loop we skipped over a word.
(setq last-word-beg this-word-beg)
(setq drop-last-word-if-trailing-flag
drop-this-word-if-trailing-flag)
(setq word-found-flag nil))
;; Decide what to do based on what we are looking at.
(cond
(when begin-again-flag
;; Last time through the loop we found something that
;; indicates we should pretend we are beginning again from
;; the start.
(setq word-count 0)
(setq last-word-beg nil)
(setq drop-last-word-if-trailing-flag nil)
(setq mixed-case-flag nil)
(setq lower-case-flag nil)
;; (setq upper-case-flag nil)
(setq begin-again-flag nil))
;; Delete title
((and (eq word-count 0)
(looking-at mail-extr-full-name-prefixes))
(goto-char (match-end 0))
(narrow-to-region (point) (point-max)))
;; Stop after name suffix
((and (>= word-count 2)
(looking-at mail-extr-full-name-suffix-pattern))
(mail-extr-skip-whitespace-backward)
(setq suffix-flag (point))
(if (eq ?, (following-char))
(forward-char 1)
(insert ?,))
;; Enforce at least one space after comma
(or (eq ?\ (following-char))
(insert ?\ ))
;; Initialize for this iteration of the loop.
(mail-extr-skip-whitespace-forward)
(cond ((memq (following-char) '(?j ?J ?s ?S))
(capitalize-word 1)
(if (eq (following-char) ?.)
(forward-char 1)
(insert ?.)))
(t
(upcase-word 1)))
(setq word-found-flag t)
(setq name-done-flag t))
(if (eq word-count 0) (narrow-to-region (point) (point-max)))
(setq this-word-beg (point))
(setq drop-this-word-if-trailing-flag nil)
;; Handle SCA names
((looking-at "MKA \\(.+\\)") ; "Mundanely Known As"
(goto-char (match-beginning 1))
(narrow-to-region (point) (point-max))
(setq begin-again-flag t))
;; Check for initial last name followed by comma
((and (eq ?, (following-char))
(eq word-count 1))
(forward-char 1)
(setq last-name-comma-flag t)
(or (eq ?\ (following-char))
(insert ?\ )))
;; Stop before trailing comma-separated comment
;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
;; *** This case is redundant???
;;((eq ?, (following-char))
;; (setq name-done-flag t))
;; Delete parenthesized/quoted comment/nickname
((memq (following-char) '(?\( ?\{ ?\[ ?\" ?\' ?\`))
(setq cbeg (point))
(set-syntax-table mail-extr-address-text-comment-syntax-table)
(cond ((memq (following-char) '(?\' ?\`))
(or (search-forward "'" nil t
(if (eq ?\' (following-char)) 2 1))
(delete-char 1)))
(t
(or (mail-extr-safe-move-sexp 1)
(goto-char (point-max)))))
(set-syntax-table mail-extr-address-text-syntax-table)
(setq cend (point))
;; Decide what to do based on what we are looking at.
(cond
;; Handle case of entire name being quoted
;; Delete title
((and (eq word-count 0)
(looking-at " *\\'")
(>= (- cend cbeg) 2))
(narrow-to-region (1+ cbeg) (1- cend))
(goto-char (point-min)))
(looking-at mail-extr-full-name-prefixes))
(goto-char (match-end 0))
(narrow-to-region (point) (point-max)))
;; Stop after name suffix
((and (>= word-count 2)
(looking-at mail-extr-full-name-suffix-pattern))
(mail-extr-skip-whitespace-backward)
(setq suffix-flag (point))
(if (eq ?, (following-char))
(forward-char 1)
(insert ?,))
;; Enforce at least one space after comma
(or (eq ?\ (following-char))
(insert ?\ ))
(mail-extr-skip-whitespace-forward)
(cond ((memq (following-char) '(?j ?J ?s ?S))
(capitalize-word 1)
(if (eq (following-char) ?.)
(forward-char 1)
(insert ?.)))
(t
(upcase-word 1)))
(setq word-found-flag t)
(setq name-done-flag t))
;; Handle SCA names
((looking-at "MKA \\(.+\\)") ; "Mundanely Known As"
(goto-char (match-beginning 1))
(narrow-to-region (point) (point-max))
(setq begin-again-flag t))
;; Check for initial last name followed by comma
((and (eq ?, (following-char))
(eq word-count 1))
(forward-char 1)
(setq last-name-comma-flag t)
(or (eq ?\ (following-char))
(insert ?\ )))
;; Stop before trailing comma-separated comment
;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
;; *** This case is redundant???
;;((eq ?, (following-char))
;; (setq name-done-flag t))
;; Delete parenthesized/quoted comment/nickname
((memq (following-char) '(?\( ?\{ ?\[ ?\" ?\' ?\`))
(setq cbeg (point))
(set-syntax-table mail-extr-address-text-comment-syntax-table)
(cond ((memq (following-char) '(?\' ?\`))
(or (search-forward "'" nil t
(if (eq ?\' (following-char)) 2 1))
(delete-char 1)))
(t
(or (mail-extr-safe-move-sexp 1)
(goto-char (point-max)))))
(set-syntax-table mail-extr-address-text-syntax-table)
(setq cend (point))
(cond
;; Handle case of entire name being quoted
((and (eq word-count 0)
(looking-at " *\\'")
(>= (- cend cbeg) 2))
(narrow-to-region (1+ cbeg) (1- cend))
(goto-char (point-min)))
(t
;; Handle case of quoted initial
(if (and (or (= 3 (- cend cbeg))
(and (= 4 (- cend cbeg))
(eq ?. (char-after (+ 2 cbeg)))))
(not (looking-at " *\\'")))
(setq initial (char-after (1+ cbeg)))
(setq initial nil))
(delete-region cbeg cend)
(if initial
(insert initial ". ")))))
;; Handle *Stupid* VMS date stamps
((looking-at mail-extr-stupid-vms-date-stamp-pattern)
(replace-match "" t))
;; Handle Chinese characters.
((looking-at mail-extr-hz-embedded-gb-encoded-chinese-pattern)
(goto-char (match-end 0))
(setq word-found-flag t))
;; Skip initial garbage characters.
;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
((and (eq word-count 0)
(looking-at mail-extr-leading-garbage))
(goto-char (match-end 0))
;; *** Skip backward over these???
;; (skip-chars-backward "& \"")
(narrow-to-region (point) (point-max)))
;; Various stopping points
((or
;; Stop before ALL CAPS acronyms, if preceded by mixed-case
;; words. Example: XT-DEM.
(and (>= word-count 2)
mixed-case-flag
(looking-at mail-extr-weird-acronym-pattern)
(not (looking-at mail-extr-roman-numeral-pattern)))
;; Stop before trailing alternative address
(looking-at mail-extr-alternative-address-pattern)
;; Stop before trailing comment not introduced by comma
;; THIS CASE MUST BE AFTER AN EARLIER CASE.
(looking-at mail-extr-trailing-comment-start-pattern)
;; Stop before telephone numbers
(and (>= word-count 1)
(looking-at mail-extr-telephone-extension-pattern)))
(setq name-done-flag t))
;; Delete ham radio call signs
((looking-at mail-extr-ham-call-sign-pattern)
(delete-region (match-beginning 0) (match-end 0)))
;; Fixup initials
((looking-at mail-extr-initial-pattern)
(or (eq (following-char) (upcase (following-char)))
(setq lower-case-flag t))
(forward-char 1)
(if (eq ?. (following-char))
(forward-char 1)
(insert ?.))
(or (eq ?\ (following-char))
(insert ?\ ))
(setq word-found-flag t))
;; Handle BITNET LISTSERV list names.
((and (eq word-count 0)
(looking-at mail-extr-listserv-list-name-pattern))
(narrow-to-region (match-beginning 1) (match-end 1))
(setq word-found-flag t)
(setq name-done-flag t))
;; Handle & substitution, when & is last and is not first.
((and (> word-count 0)
(eq ?\ (preceding-char))
(eq (following-char) ?&)
(eq (1+ (point)) (point-max)))
(delete-char 1)
(capitalize-region
(point)
(progn
(insert-buffer-substring canonicalization-buffer
mbox-beg mbox-end)
(point)))
(setq disable-initial-guessing-flag t)
(setq word-found-flag t))
;; Handle & between names, as in "Bob & Susie".
((and (> word-count 0) (eq (following-char) ?\&))
(setq name-beg (point))
(setq name-end (1+ name-beg))
(setq word-found-flag t)
(goto-char name-end))
;; Regular name words
((looking-at mail-extr-name-pattern)
(setq name-beg (point))
(setq name-end (match-end 0))
;; Certain words will be dropped if they are at the end.
(and (>= word-count 2)
(not lower-case-flag)
(or
;; Trailing 4-or-more letter lowercase words preceded by
;; mixed case or uppercase words will be dropped.
(looking-at "[[:lower:]]\\{4,\\}[ \t]*\\'")
;; Drop a trailing word which is terminated with a period.
(eq ?. (char-after (1- name-end))))
(setq drop-this-word-if-trailing-flag t))
;; Set the flags that indicate whether we have seen a lowercase
;; word, a mixed case word, and an uppercase word.
(if (re-search-forward "[[:lower:]]" name-end t)
(if (progn
(goto-char name-beg)
(re-search-forward "[[:upper:]]" name-end t))
(setq mixed-case-flag t)
(setq lower-case-flag t))
;; (setq upper-case-flag t)
)
(goto-char name-end)
(setq word-found-flag t))
;; Allow a number as a word, if it doesn't mean anything else.
((looking-at "[0-9]+\\>")
(setq name-beg (point))
(setq name-end (match-end 0))
(goto-char name-end)
(setq word-found-flag t))
(t
;; Handle case of quoted initial
(if (and (or (= 3 (- cend cbeg))
(and (= 4 (- cend cbeg))
(eq ?. (char-after (+ 2 cbeg)))))
(not (looking-at " *\\'")))
(setq initial (char-after (1+ cbeg)))
(setq initial nil))
(delete-region cbeg cend)
(if initial
(insert initial ". ")))))
(setq name-done-flag t)
))
;; Handle *Stupid* VMS date stamps
((looking-at mail-extr-stupid-vms-date-stamp-pattern)
(replace-match "" t))
;; Count any word that we skipped over.
(if word-found-flag
(setq word-count (1+ word-count))))
;; Handle Chinese characters.
((looking-at mail-extr-hz-embedded-gb-encoded-chinese-pattern)
(goto-char (match-end 0))
(setq word-found-flag t))
;; If the last thing in the name is 2 or more periods, or one or more
;; other sentence terminators (but not a single period) then keep them
;; and the preceding word. This is for the benefit of whole sentences
;; in the name field: it's better behavior than dropping the last word
;; of the sentence...
(if (and (not suffix-flag)
(looking-at "\\(\\.+\\|[?!;:.][?!;:.]+\\|[?!;:][?!;:.]*\\)\\'"))
(goto-char (setq suffix-flag (point-max))))
;; Skip initial garbage characters.
;; THIS CASE MUST BE AFTER THE PRECEDING CASES.
((and (eq word-count 0)
(looking-at mail-extr-leading-garbage))
(goto-char (match-end 0))
;; *** Skip backward over these???
;; (skip-chars-backward "& \"")
;; Drop everything after point and certain trailing words.
(narrow-to-region (point-min)
(or (and drop-last-word-if-trailing-flag
last-word-beg)
(point)))
;; Xerox's mailers SUCK!!!!!!
;; We simply refuse to believe that any last name is PARC or ADOC.
;; If it looks like that is the last name, that there is no meaningful
;; here at all. Actually I guess it would be best to map patterns
;; like foo.hoser@xerox.com into foo@hoser.xerox.com, but I don't
;; actually know that that is what's going on.
(unless suffix-flag
(goto-char (point-min))
(let ((case-fold-search t))
(if (looking-at "[-A-Za-z_]+[. ]\\(PARC\\|ADOC\\)\\'")
(erase-buffer))))
;; If last name first put it at end (but before suffix)
(when last-name-comma-flag
(goto-char (point-min))
(search-forward ",")
(setq name-end (1- (point)))
(goto-char (or suffix-flag (point-max)))
(or (eq ?\ (preceding-char))
(insert ?\ ))
(insert-buffer-substring (current-buffer) (point-min) name-end)
(goto-char name-end)
(skip-chars-forward "\t ,")
(narrow-to-region (point) (point-max)))
;; Various stopping points
((or
;; Delete leading and trailing junk characters.
;; *** This is probably completely unneeded now.
;;(goto-char (point-max))
;;(skip-chars-backward mail-extr-non-end-name-chars)
;;(if (eq ?. (following-char))
;; (forward-char 1))
;;(narrow-to-region (point)
;; (progn
;; (goto-char (point-min))
;; (skip-chars-forward mail-extr-non-begin-name-chars)
;; (point)))
;; Stop before ALL CAPS acronyms, if preceded by mixed-case
;; words. Example: XT-DEM.
(and (>= word-count 2)
mixed-case-flag
(looking-at mail-extr-weird-acronym-pattern)
(not (looking-at mail-extr-roman-numeral-pattern)))
;; Stop before trailing alternative address
(looking-at mail-extr-alternative-address-pattern)
;; Stop before trailing comment not introduced by comma
;; THIS CASE MUST BE AFTER AN EARLIER CASE.
(looking-at mail-extr-trailing-comment-start-pattern)
;; Stop before telephone numbers
(and (>= word-count 1)
(looking-at mail-extr-telephone-extension-pattern)))
(setq name-done-flag t))
;; Delete ham radio call signs
((looking-at mail-extr-ham-call-sign-pattern)
(delete-region (match-beginning 0) (match-end 0)))
;; Fixup initials
((looking-at mail-extr-initial-pattern)
(or (eq (following-char) (upcase (following-char)))
(setq lower-case-flag t))
(forward-char 1)
(if (eq ?. (following-char))
(forward-char 1)
(insert ?.))
(or (eq ?\ (following-char))
(insert ?\ ))
(setq word-found-flag t))
;; Handle BITNET LISTSERV list names.
((and (eq word-count 0)
(looking-at mail-extr-listserv-list-name-pattern))
(narrow-to-region (match-beginning 1) (match-end 1))
(setq word-found-flag t)
(setq name-done-flag t))
;; Handle & substitution, when & is last and is not first.
((and (> word-count 0)
(eq ?\ (preceding-char))
(eq (following-char) ?&)
(eq (1+ (point)) (point-max)))
(delete-char 1)
(capitalize-region
(point)
(progn
(insert-buffer-substring canonicalization-buffer
mbox-beg mbox-end)
(point)))
(setq disable-initial-guessing-flag t)
(setq word-found-flag t))
;; Handle & between names, as in "Bob & Susie".
((and (> word-count 0) (eq (following-char) ?\&))
(setq name-beg (point))
(setq name-end (1+ name-beg))
(setq word-found-flag t)
(goto-char name-end))
;; Regular name words
((looking-at mail-extr-name-pattern)
(setq name-beg (point))
(setq name-end (match-end 0))
;; Certain words will be dropped if they are at the end.
(and (>= word-count 2)
(not lower-case-flag)
(or
;; Trailing 4-or-more letter lowercase words preceded by
;; mixed case or uppercase words will be dropped.
(looking-at "[[:lower:]]\\{4,\\}[ \t]*\\'")
;; Drop a trailing word which is terminated with a period.
(eq ?. (char-after (1- name-end))))
(setq drop-this-word-if-trailing-flag t))
;; Set the flags that indicate whether we have seen a lowercase
;; word, a mixed case word, and an uppercase word.
(if (re-search-forward "[[:lower:]]" name-end t)
(if (progn
(goto-char name-beg)
(re-search-forward "[[:upper:]]" name-end t))
(setq mixed-case-flag t)
(setq lower-case-flag t))
;; (setq upper-case-flag t)
)
(goto-char name-end)
(setq word-found-flag t))
;; Allow a number as a word, if it doesn't mean anything else.
((looking-at "[0-9]+\\>")
(setq name-beg (point))
(setq name-end (match-end 0))
(goto-char name-end)
(setq word-found-flag t))
(t
(setq name-done-flag t)
))
;; Count any word that we skipped over.
(if word-found-flag
(setq word-count (1+ word-count))))
;; If the last thing in the name is 2 or more periods, or one or more
;; other sentence terminators (but not a single period) then keep them
;; and the preceding word. This is for the benefit of whole sentences
;; in the name field: it's better behavior than dropping the last word
;; of the sentence...
(if (and (not suffix-flag)
(looking-at "\\(\\.+\\|[?!;:.][?!;:.]+\\|[?!;:][?!;:.]*\\)\\'"))
(goto-char (setq suffix-flag (point-max))))
;; Drop everything after point and certain trailing words.
(narrow-to-region (point-min)
(or (and drop-last-word-if-trailing-flag
last-word-beg)
(point)))
;; Xerox's mailers SUCK!!!!!!
;; We simply refuse to believe that any last name is PARC or ADOC.
;; If it looks like that is the last name, that there is no meaningful
;; here at all. Actually I guess it would be best to map patterns
;; like foo.hoser@xerox.com into foo@hoser.xerox.com, but I don't
;; actually know that that is what's going on.
(unless suffix-flag
;; Compress whitespace
(goto-char (point-min))
(let ((case-fold-search t))
(if (looking-at "[-A-Za-z_]+[. ]\\(PARC\\|ADOC\\)\\'")
(erase-buffer))))
;; If last name first put it at end (but before suffix)
(when last-name-comma-flag
(goto-char (point-min))
(search-forward ",")
(setq name-end (1- (point)))
(goto-char (or suffix-flag (point-max)))
(or (eq ?\ (preceding-char))
(insert ?\ ))
(insert-buffer-substring (current-buffer) (point-min) name-end)
(goto-char name-end)
(skip-chars-forward "\t ,")
(narrow-to-region (point) (point-max)))
;; Delete leading and trailing junk characters.
;; *** This is probably completely unneeded now.
;;(goto-char (point-max))
;;(skip-chars-backward mail-extr-non-end-name-chars)
;;(if (eq ?. (following-char))
;; (forward-char 1))
;;(narrow-to-region (point)
;; (progn
;; (goto-char (point-min))
;; (skip-chars-forward mail-extr-non-begin-name-chars)
;; (point)))
;; Compress whitespace
(goto-char (point-min))
(while (re-search-forward "[ \t\n]+" nil t)
(replace-match (if (eobp) "" " ") t))
)))
(while (re-search-forward "[ \t\n]+" nil t)
(replace-match (if (eobp) "" " ") t))
))))

View File

@ -1,6 +1,7 @@
;;; novice.el --- handling of disabled commands ("novice mode") for Emacs
;; Copyright (C) 1985, 1986, 1987, 1994, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1985, 1986, 1987, 1994, 2002, 2004
;; Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: internal, help
@ -36,12 +37,17 @@
;; and the keys are returned by (this-command-keys).
;;;###autoload
(defvar disabled-command-hook 'disabled-command-hook
(defvar disabled-command-function 'disabled-command-function
"Function to call to handle disabled commands.
If nil, the feature is disabled, i.e., all commands work normally.")
(defvaralias 'disabled-command-hook 'disabled-command-function)
(make-obsolete-variable
'disabled-command-hook
"use the variable `disabled-command-function' instead." "21.4")
;;;###autoload
(defun disabled-command-hook (&rest ignore)
(defun disabled-command-function (&rest ignore)
(let (char)
(save-window-excursion
(with-output-to-temp-buffer "*Help*"
@ -91,7 +97,7 @@ SPC to try the command just this once, but leave it disabled.
(ding)
(message "Please type y, n, ! or SPC (the space bar): "))))
(if (= char ?!)
(setq disabled-command-hook nil))
(setq disabled-command-function nil))
(if (= char ?y)
(if (and user-init-file
(not (string= "" user-init-file))

View File

@ -4304,6 +4304,12 @@ make the common parts less visible than normal, so that the rest
of the differing parts is, by contrast, slightly highlighted."
:group 'completion)
;; This is for packages that need to bind it to a non-default regexp
;; in order to make the first-differing character highlight work
;; to their liking
(defvar completion-root-regexp "^/"
"Regexp to use in `completion-setup-function' to find the root directory.")
(defun completion-setup-function ()
(let ((mainbuf (current-buffer))
(mbuf-contents (minibuffer-contents)))
@ -4332,7 +4338,7 @@ of the differing parts is, by contrast, slightly highlighted."
(with-current-buffer mainbuf
(save-excursion
(goto-char (point-max))
(skip-chars-backward "^/")
(skip-chars-backward completion-root-regexp)
(- (point) (minibuffer-prompt-end)))))
;; Otherwise, in minibuffer, the whole input is being completed.
(if (minibufferp mainbuf)

View File

@ -566,7 +566,7 @@ The order of bindings in a keymap matters when it is used as a menu."
(defmacro kbd (keys)
"Convert KEYS to the internal Emacs key representation.
KEYS should be a string constant in the format used for
saving keyboard macros (see `insert-kbd-macro')."
saving keyboard macros (see `edmacro-mode')."
(read-kbd-macro keys))
(put 'keyboard-translate-table 'char-table-extra-slots 0)
@ -2304,13 +2304,13 @@ which in most cases is shared with all other buffers in the same major mode."
(defun global-unset-key (key)
"Remove global binding of KEY.
KEY is a string representing a sequence of keystrokes."
KEY is a string or vector representing a sequence of keystrokes."
(interactive "kUnset key globally: ")
(global-set-key key nil))
(defun local-unset-key (key)
"Remove local binding of KEY.
KEY is a string representing a sequence of keystrokes."
KEY is a string or vector representing a sequence of keystrokes."
(interactive "kUnset key locally: ")
(if (current-local-map)
(local-set-key key nil))

View File

@ -3187,6 +3187,8 @@ It will read a directory name from the minibuffer when invoked."
(setq err "Empty sexp -- use `nil'?")
(unless (widget-apply widget :match (read (current-buffer)))
(setq err (widget-get widget :type-error))))
;; Allow whitespace after expression.
(skip-syntax-forward "\\s-")
(if (and (not (eobp))
(not err))
(setq err (format "Junk at end of expression: %s"

View File

@ -1,3 +1,48 @@
2004-08-08 Luc Teirlinck <teirllm@auburn.edu>
* objects.texi (Character Type): Reposition `@anchor' to prevent
double space inside sentence in Info.
* hooks.texi (Standard Hooks): `disabled-command-hook' has been
renamed to `disabled-command-function'.
* commands.texi (Key Sequence Input): Remove unnecessary anchor,
(Command Loop Info): Replace reference to it.
(Disabling Commands): `disabled-command-hook' has been renamed to
`disabled-command-function'.
2004-08-07 Luc Teirlinck <teirllm@auburn.edu>
* os.texi (Translating Input): Only non-prefix bindings in
`key-translation-map' override actual key bindings. Warn about
possible indirect effect of actual key bindings on non-prefix
bindings in `key-translation-map'.
2004-08-06 Luc Teirlinck <teirllm@auburn.edu>
* minibuf.texi (High-Level Completion): Add anchor for definition
of `read-variable'.
* commands.texi: Various changes in addition to:
(Using Interactive): Clarify description of `interactive-form'.
(Interactive Call): Mention default for KEYS argument to
`call-interactively'.
(Command Loop Info): Clarify description of `this-command-keys'.
Mention KEEP-RECORD argument to `clear-this-command-keys'.
Value of `last-event-frame' can be `macro'.
(Repeat Events): `double-click-fuzz' is also used to distinguish
clicks and drags.
(Classifying Events): Clarify descriptions of `event-modifiers'
`event-basic-type' and `event-convert-list'.
(Accessing Events): `posn-timestamp' takes POSITION argument.
(Quoted Character Input): Clarify description of
`read-quoted-char' and fix example.
(Quitting): Add `with-local-quit'.
(Disabling Commands): Correct and clarify descriptions of
`enable-command' and `disable-command'.
Mention what happens if `disabled-command-hook' is nil.
(Keyboard Macros): Mention LOOPFUNC arg to `execute-kbd-macro'.
Describe `executing-kbd-macro' instead of obsolete `executing-macro'.
2004-07-24 Luc Teirlinck <teirllm@auburn.edu>
* frames.texi: Various changes in addition to:

View File

@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2004
@c Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/commands
@ -119,7 +119,7 @@ controls the reading of arguments for an interactive call.
This section describes how to write the @code{interactive} form that
makes a Lisp function an interactively-callable command, and how to
examine a commands's @code{interactive} form.
examine a command's @code{interactive} form.
@defspec interactive arg-descriptor
@cindex argument descriptors
@ -235,12 +235,13 @@ string (starting with the first character that is not @samp{*} or
@cindex examining the @code{interactive} form
@defun interactive-form function
This function returns the @code{interactive} form of @var{function}. If
@var{function} is a command (@pxref{Interactive Call}), the value is a
list of the form @code{(interactive @var{spec})}, where @var{spec} is
the descriptor specification used by the command's @code{interactive}
form to compute the function's arguments. If @var{function} is not a
command, @code{interactive-form} returns @code{nil}.
This function returns the @code{interactive} form of @var{function}.
If @var{function} is an interactively callable function
(@pxref{Interactive Call}), the value is the command's
@code{interactive} form @code{(interactive @var{spec})}, which
specifies how to compute its arguments. Otherwise, the value is
@code{nil}. If @var{function} is a symbol, its function definition is
used.
@end defun
@node Interactive Codes
@ -416,8 +417,9 @@ the string.) Other characters that normally terminate a symbol (e.g.,
parentheses and brackets) do not do so here. Prompt.
@item v
A variable declared to be a user option (i.e., satisfying the predicate
@code{user-variable-p}). @xref{High-Level Completion}. Existing,
A variable declared to be a user option (i.e., satisfying the
predicate @code{user-variable-p}). This reads the variable using
@code{read-variable}. @xref{Definition of read-variable}. Existing,
Completion, Prompt.
@item x
@ -528,10 +530,12 @@ realistic example of using @code{commandp}.
@defun call-interactively command &optional record-flag keys
This function calls the interactively callable function @var{command},
reading arguments according to its interactive calling specifications.
An error is signaled if @var{command} is not a function or if it cannot
be called interactively (i.e., is not a command). Note that keyboard
macros (strings and vectors) are not accepted, even though they are
considered commands, because they are not functions.
It returns whatever @var{command} returns. An error is signaled if
@var{command} is not a function or if it cannot be called
interactively (i.e., is not a command). Note that keyboard macros
(strings and vectors) are not accepted, even though they are
considered commands, because they are not functions. If @var{command}
is a symbol, then @code{call-interactively} uses its function definition.
@cindex record command history
If @var{record-flag} is non-@code{nil}, then this command and its
@ -541,6 +545,8 @@ an argument. @xref{Command History}.
The argument @var{keys}, if given, specifies the sequence of events to
supply if the command inquires which events were used to invoke it.
If @var{keys} is omitted or @code{nil}, the return value of
@code{this-command-keys} is used. @xref{Definition of this-command-keys}.
@end defun
@defun command-execute command &optional record-flag keys special
@ -551,7 +557,8 @@ callable function or a keyboard macro.
A string or vector as @var{command} is executed with
@code{execute-kbd-macro}. A function is passed to
@code{call-interactively}, along with the optional @var{record-flag}.
@code{call-interactively}, along with the optional @var{record-flag}
and @var{keys}.
A symbol is handled by using its function definition in its place. A
symbol with an @code{autoload} definition counts as a command if it was
@ -559,9 +566,6 @@ declared to stand for an interactively callable function. Such a
definition is handled by loading the specified library and then
rechecking the definition of the symbol.
The argument @var{keys}, if given, specifies the sequence of events to
supply if the command inquires which events were used to invoke it.
The argument @var{special}, if given, means to ignore the prefix
argument and not clear it. This is used for executing special events
(@pxref{Special Events}).
@ -741,10 +745,14 @@ was specified to run but remapped into another command.
@end defvar
@defun this-command-keys
@anchor{Definition of this-command-keys}
This function returns a string or vector containing the key sequence
that invoked the present command, plus any previous commands that
generated the prefix argument for this command. The value is a string
if all those events were characters. @xref{Input Events}.
generated the prefix argument for this command. However, if the
command has called @code{read-key-sequence}, it returns the last read
key sequence. @xref{Key Sequence Input}. The value is a string if
all events in the sequence were characters that fit in a string.
@xref{Input Events}.
@example
@group
@ -762,13 +770,13 @@ input events in a string (@pxref{Strings of Events}).
@end defun
@tindex clear-this-command-keys
@defun clear-this-command-keys
@defun clear-this-command-keys &optional keep-record
This function empties out the table of events for
@code{this-command-keys} to return, and also empties the records that
the function @code{recent-keys} (@pxref{Recording Input}) will
subsequently return. This is useful after reading a password, to
prevent the password from echoing inadvertently as part of the next
command in certain cases.
@code{this-command-keys} to return. Unless @var{keep-record} is
non-@code{nil}, it also empties the records that the function
@code{recent-keys} (@pxref{Recording Input}) will subsequently return.
This is useful after reading a password, to prevent the password from
echoing inadvertently as part of the next command in certain cases.
@end defun
@defvar last-nonmenu-event
@ -809,6 +817,8 @@ Usually this is the frame that was selected when the event was
generated, but if that frame has redirected input focus to another
frame, the value is the frame to which the event was redirected.
@xref{Input Focus}.
If the last event came from a keyboard macro, the value is @code{macro}.
@end defvar
@node Adjusting Point
@ -1155,7 +1165,7 @@ the marginal areas, @var{position} has this form:
@example
(@var{window} @var{pos-or-area} (@var{x} . @var{y}) @var{timestamp}
@var{object} @var{text-pos} (@var{col} . @var{row})
@var{object} @var{text-pos} (@var{col} . @var{row})
@var{image} (@var{dx} . @var{dy}) (@var{width} . @var{height}))
@end example
@ -1387,22 +1397,25 @@ the value is 3 or greater. If @var{event} is an ordinary mouse event
(not a repeat event), the value is 1.
@end defun
@defvar double-click-fuzz
@defopt double-click-fuzz
To generate repeat events, successive mouse button presses must be at
approximately the same screen position. The value of
@code{double-click-fuzz} specifies the maximum number of pixels the
mouse may be moved between two successive clicks to make a
double-click.
@end defvar
mouse may be moved (horizontally or vertically) between two successive
clicks to make a double-click.
@defvar double-click-time
This variable is also the threshold for motion of the mouse to count
as a drag.
@end defopt
@defopt double-click-time
To generate repeat events, the number of milliseconds between
successive button presses must be less than the value of
@code{double-click-time}. Setting @code{double-click-time} to
@code{nil} disables multi-click detection entirely. Setting it to
@code{t} removes the time limit; Emacs then detects multi-clicks by
position only.
@end defvar
@end defopt
@node Motion Events
@subsection Motion Events
@ -1593,16 +1606,22 @@ This function returns a list of the modifiers that @var{event} has. The
modifiers are symbols; they include @code{shift}, @code{control},
@code{meta}, @code{alt}, @code{hyper} and @code{super}. In addition,
the modifiers list of a mouse event symbol always contains one of
@code{click}, @code{drag}, and @code{down}.
@code{click}, @code{drag}, and @code{down}. For double or triple
events, it also contains @code{double} or @code{triple}.
The argument @var{event} may be an entire event object, or just an event
type.
The argument @var{event} may be an entire event object, or just an
event type. If @var{event} is a symbol that has never been used in an
event that has been read as input in the current Emacs session, then
@code{event-modifiers} can return @code{nil}, even when @var{event}
actually has modifiers.
Here are some examples:
@example
(event-modifiers ?a)
@result{} nil
(event-modifiers ?A)
@result{} (shift)
(event-modifiers ?\C-a)
@result{} (control)
(event-modifiers ?\C-%)
@ -1627,7 +1646,8 @@ but the event symbol name itself does not contain @samp{click}.
@defun event-basic-type event
This function returns the key or mouse button that @var{event}
describes, with all modifiers removed. For example:
describes, with all modifiers removed. The @var{event} argument is as
in @code{event-modifiers}. For example:
@example
(event-basic-type ?a)
@ -1656,7 +1676,8 @@ event.
@defun event-convert-list list
This function converts a list of modifier names and a basic event type
to an event type which specifies all of them. For example,
to an event type which specifies all of them. The basic event type
must be the last element of the list. For example,
@example
(event-convert-list '(control ?a))
@ -1788,7 +1809,7 @@ is a buffer position, return the size of the character at that position.
@cindex mouse event, timestamp
@cindex timestamp of a mouse event
@defun posn-timestamp
@defun posn-timestamp position
Return the timestamp in @var{position}. This is the time at which the
event occurred, in milliseconds.
@end defun
@ -2001,7 +2022,9 @@ for example, @code{describe-key} uses it to read the key to describe.
This function reads a key sequence and returns it as a string or
vector. It keeps reading events until it has accumulated a complete key
sequence; that is, enough to specify a non-prefix command using the
currently active keymaps.
currently active keymaps. (Remember that a key sequence that starts
with a mouse event is read using the keymaps of the buffer in the
window that the mouse was in, not the current buffer.)
If the events are all characters and all can fit in a string, then
@code{read-key-sequence} returns a string (@pxref{Strings of Events}).
@ -2101,6 +2124,8 @@ from the terminal---not counting those generated by keyboard macros.
The lowest level functions for command input are those that read a
single event.
None of the three functions below suppresses quitting.
@defun read-event &optional prompt inherit-input-method
This function reads and returns the next event of command input, waiting
if necessary until an event is available. Events can come directly from
@ -2122,8 +2147,8 @@ If @code{cursor-in-echo-area} is non-@code{nil}, then @code{read-event}
moves the cursor temporarily to the echo area, to the end of any message
displayed there. Otherwise @code{read-event} does not move the cursor.
If @code{read-event} gets an event that is defined as a help character, in
some cases @code{read-event} processes the event directly without
If @code{read-event} gets an event that is defined as a help character,
then in some cases @code{read-event} processes the event directly without
returning. @xref{Help Functions}. Certain other events, called
@dfn{special events}, are also processed directly within
@code{read-event} (@pxref{Special Events}).
@ -2235,7 +2260,10 @@ The command @code{quoted-insert} uses this function.
This function is like @code{read-char}, except that if the first
character read is an octal digit (0-7), it reads any number of octal
digits (but stopping if a non-octal digit is found), and returns the
character represented by that numeric character code.
character represented by that numeric character code. If the
character that terminates the sequence of octal digits is @key{RET},
it is discarded. Any other terminating character is used as input
after this function returns.
Quitting is suppressed when the first character is read, so that the
user can enter a @kbd{C-g}. @xref{Quitting}.
@ -2252,7 +2280,7 @@ is 127 in decimal).
@group
---------- Echo Area ----------
What character-@kbd{177}
What character @kbd{1 7 7}-
---------- Echo Area ----------
@result{} 127
@ -2370,7 +2398,8 @@ during the sleep.
@cindex special events
Special events are handled at a very low level---as soon as they are
read. The @code{read-event} function processes these events itself, and
never returns them.
never returns them. Instead, it keeps waiting for the first event
that is not special and returns that one.
Events that are handled in this way do not echo, they are never grouped
into key sequences, and they never appear in the value of
@ -2544,6 +2573,28 @@ is set to a value other than @code{nil}. If @code{inhibit-quit} is
non-@code{nil}, then @code{quit-flag} has no special effect.
@end defvar
@defmac with-local-quit forms@dots{}
This macro executes @var{forms} in sequence, but allows quitting, at
least locally, within @var{body} even if @code{inhibit-quit} was
non-@code{nil} outside this construct. It returns the value of the
last form in @var{forms}.
If @code{inhibit-quit} is @code{nil} on entry to @code{with-local-quit},
it only executes the @var{forms}, and setting @code{quit-flag} causes
a normal quit. However, if @code{inhibit-quit} is non-@code{nil} so
that ordinary quitting is delayed, a non-@code{nil} @code{quit-flag}
triggers a special kind of local quit. This ends the execution of
@var{forms} and exits the @code{with-local-quit} form with
@code{quit-flag} still non-@code{nil}, so that another (ordinary) quit
will happen as soon as that is allowed. If @code{quit-flag} is
already non-@code{nil} at the beginning of @var{forms}, the local quit
happens immediately and they don't execute at all.
This macro is mainly useful in functions that can be called from
timers, @code{pre-command-hook}, @code{post-command-hook} and other
places where @code{inhibit-quit} is normally bound to @code{t}.
@end defmac
@deffn Command keyboard-quit
This function signals the @code{quit} condition with @code{(signal 'quit
nil)}. This is the same thing that quitting does. (See @code{signal}
@ -2844,25 +2895,28 @@ Disabling a command has no effect on calling it as a function from Lisp
programs.
@deffn Command enable-command command
Allow @var{command} to be executed without special confirmation from now
on, and (if the user confirms) alter the user's init file (@pxref{Init
Allow @var{command} (a symbol) to be executed without special
confirmation from now on, and alter the user's init file (@pxref{Init
File}) so that this will apply to future sessions.
@end deffn
@deffn Command disable-command command
Require special confirmation to execute @var{command} from now on, and
(if the user confirms) alter the user's init file so that this
will apply to future sessions.
alter the user's init file so that this will apply to future sessions.
@end deffn
@defvar disabled-command-hook
When the user invokes a disabled command interactively, this normal hook
is run instead of the disabled command. The hook functions can use
@code{this-command-keys} to determine what the user typed to run the
command, and thus find the command itself. @xref{Hooks}.
@defvar disabled-command-function
The value of this variable should be a function. When the user
invokes a disabled command interactively, this function is called
instead of the disabled command. It can use @code{this-command-keys}
to determine what the user typed to run the command, and thus find the
command itself.
By default, @code{disabled-command-hook} contains a function that asks
the user whether to proceed.
The value may also be @code{nil}. Then all commands work normally,
even disabled ones.
By default, the value is a function that asks the user whether to
proceed.
@end defvar
@node Command History
@ -2918,7 +2972,7 @@ representation of a keyboard macro is a string or vector containing the
events. Don't confuse keyboard macros with Lisp macros
(@pxref{Macros}).
@defun execute-kbd-macro kbdmacro &optional count
@defun execute-kbd-macro kbdmacro &optional count loopfunc
This function executes @var{kbdmacro} as a sequence of events. If
@var{kbdmacro} is a string or vector, then the events in it are executed
exactly as if they had been input by the user. The sequence is
@ -2935,10 +2989,14 @@ many times. If @var{count} is omitted or @code{nil}, @var{kbdmacro} is
executed once. If it is 0, @var{kbdmacro} is executed over and over until it
encounters an error or a failing search.
If @var{loopfunc} is non-@code{nil}, it is a function that is called,
without arguments, prior to each iteration of the macro. If
@var{loopfunc} returns @code{nil}, then this stops execution of the macro.
@xref{Reading One Event}, for an example of using @code{execute-kbd-macro}.
@end defun
@defvar executing-macro
@defvar executing-kbd-macro
This variable contains the string or vector that defines the keyboard
macro that is currently executing. It is @code{nil} if no macro is
currently executing. A command can test this variable so as to behave
@ -2947,10 +3005,11 @@ yourself.
@end defvar
@defvar defining-kbd-macro
This variable indicates whether a keyboard macro is being defined. A
command can test this variable so as to behave differently while a macro
is being defined. The commands @code{start-kbd-macro} and
@code{end-kbd-macro} set this variable---do not set it yourself.
This variable is non-@code{nil} if and only if a keyboard macro is
being defined. A command can test this variable so as to behave
differently while a macro is being defined. The commands
@code{start-kbd-macro} and @code{end-kbd-macro} set this variable---do
not set it yourself.
The variable is always local to the current terminal and cannot be
buffer-local. @xref{Multiple Displays}.

View File

@ -563,9 +563,9 @@ menu bar. @xref{Menu Bar}. (The X toolkit and GTK allow at most one
menu bar line; they treat larger values as 1.)
@item tool-bar-lines
The number of lines to use for the toolbar. A value of @code{nil} means
don't display a tool bar. (GTK allows at most one tool bar line; it
treats larger values as 1.)
The number of lines to use for the tool bar. A value of @code{nil}
means don't display a tool bar. (GTK allows at most one tool bar line;
it treats larger values as 1.)
@item screen-gamma
@cindex gamma correction

View File

@ -64,7 +64,7 @@ however, we have renamed all of those.)
@item diary-display-hook
@item diary-hook
@item dired-mode-hook
@item disabled-command-hook
@item disabled-command-function
@item echo-area-clear-hook
@item edit-picture-hook
@item electric-buffer-menu-mode-hook

View File

@ -1118,6 +1118,7 @@ complete in the set of extant Lisp symbols, and it uses the
@end defun
@defun read-variable prompt &optional default
@anchor{Definition of read-variable}
This function reads the name of a user variable and returns it as a
symbol.

View File

@ -411,8 +411,8 @@ represents the shifted-control-o character.
@cindex hyper characters
@cindex super characters
@cindex alt characters
The X Window System defines three other @anchor{modifier bits}
modifier bits that can be set
The X Window System defines three other
@anchor{modifier bits}modifier bits that can be set
in a character: @dfn{hyper}, @dfn{super} and @dfn{alt}. The syntaxes
for these bits are @samp{\H-}, @samp{\s-} and @samp{\A-}. (Case is
significant in these prefixes.) Thus, @samp{?\H-\M-\A-x} represents

View File

@ -1686,12 +1686,18 @@ finished; it receives the results of translation by
@code{function-key-map}.
@item
@code{key-translation-map} overrides actual key bindings. For example,
if @kbd{C-x f} has a binding in @code{key-translation-map}, that
translation takes effect even though @kbd{C-x f} also has a key binding
in the global map.
Non-prefix bindings in @code{key-translation-map} override actual key
bindings. For example, if @kbd{C-x f} has a non-prefix binding in
@code{key-translation-map}, that translation takes effect even though
@kbd{C-x f} also has a key binding in the global map.
@end itemize
Note however that actual key bindings can have an effect on
@code{key-translation-map}, even though they are overridden by it.
Indeed, actual key bindings override @code{function-key-map} and thus
may alter the key sequence that @code{key-translation-map} receives.
Clearly, it is better to avoid to avoid this type of situation.
The intent of @code{key-translation-map} is for users to map one
character set to another, including ordinary characters normally bound
to @code{self-insert-command}.

View File

@ -1,3 +1,9 @@
2004-08-05 Lars Hansen <larsh@math.ku.dk>
* widget.texi (User Interface): Update how to separate the
editable field of an editable-field widget from other widgets.
(Programming Example): Add text after field.
2004-07-24 Richard M. Stallman <rms@gnu.org>
* text.texi (Paragraphs): Update how paragraphs are separated

View File

@ -213,14 +213,19 @@ middle of another field is prohibited.
Editable text fields are created by the @code{editable-field} widget.
An editable field must be surrounded by static text on both sides, that
is, text that does not change in the lifetime of the widget. If the
field extends to the end of the line, the terminating line-feed character
will count as the necessary static text on that end, but you will have
to provide the static text before the field yourself. The
@code{:format} keyword is useful for generating the static text; for
instance, if you give it a value of @code{"Name: %v"}, the "Name: " part
will count as the static text.
@strong{Warning:} In an @code{editable-field} widget, the editable
field must not be adjacent to another widget---that won't work.
You must put some text in between. Either make this text part of
the @code{editable-field} widget itself, or insert it with
@code{widget-insert}.
The @code{:format} keyword is useful for generating the necessary
text; for instance, if you give it a value of @code{"Name: %v "},
the @samp{Name: } part will provide the necessary separating text
before the field and the trailing space will provide the
separating text after the field. If you don't include the
@code{:size} keyword, the field will extend to the end of the
line, and the terminating newline will provide separation after.
The editing text fields are highlighted with the
@code{widget-field-face} face, making them easy to find.
@ -345,6 +350,7 @@ Interface}).
(widget-insert "Here is some documentation.\n\nName: ")
(widget-create 'editable-field
:size 13
:format "%v " ; Text after the field!
"My Name")
(widget-create 'menu-choice
:tag "Choose"

View File

@ -1,3 +1,36 @@
2004-08-09 Luc Teirlinck <teirllm@auburn.edu>
* keymap.c (Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
2004-08-08 Luc Teirlinck <teirllm@auburn.edu>
* keyboard.c: Declare Qdisabled_command_function instead of
Qdisabled_command_hook.
(Fcommand_execute): Use Qdisabled_command_function instead of
Qdisabled_command_hook.
(syms_of_keyboard): Ditto.
2004-08-07 Luc Teirlinck <teirllm@auburn.edu>
* keymap.c (Flocal_key_binding, Fglobal_key_binding)
(syms_of_keymap) <key-translation-map>: Doc fixes.
2004-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
* window.c (window_list_1): YAILOM.
* fileio.c (make_temp_name): Handle multibyte prefixes.
2004-08-06 Luc Teirlinck <teirllm@auburn.edu>
* keyboard.c (syms_of_keyboard) <overriding-terminal-local-map>:
Doc fix.
2004-08-03 Kenichi Handa <handa@m17n.org>
* coding.c (decode_coding_string): Adjust coding->consumed, and
etc. with shrinked_bytes.
2004-08-03 Kim F. Storm <storm@cua.dk>
* indent.c (compute_motion): Fix check for full width window

View File

@ -887,7 +887,7 @@ make_temp_name (prefix, base64_p)
int base64_p;
{
Lisp_Object val;
int len;
int len, clen;
int pid;
unsigned char *p, *data;
char pidbuf[20];
@ -922,8 +922,10 @@ make_temp_name (prefix, base64_p)
#endif
}
len = SCHARS (prefix);
val = make_uninit_string (len + 3 + pidlen);
len = SBYTES (prefix); clen = SCHARS (prefix);
val = make_uninit_multibyte_string (clen + 3 + pidlen, len + 3 + pidlen);
if (!STRING_MULTIBYTE (prefix))
STRING_SET_UNIBYTE (val);
data = SDATA (val);
bcopy(SDATA (prefix), data, len);
p = data + len;

View File

@ -1260,10 +1260,10 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
width -= 1;
}
continuation_glyph_width = 0;
continuation_glyph_width = 1;
#ifdef HAVE_WINDOW_SYSTEM
if (!FRAME_WINDOW_P (XFRAME (win->frame)))
continuation_glyph_width = 1;
if (FRAME_WINDOW_P (XFRAME (win->frame)))
continuation_glyph_width = 0; /* In the fringe. */
#endif
immediate_quit = 1;

View File

@ -131,8 +131,8 @@ KBOARD the_only_kboard;
#endif
/* Non-nil disable property on a command means
do not execute it; call disabled-command-hook's value instead. */
Lisp_Object Qdisabled, Qdisabled_command_hook;
do not execute it; call disabled-command-function's value instead. */
Lisp_Object Qdisabled, Qdisabled_command_function;
#define NUM_RECENT_KEYS (100)
int recent_keys_index; /* Index for storing next element into recent_keys */
@ -9663,9 +9663,9 @@ a special event, so ignore the prefix argument and don't clear it. */)
tem = Fget (cmd, Qdisabled);
if (!NILP (tem) && !NILP (Vrun_hooks))
{
tem = Fsymbol_value (Qdisabled_command_hook);
tem = Fsymbol_value (Qdisabled_command_function);
if (!NILP (tem))
return call1 (Vrun_hooks, Qdisabled_command_hook);
return call1 (Vrun_hooks, Qdisabled_command_function);
}
}
@ -10780,8 +10780,8 @@ syms_of_keyboard ()
Qtimer_event_handler = intern ("timer-event-handler");
staticpro (&Qtimer_event_handler);
Qdisabled_command_hook = intern ("disabled-command-hook");
staticpro (&Qdisabled_command_hook);
Qdisabled_command_function = intern ("disabled-command-function");
staticpro (&Qdisabled_command_function);
Qself_insert_command = intern ("self-insert-command");
staticpro (&Qself_insert_command);
@ -11278,6 +11278,7 @@ The elements of the list are event types that may have menu bar bindings. */);
doc: /* Per-terminal keymap that overrides all other local keymaps.
If this variable is non-nil, it is used as a keymap instead of the
buffer's local map, and the minor mode keymaps and text property keymaps.
It also overrides `overriding-local-map'.
This variable is intended to let commands such as `universal-argument'
set up a different keymap for reading the next command. */);

View File

@ -131,10 +131,11 @@ static void silly_event_symbol_error P_ ((Lisp_Object));
DEFUN ("make-keymap", Fmake_keymap, Smake_keymap, 0, 1, 0,
doc: /* Construct and return a new keymap, of the form (keymap CHARTABLE . ALIST).
CHARTABLE is a char-table that holds the bindings for the ASCII
characters. ALIST is an assoc-list which holds bindings for function keys,
mouse events, and any other things that appear in the input stream.
All entries in it are initially nil, meaning "command undefined".
CHARTABLE is a char-table that holds the bindings for all characters
without modifiers. All entries in it are initially nil, meaning
"command undefined". ALIST is an assoc-list which holds bindings for
function keys, mouse events, and any other things that appear in the
input stream. Initially, ALIST is nil.
The optional arg STRING supplies a menu name for the keymap
in case you use it as a menu with `x-popup-menu'. */)
@ -703,7 +704,10 @@ map_keymap_call (key, val, fun, dummy)
DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 2, 0,
doc: /* Call FUNCTION for every binding in KEYMAP.
FUNCTION is called with two arguments: the event and its binding. */)
FUNCTION is called with two arguments: the event and its binding.
If KEYMAP has a parent, the parent's bindings are included as well.
This works recursively: if the parent has itself a parent, then the
grandparent's bindings are also included and so on. */)
(function, keymap)
Lisp_Object function, keymap;
{
@ -1635,7 +1639,7 @@ is non-nil, `key-binding' returns the unmapped command. */)
DEFUN ("local-key-binding", Flocal_key_binding, Slocal_key_binding, 1, 2, 0,
doc: /* Return the binding for command KEYS in current local keymap only.
KEYS is a string, a sequence of keystrokes.
KEYS is a string or vector, a sequence of keystrokes.
The binding is probably a symbol with a function definition.
If optional argument ACCEPT-DEFAULT is non-nil, recognize default
@ -1654,7 +1658,7 @@ bindings; see the description of `lookup-key' for more details about this. */)
DEFUN ("global-key-binding", Fglobal_key_binding, Sglobal_key_binding, 1, 2, 0,
doc: /* Return the binding for command KEYS in current global keymap only.
KEYS is a string, a sequence of keystrokes.
KEYS is a string or vector, a sequence of keystrokes.
The binding is probably a symbol with a function definition.
This function's return values are the same as those of `lookup-key'
\(which see).
@ -2561,7 +2565,7 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
doc: /* Return list of keys that invoke DEFINITION.
If KEYMAP is non-nil, search only KEYMAP and the global keymap.
If KEYMAP is a keymap, search only KEYMAP and the global keymap.
If KEYMAP is nil, search all the currently active keymaps.
If KEYMAP is a list of keymaps, search only those keymaps.
@ -2569,8 +2573,8 @@ If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
rather than a list of all possible key sequences.
If FIRSTONLY is the symbol `non-ascii', return the first binding found,
no matter what it is.
If FIRSTONLY has another non-nil value, prefer sequences of ASCII characters,
and entirely reject menu bindings.
If FIRSTONLY has another non-nil value, prefer sequences of ASCII characters
\(or their meta variants) and entirely reject menu bindings.
If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
to other keymaps or slots. This makes it possible to search for an
@ -3593,7 +3597,7 @@ key, typing `ESC O P x' would return [f1 x]. */);
DEFVAR_LISP ("key-translation-map", &Vkey_translation_map,
doc: /* Keymap of key translations that can override keymaps.
This keymap works like `function-key-map', but comes after that,
and applies even for keys that have ordinary bindings. */);
and its non-prefix bindings override ordinary bindings. */);
Vkey_translation_map = Qnil;
staticpro (&Vmouse_events);

View File

@ -1828,7 +1828,7 @@ window_list_1 (window, minibuf, all_frames)
rest = Fmemq (window, list);
if (!NILP (rest) && !EQ (rest, list))
{
for (tail = list; XCDR (tail) != rest; tail = XCDR (tail))
for (tail = list; !EQ (XCDR (tail), rest); tail = XCDR (tail))
;
XSETCDR (tail, Qnil);
list = nconc2 (rest, list);