# HG changeset patch # User Karoly Lorentey # Date 1097426516 0 # Node ID 4f2f1522636c6bba67ae51348eb931bd5182df4b # Parent a9f716fbb9c6d3082d75de23622c27fb22a14d1a# Parent 1729414f0bae3d338cc9321064d69d4699d4f93d Merged in changes from CVS trunk. Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-604 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-605 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-606 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-607 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-256 diff -r a9f716fbb9c6 -r 4f2f1522636c ChangeLog --- a/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,8 @@ +2004-10-08 Steven Tamm + + * configure.in (HAVE_MALLOC_MALLOC_H): Test for malloc/malloc.h + * configure: Rebuild + 2004-10-06 Jan Dj,Ad(Brv * configure.in (HAVE_RANDOM_HEAPSTART): Change AC_MSG_ERROR to diff -r a9f716fbb9c6 -r 4f2f1522636c configure --- a/configure Sun Oct 10 16:41:15 2004 +0000 +++ b/configure Sun Oct 10 16:41:56 2004 +0000 @@ -12130,6 +12130,153 @@ fi +if test "${ac_cv_header_malloc_malloc_h+set}" = set; then + echo "$as_me:$LINENO: checking for malloc/malloc.h" >&5 +echo $ECHO_N "checking for malloc/malloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_malloc_malloc_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_malloc_malloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_malloc_malloc_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking malloc/malloc.h usability" >&5 +echo $ECHO_N "checking malloc/malloc.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking malloc/malloc.h presence" >&5 +echo $ECHO_N "checking malloc/malloc.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: malloc/malloc.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: malloc/malloc.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: malloc/malloc.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: malloc/malloc.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: malloc/malloc.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: malloc/malloc.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: malloc/malloc.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: malloc/malloc.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: malloc/malloc.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for malloc/malloc.h" >&5 +echo $ECHO_N "checking for malloc/malloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_malloc_malloc_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_malloc_malloc_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_malloc_malloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_malloc_malloc_h" >&6 + +fi +if test $ac_cv_header_malloc_malloc_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MALLOC_MALLOC_H 1 +_ACEOF + +fi + + + if test "${HAVE_CARBON}" = "yes"; then cat >>confdefs.h <<\_ACEOF diff -r a9f716fbb9c6 -r 4f2f1522636c configure.in --- a/configure.in Sun Oct 10 16:41:15 2004 +0000 +++ b/configure.in Sun Oct 10 16:41:56 2004 +0000 @@ -2313,6 +2313,9 @@ AC_CHECK_HEADER(Carbon/Carbon.h, HAVE_CARBON=yes) fi +dnl Check for malloc/malloc.h on darwin +AC_CHECK_HEADER(malloc/malloc.h, AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the header file.])) + if test "${HAVE_CARBON}" = "yes"; then AC_DEFINE(HAVE_CARBON, 1, [Define to 1 if you are using the Carbon API on Mac OS X.]) window_system=mac diff -r a9f716fbb9c6 -r 4f2f1522636c etc/ChangeLog --- a/etc/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/etc/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,7 @@ +2004-10-08 Fr,Ai(Bd,Ai(Bric Bothamy (tiny change) + + * TUTORIAL.fr: Minor wording fix. + 2004-10-04 Luc Teirlinck * enriched.doc: Update for new bindings of `set-left-margin' and diff -r a9f716fbb9c6 -r 4f2f1522636c etc/NEWS --- a/etc/NEWS Sun Oct 10 16:41:15 2004 +0000 +++ b/etc/NEWS Sun Oct 10 16:41:56 2004 +0000 @@ -99,6 +99,11 @@ * Changes in Emacs 21.4 +++ +** New functions `make-progress-reporter', `progress-reporter-update', +`progress-reporter-force-update' and `progress-reporter-done' provide +a simple and efficient way of printing progress messages to the user. + ++++ ** In Enriched mode, `set-left-margin' and `set-right-margin' are now by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l' and `C-c C-r'. @@ -1167,12 +1172,23 @@ new-kill-line is on C-k +++ +** Vertical scrolling is now possible within incremental search. +To enable this feature, customize the new user option +`isearch-allow-scroll'. User written commands which satisfy stringent +constraints can be marked as "scrolling commands". See the Emacs manual +for details. + ++++ ** C-w in incremental search now grabs either a character or a word, making the decision in a heuristic way. This new job is done by the command `isearch-yank-word-or-char'. To restore the old behavior, bind C-w to `isearch-yank-word' in `isearch-mode-map'. +++ +** C-y in incremental search now grabs the next line if point is already +at the end of a line. + ++++ ** C-M-w deletes and C-M-y grabs a character in isearch mode. Another method to grab a character is to enter the minibuffer by `M-e' and to type `C-f' at the end of the search string in the minibuffer. @@ -2517,10 +2533,12 @@ line in current buffer, or if optional buffer position is given, line number of corresponding line in current buffer. ++++ ** The default value of `sentence-end' is now defined using the new variable `sentence-end-without-space' which contains such characters that end a sentence without following spaces. ++++ ** The function `sentence-end' should be used to obtain the value of the variable `sentence-end'. If the variable `sentence-end' is nil, then this function returns the regexp constructed from the variables diff -r a9f716fbb9c6 -r 4f2f1522636c etc/TUTORIAL.fr --- a/etc/TUTORIAL.fr Sun Oct 10 16:41:15 2004 +0000 +++ b/etc/TUTORIAL.fr Sun Oct 10 16:41:56 2004 +0000 @@ -17,7 +17,7 @@ Dans ce didacticiel, les caractères ">>" en marge gauche indiquent les directions à suivre pour essayer une commande. Ainsi : <> -[Centre de page deliberéement vide. Le texte continue ci-dessous.] +[Centre de page delibérément vide. Le texte continue ci-dessous.] >> Tapez C-v (Voir l'écran suivant) pour passer à l'écran suivant (faites-le, pressez la touche CTRL tout en pressant la touche v). À partir de maintenant, vous devrez le faire à chaque fois que @@ -36,7 +36,7 @@ >> Faites M-v, puis C-v plusieurs fois. Si votre terminal en dispose, vous pouvez également utiliser les -touches PgUp et PgDn pour monter ou descendre d'un écran, bien les +touches PgUp et PgDn pour monter ou descendre d'un écran, bien que les combinaisons C-v et M-v soient plus efficaces. * RÉSUMÉ @@ -347,7 +347,7 @@ Lorsqu'une ligne de texte devient trop longue pour tenir sur une seule ligne de l'écran, elle se « continue » sur une deuxième ligne d'écran. Une barre de fraction inverse (« \ ») ou, si vous utilisez un -environnement grapgique, une petite flèche recourbée, sur la marge +environnement graphique, une petite flèche recourbée, sur la marge droite indique une ligne qui se poursuit sur la ligne suivante. >> Insérez du texte jusqu'à atteindre la marge droite et continuez @@ -423,7 +423,7 @@ Notez qu'un simple C-k supprime le contenu de la ligne et qu'un second détruit la ligne elle-même, ce qui fait remonter toutes les lignes suivantes. C-k traite son paramètre numérique d'une façon spéciale : -il détruit ce nombre de lignes ET leurs contenus. Ce n'est pas une +il détruit ce nombre de lignes ET leur contenu. Ce n'est pas une simple répétition : C-u 2 C-k détruit deux lignes et leurs Newlines alors que taper deux fois C-k n'aurait pas le même effet. @@ -523,7 +523,7 @@ cas où vous décideriez ensuite d'annuler vos modifications. Si vous examinez le bas de l'écran, vous verrez une ligne qui commence -et finit par des tirets et débute par « --:-- TUTORIAL.fr » ou quelque +et finit par des tirets et débute par « -1:-- TUTORIAL.fr » ou quelque chose comme ça. Cette partie de l'écran montre normalement le nom du fichier que vous êtes en train de visiter. Pour l'instant, vous visitez un fichier appelé « TUTORIAL.fr », qui est votre copie @@ -584,7 +584,7 @@ encore. C'est ainsi que l'on crée un fichier avec Emacs : on trouve le fichier, qui démarre vide, puis on insère du texte. Lorsque l'on demande à « sauvegarder » le fichier, Emacs crée alors vraiment le -fichier avec le texte que l'on a inséré. À partir de ce moment là, +fichier avec le texte que l'on a inséré. À partir de ce moment-là, vous pouvez considérer que vous éditez un fichier déjà existant. @@ -666,10 +666,10 @@ * EXTENSION DU JEU DE COMMANDES ------------------------------- -Il y bien plus de commandes Emacs qu'il ne serait possible d'en créer -avec tous les caractères de contrôle et les caractères Meta. Emacs -contourne ce problème à l'aide de la commande X (eXtension). Celle-ci -se présente sous deux déclinaisons : +Il y a bien plus de commandes Emacs qu'il ne serait possible d'en +créer avec tous les caractères de contrôle et Meta. Emacs contourne ce +problème à l'aide de la commande X (eXtension). Celle-ci se présente +sous deux déclinaisons : C-x eXtension caractère, suivie d'un seul caractère. M-x eXtension d'une commande nommée, suivie d'un nom long. @@ -742,7 +742,7 @@ Lorsque vous avez modifié un fichier, mais que vous ne l'avez pas encore sauvegardé, ces modifications pourraient être perdues si votre -système se plantait. Pour vous protéger ce de problème, Emacs écrit +système se plantait. Pour vous protéger de ce problème, Emacs écrit périodiquement un fichier de « sauvegarde automatique » pour chaque fichier en cours d'édition. Le nom de ce fichier commence et se termine par un # : si, par exemple, votre fichier s'appelle @@ -772,14 +772,14 @@ La ligne placée immédiatement au dessus de la zone d'écho s'appelle la « ligne de mode ». Elle affiche quelque chose comme ça : ---:** TUTORIAL.fr (Fundamental)--L752--67%---------------- +-1:** TUTORIAL.fr (Fundamental)--L752--67%---------------- Cette ligne donne des informations sur l'état d'Emacs et sur le texte que vous êtes en train d'éditer. Vous savez déjà ce que signifie le nom de fichier -- c'est celui que vous avez chargé. -NN%-- indique votre position actuelle dans le -texte ; cela signifie que NN pourcent du texte se trouve au dessus du +texte ; cela signifie que NN pour cent du texte se trouve au dessus du sommet de l'écran. Si le début du fichier est sur l'écran, il s'affichera --Top-- et non --00%--. Si le bas du texte est sur l'écran, il s'affichera --Bot--. Si tout le texte tient dans l'écran, @@ -802,7 +802,7 @@ prévus pour éditer différents langages et/ou types de texte (mode Lisp, mode Text, etc). À tout instant, il n'y a qu'un seul mode majeur actif et son nom se trouve toujours dans la ligne de mode, à l'endroit -ou « Fundamental » se trouve actuellement. +où « Fundamental » se trouve actuellement. Chaque mode majeur modifie le comportement de quelques commandes. Il existe, par exemple, des commandes pour créer des commentaires dans un @@ -940,7 +940,7 @@ C-s s'applique également à C-r, sauf que la direction de la recherche est inversée. -* FENETRES MULTIPLES +* FENÊTRES MULTIPLES -------------------- L'une des caractéristiques les plus agréables d'Emacs est que vous diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/ChangeLog --- a/lisp/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,48 @@ +2004-10-09 Luc Teirlinck + + * textmodes/paragraphs.el (sentence-end-double-space) + (sentence-end-without-period, sentence-end-without-space) + (sentence-end): Doc fixes. + +2004-10-08 Peter Seibel (tiny change) + + * emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Change + paragraph-start regexp so we don't fill code starting with #'( + +2004-10-08 Sebastien Kirche (tiny change) + + * mail/mail-extr.el (mail-extr-ignore-realname-equals-mailbox-name): + New defcustom. + (extract-address-components): Use it. + +2004-10-08 Paul Pogonyshev + + * subr.el (make-progress-reporter, progress-reporter-update) + (progress-reporter-force-update, progress-reporter-do-update) + (progress-reporter-done): New functions. + + * tar-mode.el (tar-summarize-buffer): Use progress reporter. + + * progmodes/etags.el (etags-tags-completion-table): Use progress + reporter. + (etags-tags-apropos): Likewise. + +2004-10-08 Alan Mackenzie + + * isearch.el (isearch-yank-line): C-y yanks to next EOL, not end + of current line. + +2004-10-08 Masatake YAMATO + + * server.el (server-process-filter): Wrap `process-send-region' + by `condition-case' to guard the case when the pipe to PROC is + closed. + +2004-10-07 Mark A. Hershberger + + * xml.el (xml-substitute-special): Limit handling of external + entities. + 2004-10-06 Nick Roberts * progmodes/gdb-ui.el (gdb-ann3): (Re-)initialise gdb-input-queue. diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/emacs-lisp/lisp-mode.el --- a/lisp/emacs-lisp/lisp-mode.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/emacs-lisp/lisp-mode.el Sun Oct 10 16:41:56 2004 +0000 @@ -1,6 +1,7 @@ ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands -;; Copyright (C) 1985,86,1999,2000,01,03,2004 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1999, 2000, 2001, 2003, 2004 +;; Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: lisp, languages @@ -1153,7 +1154,8 @@ and initial semicolons." (interactive "P") (or (fill-comment-paragraph justify) - ;; Point is on a program line (a line no comment); we are interested + ;; Since fill-comment-paragraph returned nil, that means we're not in + ;; a comment: Point is on a program line; we are interested ;; particularly in docstring lines. ;; ;; We bind `paragraph-start' and `paragraph-separate' temporarily. They @@ -1182,7 +1184,7 @@ ;; The `fill-column' is temporarily bound to ;; `emacs-lisp-docstring-fill-column' if that value is an integer. (let ((paragraph-start (concat paragraph-start - "\\|\\s-*\\([\(;:\"]\\|`\(\\)")) + "\\|\\s-*\\([(;:\"]\\|`(\\|#'(\\)")) (paragraph-separate (concat paragraph-separate "\\|\\s-*\".*[,\\.]$")) (fill-column (if (integerp emacs-lisp-docstring-fill-column) @@ -1227,5 +1229,5 @@ (provide 'lisp-mode) -;;; arch-tag: 414c7f93-c245-4b77-8ed5-ed05ef7ff1bf +;; arch-tag: 414c7f93-c245-4b77-8ed5-ed05ef7ff1bf ;;; lisp-mode.el ends here diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/isearch.el --- a/lisp/isearch.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/isearch.el Sun Oct 10 16:41:56 2004 +0000 @@ -1254,8 +1254,8 @@ (defun isearch-yank-line () "Pull rest of line from buffer into search string." (interactive) - (isearch-yank-internal 'line-end-position)) - + (isearch-yank-internal + (lambda () (line-end-position (if (eolp) 2 1))))) (defun isearch-search-and-update () ;; Do the search and update the display. diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/mail/mail-extr.el --- a/lisp/mail/mail-extr.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/mail/mail-extr.el Sun Oct 10 16:41:56 2004 +0000 @@ -234,6 +234,13 @@ :version "21.4" :group 'mail-extr) +(defcustom mail-extr-ignore-realname-equals-mailbox-name t +"*Whether to ignore a name that is equal to the mailbox name. +If true, then when the address is like \"Single \" +we will act as though we couldn't find a full name in the address." + :type 'boolean + :group 'mail-extr) + ;; Matches a leading title that is not part of the name (does not ;; contribute to uniquely identifying the person). (defcustom mail-extr-full-name-prefixes @@ -694,7 +701,7 @@ "Given an RFC-822 address ADDRESS, extract full name and canonical address. Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). If no name can be extracted, FULL-NAME will be nil. Also see -`mail-extr-ignore-single-names'. +`mail-extr-ignore-single-names' and `mail-extr-ignore-realname-equals-mailbox-name'. If the optional argument ALL is non-nil, then ADDRESS can contain zero or more recipients, separated by commas, and we return a list of @@ -1404,8 +1411,9 @@ (setq names-match-flag nil)) (setq i (1+ i))) (delete-region (+ (point-min) buffer-length) (point-max)) - (if names-match-flag - (narrow-to-region (point) (point))))) + (and names-match-flag + mail-extr-ignore-realname-equals-mailbox-name + (narrow-to-region (point) (point))))) ;; Nuke name if it's just one word. (goto-char (point-min)) diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/progmodes/etags.el --- a/lisp/progmodes/etags.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/progmodes/etags.el Sun Oct 10 16:41:56 2004 +0000 @@ -1229,10 +1229,10 @@ (defun etags-tags-completion-table () (let ((table (make-vector 511 0)) - (point-max (/ (float (point-max)) 100.0)) - (msg-fmt (format - "Making tags completion table for %s...%%d%%%%" - buffer-file-name))) + (progress-reporter + (make-progress-reporter + (format "Making tags completion table for %s..." buffer-file-name) + (point-min) (point-max)))) (save-excursion (goto-char (point-min)) ;; This monster regexp matches an etags tag line. @@ -1253,7 +1253,7 @@ (buffer-substring (match-beginning 5) (match-end 5)) ;; No explicit tag name. Best guess. (buffer-substring (match-beginning 3) (match-end 3))) - (message msg-fmt (/ (point) point-max))) + (progress-reporter-update progress-reporter (point))) table))) table)) @@ -1433,11 +1433,12 @@ (tags-with-face 'highlight (princ buffer-file-name)) (princ "':\n\n")) (goto-char (point-min)) - (let ((point-max (/ (float (point-max)) 100.0))) + (let ((progress-reporter (make-progress-reporter + (format "Making tags apropos buffer for `%s'..." + string) + (point-min) (point-max)))) (while (re-search-forward string nil t) - (message "Making tags apropos buffer for `%s'...%d%%" - string - (/ (point) point-max)) + (progress-reporter-update progress-reporter (point)) (beginning-of-line) (let* ( ;; Get the local value in the tags table diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/subr.el --- a/lisp/subr.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/subr.el Sun Oct 10 16:41:56 2004 +0000 @@ -2664,5 +2664,132 @@ (put symbol 'abortfunc (or abortfunc 'kill-buffer)) (put symbol 'hookvar (or hookvar 'mail-send-hook))) +;; Standardized progress reporting + +;; Progress reporter has the following structure: +;; +;; (NEXT-UPDATE-VALUE . [NEXT-UPDATE-TIME +;; MIN-VALUE +;; MAX-VALUE +;; MESSAGE +;; MIN-CHANGE +;; MIN-TIME]) +;; +;; This weirdeness is for optimization reasons: we want +;; `progress-reporter-update' to be as fast as possible, so +;; `(car reporter)' is better than `(aref reporter 0)'. +;; +;; NEXT-UPDATE-TIME is a float. While `float-time' loses a couple +;; digits of precision, it doesn't really matter here. On the other +;; hand, it greatly simplifies the code. + +(defun make-progress-reporter (message min-value max-value + &optional current-value + min-change min-time) + "Return an object suitable for reporting operation progress with `progress-reporter-update'. + +MESSAGE is shown in the echo area. When at least 1% of operation +is complete, the exact percentage will be appended to the +MESSAGE. When you call `progress-reporter-done', word \"done\" +is printed after the MESSAGE. You can change MESSAGE of an +existing progress reporter with `progress-reporter-force-update'. + +MIN-VALUE and MAX-VALUE designate starting (0% complete) and +final (100% complete) states of operation. The latter should be +larger; if this is not the case, then simply negate all values. +Optional CURRENT-VALUE specifies the progress by the moment you +call this function. You should omit it or set it to nil in most +cases since it defaults to MIN-VALUE. + +Optional MIN-CHANGE determines the minimal change in percents to +report (default is 1%.) Optional MIN-TIME specifies the minimal +time before echo area updates (default is 0.2 seconds.) If +`float-time' function is not present, then time is not tracked +at all. If OS is not capable of measuring fractions of seconds, +then this parameter is effectively rounded up." + + (unless min-time + (setq min-time 0.2)) + (let ((reporter + (cons min-value ;; Force a call to `message' now + (vector (if (and (fboundp 'float-time) + (>= min-time 0.02)) + (float-time) nil) + min-value + max-value + message + (if min-change (max (min min-change 50) 1) 1) + min-time)))) + (progress-reporter-update reporter (or current-value min-value)) + reporter)) + +(defsubst progress-reporter-update (reporter value) + "Report progress of an operation in the echo area. +However, if the change since last echo area update is too small +or not enough time has passed, then do nothing (see +`make-progress-reporter' for details). + +First parameter, REPORTER, should be the result of a call to +`make-progress-reporter'. Second, VALUE, determines the actual +progress of operation; it must be between MIN-VALUE and MAX-VALUE +as passed to `make-progress-reporter'. + +This function is very inexpensive, you may not bother how often +you call it." + (when (>= value (car reporter)) + (progress-reporter-do-update reporter value))) + +(defun progress-reporter-force-update (reporter value &optional new-message) + "Report progress of an operation in the echo area unconditionally. + +First two parameters are the same as for +`progress-reporter-update'. Optional NEW-MESSAGE allows you to +change the displayed message." + (let ((parameters (cdr reporter))) + (when new-message + (aset parameters 3 new-message)) + (when (aref parameters 0) + (aset parameters 0 (float-time))) + (progress-reporter-do-update reporter value))) + +(defun progress-reporter-do-update (reporter value) + (let* ((parameters (cdr reporter)) + (min-value (aref parameters 1)) + (max-value (aref parameters 2)) + (one-percent (/ (- max-value min-value) 100.0)) + (percentage (truncate (/ (- value min-value) one-percent))) + (update-time (aref parameters 0)) + (current-time (float-time)) + (enough-time-passed + ;; See if enough time has passed since the last update. + (or (not update-time) + (when (>= current-time update-time) + ;; Calculate time for the next update + (aset parameters 0 (+ update-time (aref parameters 5))))))) + ;; + ;; Calculate NEXT-UPDATE-VALUE. If we are not going to print + ;; message this time because not enough time has passed, then use + ;; 1 instead of MIN-CHANGE. This makes delays between echo area + ;; updates closer to MIN-TIME. + (setcar reporter + (min (+ min-value (* (+ percentage + (if enough-time-passed + (aref parameters 4) ;; MIN-CHANGE + 1)) + one-percent)) + max-value)) + (when (integerp value) + (setcar reporter (ceiling (car reporter)))) + ;; + ;; Only print message if enough time has passed + (when enough-time-passed + (if (> percentage 0) + (message "%s%d%%" (aref parameters 3) percentage) + (message "%s" (aref parameters 3)))))) + +(defun progress-reporter-done (reporter) + "Print reporter's message followed by word \"done\" in echo area." + (message "%sdone" (aref (cdr reporter) 3))) + ;; arch-tag: f7e0e6e5-70aa-4897-ae72-7a3511ec40bc ;;; subr.el ends here diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/tar-mode.el --- a/lisp/tar-mode.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/tar-mode.el Sun Oct 10 16:41:56 2004 +0000 @@ -404,11 +404,11 @@ then narrow to it, so that only that listing is visible (and the real data of the buffer is hidden)." (set-buffer-multibyte nil) - (message "Parsing tar file...") (let* ((result '()) (pos (point-min)) - (bs (max 1 (- (buffer-size) 1024))) ; always 2+ empty blocks at end. - (bs100 (max 1 (/ bs 100))) + (progress-reporter + (make-progress-reporter "Parsing tar file..." + (point-min) (max 1 (- (buffer-size) 1024)))) tokens) (while (and (<= (+ pos 512) (point-max)) (not (eq 'empty-tar-block @@ -416,10 +416,7 @@ (tar-header-block-tokenize (buffer-substring pos (+ pos 512))))))) (setq pos (+ pos 512)) - (message "Parsing tar file...%d%%" - ;(/ (* pos 100) bs) ; this gets round-off lossage - (/ pos bs100) ; this doesn't - ) + (progress-reporter-update progress-reporter pos) (if (eq (tar-header-link-type tokens) 20) ;; Foo. There's an extra empty block after these. (setq pos (+ pos 512))) @@ -446,7 +443,7 @@ ;; A tar file should end with a block or two of nulls, ;; but let's not get a fatal error if it doesn't. (if (eq tokens 'empty-tar-block) - (message "Parsing tar file...done") + (progress-reporter-done progress-reporter) (message "Warning: premature EOF parsing tar file"))) (save-excursion (goto-char (point-min)) diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/textmodes/paragraphs.el --- a/lisp/textmodes/paragraphs.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/textmodes/paragraphs.el Sun Oct 10 16:41:56 2004 +0000 @@ -1,6 +1,6 @@ ;;; paragraphs.el --- paragraph and sentence parsing -;; Copyright (C) 1985, 86, 87, 91, 94, 95, 96, 1997, 1999, 2000, 2001 +;; Copyright (C) 1985, 86, 87, 91, 94, 95, 96, 1997, 1999, 2000, 2001, 2004 ;; Free Software Foundation, Inc. ;; Maintainer: FSF @@ -122,8 +122,8 @@ and `colon-double-space'. This value is used by the function `sentence-end' to construct the -regexp describing the end of a sentence, in case when the value of -the variable `sentence-end' is nil. See Info node `Sentences'." +regexp describing the end of a sentence, when the value of the variable +`sentence-end' is nil. See Info node `(elisp)Standard Regexps'." :type 'boolean :group 'fill) @@ -133,18 +133,18 @@ without a period. This value is used by the function `sentence-end' to construct the -regexp describing the end of a sentence, in case when the value of -the variable `sentence-end' is nil. See Info node `Sentences'." +regexp describing the end of a sentence, when the value of the variable +`sentence-end' is nil. See Info node `(elisp)Standard Regexps'." :type 'boolean :group 'fill) (defcustom sentence-end-without-space "$B!#!%!)!*$A!##.#?#!$(0!$!%!)!*$(G!$!%!)!*(B" - "*String containing characters that end sentence without following spaces. + "*String of characters that end sentence without following spaces. This value is used by the function `sentence-end' to construct the -regexp describing the end of a sentence, in case when the value of -the variable `sentence-end' is nil. See Info node `Sentences'." +regexp describing the end of a sentence, when the value of the variable +`sentence-end' is nil. See Info node `(elisp)Standard Regexps'." :group 'paragraphs :type 'string) @@ -169,7 +169,7 @@ that in order to be recognized as the end of a sentence, the ending period, question mark, or exclamation point must be followed by two spaces, unless it's inside some sort of quotes or -parenthesis. See Info node `Sentences'." +parenthesis. See Info node `(elisp)Standard Regexps'." (or sentence-end (concat (if sentence-end-without-period "\\w \\|") "\\([.?!][]\"'\xd0c9\x5397d)}]*" diff -r a9f716fbb9c6 -r 4f2f1522636c lisp/xml.el --- a/lisp/xml.el Sun Oct 10 16:41:15 2004 +0000 +++ b/lisp/xml.el Sun Oct 10 16:41:56 2004 +0000 @@ -727,14 +727,9 @@ (match-string 1 this-part))))))) (cond ((null children) - (if (and (eq (length expansion) 1) - (stringp (cadr expansion))) - (setq children (concat prev-part expansion)) - (if (stringp (car expansion)) - (setq children - (list (concat prev-part (car expansion)) - (append (cdr expansion)))) - (setq children (append expansion prev-part))))) + ;; FIXME: If we have an entity that expands into XML, this won't work. + (setq children + (concat prev-part expansion))) ((stringp children) (if (stringp expansion) (setq children (concat children prev-part expansion)) diff -r a9f716fbb9c6 -r 4f2f1522636c lispintro/emacs-lisp-intro.texi --- a/lispintro/emacs-lisp-intro.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/lispintro/emacs-lisp-intro.texi Sun Oct 10 16:41:56 2004 +0000 @@ -4009,7 +4009,7 @@ false. When this happens, the second argument or then-part of the overall @code{if} expression is @emph{not} evaluated, but the third or else-part @emph{is} evaluated. You might think of this as the cloudy -day alternative for the decision `if it is warm and sunny, then go to +day alternative for the decision ``if it is warm and sunny, then go to the beach, else read a book!''. The word ``else'' is not written in the Lisp code; the else-part of an @@ -18025,7 +18025,7 @@ Sometimes when you you write text, you duplicate words---as with ``you you'' near the beginning of this sentence. I find that most -frequently, I duplicate ``the'; hence, I call the function for +frequently, I duplicate ``the''; hence, I call the function for detecting duplicated words, @code{the-the}. @need 1250 diff -r a9f716fbb9c6 -r 4f2f1522636c lispref/ChangeLog --- a/lispref/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/lispref/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,17 @@ +2004-10-09 Luc Teirlinck + + * text.texi (Filling): Add anchor for definition of + `sentence-end-double-space'. + + * searching.texi (Regexp Example): Update description of how + Emacs currently recognizes the end of a sentence. + (Standard Regexps): Update definition of the variable + `sentence-end'. Add definition of the function `sentence-end'. + +2004-10-08 Paul Pogonyshev + + * display.texi (Progress): New node. + 2004-10-05 Kim F. Storm * display.texi (Fringe Bitmaps): Update fringe-bitmaps-at-pos. diff -r a9f716fbb9c6 -r 4f2f1522636c lispref/display.texi --- a/lispref/display.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/lispref/display.texi Sun Oct 10 16:41:56 2004 +0000 @@ -16,6 +16,7 @@ * Truncation:: Folding or wrapping long text lines. * The Echo Area:: Where messages are displayed. * Warnings:: Displaying warning messages for the user. +* Progress:: Informing user about progress of a long operation. * Invisible Text:: Hiding part of the buffer text. * Selective Display:: Hiding part of the buffer text (the old way). * Overlay Arrow:: Display of an arrow to indicate position. @@ -533,6 +534,104 @@ that warning is not logged. @end defopt +@node Progress +@section Reporting Operation Progress +@cindex progress reporting + +When an operation can take a while to finish, you should inform the +user about the progress it makes. This way the user can estimate +remaining time and clearly see that Emacs is busy working, not hung. + +Functions listed in this section provide simple and efficient way of +reporting operation progress. Here is a working example that does +nothing useful: + +@example +(let ((progress-reporter + (make-progress-reporter "Collecting some mana for Emacs..." + 0 500))) + (dotimes (k 500) + (sit-for 0.01) + (progress-reporter-update progress-reporter k)) + (progress-reporter-done progress-reporter)) +@end example + +@defun make-progress-reporter message min-value max-value &optional current-value min-change min-time +This function creates a progress reporter---the object you will use as +an argument for all other functions listed here. The idea is to +precompute as much data as possible to make progress reporting very +fast. + +The @var{message} will be displayed in the echo area, followed by +progress percentage. @var{message} is treated as a simple string. If +you need it to depend on a filename, for instance, use @code{format} +before calling this function. + +@var{min-value} and @var{max-value} arguments stand for starting and +final states of your operation. For instance, if you scan a buffer, +they should be the results of @code{point-min} and @code{point-max} +correspondingly. It is required that @var{max-value} is greater than +@var{min-value}. If you create progress reporter when some part of +the operation has already been completed, then specify +@var{current-value} argument. But normally you should omit it or set +it to @code{nil}---it will default to @var{min-value} then. + +Remaining arguments control the rate of echo area updates. Progress +reporter will wait for at least @var{min-change} more percents of the +operation to be completed before printing next message. +@var{min-time} specifies the minimum time in seconds to pass between +successive prints. It can be fractional. Depending on Emacs and +system capabilities, progress reporter may or may not respect this +last argument or do it with varying precision. Default value for +@var{min-change} is 1 (one percent), for @var{min-time}---0.2 +(seconds.) + +This function calls @code{progress-reporter-update}, so the first +message is printed immediately. +@end defun + +@defun progress-reporter-update reporter value +This function does the main work of reporting progress of your +operation. It print the message of @var{reporter} followed by +progress percentage determined by @var{value}. If percentage is zero, +then it is not printed at all. + +@var{reporter} must be the result of a call to +@code{make-progress-reporter}. @var{value} specifies the current +state of your operation and must be between @var{min-value} and +@var{max-value} (inclusive) as passed to +@code{make-progress-reporter}. For instance, if you scan a buffer, +then @var{value} should be the result of a call to @code{point}. + +This function respects @var{min-change} and @var{min-time} as passed +to @code{make-progress-reporter} and so does not output new messages +on every invocation. It is thus very fast and normally you should not +try to reduce the number of calls to it: resulting overhead will most +likely negate your effort. +@end defun + +@defun progress-reporter-force-update reporter value &optional new-message +This function is similar to @code{progress-reporter-update} except +that it prints a message in the echo area unconditionally. + +The first two arguments have the same meaning as for +@code{progress-reporter-update}. Optional @var{new-message} allows +you to change the message of the @var{reporter}. Since this functions +always updates the echo area, such a change will be immediately +presented to the user. +@end defun + +@defun progress-reporter-done reporter +This function should be called when the operation is finished. It +prints the message of @var{reporter} followed by word ``done'' in the +echo area. + +You should always call this function and not hope for +@code{progress-reporter-update} to print ``100%.'' Firstly, it may +never print it, there are many good reasons for this not to happen. +Secondly, ``done'' is more explicit. +@end defun + @node Invisible Text @section Invisible Text diff -r a9f716fbb9c6 -r 4f2f1522636c lispref/searching.texi --- a/lispref/searching.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/lispref/searching.texi Sun Oct 10 16:41:56 2004 +0000 @@ -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/searching @@ -694,9 +694,9 @@ Here is a complicated regexp which was formerly used by Emacs to recognize the end of a sentence together with any whitespace that -follows. It was used as the variable @code{sentence-end}. (Its value -nowadays contains alternatives for @samp{.}, @samp{?} and @samp{!} in -other character sets.) +follows. (Nowadays Emacs uses a similar but more complex default +regexp constructed by the function @code{sentence-end}. +@xref{Standard Regexps}.) First, we show the regexp as a string in Lisp syntax to distinguish spaces from tab characters. The string constant begins and ends with a @@ -730,9 +730,9 @@ The first part of the pattern is a character alternative that matches any one of three characters: period, question mark, and exclamation mark. The match must begin with one of these three characters. (This -is the one point where the new value of @code{sentence-end} differs -from the old. The new value also lists sentence ending -non-@acronym{ASCII} characters.) +is one point where the new default regexp used by Emacs differs from +the old. The new value also allows some non-@acronym{ASCII} +characters that end a sentence without any following whitespace.) @item []\"')@}]* The second part of the pattern matches any closing braces and quotation @@ -1698,22 +1698,24 @@ @end defvar @defvar sentence-end -This is the regular expression describing the end of a sentence. (All -paragraph boundaries also end sentences, regardless.) The (slightly -simplified) default value is: - -@example -"[.?!][]\"')@}]*\\($\\| $\\|\t\\|@ @ \\)[ \t\n]*" -@end example +If non-@code{nil}, the value should be a regular expression describing +the end of a sentence, including the whitespace following the +sentence. (All paragraph boundaries also end sentences, regardless.) -This means a period, question mark or exclamation mark (the actual -default value also lists their alternatives in other character sets), -followed optionally by closing parenthetical characters, followed by -tabs, spaces or new lines. +If the value is @code{nil}, the default, then the function +@code{sentence-end} has to construct the regexp. That is why you +should always call the function @code{sentence-end} to obtain the +regexp to be used to recognize the end of a sentence. +@end defvar -For a detailed explanation of this regular expression, see @ref{Regexp -Example}. -@end defvar +@defun sentence-end +This function returns the value of the variable @code{sentence-end}, +if non-@code{nil}. Otherwise it returns a default value based on the +values of the variables @code{sentence-end-double-space} +(@pxref{Definition of sentence-end-double-space}), +@code{sentence-end-without-period} and +@code{sentence-end-without-space}. +@end defun @ignore arch-tag: c2573ca2-18aa-4839-93b8-924043ef831f diff -r a9f716fbb9c6 -r 4f2f1522636c lispref/text.texi --- a/lispref/text.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/lispref/text.texi Sun Oct 10 16:41:56 2004 +0000 @@ -1,6 +1,7 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001 +@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, +@c 2000, 2001, 2004 @c Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../info/text @@ -1448,6 +1449,7 @@ @end defun @defopt sentence-end-double-space +@anchor{Definition of sentence-end-double-space} If this variable is non-@code{nil}, a period followed by just one space does not count as the end of a sentence, and the filling functions avoid breaking the line at such a place. diff -r a9f716fbb9c6 -r 4f2f1522636c man/ChangeLog --- a/man/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/man/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,21 @@ +2004-10-09 Luc Teirlinck + + * files.texi (Misc File Ops): View mode is a minor mode. + +2004-10-09 Juri Linkov + + * gnus.texi (Fancy Mail Splitting): Remove backslash in the + example of nnmail-split-fancy. + +2004-10-08 Glenn Morris + + * calendar.texi (iCalendar): Style changes. + +2004-10-07 Luc Teirlinck + + * search.texi (Regexps): The regexp described in the example is no + longer stored in the variable `sentence-end'. + 2004-10-06 Karl Berry * info.texi (@kbd{1}--@kbd{9}): no space around --, for @@ -8,12 +26,14 @@ * building.texi (Starting GUD): Note that multiple debugging sessions requires `gdb --fullname'. +2004-10-05 Ulf Jasper + + * calendar.texi (iCalendar): New section for a new package. + 2004-10-05 Karl Berry * info.texi: consistently use --- throughout, periods at end of menu descriptions, and a couple typos. - From: Benno Schulenberg , - in bug-texinfo mail. 2004-10-05 Luc Teirlinck diff -r a9f716fbb9c6 -r 4f2f1522636c man/calc.texi --- a/man/calc.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/calc.texi Sun Oct 10 16:41:56 2004 +0000 @@ -21981,7 +21981,7 @@ The most basic default simplification is the evaluation of functions. For example, @cite{2 + 3} is evaluated to @cite{5}, and @cite{@t{sqrt}(9)} is evaluated to @cite{3}. Evaluation does not occur if the arguments -to a function are somehow of the wrong type (@cite{@t{tan}([2,3,4])}, +to a function are somehow of the wrong type (@cite{@t{tan}([2,3,4])}), range (@cite{@t{tan}(90)}), or number (@cite{@t{tan}(3,5)}), or if the function name is not recognized (@cite{@t{f}(5)}), or if ``symbolic'' mode (@pxref{Symbolic Mode}) prevents evaluation (@cite{@t{sqrt}(2)}). diff -r a9f716fbb9c6 -r 4f2f1522636c man/calendar.texi --- a/man/calendar.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/calendar.texi Sun Oct 10 16:41:56 2004 +0000 @@ -1391,48 +1391,46 @@ The icalendar package aims at providing an implementation of the iCalendar standard, as defined in ``RFC 2445 -- Internet Calendaring and Scheduling Core Object Specification (iCalendar)''. It provides a means -for importing [iv]Calendar data into Emacs diary files and vice versa. +for importing iCalendar (and the earlier vCalendar format) data into +Emacs diary files and vice versa. - Importing should work correctly for ``ordinary'', i.e. non-recurring, -events. Recurring events may not be imported correctly, if they are -imported at all. Exporting of diary files into iCalendar files should -work correctly for most diary entries. Please note that -@file{icalendar.el} is work in progress, so usage may evolve in future. - -@subsection Usage + Importing works for ``ordinary'' (i.e. non-recurring) events, but (at +present) may not work correctly (if at all) for recurring events. +Exporting of diary files into iCalendar files should work correctly for +most diary entries. Please note that @file{icalendar.el} is work in +progress, so usage may evolve in future. To activate the package, use @code{(require 'icalendar)}. @findex icalendar-extract-ical-from-buffer The command @code{icalendar-extract-ical-from-buffer} extracts iCalendar data from the current buffer and adds it to your (default) -diary file. It can be used interactively, or for automatic extraction -of iCalendar data; for example with the VM mail reader one could use: +diary file. This function is also suitable for automatic extraction of +iCalendar data; for example with the Rmail mail client one could use: @example -(add-hook 'vm-select-new-message-hook 'icalendar-extract-ical-from-buffer) +(add-hook 'rmail-show-message-hook 'icalendar-extract-ical-from-buffer) @end example @findex icalendar-import-file - The function @code{icalendar-import-file} can be used -non-interactively to import an iCalendar file. @strong{Caution:} the -contents of the target diary file are @emph{deleted} by default! It is -highly recommended to use a dedicated diary file for importing. For -example: + The command @code{icalendar-import-file} imports an iCalendar file. +@strong{Caution:} the contents of the target diary file are +@emph{deleted} by default! It is highly recommended to use a dedicated +diary file for importing. For example: @example (icalendar-import-file "/here/is/calendar.ics" "/there/goes/ical-diary") @end example @noindent -The import file can be added to the diary using an @code{#include} -directive. @xref{Fancy Diary Display,,, elisp, The Emacs Lisp Reference -Manual}. +You can use an @code{#include} directive to add the import file contents +to the diary. @xref{Fancy Diary Display,,, elisp, The Emacs Lisp +Reference Manual}. @findex icalendar-convert-diary-to-ical - Use @code{icalendar-convert-diary-to-ical} to interactively export an -Emacs diary file to iCalendar format. @strong{Caution:} the contents of -the target file are @emph{deleted} by default! + The command @code{icalendar-convert-diary-to-ical} exports an Emacs +diary file to iCalendar format. @strong{Caution:} the contents of the +target file are @emph{deleted} by default! @node Daylight Savings diff -r a9f716fbb9c6 -r 4f2f1522636c man/files.texi --- a/man/files.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/files.texi Sun Oct 10 16:41:56 2004 +0000 @@ -2858,7 +2858,7 @@ for moving around in the file, but none for changing it; type @kbd{?} while viewing for a list of them. They are mostly the same as normal Emacs cursor motion commands. To exit from viewing, type @kbd{q}. -The commands for viewing are defined by a special major mode called View +The commands for viewing are defined by a special minor mode called View mode. A related command, @kbd{M-x view-buffer}, views a buffer already present diff -r a9f716fbb9c6 -r 4f2f1522636c man/gnus.texi --- a/man/gnus.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/gnus.texi Sun Oct 10 16:41:56 2004 +0000 @@ -14002,7 +14002,7 @@ ;; @r{the bugs- list, but allow cross-posting when the} ;; @r{message was really cross-posted.} (any "bugs-mypackage@@somewhere" "mypkg.bugs") - (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list") + (any "mypackage@@somewhere" - "bugs-mypackage" "mypkg.list") ;; @r{People@dots{}} (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) ;; @r{Unmatched mail goes to the catch all group.} diff -r a9f716fbb9c6 -r 4f2f1522636c man/msdog.texi --- a/man/msdog.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/msdog.texi Sun Oct 10 16:41:56 2004 +0000 @@ -840,7 +840,7 @@ subsequent commands. Many users find this frustrating. @vindex w32-pass-alt-to-system -You can reenable Windows's default handling of tapping the @key{ALT} key +You can re-enable Windows' default handling of tapping the @key{ALT} key by setting @code{w32-pass-alt-to-system} to a non-@code{nil} value. @ignore diff -r a9f716fbb9c6 -r 4f2f1522636c man/search.texi --- a/man/search.texi Sun Oct 10 16:41:15 2004 +0000 +++ b/man/search.texi Sun Oct 10 16:41:56 2004 +0000 @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001 +@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001, 2004 @c Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Search, Fixit, Display, Top @@ -193,9 +193,11 @@ character or word. @kbd{C-y} is similar to @kbd{C-w} but copies all the rest of the -current line into the search string. Both @kbd{C-y} and @kbd{C-w} -convert the text they copy to lower case if the search is currently -not case-sensitive; this is so the search remains case-insensitive. +current line into the search string. If point is already at the end +of a line, it grabs the entire next line. Both @kbd{C-y} and +@kbd{C-w} convert the text they copy to lower case if the search is +currently not case-sensitive; this is so the search remains +case-insensitive. @kbd{C-M-w} and @kbd{C-M-y} modify the search string by only one character at a time: @kbd{C-M-w} deletes the last character from the @@ -777,13 +779,13 @@ The constructs that pertain to words and syntax are controlled by the setting of the syntax table (@pxref{Syntax}). - Here is a complicated regexp, stored in @code{sentence-end} and used -by Emacs to recognize the end of a sentence together with any -whitespace that follows. We show its Lisp syntax to distinguish the -spaces from the tab characters. In Lisp syntax, the string constant -begins and ends with a double-quote. @samp{\"} stands for a -double-quote as part of the regexp, @samp{\\} for a backslash as part -of the regexp, @samp{\t} for a tab, and @samp{\n} for a newline. + Here is a complicated regexp. It is a simplified version of the +regexp that Emacs uses, by default, to recognize the end of a sentence +together with any whitespace that follows. We show its Lisp syntax to +distinguish the spaces from the tab characters. In Lisp syntax, the +string constant begins and ends with a double-quote. @samp{\"} stands +for a double-quote as part of the regexp, @samp{\\} for a backslash as +part of the regexp, @samp{\t} for a tab, and @samp{\n} for a newline. @example "[.?!][]\"')]*\\($\\| $\\|\t\\| \\)[ \t\n]*" diff -r a9f716fbb9c6 -r 4f2f1522636c src/ChangeLog --- a/src/ChangeLog Sun Oct 10 16:41:15 2004 +0000 +++ b/src/ChangeLog Sun Oct 10 16:41:56 2004 +0000 @@ -1,3 +1,27 @@ +2004-10-08 Steven Tamm + + * config.in (HAVE_MALLOC_MALLOC_H): Regenerate + * macterm.c (mac_check_for_quit_char): Remove warning for using + NULL where 0 should be used + * unexmacosx.c: Use malloc/malloc.h on Tiger instead of + objc/malloc.h + * mac.c: Include time.h for Tiger compatibility + +2004-10-07 Kim F. Storm + + * xdisp.c (redisplay_window): Fix flicker on vertical line between + windows. Update vertical line after drawing window fringes, but + only if actually drawing any bitmaps--or there is no fringe. + + * xterm.c (x_update_window_end): Likewise. + * macterm.c (x_update_window_end): Likewise. + * w32term.c (x_update_window_end): Likewise. + + * fringe.c (draw_window_fringes): Return value now indicates if + any fringe bitmaps were redrawn (or there are no fringes). + + * dispextern.h (draw_window_fringes): Update prototype. + 2004-10-06 YAMAMOTO Mitsuharu * macfns.c (mac_get_window_bounds): Add extern. @@ -5,7 +29,7 @@ * macmenu.c (update_submenu_strings): Apply 2004-09-07 change for xmenu.c (YAILOM). - + * macterm.c [!MAC_OSX]: Include Windows.h. (front_emacs_window): Rename from mac_front_window. All uses changed. Return the frontmost non-tooltip emacs window. diff -r a9f716fbb9c6 -r 4f2f1522636c src/config.in --- a/src/config.in Sun Oct 10 16:41:15 2004 +0000 +++ b/src/config.in Sun Oct 10 16:41:56 2004 +0000 @@ -352,6 +352,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MAILLOCK_H +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_MALLOC_H + /* Define to 1 if you have the `mblen' function. */ #undef HAVE_MBLEN @@ -754,9 +757,9 @@ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ diff -r a9f716fbb9c6 -r 4f2f1522636c src/dispextern.h --- a/src/dispextern.h Sun Oct 10 16:41:15 2004 +0000 +++ b/src/dispextern.h Sun Oct 10 16:41:56 2004 +0000 @@ -2633,7 +2633,7 @@ int lookup_fringe_bitmap (Lisp_Object); void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int)); void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); -void draw_window_fringes P_ ((struct window *)); +int draw_window_fringes P_ ((struct window *, int)); int update_window_fringes P_ ((struct window *, int)); void compute_fringe_widths P_ ((struct frame *, int)); diff -r a9f716fbb9c6 -r 4f2f1522636c src/fringe.c --- a/src/fringe.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/fringe.c Sun Oct 10 16:41:56 2004 +0000 @@ -723,19 +723,35 @@ } /* Draw the fringes of window W. Only fringes for rows marked for - update in redraw_fringe_bitmaps_p are drawn. */ + update in redraw_fringe_bitmaps_p are drawn. + + Return >0 if left or right fringe was redrawn in any way. + + If NO_FRINGE is non-zero, also return >0 if either fringe has zero width. -void -draw_window_fringes (w) + A return value >0 indicates that the vertical line between windows + needs update (as it may be drawn in the fringe). +*/ + +int +draw_window_fringes (w, no_fringe) struct window *w; + int no_fringe; { struct glyph_row *row; int yb = window_text_bottom_y (w); int nrows = w->current_matrix->nrows; int y = 0, rn; + int updated = 0; if (w->pseudo_window_p) - return; + return 0; + + /* Must draw line if no fringe */ + if (no_fringe + && (WINDOW_LEFT_FRINGE_WIDTH (w) == 0 + || WINDOW_RIGHT_FRINGE_WIDTH (w) == 0)) + updated++; for (y = 0, rn = 0, row = w->current_matrix->rows; y < yb && rn < nrows; @@ -745,7 +761,10 @@ continue; draw_row_fringe_bitmaps (w, row); row->redraw_fringe_bitmaps_p = 0; + updated++; } + + return updated; } @@ -951,11 +970,7 @@ Typically, we add an equal amount (+/- 1 pixel) to each fringe, but a negative width value is taken literally (after negating it). - We never make the fringes narrower than specified. It is planned - to make fringe bitmaps customizable and expandable, and at that - time, the user will typically specify the minimum number of pixels - needed for his bitmaps, so we shouldn't select anything less than - what is specified. + We never make the fringes narrower than specified. */ void diff -r a9f716fbb9c6 -r 4f2f1522636c src/mac.c --- a/src/mac.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/mac.c Sun Oct 10 16:41:56 2004 +0000 @@ -24,6 +24,7 @@ #include #include +#include #include #include #include diff -r a9f716fbb9c6 -r 4f2f1522636c src/macterm.c --- a/src/macterm.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/macterm.c Sun Oct 10 16:41:56 2004 +0000 @@ -1291,9 +1291,8 @@ output_cursor.vpos, output_cursor.x, output_cursor.y); - x_draw_vertical_border (w); - - draw_window_fringes (w); + if (draw_window_fringes (w, 1)) + x_draw_vertical_border (w); UNBLOCK_INPUT; } @@ -5050,7 +5049,7 @@ GetWindowBounds (FRAME_MAC_WINDOW (f), kWindowStructureRgn, outer); #else /* not TARGET_API_MAC_CARBON */ RgnHandle region = NewRgn (); - + GetWindowRegion (FRAME_MAC_WINDOW (f), kWindowContentRgn, region); *inner = (*region)->rgnBBox; GetWindowRegion (FRAME_MAC_WINDOW (f), kWindowStructureRgn, region); @@ -5143,7 +5142,7 @@ { Rect inner, outer, screen_rect, dummy; RgnHandle region = NewRgn (); - + mac_get_window_bounds (f, &inner, &outer); f->x_pixels_diff = inner.left - outer.left; f->y_pixels_diff = inner.top - outer.top; @@ -8114,7 +8113,7 @@ switch (GetEventClass (eventRef)) { case kEventClassWindow: - if (GetEventKind (eventRef) == kEventWindowBoundsChanged) + if (GetEventKind (eventRef) == kEventWindowBoundsChanged) { WindowPtr window_ptr; GetEventParameter(eventRef, kEventParamDirectObject, @@ -8431,7 +8430,7 @@ if (!is_emacs_window (window_ptr)) break; - + f = mac_window_to_frame (window_ptr); if ((er.modifiers & activeFlag) != 0) diff -r a9f716fbb9c6 -r 4f2f1522636c src/unexmacosx.c --- a/src/unexmacosx.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/unexmacosx.c Sun Oct 10 16:41:56 2004 +0000 @@ -99,7 +99,12 @@ #if defined (__ppc__) #include #endif +#if defined (HAVE_MALLOC_MALLOC_H) +#include +#else #include +#endif + #define VERBOSE 1 diff -r a9f716fbb9c6 -r 4f2f1522636c src/w32term.c --- a/src/w32term.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/w32term.c Sun Oct 10 16:41:56 2004 +0000 @@ -540,9 +540,8 @@ output_cursor.vpos, output_cursor.x, output_cursor.y); - x_draw_vertical_border (w); - - draw_window_fringes (w); + if (draw_window_fringes (w, 1)) + x_draw_vertical_border (w); UNBLOCK_INPUT; } diff -r a9f716fbb9c6 -r 4f2f1522636c src/xdisp.c --- a/src/xdisp.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/xdisp.c Sun Oct 10 16:41:56 2004 +0000 @@ -12218,7 +12218,8 @@ { update_begin (f); BLOCK_INPUT; - draw_window_fringes (w); + if (draw_window_fringes (w, 1)) + x_draw_vertical_border (w); UNBLOCK_INPUT; update_end (f); } diff -r a9f716fbb9c6 -r 4f2f1522636c src/xterm.c --- a/src/xterm.c Sun Oct 10 16:41:15 2004 +0000 +++ b/src/xterm.c Sun Oct 10 16:41:56 2004 +0000 @@ -572,9 +572,8 @@ output_cursor.vpos, output_cursor.x, output_cursor.y); - x_draw_vertical_border (w); - - draw_window_fringes (w); + if (draw_window_fringes (w, 1)) + x_draw_vertical_border (w); UNBLOCK_INPUT; }