From: yamaoka Date: Sun, 27 Apr 2003 22:19:01 +0000 (+0000) Subject: Import Oort Gnus v0.19. X-Git-Tag: ognus-0_19~1 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5f7362aa49943397fec729fdcfca40679946ec8;p=elisp%2Fgnus.git- Import Oort Gnus v0.19. --- diff --git a/ChangeLog b/ChangeLog index 1218700..08c671c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,37 @@ +2003-04-22 Reiner Steib + + * make.bat: Flag as binary to ensure DOS line terminators. Delete + trailing whitespace. + +2003-04-21 Reiner Steib + From Frank Schmitt + + * etc/gnus-tut.txt: Update Gnus FAQ, delete trailing whitespace. + +2003-04-17 Kevin Greiner + + * make.bat: Cleaned up end-of-line characters. + +2003-04-17 Steve Youngs + + * Makefile.in (XEMACS): Use @EMACS@. + + * aclocal.m4 (AC_PATH_LISPDIR): Set $datadir to $prefix/lib if + building with XEmacs. + + * aclocal.m4 (AC_SET_BUILD_FLAGS): New. So we can set XEmacs + command line options to '-batch -no-autoloads...' for a cleaner + build environment. + + * configure.in: Use it. + + * configure: Regenerate. + +2003-04-16 Reiner Steib + From Frank Schmitt + + * make.bat: New variable EMACS_ARGS. Changed XEmacs args. + 2003-03-23 Simon Josefsson * GNUS-NEWS: Add IDNA. Add TLS. Fix USEFOR reference. diff --git a/Makefile.in b/Makefile.in index 91bc14c..73b8eb3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -5,7 +5,7 @@ srcdir = @srcdir@ @SET_MAKE@ EMACS = @EMACS@ -XEMACS = xemacs +XEMACS = @EMACS@ all: lick info diff --git a/aclocal.m4 b/aclocal.m4 index 4e4e435..03a5528 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -84,6 +84,7 @@ AC_DEFUN(AC_PATH_LISPDIR, [ theprefix=$ac_default_prefix fi if test "$EMACS_FLAVOR" = "xemacs"; then + datadir="\$(prefix)/lib" lispdir="\$(datadir)/${EMACS_FLAVOR}/site-packages/lisp/gnus" else lispdir="\$(datadir)/${EMACS_FLAVOR}/site-lisp" @@ -141,6 +142,26 @@ AC_DEFUN(AC_PATH_INFO_DIR, [ ]) dnl +dnl This will set the XEmacs command line options to be slightly different +dnl from the Emacs ones. If building with XEmacs the options will be +dnl "-batch -no-autoloads..." to give a much cleaner build environment. +dnl +AC_DEFUN(AC_SET_BUILD_FLAGS, [ + AC_MSG_CHECKING([which options to pass on to (X)Emacs]) + if test "x$FLAGS" = "x"; then + if test "$EMACS_FLAVOR" = "xemacs"; then + FLAGS="-batch -no-autoloads -l \$(srcdir)/dgnushack.el" + else + FLAGS="-batch -q -no-site-file -l \$(srcdir)/dgnushack.el" + fi + else + FLAGS=$FLAGS + fi + AC_MSG_RESULT($FLAGS) + AC_SUBST(FLAGS) +]) + +dnl dnl Check whether a function exists in a library dnl All '_' characters in the first argument are converted to '-' dnl diff --git a/configure b/configure index 44e3919..b22fdc7 100755 --- a/configure +++ b/configure @@ -1,12 +1,81 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by Autoconf 2.52. +# Generated by GNU Autoconf 2.57. # -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -14,22 +83,113 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done -# Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr @@ -55,24 +215,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: else - as_unset=false + as_mkdir_p=false fi -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + # IFS # We need space, tab and new line, in precisely that order. @@ -81,7 +237,8 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } +$as_unset CDPATH + # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -94,9 +251,11 @@ exec 6>&1 # Initializations. # ac_default_prefix=/usr/local +ac_config_libobj_dir=. cross_compiling=no subdirs= -MFLAGS= MAKEFLAGS= +MFLAGS= +MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. @@ -104,7 +263,16 @@ SHELL=${CONFIG_SHELL-/bin/sh} # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + ac_unique_file="lisp/gnus.el" +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA MAKEINFO EMACS XEMACS EMACS_FLAVOR lispdir etcdir info_dir HAVE_url URL HAVE_w3_forms W3 FLAGS LATEX WITH_FONTS_bembo WITHOUT_FONTS_bembo WITH_FONTS_pfu WITHOUT_FONTS_pfu WITH_FONTS_bcr WITHOUT_FONTS_bcr USE_FONTS LIBOBJS LTLIBOBJS' +ac_subst_files='' # Initialize some variables set by options. ac_init_help= @@ -144,13 +312,6 @@ oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - ac_prev= for ac_option do @@ -283,7 +444,7 @@ do with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -462,7 +623,7 @@ do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done @@ -474,18 +635,19 @@ do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. +# FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias -# FIXME: should be removed in autoconf 3.0. +# FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe @@ -501,13 +663,23 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -517,13 +689,16 @@ else fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else - { echo "$as_me: error: cannot find sources in $srcdir" >&2 + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias @@ -544,7 +719,7 @@ ac_cv_env_target_alias_value=$target_alias if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. - cat <&2 + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done @@ -656,31 +851,31 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then - cat <<\EOF + cat <<\_ACEOF -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -EOF +_ACEOF exit 0 fi exec 5>config.log -cat >&5 <&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.52. Invocation command line was +generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ -EOF +_ACEOF { cat <<_ASUNAME -## ---------- ## -## Platform. ## -## ---------- ## +## --------- ## +## Platform. ## +## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` @@ -699,51 +894,96 @@ hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -PATH = $PATH - _ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + } >&5 -cat >&5 <&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF -EOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= +ac_configure_args0= +ac_configure_args1= ac_sep= -for ac_arg +ac_must_keep_next=false +for ac_pass in 1 2 do - case $ac_arg in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - ac_sep=" " ;; - *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" - ac_sep=" " ;; - esac - # Get rid of the leading space. + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. - echo >&5 - echo "## ----------------- ##" >&5 - echo "## Cache variables. ##" >&5 - echo "## ----------------- ##" >&5 - echo >&5 - # The following way of writing the cache mishandles newlines in values, + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in @@ -757,21 +997,53 @@ trap 'exit_status=$? "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; -} >&5 - sed "/^$/d" confdefs.h >conftest.log - if test -s conftest.log; then - echo >&5 - echo "## ------------ ##" >&5 - echo "## confdefs.h. ##" >&5 - echo "## ------------ ##" >&5 - echo >&5 - cat conftest.log >&5 - fi - (echo; echo) >&5 - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" >&5 - echo "$as_me: exit $exit_status" >&5 - rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do @@ -784,6 +1056,33 @@ rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then @@ -795,9 +1094,9 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - { echo "$as_me:798: loading site script $ac_site_file" >&5 + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} - cat "$ac_site_file" >&5 + sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done @@ -806,7 +1105,7 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then - { echo "$as_me:809: loading cache $cache_file" >&5 + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; @@ -814,7 +1113,7 @@ echo "$as_me: loading cache $cache_file" >&6;} esac fi else - { echo "$as_me:817: creating cache $cache_file" >&5 + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -830,42 +1129,42 @@ for ac_var in `(set) 2>&1 | eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:833: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:837: error: \`$ac_var' was not set in the previous run" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:843: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:845: former value: $ac_old_val" >&5 + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:847: current value: $ac_new_val" >&5 + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac - # Pass precious variables to config.status. It doesn't matter if - # we pass some twice (in addition to the command line arguments). + # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" - ;; + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:866: error: changes in the environment can compromise the build" >&5 + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:868: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi @@ -876,37 +1175,34 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac -echo "#! $SHELL" >conftest.sh -echo "exit 0" >>conftest.sh -chmod +x conftest.sh -if { (echo "$as_me:888: PATH=\".;.\"; conftest.sh") >&5 - (PATH=".;."; conftest.sh) 2>&5 - ac_status=$? - echo "$as_me:891: \$? = $ac_status" >&5 - (exit $ac_status); }; then - ac_path_separator=';' -else - ac_path_separator=: -fi -PATH_SEPARATOR="$ac_path_separator" -rm -f conftest.sh -echo "$as_me:900: checking whether ${MAKE-make} sets \${MAKE}" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 + + + + + + + + + + + + + + + + + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.make <<\EOF + cat >conftest.make <<\_ACEOF all: - @echo 'ac_maketemp="${MAKE}"' -EOF + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then @@ -917,11 +1213,11 @@ fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:920: result: yes" >&5 + echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$as_me:924: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi @@ -943,7 +1239,7 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:946: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi @@ -963,43 +1259,48 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:966: checking for a BSD compatible install" >&5 -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_save_IFS=$IFS; IFS=$ac_path_separator - for ac_dir in $PATH; do - IFS=$ac_save_IFS - # Account for people who put trailing slashes in PATH elements. - case $ac_dir/ in - / | ./ | .// | /cC/* \ - | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ - | /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if $as_executable_p "$ac_dir/$ac_prog"; then - if test $ac_prog = install && - grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi done - ;; - esac - done + done + ;; +esac +done + fi if test "${ac_cv_path_install+set}" = set; then @@ -1012,7 +1313,7 @@ fi INSTALL=$ac_install_sh fi fi -echo "$as_me:1015: result: $INSTALL" >&5 +echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. @@ -1023,10 +1324,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + if test "${EMACS}" = "t"; then EMACS="" fi + # Check whether --with-xemacs or --without-xemacs was given. if test "${with_xemacs+set}" = set; then withval="$with_xemacs" @@ -1040,7 +1343,7 @@ if test "${with_emacs+set}" = set; then fi; # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 -echo "$as_me:1043: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKEINFO+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1048,15 +1351,18 @@ else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_MAKEINFO="makeinfo" -echo "$as_me:1058: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MAKEINFO="makeinfo" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done test -z "$ac_cv_prog_MAKEINFO" && ac_cv_prog_MAKEINFO="no" @@ -1064,16 +1370,17 @@ fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then - echo "$as_me:1067: result: $MAKEINFO" >&5 + echo "$as_me:$LINENO: result: $MAKEINFO" >&5 echo "${ECHO_T}$MAKEINFO" >&6 else - echo "$as_me:1070: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi + # Extract the first word of "emacs", so it can be a program name with args. set dummy emacs; ac_word=$2 -echo "$as_me:1076: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_EMACS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1081,15 +1388,18 @@ else if test -n "$EMACS"; then ac_cv_prog_EMACS="$EMACS" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_EMACS="emacs" -echo "$as_me:1091: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_EMACS="emacs" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done test -z "$ac_cv_prog_EMACS" && ac_cv_prog_EMACS="xemacs" @@ -1097,19 +1407,22 @@ fi fi EMACS=$ac_cv_prog_EMACS if test -n "$EMACS"; then - echo "$as_me:1100: result: $EMACS" >&5 + echo "$as_me:$LINENO: result: $EMACS" >&5 echo "${ECHO_T}$EMACS" >&6 else - echo "$as_me:1103: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi - echo "$as_me:1107: checking if $EMACS is really XEmacs" >&5 + + + + echo "$as_me:$LINENO: checking if $EMACS is really XEmacs" >&5 echo $ECHO_N "checking if $EMACS is really XEmacs... $ECHO_C" >&6 elisp="(if (string-match \"XEmacs\" emacs-version) \"yes\" \"no\") " if test -z ""noecho""; then - echo "$as_me:1112: checking for xemacsp" >&5 + echo "$as_me:$LINENO: checking for xemacsp" >&5 echo $ECHO_N "checking for xemacsp... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_xemacsp+set}" = set; then @@ -1128,7 +1441,7 @@ fi xemacsp=${EMACS_cv_SYS_xemacsp} if test -z ""noecho""; then - echo "$as_me:1131: result: $xemacsp" >&5 + echo "$as_me:$LINENO: result: $xemacsp" >&5 echo "${ECHO_T}$xemacsp" >&6 fi @@ -1137,16 +1450,18 @@ fi if test "$XEMACS" = "yes"; then EMACS_FLAVOR=xemacs fi - echo "$as_me:1140: result: $XEMACS" >&5 + echo "$as_me:$LINENO: result: $XEMACS" >&5 echo "${ECHO_T}$XEMACS" >&6 + + if test "$prefix" = "NONE"; then - echo "$as_me:1144: checking prefix for your Emacs" >&5 + echo "$as_me:$LINENO: checking prefix for your Emacs" >&5 echo $ECHO_N "checking prefix for your Emacs... $ECHO_C" >&6 elisp="(expand-file-name \"..\" invocation-directory)" if test -z ""noecho""; then - echo "$as_me:1149: checking for prefix" >&5 + echo "$as_me:$LINENO: checking for prefix" >&5 echo $ECHO_N "checking for prefix... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_prefix+set}" = set; then @@ -1165,12 +1480,12 @@ fi prefix=${EMACS_cv_SYS_prefix} if test -z ""noecho""; then - echo "$as_me:1168: result: $prefix" >&5 + echo "$as_me:$LINENO: result: $prefix" >&5 echo "${ECHO_T}$prefix" >&6 fi prefix=${EMACS_cv_SYS_prefix} - echo "$as_me:1173: result: $prefix" >&5 + echo "$as_me:$LINENO: result: $prefix" >&5 echo "${ECHO_T}$prefix" >&6 fi @@ -1179,7 +1494,7 @@ if test "${with_lispdir+set}" = set; then withval="$with_lispdir" lispdir=${withval} fi; - echo "$as_me:1182: checking where .elc files should go" >&5 + echo "$as_me:$LINENO: checking where .elc files should go" >&5 echo $ECHO_N "checking where .elc files should go... $ECHO_C" >&6 if test -z "$lispdir"; then theprefix=$prefix @@ -1187,6 +1502,7 @@ echo $ECHO_N "checking where .elc files should go... $ECHO_C" >&6 theprefix=$ac_default_prefix fi if test "$EMACS_FLAVOR" = "xemacs"; then + datadir="\$(prefix)/lib" lispdir="\$(datadir)/${EMACS_FLAVOR}/site-packages/lisp/gnus" else lispdir="\$(datadir)/${EMACS_FLAVOR}/site-lisp" @@ -1203,15 +1519,18 @@ echo $ECHO_N "checking where .elc files should go... $ECHO_C" >&6 fi done fi - echo "$as_me:1206: result: $lispdir" >&5 + echo "$as_me:$LINENO: result: $lispdir" >&5 echo "${ECHO_T}$lispdir" >&6 + + + # Check whether --with-etcdir or --without-etcdir was given. if test "${with_etcdir+set}" = set; then withval="$with_etcdir" etcdir=${withval} fi; - echo "$as_me:1214: checking where etc files should go" >&5 + echo "$as_me:$LINENO: checking where etc files should go" >&5 echo $ECHO_N "checking where etc files should go... $ECHO_C" >&6 if test -z "$etcdir"; then if test "$EMACS_FLAVOR" = "xemacs"; then @@ -1220,10 +1539,12 @@ echo $ECHO_N "checking where etc files should go... $ECHO_C" >&6 etcdir="\$(lispdir)/../etc" fi fi - echo "$as_me:1223: result: $etcdir" >&5 + echo "$as_me:$LINENO: result: $etcdir" >&5 echo "${ECHO_T}$etcdir" >&6 - echo "$as_me:1226: checking where the TeXinfo docs should go" >&5 + + + echo "$as_me:$LINENO: checking where the TeXinfo docs should go" >&5 echo $ECHO_N "checking where the TeXinfo docs should go... $ECHO_C" >&6 if test "$infodir" = "\${prefix}/info"; then if test "$EMACS_FLAVOR" = "xemacs"; then @@ -1234,24 +1555,27 @@ echo $ECHO_N "checking where the TeXinfo docs should go... $ECHO_C" >&6 else info_dir=$infodir fi - echo "$as_me:1237: result: $info_dir" >&5 + echo "$as_me:$LINENO: result: $info_dir" >&5 echo "${ECHO_T}$info_dir" >&6 -echo "$as_me:1240: checking for acceptable URL version" >&5 + + +echo "$as_me:$LINENO: checking for acceptable URL version" >&5 echo $ECHO_N "checking for acceptable URL version... $ECHO_C" >&6 if test "${EMACS_cv_ACCEPTABLE_URL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + if test -z ""noecho""; then - echo "$as_me:1247: checking for url-retrieve in url" >&5 + echo "$as_me:$LINENO: checking for url-retrieve in url" >&5 echo $ECHO_N "checking for url-retrieve in url... $ECHO_C" >&6 fi library=`echo url | tr _ -` elisp="(progn (fmakunbound 'url-retrieve) (condition-case nil (progn (require '$library) (fboundp 'url-retrieve)) (error (prog1 nil (message \"$library not found\")))))" if test -z ""noecho""; then - echo "$as_me:1254: checking for url" >&5 + echo "$as_me:$LINENO: checking for url" >&5 echo $ECHO_N "checking for url... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_url+set}" = set; then @@ -1270,7 +1594,7 @@ fi url=${EMACS_cv_SYS_url} if test -z ""noecho""; then - echo "$as_me:1273: result: $url" >&5 + echo "$as_me:$LINENO: result: $url" >&5 echo "${ECHO_T}$url" >&6 fi @@ -1283,7 +1607,7 @@ fi HAVE_url=${EMACS_cv_SYS_url} if test -z ""noecho""; then - echo "$as_me:1286: result: $HAVE_url" >&5 + echo "$as_me:$LINENO: result: $HAVE_url" >&5 echo "${ECHO_T}$HAVE_url" >&6 fi @@ -1297,7 +1621,7 @@ if test "${EMACS_cv_ACCEPTABLE_URL}" = "yes"; then elisp="(file-name-directory (locate-library \"url\"))" if test -z ""noecho""; then - echo "$as_me:1300: checking for url_dir" >&5 + echo "$as_me:$LINENO: checking for url_dir" >&5 echo $ECHO_N "checking for url_dir... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_url_dir+set}" = set; then @@ -1316,7 +1640,7 @@ fi url_dir=${EMACS_cv_SYS_url_dir} if test -z ""noecho""; then - echo "$as_me:1319: result: $url_dir" >&5 + echo "$as_me:$LINENO: result: $url_dir" >&5 echo "${ECHO_T}$url_dir" >&6 fi @@ -1325,6 +1649,7 @@ fi fi + # Check whether --with-url or --without-url was given. if test "${with_url+set}" = set; then withval="$with_url" @@ -1332,24 +1657,26 @@ if test "${with_url+set}" = set; then fi; URL=${EMACS_cv_ACCEPTABLE_URL} - echo "$as_me:1335: result: \"${URL}\"" >&5 + echo "$as_me:$LINENO: result: \"${URL}\"" >&5 echo "${ECHO_T}\"${URL}\"" >&6 -echo "$as_me:1338: checking for acceptable W3 version" >&5 + +echo "$as_me:$LINENO: checking for acceptable W3 version" >&5 echo $ECHO_N "checking for acceptable W3 version... $ECHO_C" >&6 if test "${EMACS_cv_ACCEPTABLE_W3+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + if test -z ""noecho""; then - echo "$as_me:1345: checking for w3-form-encode-xwfu in w3_forms" >&5 + echo "$as_me:$LINENO: checking for w3-form-encode-xwfu in w3_forms" >&5 echo $ECHO_N "checking for w3-form-encode-xwfu in w3_forms... $ECHO_C" >&6 fi library=`echo w3_forms | tr _ -` elisp="(progn (fmakunbound 'w3-form-encode-xwfu) (condition-case nil (progn (require '$library) (fboundp 'w3-form-encode-xwfu)) (error (prog1 nil (message \"$library not found\")))))" if test -z ""noecho""; then - echo "$as_me:1352: checking for w3_forms" >&5 + echo "$as_me:$LINENO: checking for w3_forms" >&5 echo $ECHO_N "checking for w3_forms... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_w3_forms+set}" = set; then @@ -1368,7 +1695,7 @@ fi w3_forms=${EMACS_cv_SYS_w3_forms} if test -z ""noecho""; then - echo "$as_me:1371: result: $w3_forms" >&5 + echo "$as_me:$LINENO: result: $w3_forms" >&5 echo "${ECHO_T}$w3_forms" >&6 fi @@ -1381,7 +1708,7 @@ fi HAVE_w3_forms=${EMACS_cv_SYS_w3_forms} if test -z ""noecho""; then - echo "$as_me:1384: result: $HAVE_w3_forms" >&5 + echo "$as_me:$LINENO: result: $HAVE_w3_forms" >&5 echo "${ECHO_T}$HAVE_w3_forms" >&6 fi @@ -1395,7 +1722,7 @@ if test "${EMACS_cv_ACCEPTABLE_W3}" = "yes"; then elisp="(file-name-directory (locate-library \"w3-forms\"))" if test -z ""noecho""; then - echo "$as_me:1398: checking for w3_dir" >&5 + echo "$as_me:$LINENO: checking for w3_dir" >&5 echo $ECHO_N "checking for w3_dir... $ECHO_C" >&6 fi if test "${EMACS_cv_SYS_w3_dir+set}" = set; then @@ -1414,7 +1741,7 @@ fi w3_dir=${EMACS_cv_SYS_w3_dir} if test -z ""noecho""; then - echo "$as_me:1417: result: $w3_dir" >&5 + echo "$as_me:$LINENO: result: $w3_dir" >&5 echo "${ECHO_T}$w3_dir" >&6 fi @@ -1423,6 +1750,7 @@ fi fi + # Check whether --with-w3 or --without-w3 was given. if test "${with_w3+set}" = set; then withval="$with_w3" @@ -1430,15 +1758,32 @@ if test "${with_w3+set}" = set; then fi; W3=${EMACS_cv_ACCEPTABLE_W3} - echo "$as_me:1433: result: \"${W3}\"" >&5 + echo "$as_me:$LINENO: result: \"${W3}\"" >&5 echo "${ECHO_T}\"${W3}\"" >&6 + + echo "$as_me:$LINENO: checking which options to pass on to (X)Emacs" >&5 +echo $ECHO_N "checking which options to pass on to (X)Emacs... $ECHO_C" >&6 + if test "x$FLAGS" = "x"; then + if test "$EMACS_FLAVOR" = "xemacs"; then + FLAGS="-batch -no-autoloads -l \$(srcdir)/dgnushack.el" + else + FLAGS="-batch -q -no-site-file -l \$(srcdir)/dgnushack.el" + fi + else + FLAGS=$FLAGS + fi + echo "$as_me:$LINENO: result: $FLAGS" >&5 +echo "${ECHO_T}$FLAGS" >&6 + + + test "$LATEX" = t && LATEX= test "$LATEX" || for ac_prog in latex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1441: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_LATEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1448,16 +1793,18 @@ else ac_cv_path_LATEX="$LATEX" # Let the user override the test with a path. ;; *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_LATEX="$ac_dir/$ac_word" - echo "$as_me:1458: found $ac_dir/$ac_word" >&5 - break -fi + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done ;; @@ -1466,10 +1813,10 @@ fi LATEX=$ac_cv_path_LATEX if test -n "$LATEX"; then - echo "$as_me:1469: result: $LATEX" >&5 + echo "$as_me:$LINENO: result: $LATEX" >&5 echo "${ECHO_T}$LATEX" >&6 else - echo "$as_me:1472: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1477,7 +1824,7 @@ fi done test -n "$LATEX" || LATEX="no" -echo "$as_me:1480: checking for available fonts" >&5 +echo "$as_me:$LINENO: checking for available fonts" >&5 echo $ECHO_N "checking for available fonts... $ECHO_C" >&6 # Check whether --with-fonts or --without-fonts was given. @@ -1545,11 +1892,16 @@ elif test "${USE_FONTS}" = yes ; then WITHOUT_FONTS_bcr='%' fi + + + + + if test -z "${USE_FONTS}" ; then USE_FONTS=no fi USE_FONTS=`echo "${USE_FONTS}" | sed 's/,\([^,]*\)$/ and\1/'` -echo "$as_me:1552: result: \"${USE_FONTS}\"" >&5 +echo "$as_me:$LINENO: result: \"${USE_FONTS}\"" >&5 echo "${ECHO_T}\"${USE_FONTS}\"" >&6 if test "${USE_FONTS}" = yes ; then USE_FONTS='Set in Adobe Bembo, Adobe Futura and Bitstream Courier.' @@ -1559,7 +1911,9 @@ else USE_FONTS="Set in ${USE_FONTS}." fi -ac_config_files="$ac_config_files Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile" + + + ac_config_files="$ac_config_files Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -1570,7 +1924,7 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overriden when +# `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. @@ -1605,7 +1959,7 @@ _ACEOF t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache -if cmp -s $cache_file confcache; then :; else +if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file @@ -1641,7 +1995,7 @@ fi # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\EOF +cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g @@ -1655,7 +2009,7 @@ s,\[,\\&,g s,\],\\&,g s,\$,$$,g p -EOF +_ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within @@ -1666,35 +2020,228 @@ ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:1672: creating $CONFIG_STATUS" >&5 +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL -# Generated automatically by configure. +# Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false +ac_cs_recheck=false +ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} -ac_cs_invocation="\$0 \$@" - _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + # Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr @@ -1720,24 +2267,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: else - as_unset=false + as_mkdir_p=false fi -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + # IFS # We need space, tab and new line, in precisely that order. @@ -1746,10 +2289,34 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } +$as_unset CDPATH exec 6>&1 +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.57. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 _ACEOF # Files that config.status was made for. @@ -1769,7 +2336,7 @@ if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi -cat >>$CONFIG_STATUS <<\EOF +cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the @@ -1779,6 +2346,7 @@ Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit + -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] @@ -1788,12 +2356,12 @@ Configuration files: $config_files Report bugs to ." -EOF +_ACEOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.52, +configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 @@ -1802,9 +2370,9 @@ This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" -EOF +_ACEOF -cat >>$CONFIG_STATUS <<\EOF +cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: @@ -1814,30 +2382,30 @@ do --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - shift - set dummy "$ac_option" "$ac_optarg" ${1+"$@"} - shift + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift ;; - -*);; *) # This is not an option, so the user has probably given explicit # arguments. + ac_option=$1 ac_need_defaults=false;; esac - case $1 in + case $ac_option in # Handling of the options. -EOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" - exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; -EOF -cat >>$CONFIG_STATUS <<\EOF + ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header - { { echo "$as_me:1840: error: ambiguous option: $1 + { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} @@ -1847,16 +2415,19 @@ Try \`$0 --help' for more information." >&2;} --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) - shift - CONFIG_FILES="$CONFIG_FILES $1" + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) - shift - CONFIG_HEADERS="$CONFIG_HEADERS $1" + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:1859: error: unrecognized option: $1 + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} @@ -1868,25 +2439,27 @@ Try \`$0 --help' for more information." >&2;} shift done -exec 5>>config.log -cat >&5 << _ACEOF +ac_configure_extra_args= -## ----------------------- ## -## Running config.status. ## -## ----------------------- ## +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi -This file was extended by $as_me 2.52, executed with - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - > $ac_cs_invocation -on `(hostname || uname -n) 2>/dev/null | sed 1q` +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi _ACEOF -EOF -cat >>$CONFIG_STATUS <<\EOF + + + + +cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in @@ -1897,7 +2470,7 @@ do "texi/Makefile" ) CONFIG_FILES="$CONFIG_FILES texi/Makefile" ;; "texi/gnusconfig.tex" ) CONFIG_FILES="$CONFIG_FILES texi/gnusconfig.tex" ;; "texi/ps/Makefile" ) CONFIG_FILES="$CONFIG_FILES texi/ps/Makefile" ;; - *) { { echo "$as_me:1900: error: invalid argument: $ac_config_target" >&5 + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac @@ -1911,6 +2484,9 @@ if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { @@ -1919,23 +2495,23 @@ $debug || } # Create a (secure) tmp directory for tmp files. -: ${TMPDIR=/tmp} + { - tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=$TMPDIR/cs$$-$RANDOM + tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { - echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } -EOF +_ACEOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. @@ -1948,6 +2524,12 @@ if test -n "\$CONFIG_FILES"; then sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t @@ -1963,19 +2545,13 @@ s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t @@ -1992,6 +2568,7 @@ s,@HAVE_url@,$HAVE_url,;t t s,@URL@,$URL,;t t s,@HAVE_w3_forms@,$HAVE_w3_forms,;t t s,@W3@,$W3,;t t +s,@FLAGS@,$FLAGS,;t t s,@LATEX@,$LATEX,;t t s,@WITH_FONTS_bembo@,$WITH_FONTS_bembo,;t t s,@WITHOUT_FONTS_bembo@,$WITHOUT_FONTS_bembo,;t t @@ -2000,11 +2577,13 @@ s,@WITHOUT_FONTS_pfu@,$WITHOUT_FONTS_pfu,;t t s,@WITH_FONTS_bcr@,$WITH_FONTS_bcr,;t t s,@WITHOUT_FONTS_bcr@,$WITHOUT_FONTS_bcr,;t t s,@USE_FONTS@,$USE_FONTS,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF -EOF +_ACEOF - cat >>$CONFIG_STATUS <<\EOF + cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 @@ -2043,8 +2622,8 @@ EOF fi fi # test -n "$CONFIG_FILES" -EOF -cat >>$CONFIG_STATUS <<\EOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in @@ -2058,7 +2637,8 @@ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ @@ -2069,60 +2649,84 @@ echo X"$ac_file" | /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - { case "$ac_dir" in - [\\/]* | ?:[\\/]* ) as_incr_dir=;; - *) as_incr_dir=.;; -esac -as_dummy="$ac_dir" -for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do - case $as_mkdir_dir in - # Skip DOS drivespec - ?:) as_incr_dir=$as_mkdir_dir ;; - *) - as_incr_dir=$as_incr_dir/$as_mkdir_dir - test -d "$as_incr_dir" || mkdir "$as_incr_dir" - ;; - esac -done; } - - ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" else - ac_dir_suffix= ac_dots= - fi + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } - case $srcdir in - .) ac_srcdir=. - if test -z "$ac_dots"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; *) # Relative path. - ac_srcdir=$ac_dots$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_dots$srcdir ;; - esac + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_dots$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then - { echo "$as_me:2117: creating $ac_file" >&5 + { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: - # /* config.h. Generated automatically by config.status. */ - configure_input="Generated automatically from `echo $ac_file_in | - sed 's,.*/,,'` by configure." + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. @@ -2132,7 +2736,7 @@ echo "$as_me: creating $ac_file" >&6;} -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:2135: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; @@ -2145,23 +2749,29 @@ echo "$as_me: error: cannot find input file: $f" >&2;} echo $srcdir/$f else # /dev/null tree - { { echo "$as_me:2148: error: cannot find input file: $f" >&5 + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } -EOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub -EOF -cat >>$CONFIG_STATUS <<\EOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin @@ -2173,15 +2783,16 @@ s,@INSTALL@,$ac_INSTALL,;t t fi done -EOF +_ACEOF -cat >>$CONFIG_STATUS <<\EOF +cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } -EOF +_ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open @@ -2192,8 +2803,11 @@ ac_clean_files=$ac_clean_files_save # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null - $SHELL $CONFIG_STATUS || ac_cs_success=false + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. diff --git a/configure.in b/configure.in index 59ed851..e4c53c9 100644 --- a/configure.in +++ b/configure.in @@ -23,6 +23,7 @@ AC_PATH_ETCDIR AC_PATH_INFO_DIR AC_CHECK_URL AC_CHECK_W3 +AC_SET_BUILD_FLAGS GNUS_CHECK_FONTS AC_OUTPUT(Makefile etc/Makefile lisp/Makefile texi/Makefile texi/gnusconfig.tex texi/ps/Makefile) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index dea7109..d18affe 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,9 @@ +2003-04-17 Steve Youngs + + * hashcash.el (hashcash-point-at-bol): Move the fbound test + outside of the defalias. + (hashcash-point-at-eol): Ditto. + 2003-03-19 Simon Josefsson * gnus-idna.el: Update. diff --git a/contrib/hashcash.el b/contrib/hashcash.el index ef6fc9f..8a3ab4e 100644 --- a/contrib/hashcash.el +++ b/contrib/hashcash.el @@ -1,6 +1,6 @@ ;;; hashcash.el --- Add hashcash payments to email -;; $Revision: 1.1.1.3 $ +;; $Revision: 1.1.1.4 $ ;; Copyright (C) 1997--2002 Paul E. Foley ;; Copyright (C) 2003 Free Software Foundation @@ -60,15 +60,13 @@ is used instead.") (require 'mail-utils) -(defalias 'hashcash-point-at-bol - (if (fboundp 'point-at-bol) - 'point-at-bol - 'line-beginning-position)) +(if (fboundp 'point-at-bol) + (defalias 'hashcash-point-at-bol 'point-at-bol) + (defalias 'hashcash-point-at-bol 'line-beginning-position)) -(defalias 'hashcash-point-at-eol - (if (fboundp 'point-at-eol) - 'point-at-eol - 'line-end-position)) +(if (fboundp 'point-at-eol) + (defalias 'hashcash-point-at-eol 'point-at-eol) + (defalias 'hashcash-point-at-eol 'line-end-position)) (defun hashcash-strip-quoted-names (addr) (setq addr (mail-strip-quoted-names addr)) diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt index 65bbfa1..3e179e7 100644 --- a/etc/gnus-tut.txt +++ b/etc/gnus-tut.txt @@ -301,9 +301,8 @@ Message-ID: This is the text version of the Gnus FAQ, see http://my.gnus.org for the up to date version of this document, there you can also find a -html version and various other formats. - -Frequently Asked Questions +html version and various other formats. There's also a texinfo version +of the FAQ distributed with Gnus. Table of Contents @@ -366,15 +365,16 @@ the my.gnus.org team's fault, sorry. Frequently Asked Questions with Answers 1. Installation FAQ - + 1.1. What is the latest version of Gnus? - 1.2. Where and how to get Gnus? - 1.3. What to do with the tarball now? - 1.4. Which version of Emacs do I need? - 1.5. How do I run Gnus on both Emacs and XEmacs? - + 1.2. What's new in 5.10.0? + 1.3. Where and how to get Gnus? + 1.4. What to do with the tarball now? + 1.5. Which version of Emacs do I need? + 1.6. How do I run Gnus on both Emacs and XEmacs? + 2. Startup / Group buffer - + 2.1. Every time I start Gnus I get a message "Gnus auto-save file exists. Do you want to read it?", what does this mean and how to prevent it? @@ -386,9 +386,9 @@ Frequently Asked Questions with Answers through them? 2.5. How to manually sort the groups in Group buffer? How to sort the groups in a topic? - + 3. Getting Messages - + 3.1. I just installed Gnus, started it via M-x gnus but it only says "nntp (news) open error", what to do? 3.2. I'm working under Windows and have no idea what ~/.gnus @@ -409,9 +409,9 @@ Frequently Asked Questions with Answers can I use Gnus to read my mail from it? 3.11. Can I tell Gnus not to delete the mails on the server it retrieves via POP3? - + 4. Reading messages - + 4.1. When I enter a group, all read messages are gone. How to view them again? 4.2. How to tell Gnus to show an important message every time I @@ -441,9 +441,9 @@ Frequently Asked Questions with Answers 4.14. I don't like the way the Summary buffer looks, how to tweak it? 4.15. How to split incoming mails in several groups? - + 5. Composing messages - + 5.1. What are the basic commands I need to know for sending mail and postings? 5.2. How to enable automatic word-wrap when composing messages? @@ -467,9 +467,9 @@ Frequently Asked Questions with Answers news, how to do it? 5.12. People tell me my Message-IDs are not correct, why aren't they and how to fix it? - + 6. Old messages - + 6.1. How to import my old mail into Gnus? 6.2. How to archive interesting messages? 6.3. How to search for a specific message? @@ -478,1298 +478,1412 @@ Frequently Asked Questions with Answers some groups). How to do it? 6.6. I don't want expiration to delete my mails but to move them to another group. - -7. Getting help - - 7.1. How to find information and help inside Emacs? - 7.2. I can't find anything in the Gnus manual about X (e.g. + +7. Gnus in a dial-up environment + + 7.1. I don't have a permanent connection to the net, how can I + minimize the time I've got to be connected? + 7.2. So what was this thing about the Agent? + 7.3. I want to store article bodies on disk, too. How to do it? + 7.4. How to tell Gnus not to try to send mails / postings while + I'm offline? + +8. Getting help + + 8.1. How to find information and help inside Emacs? + 8.2. I can't find anything in the Gnus manual about X (e.g. attachments, PGP, MIME...), is it not documented? - 7.3. Which websites should I know? - 7.4. Which mailing lists and newsgroups are there? - 7.5. Where to report bugs? - 7.6. I need real-time help, where to find it? - -8. Tuning Gnus - - 8.1. Starting Gnus is really slow, how to speed it up? - 8.2. How to speed up the process of entering a group? - 8.3. Sending mail becomes slower and slower, what's up? - -1. Installation FAQ - -1.1. What is the latest version of Gnus? - - As of this posting, the latest Gnus version is 5.8.8(which is - basically the same as Gnus 5.9 which is shipped with GNU Emacs). - This version is very stable and should be the choice for all - beginners. However 5.8.8 is quite old, so many people today use the - BETA version from CVS called Oort Gnus, which contains a huge - amount of new features. If you want to do this too, be aware that - it's beta and might have bugs and at worst case might eat your - mail. - -1.2. Where and how to get Gnus? - - The latest released version of Gnus is included in Emacs 21 and - available through the package system of XEmacs 21.4, so the easiest - way is getting one of those. If you don't want or can't do this, - get the Gnus tarball from http://www.gnus.org/dist/gnus.tar.gz - [http://www.gnus.org/dist/gnus.tar.gz] or via anonymous FTP from - ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz [ftp://ftp.gnus.org/pub/ - gnus/gnus.tar.gz]. - -1.3. What to do with the tarball now? - - Untar it via tar xvzf gnus.tar.gz and do the common ./configure; - make; make install circle. (under MS-Windows either get the Cygwin - environment from http://www.cygwin.com [http://www.cygwin.com] - which allows you to do what's described above or unpack the tarball - with some packer (e.g. Winace from http://www.winace.com [http:// - www.winace.com]) and use the batch-file make.bat included in the - tarball to install Gnus. If you don't want to (or aren't allowed - to) install Gnus system-wide, you can install it in your home - directory and add the following lines to your ~/.xemacs/init.el or - ~/.emacs: - - (add-to-list 'load-path "/path/to/gnus/lisp") - (if (featurep 'xemacs) - (add-to-list 'Info-directory-list "/path/to/gnus/texi/") - (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) - - - Make sure that you don't have any gnus related stuff before this - line, on MS Windows use something like "C:/path/to/lisp" (yes, "/ - "). - -1.4. Which version of Emacs do I need? - - Gnus 5.8.8 requires an emacs version that is greater than or equal - to Emacs 20.3 or XEmacs 20.1. - -1.5. How do I run Gnus on both Emacs and XEmacs? - - You can't use the same copy of Gnus in both as the Lisp files are - byte-compiled to a format which is different depending on which - Emacs did the compilation. Get one copy of Gnus for Emacs and one - for XEmacs. - -2. Startup / Group buffer - -2.1. Every time I start Gnus I get a message "Gnus auto-save file - exists. Do you want to read it?", what does this mean and how to - prevent it? - - This message means that the last time you used Gnus, it wasn't - properly exited and therefor couldn't write its informations to - disk (e.g. which messages you read), you are now asked if you want - to restore those informations from the auto-save file. - - To prevent this message make sure you exit Gnus via q in group - buffer instead of just killing Emacs. - -2.2. Gnus doesn't remember which groups I'm subscribed to, what's this? - - You get the message described in the q/a pair above while starting - Gnus, right? It's an other symptom for the same problem, so read - the answer above. - -2.3. How to change the format of the lines in Group buffer? - - You've got to tweak the value of the variable - gnus-group-line-format. See the manual node "Group Line - Specification" for information on how to do this. An example for - this (guess from whose .gnus :-)): - - (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") - - -2.4. My group buffer becomes a bit crowded, is there a way to sort my - groups into categories so I can easier browse through them? - - Gnus offers the topic mode, it allows you to sort your groups in, - well, topics, e.g. all groups dealing with Linux under the topic - linux, all dealing with music under the topic music and all dealing - with scottish music under the topic scottish which is a subtopic of - music. - - To enter topic mode, just hit t while in Group buffer. Now you can - use T n to create a topic at point and T m to move a group to a - specific topic. For more commands see the manual or the menu. You - might want to include the %P specifier at the beginning of your - gnus-group-line-format variable to have the groups nicely indented. - -2.5. How to manually sort the groups in Group buffer? How to sort the - groups in a topic? - - Move point over the group you want to move and hit C-k, now move - point to the place where you want the group to be and hit C-y. - -3. Getting Messages - -3.1. I just installed Gnus, started it via M-x gnus but it only says - "nntp (news) open error", what to do? - - You've got to tell Gnus where to fetch the news from. Read the - documentation for information on how to do this. As a first start, - put those lines in ~/.gnus: - - (setq gnus-select-method '(nntp "news.yourprovider.net")) - (setq user-mail-address "you@yourprovider.net") - (setq user-full-name "Your Name") - - -3.2. I'm working under Windows and have no idea what ~/.gnus means. - - The ~/ means the home directory where Gnus and Emacs look for the - configuration files. However, you don't really need to know what - this means, it suffices that Emacs knows what it means :-) You can - type C-x C-f ~/.gnus RET (yes, with the forward slash, even on - Windows), and Emacs will open the right file for you. (It will most - likely be new, and thus empty.) However, I'd discourage you from - doing so, since the directory Emacs chooses will most certainly not - be what you want, so let's do it the correct way. The first thing - you've got to do is to create a suitable directory (no blanks in - directory name please) e.g. c:\myhome. Then you must set the - environment variable HOME to this directory. To do this under Win9x - or Me include the line - - SET HOME=C:\myhome - - - in your autoexec.bat and reboot. Under NT, 2000 and XP, hit - Winkey+Pause/Break to enter system options (if it doesn't work, go - to Control Panel -> System). There you'll find the possibility to - set environment variables, create a new one with name HOME and - value C:\myhome, a reboot is not necessary. - - Now to create ~/.gnus, say C-x C-f ~/.gnus RET C-x C-s. in Emacs. - -3.3. My news server requires authentication, how to store user name and - password on disk? - - Create a file ~/.authinfo which includes for each server a line - like this - - machine news.yourprovider.net login YourUserName password YourPassword - - . Make sure that the file isn't readable to others if you work on a - OS which is capable of doing so. (Under Unix say - - chmod 600 ~/.authinfo - - in a shell.) - -3.4. Gnus seems to start up OK, but I can't find out how to subscribe to - a group. - - If you know the name of the group say U name.of.group RET in group - buffer (use the tab-completion Luke). Otherwise hit ^ in group - buffer, this brings you to the server buffer. Now place point (the - cursor) over the server which carries the group you want, hit RET, - move point to the group you want to subscribe to and say u to - subscribe to it. - -3.5. Gnus doesn't show all groups / Gnus says I'm not allowed to post on - this server as well as I am, what's that? - - Some providers allow restricted anonymous access and full access - only after authorization. To make Gnus send authinfo to those - servers append - - force yes - - to the line for those servers in ~/.authinfo. - -3.6. I want Gnus to fetch news from several servers, is this possible? - - Of course. You can specify more sources for articles in the - variable gnus-secondary-select-methods. Add something like this in - ~/.gnus: - - (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) - (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net")) - - -3.7. And how about local spool files? - - No problem, this is just one more select method called nnspool, so - you want this: - - (add-to-list 'gnus-secondary-select-methods '(nnspool "")) - - - Or this if you don't want an NNTP Server as primary news source: - - (setq gnus-select-method '(nnspool "")) - - - Gnus will look for the spool file in /usr/spool/news, if you want - something different, change the line above to something like this: - - (add-to-list 'gnus-secondary-select-methods - '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) - - - This sets the spool directory for this server only. You might have - to specify more stuff like the program used to post articles, see - the Gnus manual on how to do this. - -3.8. OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? - - That's a bit harder since there are many possible sources for mail, - many possible ways for storing mail and many different ways for - sending mail. The most common cases are these: 1: You want to read - your mail from a pop3 server and send them directly to a SMTP - Server 2: Some program like fetchmail retrieves your mail and - stores it on disk from where Gnus shall read it. Outgoing mail is - sent by Sendmail, Postfix or some other MTA. Sometimes, you even - need a combination of the above cases. - - However, the first thing to do is to tell Gnus in which way it - should store the mail, in Gnus terminology which back end to use. - Gnus supports many different back ends, the most commonly used one - is nnml. It stores every mail in one file and is therefor quite - fast. However you might prefer a one file per group approach if - your file system has problems with many small files, the nnfolder - back end is then probably the choice for you. To use nnml add the - following to ~/.gnus: - - (add-to-list 'gnus-secondary-select-methods '(nnml "")) - - - As you might have guessed, if you want nnfolder, it's - - (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) - - - Now we need to tell Gnus, where to get it's mail from. If it's a - POP3 server, then you need something like this: - - (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net" - :user "yourUserName" - :password "yourPassword")) - - - Make sure ~/.gnus isn't readable to others if you store your - password there. If you want to read your mail from a traditional - spool file on your local machine, it's - - (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) - - - If it's a Maildir, with one file per message as used by postfix, - Qmail and (optionally) fetchmail it's - - (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" - :subdirs ("cur" "new"))) - - - And finally if you want to read your mail from several files in one - directory, for example because procmail already split your mail, - it's - - (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" - :suffix ".prcml")) - - - Where :suffix ".prcml" tells Gnus only to use files with the suffix - .prcml. - - OK, now you only need to tell Gnus how to send mail. If you want to - send mail via sendmail (or whichever MTA is playing the role of - sendmail on your system), you don't need to do anything. However, - if you want to send your mail to an SMTP Server you need the - following in your ~/.gnus - - (setq send-mail-function 'smtpmail-send-it) - (setq message-send-mail-function 'smtpmail-send-it) - (setq smtpmail-default-smtp-server "smtp.yourProvider.net") - - -3.9. And what about IMAP? - - There are two ways of using IMAP with Gnus. The first one is to use - IMAP like POP3, that means Gnus fetches the mail from the IMAP - server and stores it on disk. If you want to do this (you don't - really want to do this) add the following to ~/.gnus - - (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" - :user "username" - :pass "password" - :stream network - :authentication login - :mailbox "INBOX" - :fetchflag "\\Seen")) - - - You might have to tweak the values for stream and/or - authentification, see the Gnus manual node "Mail Source Specifiers" - for possible values. - - If you want to use IMAP the way it's intended, you've got to follow - a different approach. You've got to add the nnimap back end to your - select method and give the information about the server there. - - (add-to-list 'gnus-secondary-select-methods - '(nnimap "Give the baby a name" - (nnimap-address "imap.yourProvider.net") - (nnimap-port 143) - (nnimap-list-pattern "archive.*"))) - - - Again, you might have to specify how to authenticate to the server - if Gnus can't guess the correct way, see the Manual Node "IMAP" for - detailed information. - -3.10. At the office we use one of those MS Exchange servers, can I use - Gnus to read my mail from it? - - Offer your administrator a pair of new running shoes for activating - IMAP on the server and follow the instructions above. - -3.11. Can I tell Gnus not to delete the mails on the server it retrieves - via POP3? - - First of all, that's not the way POP3 is intended to work, if you - have the possibility, you should use the IMAP Protocol if you want - your messages to stay on the server. Nevertheless there might be - situations where you need the feature, but sadly Gnus itself has no - predefined functionality to do so. - - However this is Gnus county so there are possibilities to achieve - what you want. The easiest way is to get an external program which - retrieves copies of the mail and stores them on disk, so Gnus can - read it from there. On Unix systems you could use e.g. fetchmail - for this, on MS Windows you can use Hamster, an excellent local - news and mail server. - - The other solution would be, to replace the method Gnus uses to get - mail from POP3 servers by one which is capable of leaving the mail - on the server. If you use XEmacs, get the package mail-lib, it - includes an enhanced pop3.el, look in the file, there's - documentation on how to tell Gnus to use it and not to delete the - retrieved mail. For GNU Emacs look for the file epop3.el which can - do the same (If you know the home of this file, please send me an - e-mail). You can also tell Gnus to use an external program (e.g. - fetchmail) to fetch your mail, see the info node "Mail Source - Specifiers" in the Gnus manual on how to do it. - -4. Reading messages - -4.1. When I enter a group, all read messages are gone. How to view them - again? - - If you enter the group by saying RET in summary buffer with point - over the group, only unread and ticked messages are loaded. Say C-u - RET instead to load all available messages. If you want only the - e.g. 300 newest say C-u 300 RET - - Loading only unread messages can be annoying if you have threaded - view enabled, say - - (setq gnus-fetch-old-headers 'some) - - - in ~/.gnus to load enough old articles to prevent teared threads, - replace 'some with t to load all articles (Warning: Both settings - enlarge the amount of data which is fetched when you enter a group - and slow down the process of entering a group). - - If you use Oort Gnus, you can say /o N In summary buffer to load - the last N messages, this feature is not available in 5.8.8 - - If you don't want all old messages, but the parent of the message - you're just reading, you can say ^, if you want to retrieve the - whole thread the message you're just reading belongs to, A T is - your friend. - -4.2. How to tell Gnus to show an important message every time I enter a - group, even when it's read? - - You can tick important messages. To do this hit u while point is in - summary buffer over the message. When you want to remove the mark, - hit either d (this deletes the tick mark and set's unread mark) or - M c (which deletes all marks for the message). - -4.3. How to view the headers of a message? - - Say t to show all headers, one more t hides them again. - -4.4. How to view the raw unformatted message? - - Say C-u g to show the raw message g returns to normal view. - -4.5. How can I change the headers Gnus displays by default at the top of - the article buffer? - - The variable gnus-visible-headers controls which headers are shown, - its value is a regular expression, header lines which match it are - shown. So if you want author, subject, date, and if the header - exists, Followup-To and MUA / NUA say this in ~/.gnus: - - (setq gnus-visible-headers - "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") - - -4.6. I'd like Gnus NOT to render HTML-mails but show me the text part if - it's available. How to do it? - - Say - - (eval-after-load "mm-decode" - '(progn - (add-to-list 'mm-discouraged-alternatives "text/html") - (add-to-list 'mm-discouraged-alternatives "text/richtext"))) - - - in ~/.gnus. If you don't want HTML rendered, even if there's no - text alternative add - - (setq mm-automatic-display (remove "text/html" mm-automatic-display)) - - - too. - -4.7. Can I use some other browser than w3 to render my HTML-mails? - - Only if you use Oort Gnus. In this case you've got the choice - between w3, w3m, links, lynx and html2text, which one is used can - be specified in the variable mm-text-html-renderer, so if you want - links to render your mail say - - (setq mm-text-html-renderer 'links) - - -4.8. Is there anything I can do to make poorly formatted mails more - readable? - - Gnus offers you several functions to "wash" incoming mail, you can - find them if you browse through the menu, item Article->Washing. - The most interesting ones are probably "Wrap long lines" ( W w ), - "Decode ROT13" ( W r ) and "Outlook Deuglify" which repairs the - dumb quoting used by many users of Microsoft products ( W k ) sadly - the last one is only available in Oort Gnus. - -4.9. Is there a way to automatically ignore posts by specific authors or - with specific words in the subject? And can I highlight more - interesting ones in some way? - - You want Scoring. Scoring means, that you define rules which assign - each message an integer value. Depending on the value the message - is highlighted in summary buffer (if it's high, say +2000) or - automatically marked read (if the value is low, say -800) or some - other action happens. - - There are basically three ways of setting up rules which assign the - scoring-value to messages. The first and easiest way is to set up - rules based on the article you are just reading. Say you're reading - a message by a guy who always writes nonsense and you want to - ignore his messages in the future. Hit L, to set up a rule which - lowers the score. Now Gnus asks you which the criteria for lowering - the Score shall be. Hit ? twice to see all possibilities, we want a - which means the author (the from header). Now Gnus wants to know - which kind of matching we want. Hit either e for an exact match or - s for substring-match and delete afterwards everything but the name - to score down all authors with the given name no matter which email - address is used. Now you need to tell Gnus when to apply the rule - and how long it should last, hit e.g. p to apply the rule now and - let it last forever. If you want to raise the score instead of - lowering it say I instead of L. - - You can also set up rules by hand. To do this say V f in summary - buffer. Then you are asked for the name of the score file, it's - name.of.group.SCORE for rules valid in only one group or all.Score - for rules valid in all groups. See the Gnus manual for the exact - syntax, basically it's one big list whose elements are lists again. - the first element of those lists is the header to score on, then - one more list with what to match, which score to assign, when to - expire the rule and how to do the matching. If you find me very - interesting, you could e.g. add the following to your all.Score: - - (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) - ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) - - - This would add 999 to the score of messages written by me and 500 - to the score of messages which are a (possibly indirect) answer to - a message written by me. Of course nobody with a sane mind would do - this :-) - - The third alternative is adaptive scoring. This means Gnus watches - you and tries to find out what you find interesting and what - annoying and sets up rules which reflect this. Adaptive scoring can - be a huge help when reading high traffic groups. If you want to - activate adaptive scoring say - - (setq gnus-use-adaptive-scoring t) - - - in ~/.gnus. - -4.10. How can I disable threading in some (e.g. mail-) groups, or set - other variables specific for some groups? - - While in group buffer move point over the group and hit G c, this - opens a buffer where you can set options for the group. At the - bottom of the buffer you'll find an item that allows you to set - variables locally for the group. To disable threading enter - gnus-show-threads as name of variable and nil as value. Hit button - done at the top of the buffer when you're ready. - -4.11. Can I highlight messages written by me and follow-ups to those? - - Stop those "Can I ..." questions, the answer is always yes in Gnus - Country :-). It's a three step process: First we make faces - (specifications of how summary-line shall look like) for those - postings, then we'll give them some special score and finally we'll - tell Gnus to use the new faces. You can find detailed instructions - on how to do it on my.gnus.org [http://my.gnus.org/Members/dzimmerm - /HowTo%2C2002-07-25%2C1027619165012198456/view] - -4.12. The number of total messages in a group which Gnus displays in - group buffer is by far to high, especially in mail groups. Is this - a bug? - - No, that's a matter of design of Gnus, fixing this would mean - reimplementation of major parts of Gnus' back ends. Gnus thinks - "highest-article-number - lowest-article-number = - total-number-of-articles". This works OK for Usenet groups, but if - you delete and move many messages in mail groups, this fails. To - cure the symptom, enter the group via C-u RET (this makes Gnus get - all messages), then hit M P b to mark all messages and then say B m - name.of.group to move all messages to the group they have been in - before, they get new message numbers in this process and the count - is right again (until you delete and move your mail to other groups - again). - -4.13. I don't like the layout of summary and article buffer, how to - change it? Perhaps even a three pane display? - - You can control the windows configuration by calling the function - gnus-add-configuration. The syntax is a bit complicated but - explained very well in the manual node "Window Layout". Some - popular examples: - - Instead 25% summary 75% article buffer 35% summary and 65% article - (the 1.0 for article means "take the remaining space"): - - (gnus-add-configuration '(article (vertical 1.0 (summary .35 point) (article 1.0)))) - - - A three pane layout, Group buffer on the left, summary buffer - top-right, article buffer bottom-right: - - (gnus-add-configuration - '(article - (horizontal 1.0 - (vertical 25 - (group 1.0)) - (vertical 1.0 - (summary 0.25 point) - (article 1.0))))) - (gnus-add-configuration - '(summary - (horizontal 1.0 - (vertical 25 - (group 1.0)) - (vertical 1.0 - (summary 1.0 point))))) - - -4.14. I don't like the way the Summary buffer looks, how to tweak it? - - You've got to play around with the variable - gnus-summary-line-format. It's value is a string of symbols which - stand for things like author, date, subject etc. A list of the - available specifiers can be found in the manual node "Summary - Buffer Lines" and the often forgotten node "Formatting Variables" - and it's sub-nodes. There you'll find useful things like - positioning the cursor and tabulators which allow you a summary in - table form, but sadly hard tabulators are broken in 5.8.8. - - Oort Gnus offers you some very nice new specifiers, e.g. %B which - draws a thread-tree and %&user-date which gives you a date where - the details are dependent of the articles age. Here's an example - which uses both, DON'T TRY TO USE IT WITH 5.8.8! - - (setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") - - - resulting in: - - :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 - :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 - :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 - :O \-> ... | 21 |Kai Grossjohann | 0:01 - :R > Re: Cry for help: deuglify.el - moving stuf| 28 |Lars Magne Ingebrigt |Sat 23:34 - :O \-> ... | 115 |Raymond Scholz | 1:24 - :O \-> ... | 19 |Lars Magne Ingebrigt |15:33 - :O Slow mailing list | 13 |Lars Magne Ingebrigt |Sat 23:49 - :O Re: `@' mark not documented | 13 |Lars Magne Ingebrigt |Sat 23:50 - :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 - :O \-> ... | 18 |Kai Grossjohann | 0:35 - :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 - - -4.15. How to split incoming mails in several groups? - - Gnus offers two possibilities for splitting mail, the easy - nnmail-split-methods and the more powerful Fancy Mail Splitting. - I'll only talk about the first one, refer to the manual, node - "Fancy Mail Splitting" for the latter. - - The value of nnmail-split-methods is a list, each element is a list - which stands for a splitting rule. Each rule has the form "group - where matching articles should go to", "regular expression which - has to be matched", the first rule which matches wins. The last - rule must always be a general rule (regular expression .*) which - denotes where articles should go which don't match any other rule. - If the folder doesn't exist yet, it will be created as soon as an - article lands there. By default the mail will be send to all groups - whose rules match. If you don't want that (you probably don't - want), say - - (setq nnmail-crosspost nil) - - - in ~/.gnus. - - An example might be better than thousand words, so here's my - nnmail-split-methods. Note that I send duplicates in a special - group and that the default group is spam, since I filter all mails - out which are from some list I'm subscribed to or which are - addressed directly to me before. Those rules kill about 80% of the - Spam which reaches me (Email addresses are changed to prevent - spammers from using them): - - (setq nnmail-split-methods - '(("duplicates" "^Gnus-Warning:.*duplicate") - ("XEmacs-NT" "^\\(To:\\|CC:\\).*localpart@xemacs.bla.*") - ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@socha.bla.*") - ("tcsh" "^\\(To:\\|CC:\\).*localpart@mx.gw.bla.*") - ("BAfH" "^\\(To:\\|CC:\\).*localpart@.*uni-muenchen.bla.*") - ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@yahoogroups.\\(de\\|com\\).*") - ("Tagesschau" "^From: tagesschau $") - ("Replies" "^\\(CC:\\|To:\\).*localpart@Frank-Schmitt.bla.*") - ("EK" "^From:.*\\(localpart@privateprovider.bla\\|localpart@workplace.bla\\).*") - ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") - ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") - ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") - ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") - ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") - ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") - ("Spam" "^Delivered-To: GMX delivery to spamtrap@gmx.bla$") - ("Spam" "^Received: from link2buy.com") - ("Spam" "^CC: .*azzrael@t-online.bla") - ("Spam" "^X-Mailer-Version: 1.50 BETA") - ("Uni" "^\\(CC:\\|To:\\).*localpart@uni-koblenz.bla.*") - ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@one.bla\\|adress@two.bla\\)") - ("Spam" ""))) - - -5. Composing messages - -5.1. What are the basic commands I need to know for sending mail and - postings? - - To start composing a new mail hit m either in Group or Summary - buffer, for a posting, it's either a in Group buffer and filling - the Newsgroups header manually or a in the Summary buffer of the - group where the posting shall be send to. Replying by mail is r if - you don't want to cite the author, or import the cited text - manually and R to cite the text of the original message. For a - follow up to a newsgroup, it's f and F (analog to r and R. - - Enter new headers above the line saying "--text follows this - line--", enter the text below the line. When ready hit C-c C-c, to - send the message, if you want to finish it later hit C-c C-d to - save it in the drafts group, where you can start editing it again - by saying D e. - -5.2. How to enable automatic word-wrap when composing messages? - - Say - - (add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) - - - in ~/.gnus. You can reformat a paragraph by hitting M-q (as usual) - -5.3. How to set stuff like From, Organization, Reply-To, signature...? - - There are other ways, but you should use posting styles for this. - (See below why). This example should make the syntax clear: - - (setq gnus-posting-styles - '((".*" - (name "Frank Schmitt") - (address "me@there.bla") - (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature") - ("X-SampleHeader" "foobar") - (eval (setq some-variable "Foo bar"))))) - - - The ".*" means that this settings are the default ones (see below), - valid values for the first element of the following lists are - signature, signature-file, organization, address, name or body. The - attribute name can also be a string. In that case, this will be - used as a header name, and the value will be inserted in the - headers of the article; if the value is `nil', the header name will - be removed. You can also say (eval (foo bar)), then the function - foo will be evaluated with argument bar and the result will be - thrown away. - -5.4. Can I set things like From, Signature etc group based on the group - I post too? - - That's the strength of posting styles. Before, we used ".*" to set - the default for all groups. You can use a regexp like "^gmane" and - the following settings are only applied to postings you send to the - gmane hierarchy, use ".*binaries" instead and they will be applied - to postings send to groups containing the string binaries in their - name etc. - - You can instead of specifying a regexp specify a function which is - evaluated, only if it returns true, the corresponding settings take - effect. Two interesting candidates for this are message-news-p - which returns t if the current Group is a newsgroup and the - corresponding message-mail-p. - - Note that all forms that match are applied, that means in the - example below, when I post to gmane.mail.spam.spamassassin.general, - the settings under ".*" are applied and the settings under - message-news-p and those under "^gmane" and those under "^gmane\ - \.mail\\.spam\\.spamassassin\\.general$". Because of this put - general settings at the top and specific ones at the bottom. - - (setq gnus-posting-styles - '((".*" ;;default - (name "Frank Schmitt") - (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature") ) - ((message-news-p) ;;Usenet news? - (address "mySpamTrap@Frank-Schmitt.bla") - ("Reply-To" "hereRealRepliesOnlyPlease@Frank-Schmitt.bla") ) - ((message-mail-p) ;;mail? - (address "usedForMails@Frank-Schmitt.bla") ) - ("^gmane" ;;this is mail, too in fact - (address "usedForMails@Frank-Schmitt.net") - ("Reply-To" nil) ) - ("^gmane.mail.spam.spamassassin.general$" - (eval (setq mail-envelope-from "Azzrael@rz-online.de")) - (address "Azzrael@rz-online.de")) )) - - -5.5. Is there a spell-checker? Perhaps even on-the-fly spell-checking? - - You can use ispell.el to spell-check stuff in Emacs. So the first - thing to do is to make sure that you've got either ispell [http:// - fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html] or aspell [http: - //aspell.sourceforge.net/] installed and in your Path. Then you - need ispell.el [http://www.kdstevens.com/~stevens/ispell-page.html] - and for on-the-fly spell-checking flyspell.el [http:// - www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/ - flyspell.html]. Ispell.el is shipped with Gnus Emacs and available - through the Emacs package system, flyspell.el is shipped with Emacs - and part of XEmacs text-modes package which is available through - the package system, so there should be no need to install them - manually. - - Ispell.el assumes you use ispell, if you choose aspell say - - (setq ispell-program-name "aspell") - - in your Emacs configuration file. - - If you want your outgoing messages to be spell-checked, say - - (add-hook 'message-send-hook 'ispell-message) - - In your ~/.gnus, if you prefer on-the-fly spell-checking say - - (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) - -5.6. Can I set the dictionary based on the group I'm posting to? - - Yes, say something like - - (add-hook 'gnus-select-group-hook - (lambda () - (cond - ((string-match - "^de\\." (gnus-group-real-name gnus-newsgroup-name)) - (ispell-change-dictionary "deutsch8")) - (t - (ispell-change-dictionary "english"))))) - - - in ~/.gnus. Change "^de\\." and "deutsch8" to something that suits - your needs. - -5.7. Is there some kind of address-book, so I needn't remember all those - email addresses? - - There's an very basic solution for this, mail aliases. You can - store your mail addresses in a ~/.mailrc file using a simple alias - syntax: - - alias al "Al " - - - Then typing your alias (followed by a space or punctuation - character) on a To: or Cc: line in the message buffer will cause - gnus to insert the full address for you. See the node "Mail - Aliases" in Message (not Gnus) manual for details. - - However, what you really want is the Insidious Big Brother Database - bbdb. Get it through the XEmacs package system or from bbdb's - homepage [http://bbdb.sourceforge.net/]. Now place the following in - ~/.gnus, to activate bbdb for Gnus: - - (require 'bbdb) - (bbdb-initialize 'gnus 'message) - - - Now you probably want some general bbdb configuration, place them - in ~/.emacs: - - (require 'bbdb) - ;;If you don't live in Northern America, you should disable the - ;;syntax check for telephone numbers by saying - (setq bbdb-north-american-phone-numbers-p nil) - ;;Tell bbdb about your email address: - (setq bbdb-user-mail-names - (regexp-opt '("Your.Email@here.bla" - "Your.other@mail.there.bla"))) - ;;cycling while completing email addresses - (setq bbdb-complete-name-allow-cycling t) - ;;No popup-buffers - (setq bbdb-use-pop-up nil) - - - Now you should be ready to go. Say M-x bbdb RET RET to open a bbdb - buffer showing all entries. Say c to create a new entry, b to - search your BBDB and C-o to add a new field to an entry. If you - want to add a sender to the BBDB you can also just hit `:' on the - posting in the summary buffer and you are done. When you now - compose a new mail, hit TAB to cycle through know recipients. - -5.8. Sometimes I see little images at the top of article buffer. What's - that and how can I send one with my postings, too? - - Those images are called X-Faces. They are 48*48 pixel b/w pictures, - encoded in a header line. If you want to include one in your posts, - you've got to convert some image to a X-Face. So fire up some image - manipulation program (say Gimp), open the image you want to - include, cut out the relevant part, reduce color depth to 1 bit, - resize to 48*48 and save as bitmap. Now you should get the compface - package from this site [ftp://ftp.cs.indiana.edu:/pub/faces/]. and - create the actual X-face by saying - - cat file.xbm | xbm2ikon |compface > file.face - cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted - - - if you can't use compface, there's an online X-face converter at - http://www.dairiki.org/xface/ [http://www.dairiki.org/xface/]. If - you use MS Windows, you could also use the WinFace program from - http://www.xs4all.nl/~walterln/winface/ [http://www.xs4all.nl/ - ~walterln/winface/]. Now you only have to tell Gnus to include the - X-face in your postings by saying - - (setq message-default-headers - (with-temp-buffer - (insert "X-Face: ") - (insert-file-contents "~/.xemacs/xface") - (buffer-string))) - - - in ~/.gnus. - -5.9. Sometimes I accidentally hit r instead of f in newsgroups. Can Gnus - warn me, when I'm replying by mail in newsgroups? - - Put this in ~/.gnus: - - (defadvice gnus-summary-reply (around reply-in-news activate) - (interactive) - (when (or (not (gnus-news-group-p gnus-newsgroup-name)) - (y-or-n-p "Really reply? ")) - ad-do-it)) - - - In Oort you can use - - (setq gnus-confirm-mail-reply-to-news t) - - - instead to achieve the same result. - -5.10. How to tell Gnus not to generate a sender header? - - Say - - (eval-after-load "message" - '(add-to-list 'message-syntax-checks '(sender . disabled))) - - - in ~/.gnus. (This is the default behaviour in Oort Gnus.) - -5.11. I want gnus to locally store copies of my send mail and news, how - to do it? - - You must set the variable gnus-message-archive-group to do this. - You can set it to a string giving the name of the group where the - copies shall go or like in the example below use a function which - is evaluated and which returns the group to use. - - (setq gnus-message-archive-group - '((if (message-news-p) - "nnml:Send-News" - "nnml:Send-Mail"))) - - -5.12. People tell me my Message-IDs are not correct, why aren't they and - how to fix it? - - The message-ID is an unique identifier for messages you send. To - make it unique, Gnus need to know which machine name to put after - the "@". If the name of the machine where Gnus is running isn't - suitable (it probably isn't at most private machines) you can tell - Gnus what to use by saying: - - (defun message-make-message-id() - (concat "<"(message-unique-id)"@yourmachine.yourdomain.tld>")) - - - in ~/.gnus. If you have no idea what to insert for - "yourmachine.yourdomain.tld", you've got several choices. You can - either ask your provider if he allows you to use something like - yourUserName.userfqdn.provider.net, or you can use - somethingUnique.yourdomain.tld if you own the domain - yourdomain.tld, or you can register at a service which gives - private users a FQDN for free, e.g. http://www.stura.tu-freiberg.de - /~dlx/addfqdn.html [http://www.stura.tu-freiberg.de/~dlx/ - addfqdn.html]. (Sorry but this website is in German, if you know of - an English one offering the same, drop me a note). - - Finally you can tell Gnus not to generate a Message-ID for News at - all (and letting the server do the job) by saying - - (setq message-required-news-headers - (remove' Message-ID message-required-news-headers)) - - - you can also tell Gnus not to generate Message-IDs for mail by - saying - - (setq message-required-mail-headers - (remove' Message-ID message-required-mail-headers)) - - - , however some mail servers don't generate proper Message-IDs, too, - so test if your Mail Server behaves correctly by sending yourself a - Mail and looking at the Message-ID. - -6. Old messages - -6.1. How to import my old mail into Gnus? - - The easiest way is to tell your old mail program to export the - messages in mbox format. Most Unix mailers are able to do this, if - you come from the MS Windows world, you may find tools at http:// - mbx2mbox.sourceforge.net/ [http://mbx2mbox.sourceforge.net/]. - - Now you've got to import this mbox file into Gnus. To do this, - create a nndoc group based on the mbox file by saying G f /path/ - file.mbox RET in Group buffer. You now have read-only access to - your mail. If you want to import the messages to your normal Gnus - mail groups hierarchy, enter the nndoc group you've just created by - saying C-u RET (thus making sure all messages are retrieved), mark - all messages by saying M P b and either copy them to the desired - group by saying B c name.of.group RET or send them through - nnmail-split-methods (respool them) by saying B r. - -6.2. How to archive interesting messages? - - If you stumble across an interesting message, say in gnu.emacs.gnus - and want to archive it there are several solutions. The first and - easiest is to save it to a file by saying O f. However, wouldn't it - be much more convenient to have more direct access to the archived - message from Gnus? If you say yes, put this snippet by Frank Haun - in ~/.gnus: - - (defun my-archive-article (&optional n) - "Copies one or more article(s) to a corresponding `nnml:' group, e.g. - `gnus.ding' goes to `nnml:1.gnus.ding'. And `nnml:List-gnus.ding' goes - to `nnml:1.List-gnus-ding'. - - Use process marks or mark a region in the summary buffer to archive - more then one article." - (interactive "P") - (let ((archive-name - (format - "nnml:1.%s" - (if (featurep 'xemacs) - (replace-in-string gnus-newsgroup-name "^.*:" "") - (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) - (gnus-summary-copy-article n archive-name))) - - - You can now say M-x my-archive-article in summary buffer to archive - the article under the cursor in a nnml group. (Change nnml to your - preferred back end) - - Of course you can also make sure the cache is enabled by saying - - (setq gnus-use-cache t) - - - then you only have to set either the tick or the dormant mark for - articles you want to keep, setting the read mark will remove them - from cache. - -6.3. How to search for a specific message? - - There are several ways for this, too. For a posting from a Usenet - group the easiest solution is probably to ask groups.google.com - [http://groups.google.com] (in Oort Gnus you can search - groups.google.com with G W), if you found the posting there, tell - Google to display the raw message, look for the message-id, and say - M-^ the@message.id RET in a summary buffer. - - Another idea which works for both mail and news groups is to enter - the group where the message you are searching is and use the - standard Emacs search C-s, it's smart enough to look at articles in - collapsed threads, too. If you want to search bodies, too try M-s - instead. Further on there are the gnus-summary-limit-to-foo - functions, which can help you, too. - - Of course you can also use grep to search through your local mail, - but this is both slow for big archives and inconvenient since you - are not displaying the found mail in Gnus. Here comes nnir into - action. Nnir is a front end to search engines like swish-e or - swish++ and others. You index your mail with one of those search - engines and with the help of nnir you can search trough the indexed - mail and generate a temporary group with all messages which met - your search criteria. If this sound cool to you get nnir.el from - ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/ [ftp:// - ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/] or ftp:// - ftp.is.informatik.uni-duisburg.de/pub/src/emacs/ [ftp:// - ftp.is.informatik.uni-duisburg.de/pub/src/emacs/]. Instructions on - how to use it are at the top of the file. - -6.4. How to get rid of old unwanted mail? - - You can of course just mark the mail you don't need anymore by - saying # with point over the mail and then say B DEL to get rid of - them forever. You could also instead of actually deleting them, - send them to a junk-group by saying B m nnml:trash-bin which you - clear from time to time, but both are not the intended way in Gnus. - - In Gnus, we let mail expire like news expires on a news server. - That means you tell Gnus the message is expirable (you tell Gnus "I - don't need this mail anymore") by saying E with point over the mail - in summary buffer. Now when you leave the group, Gnus looks at all - messages which you marked as expirable before and if they are old - enough (default is older than a week) they are deleted. - -6.5. I want that all read messages are expired (at least in some - groups). How to do it? - - If you want all read messages to be expired (e.g. in mailing lists - where there's an online archive), you've got two choices: - auto-expire and total-expire. Auto-expire means, that every article - which has no marks set and is selected for reading is marked as - expirable, Gnus hits E for you every time you read a message. - Total-expire follows a slightly different approach, here all - article where the read mark is set are expirable. - - To activate auto-expire, include auto-expire in the Group - parameters for the group. (Hit G c in summary buffer with point - over the group to change group parameters). For total-expire add - total-expire to the group-parameters. - - Which method you choose is merely a matter of taste: Auto-expire is - faster, but it doesn't play together with Adaptive Scoring, so if - you want to use this feature, you should use total-expire. - - If you want a message to be excluded from expiration in a group - where total or auto expire is active, set either tick (hit u) or - dormant mark (hit u), when you use auto-expire, you can also set - the read mark (hit d). - -6.6. I don't want expiration to delete my mails but to move them to - another group. - - Say something like this in ~/.gnus: - - (setq nnmail-expiry-target "nnml:expired") - - - (If you want to change the value of nnmail-expiry-target on a per - group basis see the question "How can I disable threading in some - (e.g. mail-) groups, or set other variables specific for some - groups?") - -7. Getting help - -7.1. How to find information and help inside Emacs? - - The first stop should be the Gnus manual (Say C-h i d m Gnus RET to - start the Gnus manual, then walk through the menus or do a - full-text search with s). Then there are the general Emacs help - commands starting with C-h, type C-h ? ? to get a list of all - available help commands and their meaning. Finally M-x - apropos-command lets you search through all available functions and - M-x apropos searches the bound variables. - -7.2. I can't find anything in the Gnus manual about X (e.g. attachments, - PGP, MIME...), is it not documented? - - There's not only the Gnus manual but also the manuals for message, - emacs-mime, sieve and (only in Oort Gnus) pgg. Those packages are - distributed with Gnus and used by Gnus but aren't really part of - core Gnus, so they are documented in different info files, you - should have a look in those manuals, too. - -7.3. Which websites should I know? - - The two most important ones are the official Gnus website [http:// - www.gnus.org]. and it's sister site my.gnus.org (MGO) [http:// - my.gnus.org], hosting an archive of lisp snippets, howtos, a (not - really finished) tutorial and this FAQ. - - Tell me about other sites which are interesting. - -7.4. Which mailing lists and newsgroups are there? - - There's the newsgroup gnu.emacs.gnus (pull it from e.g. - news.gnus.org) which deals with general questions and the ding - mailing list (ding@gnus.org) dealing with development of Gnus. You - can read the ding list via NNTP, too under the name gnus.ding from - news.gnus.org. - - If you want to stay in the big8, news.software.newssreaders is also - read by some Gnus users (but chances for qualified help are much - better in the above groups) and if you speak German, there's - de.comm.software.gnus. - -7.5. Where to report bugs? - - Say M-x gnus-bug, this will start a message to the gnus bug mailing - list [mailto:bugs@gnus.org] including information about your - environment which make it easier to help you. - -7.6. I need real-time help, where to find it? - - Point your IRC client to irc.my.gnus.org channel #mygnus. Don't be - afraid if people there speak German, they are willing and capable - of switching to English when people from outside Germany enter. - -8. Tuning Gnus - -8.1. Starting Gnus is really slow, how to speed it up? - - The reason for this could be the way Gnus reads it's active file, - see the node "The Active File" in the Gnus manual for things you - might try to speed the process up. An other idea would be to byte - compile your ~/.gnus (say M-x byte-compile-file RET ~/.gnus RET to - do it). Finally, if you have require statements in your .gnus, you - could replace them with eval-after-load, which loads the stuff not - at startup time, but when it's needed. Say you've got this in your - ~/.gnus: - - (require 'message) - (add-to-list 'message-syntax-checks '(sender . disabled)) - - - then as soon as you start Gnus, message.el is loaded. If you - replace it with - - (eval-after-load "message" - '(add-to-list 'message-syntax-checks '(sender . disabled))) - - - it's loaded when it's needed. - -8.2. How to speed up the process of entering a group? - - A speed killer is setting the variable gnus-fetch-old-headers to - anything different from nil, so don't do this if speed is an issue. - To speed up building of summary say - - (gnus-compile) - - - at the bottom of your ~/.gnus, this will make gnus byte-compile - things like gnus-summary-line-format. then you could increase the - value of gc-cons-threshold by saying something like - - (setq gc-cons-threshold 3500000) - - - in ~/.emacs. If you don't care about width of CJK characters or use - Oort Gnus together with a recent GNU Emacs, you should say - - (setq gnus-use-correct-string-widths nil) - - - in ~/.gnus (thanks to Jesper harder for the last two suggestions). - Finally if this also doesn't help, you might want to jump in the - cold water and try Oort Gnus, there some work has been done to - speed up summary generation. Read and remember the warnings about - Oort at the top of this FAQ. - -8.3. Sending mail becomes slower and slower, what's up? - - The reason could be that you told Gnus to archive the messages you - wrote by setting gnus-message-archive-group. Try to use a nnml - group instead of an archive group, this should bring you back to - normal speed. + 8.3. Which websites should I know? + 8.4. Which mailing lists and newsgroups are there? + 8.5. Where to report bugs? + 8.6. I need real-time help, where to find it? + +9. Tuning Gnus + + 9.1. Starting Gnus is really slow, how to speed it up? + 9.2. How to speed up the process of entering a group? + 9.3. Sending mail becomes slower and slower, what's up? + +1. Installation FAQ + +1.1. What is the latest version of Gnus? + + Jingle please: Gnus 5.10.0 is released, get it while it's hot! As + well as the step in version number is rather small, Gnus 5.10 has + tons of new features which you shouldn't miss, however if you are + cautious, you might prefer to stay with 5.8.8 respectively 5.9 + (they are basically the same) until some bugfix releases are out. + +1.2. What's new in 5.10.0? + + First of all, you should have a look into the file GNUS-NEWS in the + toplevel directory of the Gnus tarball, there the most important + changes are listed. Here's a short list of the changes I find + especially important/interesting: + + * Major rewrite of the Gnus agent, Gnus agent is now active by + default. + + Many new article washing functions for dealing with ugly + formatted articles. + + Anti Spam features. + + message-utils now included in Gnus. + + New format specifiers for summary lines, e.g. %B for a complex + trn-style thread tree. + +1.3. Where and how to get Gnus? + + The latest released version of Gnus isn't included in Emacs 21 and + until now it also isn't available through the package system of + XEmacs 21.4, therefor you should get the Gnus tarball from http:// + www.gnus.org/dist/gnus.tar.gz [http://www.gnus.org/dist/ + gnus.tar.gz] or via anonymous FTP from ftp://ftp.gnus.org/pub/gnus/ + gnus.tar.gz [ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz]. + +1.4. What to do with the tarball now? + + Untar it via tar xvzf gnus.tar.gz and do the common ./configure; + make; make install circle. (under MS-Windows either get the Cygwin + environment from http://www.cygwin.com [http://www.cygwin.com] + which allows you to do what's described above or unpack the tarball + with some packer (e.g. Winace from http://www.winace.com [http:// + www.winace.com]) and use the batch-file make.bat included in the + tarball to install Gnus. If you don't want to (or aren't allowed + to) install Gnus system-wide, you can install it in your home + directory and add the following lines to your ~/.xemacs/init.el or + ~/.emacs: + + (add-to-list 'load-path "/path/to/gnus/lisp") + (if (featurep 'xemacs) + (add-to-list 'Info-directory-list "/path/to/gnus/texi/") + (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) + + + Make sure that you don't have any gnus related stuff before this + line, on MS Windows use something like "C:/path/to/lisp" (yes, "/ + "). + +1.5. Which version of Emacs do I need? + + Gnus 5.10.0 requires an Emacs version that is greater than or equal + to Emacs 20.3 or XEmacs 20.1. + +1.6. How do I run Gnus on both Emacs and XEmacs? + + You can't use the same copy of Gnus in both as the Lisp files are + byte-compiled to a format which is different depending on which + Emacs did the compilation. Get one copy of Gnus for Emacs and one + for XEmacs. + +2. Startup / Group buffer + +2.1. Every time I start Gnus I get a message "Gnus auto-save file + exists. Do you want to read it?", what does this mean and how to + prevent it? + + This message means that the last time you used Gnus, it wasn't + properly exited and therefor couldn't write its informations to + disk (e.g. which messages you read), you are now asked if you want + to restore those informations from the auto-save file. + + To prevent this message make sure you exit Gnus via q in group + buffer instead of just killing Emacs. + +2.2. Gnus doesn't remember which groups I'm subscribed to, what's this? + + You get the message described in the q/a pair above while starting + Gnus, right? It's an other symptom for the same problem, so read + the answer above. + +2.3. How to change the format of the lines in Group buffer? + + You've got to tweak the value of the variable + gnus-group-line-format. See the manual node "Group Line + Specification" for information on how to do this. An example for + this (guess from whose .gnus :-)): + + (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") + + +2.4. My group buffer becomes a bit crowded, is there a way to sort my + groups into categories so I can easier browse through them? + + Gnus offers the topic mode, it allows you to sort your groups in, + well, topics, e.g. all groups dealing with Linux under the topic + linux, all dealing with music under the topic music and all dealing + with scottish music under the topic scottish which is a subtopic of + music. + + To enter topic mode, just hit t while in Group buffer. Now you can + use T n to create a topic at point and T m to move a group to a + specific topic. For more commands see the manual or the menu. You + might want to include the %P specifier at the beginning of your + gnus-group-line-format variable to have the groups nicely indented. + +2.5. How to manually sort the groups in Group buffer? How to sort the + groups in a topic? + + Move point over the group you want to move and hit C-k, now move + point to the place where you want the group to be and hit C-y. + +3. Getting Messages + +3.1. I just installed Gnus, started it via M-x gnus but it only says + "nntp (news) open error", what to do? + + You've got to tell Gnus where to fetch the news from. Read the + documentation for information on how to do this. As a first start, + put those lines in ~/.gnus: + + (setq gnus-select-method '(nntp "news.yourprovider.net")) + (setq user-mail-address "you@yourprovider.net") + (setq user-full-name "Your Name") + + +3.2. I'm working under Windows and have no idea what ~/.gnus means. + + The ~/ means the home directory where Gnus and Emacs look for the + configuration files. However, you don't really need to know what + this means, it suffices that Emacs knows what it means :-) You can + type C-x C-f ~/.gnus RET (yes, with the forward slash, even on + Windows), and Emacs will open the right file for you. (It will most + likely be new, and thus empty.) However, I'd discourage you from + doing so, since the directory Emacs chooses will most certainly not + be what you want, so let's do it the correct way. The first thing + you've got to do is to create a suitable directory (no blanks in + directory name please) e.g. c:\myhome. Then you must set the + environment variable HOME to this directory. To do this under Win9x + or Me include the line + + SET HOME=C:\myhome + + + in your autoexec.bat and reboot. Under NT, 2000 and XP, hit + Winkey+Pause/Break to enter system options (if it doesn't work, go + to Control Panel -> System). There you'll find the possibility to + set environment variables, create a new one with name HOME and + value C:\myhome, a reboot is not necessary. + + Now to create ~/.gnus, say C-x C-f ~/.gnus RET C-x C-s. in Emacs. + +3.3. My news server requires authentication, how to store user name and + password on disk? + + Create a file ~/.authinfo which includes for each server a line + like this + + machine news.yourprovider.net login YourUserName password YourPassword + + . Make sure that the file isn't readable to others if you work on a + OS which is capable of doing so. (Under Unix say + + chmod 600 ~/.authinfo + + in a shell.) + +3.4. Gnus seems to start up OK, but I can't find out how to subscribe to + a group. + + If you know the name of the group say U name.of.group RET in group + buffer (use the tab-completion Luke). Otherwise hit ^ in group + buffer, this brings you to the server buffer. Now place point (the + cursor) over the server which carries the group you want, hit RET, + move point to the group you want to subscribe to and say u to + subscribe to it. + +3.5. Gnus doesn't show all groups / Gnus says I'm not allowed to post on + this server as well as I am, what's that? + + Some providers allow restricted anonymous access and full access + only after authorization. To make Gnus send authinfo to those + servers append + + force yes + + to the line for those servers in ~/.authinfo. + +3.6. I want Gnus to fetch news from several servers, is this possible? + + Of course. You can specify more sources for articles in the + variable gnus-secondary-select-methods. Add something like this in + ~/.gnus: + + (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) + (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net")) + + +3.7. And how about local spool files? + + No problem, this is just one more select method called nnspool, so + you want this: + + (add-to-list 'gnus-secondary-select-methods '(nnspool "")) + + + Or this if you don't want an NNTP Server as primary news source: + + (setq gnus-select-method '(nnspool "")) + + + Gnus will look for the spool file in /usr/spool/news, if you want + something different, change the line above to something like this: + + (add-to-list 'gnus-secondary-select-methods + '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + + + This sets the spool directory for this server only. You might have + to specify more stuff like the program used to post articles, see + the Gnus manual on how to do this. + +3.8. OK, reading news works now, but I want to be able to read my mail + with Gnus, too. How to do it? + + That's a bit harder since there are many possible sources for mail, + many possible ways for storing mail and many different ways for + sending mail. The most common cases are these: 1: You want to read + your mail from a pop3 server and send them directly to a SMTP + Server 2: Some program like fetchmail retrieves your mail and + stores it on disk from where Gnus shall read it. Outgoing mail is + sent by Sendmail, Postfix or some other MTA. Sometimes, you even + need a combination of the above cases. + + However, the first thing to do is to tell Gnus in which way it + should store the mail, in Gnus terminology which back end to use. + Gnus supports many different back ends, the most commonly used one + is nnml. It stores every mail in one file and is therefor quite + fast. However you might prefer a one file per group approach if + your file system has problems with many small files, the nnfolder + back end is then probably the choice for you. To use nnml add the + following to ~/.gnus: + + (add-to-list 'gnus-secondary-select-methods '(nnml "")) + + + As you might have guessed, if you want nnfolder, it's + + (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) + + + Now we need to tell Gnus, where to get it's mail from. If it's a + POP3 server, then you need something like this: + + (eval-after-load "mail-source" + '(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net" + :user "yourUserName" + :password "yourPassword")) + + + Make sure ~/.gnus isn't readable to others if you store your + password there. If you want to read your mail from a traditional + spool file on your local machine, it's + + (eval-after-load "mail-source" + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) + + + If it's a Maildir, with one file per message as used by postfix, + Qmail and (optionally) fetchmail it's + + (eval-after-load "mail-source" + '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" + :subdirs ("cur" "new"))) + + + And finally if you want to read your mail from several files in one + directory, for example because procmail already split your mail, + it's + + (eval-after-load "mail-source" + '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml")) + + + Where :suffix ".prcml" tells Gnus only to use files with the suffix + .prcml. + + OK, now you only need to tell Gnus how to send mail. If you want to + send mail via sendmail (or whichever MTA is playing the role of + sendmail on your system), you don't need to do anything. However, + if you want to send your mail to an SMTP Server you need the + following in your ~/.gnus + + (setq send-mail-function 'smtpmail-send-it) + (setq message-send-mail-function 'smtpmail-send-it) + (setq smtpmail-default-smtp-server "smtp.yourProvider.net") + + +3.9. And what about IMAP? + + There are two ways of using IMAP with Gnus. The first one is to use + IMAP like POP3, that means Gnus fetches the mail from the IMAP + server and stores it on disk. If you want to do this (you don't + really want to do this) add the following to ~/.gnus + + (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" + :user "username" + :pass "password" + :stream network + :authentication login + :mailbox "INBOX" + :fetchflag "\\Seen")) + + + You might have to tweak the values for stream and/or + authentification, see the Gnus manual node "Mail Source Specifiers" + for possible values. + + If you want to use IMAP the way it's intended, you've got to follow + a different approach. You've got to add the nnimap back end to your + select method and give the information about the server there. + + (add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) + + + Again, you might have to specify how to authenticate to the server + if Gnus can't guess the correct way, see the Manual Node "IMAP" for + detailed information. + +3.10. At the office we use one of those MS Exchange servers, can I use + Gnus to read my mail from it? + + Offer your administrator a pair of new running shoes for activating + IMAP on the server and follow the instructions above. + +3.11. Can I tell Gnus not to delete the mails on the server it retrieves + via POP3? + + First of all, that's not the way POP3 is intended to work, if you + have the possibility, you should use the IMAP Protocol if you want + your messages to stay on the server. Nevertheless there might be + situations where you need the feature, but sadly Gnus itself has no + predefined functionality to do so. + + However this is Gnus county so there are possibilities to achieve + what you want. The easiest way is to get an external program which + retrieves copies of the mail and stores them on disk, so Gnus can + read it from there. On Unix systems you could use e.g. fetchmail + for this, on MS Windows you can use Hamster, an excellent local + news and mail server. + + The other solution would be, to replace the method Gnus uses to get + mail from POP3 servers by one which is capable of leaving the mail + on the server. If you use XEmacs, get the package mail-lib, it + includes an enhanced pop3.el, look in the file, there's + documentation on how to tell Gnus to use it and not to delete the + retrieved mail. For GNU Emacs look for the file epop3.el which can + do the same (If you know the home of this file, please send me an + e-mail). You can also tell Gnus to use an external program (e.g. + fetchmail) to fetch your mail, see the info node "Mail Source + Specifiers" in the Gnus manual on how to do it. + +4. Reading messages + +4.1. When I enter a group, all read messages are gone. How to view them + again? + + If you enter the group by saying RET in summary buffer with point + over the group, only unread and ticked messages are loaded. Say C-u + RET instead to load all available messages. If you want only the + e.g. 300 newest say C-u 300 RET + + Loading only unread messages can be annoying if you have threaded + view enabled, say + + (setq gnus-fetch-old-headers 'some) + + + in ~/.gnus to load enough old articles to prevent teared threads, + replace 'some with t to load all articles (Warning: Both settings + enlarge the amount of data which is fetched when you enter a group + and slow down the process of entering a group). + + If you already use Gnus 5.10.0, you can say /o N In summary buffer + to load the last N messages, this feature is not available in 5.8.8 + + If you don't want all old messages, but the parent of the message + you're just reading, you can say ^, if you want to retrieve the + whole thread the message you're just reading belongs to, A T is + your friend. + +4.2. How to tell Gnus to show an important message every time I enter a + group, even when it's read? + + You can tick important messages. To do this hit u while point is in + summary buffer over the message. When you want to remove the mark, + hit either d (this deletes the tick mark and set's unread mark) or + M c (which deletes all marks for the message). + +4.3. How to view the headers of a message? + + Say t to show all headers, one more t hides them again. + +4.4. How to view the raw unformatted message? + + Say C-u g to show the raw message g returns to normal view. + +4.5. How can I change the headers Gnus displays by default at the top of + the article buffer? + + The variable gnus-visible-headers controls which headers are shown, + its value is a regular expression, header lines which match it are + shown. So if you want author, subject, date, and if the header + exists, Followup-To and MUA / NUA say this in ~/.gnus: + + (setq gnus-visible-headers + "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") + + +4.6. I'd like Gnus NOT to render HTML-mails but show me the text part if + it's available. How to do it? + + Say + + (eval-after-load "mm-decode" + '(progn + (add-to-list 'mm-discouraged-alternatives "text/html") + (add-to-list 'mm-discouraged-alternatives "text/richtext"))) + + + in ~/.gnus. If you don't want HTML rendered, even if there's no + text alternative add + + (setq mm-automatic-display (remove "text/html" mm-automatic-display)) + + + too. + +4.7. Can I use some other browser than w3 to render my HTML-mails? + + Only if you use Gnus 5.10.0 or younger. In this case you've got the + choice between w3, w3m, links, lynx and html2text, which one is + used can be specified in the variable mm-text-html-renderer, so if + you want links to render your mail say + + (setq mm-text-html-renderer 'links) + + +4.8. Is there anything I can do to make poorly formatted mails more + readable? + + Gnus offers you several functions to "wash" incoming mail, you can + find them if you browse through the menu, item Article->Washing. + The most interesting ones are probably "Wrap long lines" ( W w ), + "Decode ROT13" ( W r ) and "Outlook Deuglify" which repairs the + dumb quoting used by many users of Microsoft products ( W Y f gives + you full deuglify. See W Y C-h or have a look at the menus for + other deuglifications). Outlook deuglify is only available since + Gnus 5.10.0. + +4.9. Is there a way to automatically ignore posts by specific authors or + with specific words in the subject? And can I highlight more + interesting ones in some way? + + You want Scoring. Scoring means, that you define rules which assign + each message an integer value. Depending on the value the message + is highlighted in summary buffer (if it's high, say +2000) or + automatically marked read (if the value is low, say -800) or some + other action happens. + + There are basically three ways of setting up rules which assign the + scoring-value to messages. The first and easiest way is to set up + rules based on the article you are just reading. Say you're reading + a message by a guy who always writes nonsense and you want to + ignore his messages in the future. Hit L, to set up a rule which + lowers the score. Now Gnus asks you which the criteria for lowering + the Score shall be. Hit ? twice to see all possibilities, we want a + which means the author (the from header). Now Gnus wants to know + which kind of matching we want. Hit either e for an exact match or + s for substring-match and delete afterwards everything but the name + to score down all authors with the given name no matter which email + address is used. Now you need to tell Gnus when to apply the rule + and how long it should last, hit e.g. p to apply the rule now and + let it last forever. If you want to raise the score instead of + lowering it say I instead of L. + + You can also set up rules by hand. To do this say V f in summary + buffer. Then you are asked for the name of the score file, it's + name.of.group.SCORE for rules valid in only one group or all.Score + for rules valid in all groups. See the Gnus manual for the exact + syntax, basically it's one big list whose elements are lists again. + the first element of those lists is the header to score on, then + one more list with what to match, which score to assign, when to + expire the rule and how to do the matching. If you find me very + interesting, you could e.g. add the following to your all.Score: + + (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) + ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) + + + This would add 999 to the score of messages written by me and 500 + to the score of messages which are a (possibly indirect) answer to + a message written by me. Of course nobody with a sane mind would do + this :-) + + The third alternative is adaptive scoring. This means Gnus watches + you and tries to find out what you find interesting and what + annoying and sets up rules which reflect this. Adaptive scoring can + be a huge help when reading high traffic groups. If you want to + activate adaptive scoring say + + (setq gnus-use-adaptive-scoring t) + + + in ~/.gnus. + +4.10. How can I disable threading in some (e.g. mail-) groups, or set + other variables specific for some groups? + + While in group buffer move point over the group and hit G c, this + opens a buffer where you can set options for the group. At the + bottom of the buffer you'll find an item that allows you to set + variables locally for the group. To disable threading enter + gnus-show-threads as name of variable and nil as value. Hit button + done at the top of the buffer when you're ready. + +4.11. Can I highlight messages written by me and follow-ups to those? + + Stop those "Can I ..." questions, the answer is always yes in Gnus + Country :-). It's a three step process: First we make faces + (specifications of how summary-line shall look like) for those + postings, then we'll give them some special score and finally we'll + tell Gnus to use the new faces. You can find detailed instructions + on how to do it on my.gnus.org [http://my.gnus.org/Members/dzimmerm + /HowTo%2C2002-07-25%2C1027619165012198456/view] + +4.12. The number of total messages in a group which Gnus displays in + group buffer is by far to high, especially in mail groups. Is this + a bug? + + No, that's a matter of design of Gnus, fixing this would mean + reimplementation of major parts of Gnus' back ends. Gnus thinks + "highest-article-number - lowest-article-number = + total-number-of-articles". This works OK for Usenet groups, but if + you delete and move many messages in mail groups, this fails. To + cure the symptom, enter the group via C-u RET (this makes Gnus get + all messages), then hit M P b to mark all messages and then say B m + name.of.group to move all messages to the group they have been in + before, they get new message numbers in this process and the count + is right again (until you delete and move your mail to other groups + again). + +4.13. I don't like the layout of summary and article buffer, how to + change it? Perhaps even a three pane display? + + You can control the windows configuration by calling the function + gnus-add-configuration. The syntax is a bit complicated but + explained very well in the manual node "Window Layout". Some + popular examples: + + Instead 25% summary 75% article buffer 35% summary and 65% article + (the 1.0 for article means "take the remaining space"): + + (gnus-add-configuration '(article (vertical 1.0 (summary .35 point) (article 1.0)))) + + + A three pane layout, Group buffer on the left, summary buffer + top-right, article buffer bottom-right: + + (gnus-add-configuration + '(article + (horizontal 1.0 + (vertical 25 + (group 1.0)) + (vertical 1.0 + (summary 0.25 point) + (article 1.0))))) + (gnus-add-configuration + '(summary + (horizontal 1.0 + (vertical 25 + (group 1.0)) + (vertical 1.0 + (summary 1.0 point))))) + + +4.14. I don't like the way the Summary buffer looks, how to tweak it? + + You've got to play around with the variable + gnus-summary-line-format. It's value is a string of symbols which + stand for things like author, date, subject etc. A list of the + available specifiers can be found in the manual node "Summary + Buffer Lines" and the often forgotten node "Formatting Variables" + and it's sub-nodes. There you'll find useful things like + positioning the cursor and tabulators which allow you a summary in + table form, but sadly hard tabulators are broken in 5.8.8. + + Since 5.10.0, Gnus offers you some very nice new specifiers, e.g. + %B which draws a thread-tree and %&user-date which gives you a date + where the details are dependent of the articles age. Here's an + example which uses both: + + (setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") + + + resulting in: + + :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 + :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 + :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 + :O \-> ... | 21 |Kai Grossjohann | 0:01 + :R > Re: Cry for help: deuglify.el - moving stuf| 28 |Lars Magne Ingebrigt |Sat 23:34 + :O \-> ... | 115 |Raymond Scholz | 1:24 + :O \-> ... | 19 |Lars Magne Ingebrigt |15:33 + :O Slow mailing list | 13 |Lars Magne Ingebrigt |Sat 23:49 + :O Re: `@' mark not documented | 13 |Lars Magne Ingebrigt |Sat 23:50 + :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 + :O \-> ... | 18 |Kai Grossjohann | 0:35 + :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 + + +4.15. How to split incoming mails in several groups? + + Gnus offers two possibilities for splitting mail, the easy + nnmail-split-methods and the more powerful Fancy Mail Splitting. + I'll only talk about the first one, refer to the manual, node + "Fancy Mail Splitting" for the latter. + + The value of nnmail-split-methods is a list, each element is a list + which stands for a splitting rule. Each rule has the form "group + where matching articles should go to", "regular expression which + has to be matched", the first rule which matches wins. The last + rule must always be a general rule (regular expression .*) which + denotes where articles should go which don't match any other rule. + If the folder doesn't exist yet, it will be created as soon as an + article lands there. By default the mail will be send to all groups + whose rules match. If you don't want that (you probably don't + want), say + + (setq nnmail-crosspost nil) + + + in ~/.gnus. + + An example might be better than thousand words, so here's my + nnmail-split-methods. Note that I send duplicates in a special + group and that the default group is spam, since I filter all mails + out which are from some list I'm subscribed to or which are + addressed directly to me before. Those rules kill about 80% of the + Spam which reaches me (Email addresses are changed to prevent + spammers from using them): + + (setq nnmail-split-methods + '(("duplicates" "^Gnus-Warning:.*duplicate") + ("XEmacs-NT" "^\\(To:\\|CC:\\).*localpart@xemacs.bla.*") + ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@socha.bla.*") + ("tcsh" "^\\(To:\\|CC:\\).*localpart@mx.gw.bla.*") + ("BAfH" "^\\(To:\\|CC:\\).*localpart@.*uni-muenchen.bla.*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@yahoogroups.\\(de\\|com\\).*") + ("Tagesschau" "^From: tagesschau $") + ("Replies" "^\\(CC:\\|To:\\).*localpart@Frank-Schmitt.bla.*") + ("EK" "^From:.*\\(localpart@privateprovider.bla\\|localpart@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^Delivered-To: GMX delivery to spamtrap@gmx.bla$") + ("Spam" "^Received: from link2buy.com") + ("Spam" "^CC: .*azzrael@t-online.bla") + ("Spam" "^X-Mailer-Version: 1.50 BETA") + ("Uni" "^\\(CC:\\|To:\\).*localpart@uni-koblenz.bla.*") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@one.bla\\|adress@two.bla\\)") + ("Spam" ""))) + + +5. Composing messages + +5.1. What are the basic commands I need to know for sending mail and + postings? + + To start composing a new mail hit m either in Group or Summary + buffer, for a posting, it's either a in Group buffer and filling + the Newsgroups header manually or a in the Summary buffer of the + group where the posting shall be send to. Replying by mail is r if + you don't want to cite the author, or import the cited text + manually and R to cite the text of the original message. For a + follow up to a newsgroup, it's f and F (analog to r and R. + + Enter new headers above the line saying "--text follows this + line--", enter the text below the line. When ready hit C-c C-c, to + send the message, if you want to finish it later hit C-c C-d to + save it in the drafts group, where you can start editing it again + by saying D e. + +5.2. How to enable automatic word-wrap when composing messages? + + Say + + (add-hook 'message-mode-hook + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) + + + in ~/.gnus. You can reformat a paragraph by hitting M-q (as usual) + +5.3. How to set stuff like From, Organization, Reply-To, signature...? + + There are other ways, but you should use posting styles for this. + (See below why). This example should make the syntax clear: + + (setq gnus-posting-styles + '((".*" + (name "Frank Schmitt") + (address "me@there.bla") + (organization "Hamme net, kren mer och nimmi") + (signature-file "~/.signature") + ("X-SampleHeader" "foobar") + (eval (setq some-variable "Foo bar"))))) + + + The ".*" means that this settings are the default ones (see below), + valid values for the first element of the following lists are + signature, signature-file, organization, address, name or body. The + attribute name can also be a string. In that case, this will be + used as a header name, and the value will be inserted in the + headers of the article; if the value is `nil', the header name will + be removed. You can also say (eval (foo bar)), then the function + foo will be evaluated with argument bar and the result will be + thrown away. + +5.4. Can I set things like From, Signature etc group based on the group + I post too? + + That's the strength of posting styles. Before, we used ".*" to set + the default for all groups. You can use a regexp like "^gmane" and + the following settings are only applied to postings you send to the + gmane hierarchy, use ".*binaries" instead and they will be applied + to postings send to groups containing the string binaries in their + name etc. + + You can instead of specifying a regexp specify a function which is + evaluated, only if it returns true, the corresponding settings take + effect. Two interesting candidates for this are message-news-p + which returns t if the current Group is a newsgroup and the + corresponding message-mail-p. + + Note that all forms that match are applied, that means in the + example below, when I post to gmane.mail.spam.spamassassin.general, + the settings under ".*" are applied and the settings under + message-news-p and those under "^gmane" and those under "^gmane\ + \.mail\\.spam\\.spamassassin\\.general$". Because of this put + general settings at the top and specific ones at the bottom. + + (setq gnus-posting-styles + '((".*" ;;default + (name "Frank Schmitt") + (organization "Hamme net, kren mer och nimmi") + (signature-file "~/.signature") ) + ((message-news-p) ;;Usenet news? + (address "mySpamTrap@Frank-Schmitt.bla") + ("Reply-To" "hereRealRepliesOnlyPlease@Frank-Schmitt.bla") ) + ((message-mail-p) ;;mail? + (address "usedForMails@Frank-Schmitt.bla") ) + ("^gmane" ;;this is mail, too in fact + (address "usedForMails@Frank-Schmitt.net") + ("Reply-To" nil) ) + ("^gmane.mail.spam.spamassassin.general$" + (eval (setq mail-envelope-from "Azzrael@rz-online.de")) + (address "Azzrael@rz-online.de")) )) + + +5.5. Is there a spell-checker? Perhaps even on-the-fly spell-checking? + + You can use ispell.el to spell-check stuff in Emacs. So the first + thing to do is to make sure that you've got either ispell [http:// + fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html] or aspell [http: + //aspell.sourceforge.net/] installed and in your Path. Then you + need ispell.el [http://www.kdstevens.com/~stevens/ispell-page.html] + and for on-the-fly spell-checking flyspell.el [http:// + www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/ + flyspell.html]. Ispell.el is shipped with Gnus Emacs and available + through the Emacs package system, flyspell.el is shipped with Emacs + and part of XEmacs text-modes package which is available through + the package system, so there should be no need to install them + manually. + + Ispell.el assumes you use ispell, if you choose aspell say + + (setq ispell-program-name "aspell") + + in your Emacs configuration file. + + If you want your outgoing messages to be spell-checked, say + + (add-hook 'message-send-hook 'ispell-message) + + In your ~/.gnus, if you prefer on-the-fly spell-checking say + + (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) + +5.6. Can I set the dictionary based on the group I'm posting to? + + Yes, say something like + + (add-hook 'gnus-select-group-hook + (lambda () + (cond + ((string-match + "^de\\." (gnus-group-real-name gnus-newsgroup-name)) + (ispell-change-dictionary "deutsch8")) + (t + (ispell-change-dictionary "english"))))) + + + in ~/.gnus. Change "^de\\." and "deutsch8" to something that suits + your needs. + +5.7. Is there some kind of address-book, so I needn't remember all those + email addresses? + + There's an very basic solution for this, mail aliases. You can + store your mail addresses in a ~/.mailrc file using a simple alias + syntax: + + alias al "Al " + + + Then typing your alias (followed by a space or punctuation + character) on a To: or Cc: line in the message buffer will cause + gnus to insert the full address for you. See the node "Mail + Aliases" in Message (not Gnus) manual for details. + + However, what you really want is the Insidious Big Brother Database + bbdb. Get it through the XEmacs package system or from bbdb's + homepage [http://bbdb.sourceforge.net/]. Now place the following in + ~/.gnus, to activate bbdb for Gnus: + + (require 'bbdb) + (bbdb-initialize 'gnus 'message) + + + Now you probably want some general bbdb configuration, place them + in ~/.emacs: + + (require 'bbdb) + ;;If you don't live in Northern America, you should disable the + ;;syntax check for telephone numbers by saying + (setq bbdb-north-american-phone-numbers-p nil) + ;;Tell bbdb about your email address: + (setq bbdb-user-mail-names + (regexp-opt '("Your.Email@here.bla" + "Your.other@mail.there.bla"))) + ;;cycling while completing email addresses + (setq bbdb-complete-name-allow-cycling t) + ;;No popup-buffers + (setq bbdb-use-pop-up nil) + + + Now you should be ready to go. Say M-x bbdb RET RET to open a bbdb + buffer showing all entries. Say c to create a new entry, b to + search your BBDB and C-o to add a new field to an entry. If you + want to add a sender to the BBDB you can also just hit `:' on the + posting in the summary buffer and you are done. When you now + compose a new mail, hit TAB to cycle through know recipients. + +5.8. Sometimes I see little images at the top of article buffer. What's + that and how can I send one with my postings, too? + + Those images are called X-Faces. They are 48*48 pixel b/w pictures, + encoded in a header line. If you want to include one in your posts, + you've got to convert some image to a X-Face. So fire up some image + manipulation program (say Gimp), open the image you want to + include, cut out the relevant part, reduce color depth to 1 bit, + resize to 48*48 and save as bitmap. Now you should get the compface + package from this site [ftp://ftp.cs.indiana.edu:/pub/faces/]. and + create the actual X-face by saying + + cat file.xbm | xbm2ikon |compface > file.face + cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted + + + if you can't use compface, there's an online X-face converter at + http://www.dairiki.org/xface/ [http://www.dairiki.org/xface/]. If + you use MS Windows, you could also use the WinFace program from + http://www.xs4all.nl/~walterln/winface/ [http://www.xs4all.nl/ + ~walterln/winface/]. Now you only have to tell Gnus to include the + X-face in your postings by saying + + (setq message-default-headers + (with-temp-buffer + (insert "X-Face: ") + (insert-file-contents "~/.xemacs/xface") + (buffer-string))) + + + in ~/.gnus. + +5.9. Sometimes I accidentally hit r instead of f in newsgroups. Can Gnus + warn me, when I'm replying by mail in newsgroups? + + Put this in ~/.gnus: + + (setq gnus-confirm-mail-reply-to-news t) + + + if you already use Gnus 5.10.0, if you still use 5.8.8 or 5.9 try + this instead: + + (defadvice gnus-summary-reply (around reply-in-news activate) + (interactive) + (when (or (not (gnus-news-group-p gnus-newsgroup-name)) + (y-or-n-p "Really reply? ")) + ad-do-it)) + + +5.10. How to tell Gnus not to generate a sender header? + + Since 5.10.0 Gnus doesn't generate a sender header by default. For + older Gnus' try this in ~/.gnus: + + (eval-after-load "message" + '(add-to-list 'message-syntax-checks '(sender . disabled))) + + +5.11. I want gnus to locally store copies of my send mail and news, how + to do it? + + You must set the variable gnus-message-archive-group to do this. + You can set it to a string giving the name of the group where the + copies shall go or like in the example below use a function which + is evaluated and which returns the group to use. + + (setq gnus-message-archive-group + '((if (message-news-p) + "nnml:Send-News" + "nnml:Send-Mail"))) + + +5.12. People tell me my Message-IDs are not correct, why aren't they and + how to fix it? + + The message-ID is an unique identifier for messages you send. To + make it unique, Gnus need to know which machine name to put after + the "@". If the name of the machine where Gnus is running isn't + suitable (it probably isn't at most private machines) you can tell + Gnus what to use by saying: + + (defun message-make-message-id() + (concat "<"(message-unique-id)"@yourmachine.yourdomain.tld>")) + + + in ~/.gnus. If you have no idea what to insert for + "yourmachine.yourdomain.tld", you've got several choices. You can + either ask your provider if he allows you to use something like + yourUserName.userfqdn.provider.net, or you can use + somethingUnique.yourdomain.tld if you own the domain + yourdomain.tld, or you can register at a service which gives + private users a FQDN for free, e.g. http://www.stura.tu-freiberg.de + /~dlx/addfqdn.html [http://www.stura.tu-freiberg.de/~dlx/ + addfqdn.html]. (Sorry but this website is in German, if you know of + an English one offering the same, drop me a note). + + Finally you can tell Gnus not to generate a Message-ID for News at + all (and letting the server do the job) by saying + + (setq message-required-news-headers + (remove' Message-ID message-required-news-headers)) + + + you can also tell Gnus not to generate Message-IDs for mail by + saying + + (setq message-required-mail-headers + (remove' Message-ID message-required-mail-headers)) + + + , however some mail servers don't generate proper Message-IDs, too, + so test if your Mail Server behaves correctly by sending yourself a + Mail and looking at the Message-ID. + +6. Old messages + +6.1. How to import my old mail into Gnus? + + The easiest way is to tell your old mail program to export the + messages in mbox format. Most Unix mailers are able to do this, if + you come from the MS Windows world, you may find tools at http:// + mbx2mbox.sourceforge.net/ [http://mbx2mbox.sourceforge.net/]. + + Now you've got to import this mbox file into Gnus. To do this, + create a nndoc group based on the mbox file by saying G f /path/ + file.mbox RET in Group buffer. You now have read-only access to + your mail. If you want to import the messages to your normal Gnus + mail groups hierarchy, enter the nndoc group you've just created by + saying C-u RET (thus making sure all messages are retrieved), mark + all messages by saying M P b and either copy them to the desired + group by saying B c name.of.group RET or send them through + nnmail-split-methods (respool them) by saying B r. + +6.2. How to archive interesting messages? + + If you stumble across an interesting message, say in gnu.emacs.gnus + and want to archive it there are several solutions. The first and + easiest is to save it to a file by saying O f. However, wouldn't it + be much more convenient to have more direct access to the archived + message from Gnus? If you say yes, put this snippet by Frank Haun + in ~/.gnus: + + (defun my-archive-article (&optional n) + "Copies one or more article(s) to a corresponding `nnml:' group, e.g. + `gnus.ding' goes to `nnml:1.gnus.ding'. And `nnml:List-gnus.ding' goes + to `nnml:1.List-gnus-ding'. + + Use process marks or mark a region in the summary buffer to archive + more then one article." + (interactive "P") + (let ((archive-name + (format + "nnml:1.%s" + (if (featurep 'xemacs) + (replace-in-string gnus-newsgroup-name "^.*:" "") + (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) + (gnus-summary-copy-article n archive-name))) + + + You can now say M-x my-archive-article in summary buffer to archive + the article under the cursor in a nnml group. (Change nnml to your + preferred back end) + + Of course you can also make sure the cache is enabled by saying + + (setq gnus-use-cache t) + + + then you only have to set either the tick or the dormant mark for + articles you want to keep, setting the read mark will remove them + from cache. + +6.3. How to search for a specific message? + + There are several ways for this, too. For a posting from a Usenet + group the easiest solution is probably to ask groups.google.com + [http://groups.google.com], if you found the posting there, tell + Google to display the raw message, look for the message-id, and say + M-^ the@message.id RET in a summary buffer. Since Gnus 5.10.0 + there's also a Gnus interface for groups.google.com which you can + call with G W) in group buffer. + + Another idea which works for both mail and news groups is to enter + the group where the message you are searching is and use the + standard Emacs search C-s, it's smart enough to look at articles in + collapsed threads, too. If you want to search bodies, too try M-s + instead. Further on there are the gnus-summary-limit-to-foo + functions, which can help you, too. + + Of course you can also use grep to search through your local mail, + but this is both slow for big archives and inconvenient since you + are not displaying the found mail in Gnus. Here comes nnir into + action. Nnir is a front end to search engines like swish-e or + swish++ and others. You index your mail with one of those search + engines and with the help of nnir you can search trough the indexed + mail and generate a temporary group with all messages which met + your search criteria. If this sound cool to you get nnir.el from + ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/ [ftp:// + ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/] or ftp:// + ftp.is.informatik.uni-duisburg.de/pub/src/emacs/ [ftp:// + ftp.is.informatik.uni-duisburg.de/pub/src/emacs/]. Instructions on + how to use it are at the top of the file. + +6.4. How to get rid of old unwanted mail? + + You can of course just mark the mail you don't need anymore by + saying # with point over the mail and then say B DEL to get rid of + them forever. You could also instead of actually deleting them, + send them to a junk-group by saying B m nnml:trash-bin which you + clear from time to time, but both are not the intended way in Gnus. + + In Gnus, we let mail expire like news expires on a news server. + That means you tell Gnus the message is expirable (you tell Gnus "I + don't need this mail anymore") by saying E with point over the mail + in summary buffer. Now when you leave the group, Gnus looks at all + messages which you marked as expirable before and if they are old + enough (default is older than a week) they are deleted. + +6.5. I want that all read messages are expired (at least in some + groups). How to do it? + + If you want all read messages to be expired (e.g. in mailing lists + where there's an online archive), you've got two choices: + auto-expire and total-expire. Auto-expire means, that every article + which has no marks set and is selected for reading is marked as + expirable, Gnus hits E for you every time you read a message. + Total-expire follows a slightly different approach, here all + article where the read mark is set are expirable. + + To activate auto-expire, include auto-expire in the Group + parameters for the group. (Hit G c in summary buffer with point + over the group to change group parameters). For total-expire add + total-expire to the group-parameters. + + Which method you choose is merely a matter of taste: Auto-expire is + faster, but it doesn't play together with Adaptive Scoring, so if + you want to use this feature, you should use total-expire. + + If you want a message to be excluded from expiration in a group + where total or auto expire is active, set either tick (hit u) or + dormant mark (hit u), when you use auto-expire, you can also set + the read mark (hit d). + +6.6. I don't want expiration to delete my mails but to move them to + another group. + + Say something like this in ~/.gnus: + + (setq nnmail-expiry-target "nnml:expired") + + + (If you want to change the value of nnmail-expiry-target on a per + group basis see the question "How can I disable threading in some + (e.g. mail-) groups, or set other variables specific for some + groups?") + +7. Gnus in a dial-up environment + +7.1. I don't have a permanent connection to the net, how can I minimize + the time I've got to be connected? + + You've got basically two options: Either you use the Gnus Agent + (see below) for this, or you can install programs which fetch your + news and mail to your local disk and Gnus reads the stuff from your + local machine. + + If you want to follow the second approach, you need a program which + fetches news and offers them to Gnus, a program which does the same + for mail and a program which receives the mail you write from Gnus + and sends them when you're online. + + Let's talk about Unix systems first: For the news part, the easiest + solution is a small nntp server like Leafnode [http:// + www.leafnode.org/] or sn [http://infa.abo.fi/~patrik/sn/], of + course you can also install a full featured news server like inn + [http://www.isc.org/products/INN/]. Then you want to fetch your + Mail, popular choices are fetchmail [http://www.catb.org/~esr/ + fetchmail/] and getmail [http://www.qcc.ca/~charlesc/software/ + getmail-3.0/]. You should tell those to write the mail to your disk + and Gnus to read it from there. Last but not least the mail sending + part: This can be done with every MTA like sendmail [http:// + www.sendmail.org/], postfix [http://www.qmail.org/], exim [http:// + www.exim.org/] or qmail [http://www.qmail.org/]. + + On windows boxes I'd vote for Hamster [http://www.tglsoft.de/], + it's a small freeware, open-source program which fetches your mail + and news from remote servers and offers them to Gnus (or any other + mail and/or news reader) via nntp respectively POP3 or IMAP. It + also includes a smtp server for receiving mails from Gnus. + +7.2. So what was this thing about the Agent? + + The Gnus agent is part of Gnus, it allows you to fetch mail and + news and store them on disk for reading them later when you're + offline. It kind of mimics offline newsreaders like e.g. Forte + Agent. If you want to use the Agent place the following in ~/.gnus + if you are still using 5.8.8 or 5.9 (it's the default since + 5.10.0): + + (setq gnus-agent t) + + + Now you've got to select the servers whose groups can be stored + locally. To do this, open the server buffer (that is press ^ while + in the group buffer). Now select a server by moving point to the + line naming that server. Finally, agentize the server by typing J a + . If you make a mistake, or change your mind, you can undo this + action by typing J r. When you're done, type 'q' to return to the + group buffer. Now the next time you enter a group on a agentized + server, the headers will be stored on disk and read from there the + next time you enter the group. + +7.3. I want to store article bodies on disk, too. How to do it? + + You can tell the agent to automatically fetch the bodies of + articles which fulfill certain predicates, this is done in a + special buffer which can be reached by saying J c in group buffer. + Please refer to the documentation for information which predicates + are possible and how exactly to do it. + + Further on you can tell the agent manually which articles to store + on disk. There are two ways to do this: Number one: In the summary + buffer, process mark a set of articles that shall be stored in the + agent by saying # with point over the article and then type J s. + The other possibility is to set, again in the summary buffer, + downloadable (%) marks for the articles you want by typing @ with + point over the article and then typing J u. What's the difference? + Well, process marks are erased as soon as you exit the summary + buffer while downloadable marks are permanent. You can actually set + downloadable marks in several groups then use fetch session ('J s' + in the GROUP buffer) to fetch all of those articles. The only + downside is that fetch session also fetches all of the headers for + every selected group on an agentized server. Depending on the + volume of headers, the initial fetch session could take hours. + +7.4. How to tell Gnus not to try to send mails / postings while I'm + offline? + + All you've got to do is to tell Gnus when you are online (plugged) + and when you are offline (unplugged), the rest works automatically. + You can toggle plugged/unplugged state by saying J j in group + buffer. To start Gnus unplugged say M-x gnus-unplugged instead of + M-x gnus. Note that for this to work, the agent must be active. + +8. Getting help + +8.1. How to find information and help inside Emacs? + + The first stop should be the Gnus manual (Say C-h i d m Gnus RET to + start the Gnus manual, then walk through the menus or do a + full-text search with s). Then there are the general Emacs help + commands starting with C-h, type C-h ? ? to get a list of all + available help commands and their meaning. Finally M-x + apropos-command lets you search through all available functions and + M-x apropos searches the bound variables. + +8.2. I can't find anything in the Gnus manual about X (e.g. attachments, + PGP, MIME...), is it not documented? + + There's not only the Gnus manual but also the manuals for message, + emacs-mime, sieve and pgg. Those packages are distributed with Gnus + and used by Gnus but aren't really part of core Gnus, so they are + documented in different info files, you should have a look in those + manuals, too. + +8.3. Which websites should I know? + + The two most important ones are the official Gnus website [http:// + www.gnus.org]. and it's sister site my.gnus.org (MGO) [http:// + my.gnus.org], hosting an archive of lisp snippets, howtos, a (not + really finished) tutorial and this FAQ. + + Tell me about other sites which are interesting. + +8.4. Which mailing lists and newsgroups are there? + + There's the newsgroup gnu.emacs.gnus (pull it from e.g. + news.gnus.org) which deals with general questions and the ding + mailing list (ding@gnus.org) dealing with development of Gnus. You + can read the ding list via NNTP, too under the name gnus.ding from + news.gnus.org. + + If you want to stay in the big8, news.software.newssreaders is also + read by some Gnus users (but chances for qualified help are much + better in the above groups) and if you speak German, there's + de.comm.software.gnus. + +8.5. Where to report bugs? + + Say M-x gnus-bug, this will start a message to the gnus bug mailing + list [mailto:bugs@gnus.org] including information about your + environment which make it easier to help you. + +8.6. I need real-time help, where to find it? + + Point your IRC client to irc.my.gnus.org channel #mygnus. Don't be + afraid if people there speak German, they are willing and capable + of switching to English when people from outside Germany enter. + +9. Tuning Gnus + +9.1. Starting Gnus is really slow, how to speed it up? + + The reason for this could be the way Gnus reads it's active file, + see the node "The Active File" in the Gnus manual for things you + might try to speed the process up. An other idea would be to byte + compile your ~/.gnus (say M-x byte-compile-file RET ~/.gnus RET to + do it). Finally, if you have require statements in your .gnus, you + could replace them with eval-after-load, which loads the stuff not + at startup time, but when it's needed. Say you've got this in your + ~/.gnus: + + (require 'message) + (add-to-list 'message-syntax-checks '(sender . disabled)) + + + then as soon as you start Gnus, message.el is loaded. If you + replace it with + + (eval-after-load "message" + '(add-to-list 'message-syntax-checks '(sender . disabled))) + + + it's loaded when it's needed. + +9.2. How to speed up the process of entering a group? + + A speed killer is setting the variable gnus-fetch-old-headers to + anything different from nil, so don't do this if speed is an issue. + To speed up building of summary say + + (gnus-compile) + + + at the bottom of your ~/.gnus, this will make gnus byte-compile + things like gnus-summary-line-format. then you could increase the + value of gc-cons-threshold by saying something like + + (setq gc-cons-threshold 3500000) + + + in ~/.emacs. If you don't care about width of CJK characters or use + Gnus 5.10.0 or younger together with a recent GNU Emacs, you should + say + + (setq gnus-use-correct-string-widths nil) + + + in ~/.gnus (thanks to Jesper harder for the last two suggestions). + Finally if you are still using 5.8.8 or 5.9 and experience speed + problems with summary buffer generation, you definitely should + update to 5.10.0 since there quite some work on improving it has + been done. + +9.3. Sending mail becomes slower and slower, what's up? + + The reason could be that you told Gnus to archive the messages you + wrote by setting gnus-message-archive-group. Try to use a nnml + group instead of an archive group, this should bring you back to + normal speed. Glossary ~/.gnus - + When the term ~/.gnus is used it just means your Gnus configuration file. You might as well call it ~/.gnus.el or specify another name. - + Back End - + In Gnus terminology a back end is a virtual server, a layer between core Gnus and the real NNTP-, POP3-, IMAP- or whatever-server which offers Gnus a standardized interface to functions like "get message", "get Headers" etc. - + Emacs - + When the term Emacs is used in this FAQ, it means either GNU Emacs or XEmacs. - + Message - + In this FAQ message means a either a mail or a posting to a Usenet Newsgroup or to some other fancy back end, no matter of which kind it is. - + MUA - + MUA is an acronym for Mail User Agent, it's the program you use to read and write e-mails. - + NUA - + NUA is an acronym for News User Agent, it's the program you use to read and write Usenet news. - diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fc2b63a..c711426 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,405 @@ +2003-04-27 06:47:31 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.19 is released. + +2003-04-27 Kevin Greiner + + * gnus-registry.el (gnus-register-spool-action): Replaced literal + carriage-return character with its escape sequence. + +2003-04-27 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-catchup-from-here): Doc fix. + + * nnrss.el (nnrss-node-text): Use only one + gnus-replace-in-string. + + * gnus.el: Remove gnus-functionp throughout. + + * gnus-util.el (gnus-functionp): Removed. + + * gnus-msg.el (gnus-summary-wide-reply-with-original): Doc fix. + + * message.el (message-required-headers): Add In-Reply-To. + +2003-04-27 Marshall T. Vandegrift + + * gnus-fun.el (gnus-face-from-file): Bind coding-system-for-read + to binary. + +2003-04-27 Jesper Harder + + * mml.el (mml-preview): do. + + * message.el (message-mode): do. + + * gnus-undo.el (gnus-undo-mode): do. + + * gnus-topic.el (gnus-topic-mode): do. + + * gnus-sum.el (gnus-summary-mode, gnus-summary-edit-article): do. + + * gnus-msg.el (gnus-setup-message) + (gnus-inews-add-send-actions, gnus-configure-posting-styles): do. + + * gnus-gl.el (gnus-grouplens-mode): do. + + * gnus-art.el (gnus-mime-save-part-and-strip) + (gnus-mime-delete-part): Use it. + + * gnus-util.el (gnus-make-local-hook): New function. + +2003-04-25 Simon Josefsson + + * nnrss.el (nnrss-node-text): Don't use a star. + (nnrss-node-text): Use g-r-i-s, not g-r-r-i-s which doesn't exist. + +2003-04-24 Dave Love + + * qp.el (quoted-printable-decode-region): Use mm-insert-byte. + Signal error on malformed text, as for base64. + (quoted-printable-encode-region): DTRT in Emacs 22. + + * mm-util.el (mm-make-temp-file, mm-insert-byte): New. + (mm-auto-save-coding-system): Consider utf-8-emacs. + (mm-mime-mule-charset-alist, mm-mule-charset-to-mime-charset) + (mm-charset-to-coding-system, mm-mime-charset) + (mm-find-mime-charset-region): Check for :mime-charset coding + systems property. + + * mml-sec.el (mml2015, mml1991): Don't require. + (mml2015-sign, mml2015-encrypt, mml1991-sign, mml1991-encrypt) + (message-goto-body, mml-insert-tag): Autoload. + + * mm-decode.el (mm-tmp-directory): Re-write to help avoid warnings. + + * gnus-start.el (message-make-date): Autoload rather than + requiring message. + + * gnus-group.el (gnus-group-name-charset-group-alist): Use + mm-coding-system-p. + (gnus-cache-active-altered): Defvar when compiling. + (gnus-group-delete-group): Re-write to help avoid warnings. + + * gnus-art.el (gnus-use-idna): Use mm-coding-system-p. + + * pgg.el: Split eval-when-compile forms. + +2003-04-24 Reiner Steib + + * gnus-group.el (gnus-large-ephemeral-newsgroup) + (gnus-fetch-old-ephemeral-headers): News variables. + (gnus-group-read-ephemeral-group): Use them. + +2003-04-24 Simon Josefsson + + * sieve.el (sieve-upload): Don't use replace-regexp-in-string. + + * nnrss.el (nnrss-node-text): Ditto. + +2003-04-24 Katsumi Yamaoka + + * gnus-msg.el (gnus-inews-do-gcc): Make sure the obsolete variable + gnus-inews-mark-gcc-as-read exists. + +2003-04-23 Simon Josefsson + + * gnus-sieve.el (gnus-sieve-generate): Rewrite regexp search so it + doesn't exceed the regexp stack space. + +2003-04-23 Jesper Harder + + * gnus-msg.el (gnus-inews-mark-gcc-as-read): Don't defvar it. + + * gnus-art.el (gnus-article-hide-pgp-hook): do. + +2003-04-23 Reiner Steib + + * mml.el (mml-preview): Bind `=', RET, and mouse-2. + +2003-04-23 Jesper Harder + + * mm-bodies.el (mm-decode-body): Don't override supplied charset. + +2003-04-23 Katsumi Yamaoka + + * dgnushack.el (merge, copy-list): Remove compiler macros. + (butlast): Add a compiler macro. + +2003-04-22 Paul Jarc + + * gnus-util.el (gnus-merge): Added "type" argument to match CL + merge and gnus-sum.el's expectations. + +2003-04-21 Reiner Steib + + * gnus-art.el (gnus-button-url-regexp): Added nntp. + + * message.el (message-generate-headers-first): Default to + '(references). + + * gnus-art.el (gnus-mime-delete-part): Require confirmation. + +2003-04-21 Jesper Harder + + * smime.el (smime-decrypt-region): Insert From header. + +2003-04-21 Kai Gro,A_(Bjohann + + * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face): + Max length of header is 726, not 740. From Gaute B Strokkenes + . + +2003-04-20 Jesper Harder + + * nndb.el, mml1991.el: Fix license template. + +2003-04-20 Simon Josefsson + + * nnimap.el (nnimap-split-articles): Don't download body unless + required. + + * imap.el (imap-gssapi-open, imap-ssl-open): Erase buffer before + starting process, like imap-kerberos4-open does. + + * mml-smime.el, rfc1843.el, dig.el, smime.el, uudecode.el: Fix + license template. + + * mml-sec.el: Fix license template. + + * gnus-sieve.el, sieve.el, sieve-manage.el, sieve-mode.el: Fix + license template. + + * pgg-def.el, pgg.el, pgg-gpg.el, pgg-parse.el, pgg-pgp5.el, + pgg-pgp.el: Fix license template. + +2003-04-19 Jesper Harder + + * gnus-sum.el (gnus-summary-delete-article): Improve docstring. + +2003-04-19 Teodor Zlatanov + + * spam.el (spam-move-spam-nonspam-groups-only): dumb typo fix + +2003-04-18 Teodor Zlatanov + + * spam.el (spam-split): allow a particular check as a parameter, + e.g. (: spam-split 'spam-use-bogofilter) + (spam-mark-only-unseen-as-spam): new parameter, see doc + (spam-mark-junk-as-spam-routine): use + spam-mark-only-unseen-as-spam, simplify routine to take advantage + of gnus-newsgroup-unread as well as gnus-newsgroup-unseen + +2003-04-17 Teodor Zlatanov + + * gnus.el (gnus-group-short-name, gnus-group-prefixed-p): new functions + (gnus-group-guess-full-name): don't prefix the group twice + + * nnmail.el (nnmail-split-fancy-with-parent): docstring fix + + * gnus-registry.el (gnus-registry-clear) + (gnus-registry-fetch-group, gnus-registry-grep-in-list) + (gnus-registry-split-fancy-with-parent): new functions + (gnus-register-spool-action, gnus-register-action): simplified the format + (gnus-registry): new customization group + (gnus-registry-unfollowed-groups): new variable + +2003-04-17 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-button-alist): Add nntp: urls. + (gnus-header-button-alist): Ditto. + +2003-04-17 Dave Love + + * gnus-util.el (gnus-string-equal): Revert last change. + +2003-04-17 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-browse-make-menu-bar): Fix typo. + +2003-04-17 Mike Woolley + + * gnus-sum.el (gnus-sum-thread-tree-false-root): New variable. + +2003-04-15 Michael Shields + + * gnus-art.el (article-hide-boring-headers): Hide Reply-To: if + the broken-reply-to group parameter is set. Idea from Vasily + Korytov . + +2003-04-17 Steve Youngs + + * dgnushack.el: 'setenv' is in env.el for XEmacsen <= 21.4, but in + process.el in XEmacsen >= 21.5. + +2003-04-17 Steve Youngs + + * dgnushack.el: Add a whole swag of autoloads and defaliases to + satisfy the byte-compiler when building with XEmacs. + + * lpath.el (maybe-bind): Add 'w3-meta-content-type-charset-regexp' + and 'w3-meta-charset-content-type-regexp' in XEmacs. The upstream + W3 doesn't have these. + + * mailcap.el: Maybe require 'lpr in XEmacs. + +2003-04-16 Simon Josefsson + + * mml2015.el (mml2015-pgg-sign): Bind pgg-default-user-id to MML + sender tag, if available. + +2003-04-16 Teodor Zlatanov + + * gnus-registry.el (gnus-register-action) + (gnus-register-spool-action, hashtable-to-alist) + (gnus-registry-translate-from-alist, alist-to-hashtable) + (gnus-registry-translate-to-alist, gnus-registry-headers-hashtb): + new variables and function fixes + + * gnus.el (gnus-registry-headers-alist): new variable to hold + article header data + (gnus-variable-list): save gnus-registry-headers-alist + + * spam-report.el (Module): new module for spam reporting + + * gnus.el (spam-process): added + gnus-group-spam-exit-processor-report-gmane to the list of choices + (gnus-install-group-spam-parameters): defined new spam exit processor + + * spam.el (autoload): autoload spam-report-gmane when needed + (spam-report-gmane-register-routine): glue for spam-report.el + (spam-group-spam-processor-report-gmane-p): glue for the + gnus-group-spam-exit-processor-report-gmane spam processor + (spam-summary-prepare-exit): check the report-gmane spam processor + and run spam-report-gmane-register-routine if it's active + + From John Wiegley + + * spam.el (spam-bogofilter-score): check bogofilter headers before + checking bogofilter itself + +2003-04-16 Dave Love + + * gnus-agent.el: Wrap defsetf in eval-when-compile. + (gnus-agent-cat-defaccessor): Don't use gensym. + + * mml1991.el: Require cl, mm-util when compiling. + (quoted-printable-decode-region, quoted-printable-encode-region): + Autoload. + + * pgg.el: Require cl when compiling. + + * nnmail.el (gnus): Require. + + * gnus-util.el: Move provide to end. + (gnus-string-equal): Maybe use compare-strings. + (gnus-merge): New. + + * gnus-sum.el (gnus-summary-prepare-threads): Don't use copy-list. + (gnus-summary-insert-articles): Use gnus-merge. + + * gnus-fun.el: Require cl and mm-util when compiling. + + * gnus-diary.el (gnus-diary-delay-format-french) + (gnus-diary-delay-format-english): Don't use setf with nthcdr. + + * nndiary.el (nndiary-compute-reminders): Don't use setf with + nthcdr. + +2003-04-16 Kevin Greiner + + * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to + specify a predicate other than false. + (gnus-category-read): Use the new feature to create a 'default' + category with a 'short' predicate. + +2003-04-16 Lars Magne Ingebrigtsen + + * message.el (message-unique-id): Comment change. + + * gnus-art.el (gnus-article-next-page-1): New function. + (gnus-article-next-page): Use it. + +2003-04-15 Teodor Zlatanov + + * spam.el (spam-split): added save-restriction to save-excursion + +2003-04-15 Reiner Steib + From Julien Avarre + + * gnus-fun.el: Fixed autoload cookie. + +2003-04-15 Paul Jarc + From Remi Letot + + * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if + instead of remove-if. + +2003-04-14 Katsumi Yamaoka + + * gnus-msg.el (gnus-summary-news-other-window): Use delq and + copy-sequence instead of remove which is a cl run-time function in + Emacs 20. + +2003-04-14 Jesper Harder + + * gnus-msg.el (gnus-summary-news-other-window): Make a buffer + local copy of gnus-discouraged-post-methods with the current + method removed. + +2003-04-14 Simon Josefsson + + * mailcap.el (mailcap-mime-data): Add application/pgp-keys. + +2003-04-13 Reiner Steib + + * mm-util.el (mm-sort-coding-systems-predicate): Convert elements + of `mm-coding-system-priorities' to base coding system. + + * gnus-sum.el: Added coding cookie ("middle dot" in + gnus-summary-morse-message). + +2003-04-13 Simon Josefsson + + * gnus-art.el (article-fill-long-lines) + (article-verify-x-pgp-sig, article-decode-group-name) + (gnus-mime-button-menu): Split >80 character lines. + +2003-04-13 Jesper Harder + + * gnus-sum.el (gnus-summary-local-variables): Use defvar since + we're let-binding it. + + * nnmbox.el (nnmbox-mbox-buffer): It's not a constant. + +2003-04-13 Lars Magne Ingebrigtsen + + * message.el (message-hide-headers): Don't do intangible. + + * gnus.el (gnus-group-prefixed-name): Comment out the test for + colon. + + * gnus-srvr.el (gnus-browse-read-group): Don't give the real name + to the ephemeral entry, but the prefixed name. + + * gnus.el (gnus-group-prefixed-name): Clean up. + +2003-04-13 Kevin Greiner + + * gnus-agent.el (gnus-agent-group-pathname): Bind + gnus-command-method so that gnus-agent-directory will always + return a valid directory. + * gnus-cache.el (gnus-cache-enter-article): Remove article from + gnus-newsgroup-undownloaded so that the summary will display the + article as downloaded. + (gnus-cache-remove-article): If the article isn't in the agent, + remove it from gnus-newsgroup-undownloaded so that the summary + will display the article as undownloaded. + +2003-04-13 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + 2003-04-13 01:12:01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.18 is released. @@ -358,13 +760,14 @@ 2003-03-28 Paul Jarc - * nnmaildir.el (nnmaildir-request-set-mark, - nnmaildir-close-group): Allow each mark directory in a group to + * nnmaildir.el (nnmaildir-request-set-mark) + (nnmaildir-close-group): Allow each mark directory in a group to have its own inode for mark files, to accommodate AFS. 2003-03-28 Teodor Zlatanov - * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by gnus-read-newsrc-el-file + * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by + gnus-read-newsrc-el-file (gnus-read-newsrc-el-file): call the gnus-read-newsrc-el-hook * gnus-registry.el (gnus-registry-translate-to-alist) @@ -383,7 +786,7 @@ 2003-03-27 Katsumi Yamaoka - * lpath.el: Bind url-current-object for FSF Emacs; bind + * lpath.el: Bind url-current-object for Emacs; bind gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream for both Emacsen. @@ -618,11 +1021,9 @@ 2003-03-18 Paul Jarc - * nnmaildir.el (nnmaildir-open-server, - nnmaildir-request-scan, - nnmaildir-request-create-group, - nnmaildir-request-delete-group): Replace create-directory with - target-prefix. + * nnmaildir.el (nnmaildir-open-server, nnmaildir-request-scan) + (nnmaildir-request-create-group, nnmaildir-request-delete-group): + Replace create-directory with target-prefix. 2003-03-18 Jesper Harder diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index 0f4041f..cb40ab9 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -48,45 +48,32 @@ ;(push "/usr/share/emacs/site-lisp" load-path) +;; Define compiler macros for the functions provided by cl in old Emacsen. (unless (featurep 'xemacs) - (define-compiler-macro merge (&whole form type seq1 seq2 pred &rest keys) - (if (and (fboundp 'merge) - (subrp (symbol-function 'merge))) - form - `(let ((type ,type) - (seq1 ,seq1) - (seq2 ,seq2) - (pred ,pred)) - (or (listp seq1) (setq seq1 (append seq1 nil))) - (or (listp seq2) (setq seq2 (append seq2 nil))) - (let ((res nil)) - (while (and seq1 seq2) - (if (funcall pred (car seq2) (car seq1)) - (push (pop seq2) res) - (push (pop seq1) res))) - (let ((x (nconc (nreverse res) seq1 seq2))) - (cond ((eq type 'list) (if (listp x) x (append x nil))) - ((eq type 'vector) (if (vectorp x) x (vconcat x))) - ((eq type 'string) (if (stringp x) x (concat x))) - ((eq type 'array) (if (arrayp x) x (vconcat x))) - ((and (eq type 'character) (stringp x) (= (length x) 1)) - (aref x 0)) - ((and (eq type 'character) (symbolp x)) - (aref (symbol-name x) 0)) - ((eq type 'float) (float x)) - ((typep x type) x) - (t (error "Can't coerce %s to type %s" x type)))))))) - - (define-compiler-macro copy-list (&whole form list) - (if (and (fboundp 'copy-list) - (subrp (symbol-function 'copy-list))) + (define-compiler-macro butlast (&whole form x &optional n) + (if (>= emacs-major-version 21) form - `(let ((list ,list)) - (if (consp list) - (let ((res nil)) - (while (consp list) (push (pop list) res)) - (prog1 (nreverse res) (setcdr res list))) - (car list))))) + (if n + `(let ((x ,x) + (n ,n)) + (if (and n (<= n 0)) + x + (let ((m (length x))) + (or n (setq n 1)) + (and (< n m) + (progn + (if (> n 0) + (progn + (setq x (copy-sequence x)) + (setcdr (nthcdr (- (1- m) n) x) nil))) + x))))) + `(let* ((x ,x) + (m (length x))) + (and (< 1 m) + (progn + (setq x (copy-sequence x)) + (setcdr (nthcdr (- m 2) x) nil) + x)))))) (define-compiler-macro remove (&whole form item seq) (if (>= emacs-major-version 21) @@ -138,6 +125,55 @@ (defalias 'x-defined-colors 'ignore) (defalias 'read-color 'ignore))) +(eval-and-compile + (when (featurep 'xemacs) + (autoload 'Info-directory "info" nil t) + (autoload 'Info-menu "info" nil t) + (autoload 'annotations-at "annotations") + (autoload 'apropos "apropos" nil t) + (autoload 'apropos-command "apropos" nil t) + (autoload 'bbdb-complete-name "bbdb-com" nil t) + (autoload 'browse-url "browse-url" nil t) + (autoload 'customize-apropos "cus-edit" nil t) + (autoload 'customize-save-variable "cus-edit" nil t) + (autoload 'customize-variable "cus-edit" nil t) + (autoload 'delete-annotation "annotations") + (autoload 'dolist "cl-macs" nil nil 'macro) + (autoload 'enriched-decode "enriched") + (autoload 'info "info" nil t) + (autoload 'make-annotation "annotations") + (autoload 'make-display-table "disp-table") + (autoload 'pp "pp") + (autoload 'ps-despool "ps-print" nil t) + (autoload 'ps-spool-buffer "ps-print" nil t) + (autoload 'ps-spool-buffer-with-faces "ps-print" nil t) + (autoload 'read-passwd "passwd") + (autoload 'regexp-opt "regexp-opt") + (autoload 'reporter-submit-bug-report "reporter") + (if (emacs-version>= 21 5) + (autoload 'setenv "process" nil t) + (autoload 'setenv "env" nil t)) + (autoload 'smtpmail-send-it "smtpmail") + (autoload 'sort-numeric-fields "sort" nil t) + (autoload 'sort-subr "sort") + (autoload 'trace-function-background "trace" nil t) + (autoload 'w3-do-setup "w3") + (autoload 'w3-prepare-buffer "w3-display") + (autoload 'w3-region "w3-display" nil t) + (defalias 'frame-char-height 'frame-height) + (defalias 'frame-char-width 'frame-width) + (defalias 'frame-parameter 'frame-property) + (defalias 'make-overlay 'ignore) + (defalias 'overlay-end 'ignore) + (defalias 'overlay-get 'ignore) + (defalias 'overlay-put 'ignore) + (defalias 'overlay-start 'ignore) + (defalias 'overlays-in 'ignore) + (defalias 'replace-dehighlight 'ignore) + (defalias 'replace-highlight 'ignore) + (defalias 'run-with-idle-timer 'ignore) + (defalias 'w3-coding-system-for-mime-charset 'ignore))) + (defun dgnushack-compile (&optional warn) ;;(setq byte-compile-dynamic t) (unless warn diff --git a/lisp/dig.el b/lisp/dig.el index 953dc1d..e71d6db 100644 --- a/lisp/dig.el +++ b/lisp/dig.el @@ -4,7 +4,7 @@ ;; Author: Simon Josefsson ;; Keywords: DNS BIND dig -;; This file is not a part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 114685a..5b3f965 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -284,6 +284,8 @@ node `(gnus)Server Buffer'.") (setq category (cdr category))))))) category) +;; Fixme: These two can probably be in eval-when-compile. + (defmacro gnus-agent-cat-defaccessor (name prop-name) "Define accessor and setter methods for manipulating a list of the form \(NAME (PROPERTY1 VALUE1) ... (PROPERTY_N VALUE_N)). @@ -296,8 +298,8 @@ manipulated as follows: (quote (quote ,prop-name)) category))) (define-setf-method ,name (category) - (let* ((--category--temp-- (gensym "--category--")) - (--value--temp-- (gensym "--value--"))) + (let* ((--category--temp-- (make-symbol "--category--")) + (--value--temp-- (make-symbol "--value--"))) (list (list --category--temp--) ; temporary-variables (list category) ; value-forms (list --value--temp--) ; store-variables @@ -332,8 +334,9 @@ manipulated as follows: (gnus-agent-cat-defaccessor gnus-agent-cat-score-file agent-score-file) -(defsetf gnus-agent-cat-groups (category) (groups) - (list 'gnus-agent-set-cat-groups category groups)) +(eval-when-compile + (defsetf gnus-agent-cat-groups (category) (groups) + (list 'gnus-agent-set-cat-groups category groups))) (defun gnus-agent-set-cat-groups (category groups) (unless (eq groups 'ignore) @@ -368,8 +371,8 @@ manipulated as follows: (setcdr category (cons cell (cdr category))) cell)) groups)))))) -(defsubst gnus-agent-cat-make (name) - (list name '(agent-predicate . false))) +(defsubst gnus-agent-cat-make (name &optional default-agent-predicate) + (list name `(agent-predicate . ,(or default-agent-predicate 'false)))) ;;; Fetching setup functions. @@ -1156,7 +1159,9 @@ This can be added to `gnus-select-article-hook' or ;; nnagent uses nnmail-group-pathname to read articles while ;; unplugged. The agent must, therefore, use the same directory ;; while plugged. - (nnmail-group-pathname (gnus-group-real-name group) (gnus-agent-directory))) + (let ((gnus-command-method (or gnus-command-method + (gnus-find-method-for-group group)))) + (nnmail-group-pathname (gnus-group-real-name group) (gnus-agent-directory)))) (defun gnus-agent-get-function (method) (if (gnus-online method) @@ -2182,7 +2187,7 @@ The following commands are available: '(agent-predicate agent-score-file agent-groups)))) c) old-list))))) - (list (gnus-agent-cat-make 'default))))) + (list (gnus-agent-cat-make 'default 'short))))) (defun gnus-category-write () "Write the category alist." @@ -2365,7 +2370,7 @@ The following commands are available: (cond ;; Functions are just returned as is. ((or (symbolp predicate) - (gnus-functionp predicate)) + (functionp predicate)) `(,(or (cdr (assq predicate gnus-category-predicate-alist)) predicate))) ;; More complex predicate. @@ -2402,7 +2407,7 @@ return only unread articles." nil) ((not function) nil) - ((gnus-functionp function) + ((functionp function) 'ignore) ((memq (car function) '(or and not)) (apply (car function) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 8a606c8..b6b592c 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -560,8 +560,7 @@ The following additional specs are available: :type 'hook :group 'gnus-article-various) -(defvar gnus-article-hide-pgp-hook nil) -(make-obsolete-variable 'gnus-article-hide-pgp-hook +(make-obsolete-variable 'gnus-article-hide-pgp-hook "This variable is obsolete in Gnus 5.10.") (defcustom gnus-article-button-face 'bold @@ -1325,8 +1324,7 @@ It is a string, such as \"PGP\". If nil, ask user." "Function used for converting HTML into text.") (defcustom gnus-use-idna (and (condition-case nil (require 'idna) (file-error)) - (fboundp 'coding-system-p) - (coding-system-p 'utf-8)) + (mm-coding-system-p 'utf-8)) "Whether IDNA decoding of headers is used when viewing messages. This requires GNU Libidn, and by default only enabled if it is found." :group 'gnus-article-headers @@ -1667,15 +1665,18 @@ always hide." (message-fetch-field "newsgroups")) (gnus-article-hide-header "followup-to"))) ((eq elem 'reply-to) - (let ((from (message-fetch-field "from")) - (reply-to (message-fetch-field "reply-to"))) - (when (and - from reply-to - (ignore-errors - (gnus-string-equal - (nth 1 (mail-extract-address-components from)) - (nth 1 (mail-extract-address-components reply-to))))) - (gnus-article-hide-header "reply-to")))) + (if (gnus-group-find-parameter + gnus-newsgroup-name 'broken-reply-to) + (gnus-article-hide-header "reply-to") + (let ((from (message-fetch-field "from")) + (reply-to (message-fetch-field "reply-to"))) + (when (and + from reply-to + (ignore-errors + (gnus-string-equal + (nth 1 (mail-extract-address-components from)) + (nth 1 (mail-extract-address-components reply-to))))) + (gnus-article-hide-header "reply-to"))))) ((eq elem 'date) (let ((date (message-fetch-field "date"))) (when (and date @@ -1923,7 +1924,8 @@ unfolded." (while (not (eobp)) (end-of-line) (when (>= (current-column) (min fill-column width)) - (narrow-to-region (min (1+ (point)) (point-max)) (gnus-point-at-bol)) + (narrow-to-region (min (1+ (point)) (point-max)) + (gnus-point-at-bol)) (let ((goback (point-marker))) (fill-paragraph nil) (goto-char (marker-position goback))) @@ -2033,7 +2035,7 @@ unfolded." ;; We display the face. (if (symbolp gnus-article-x-face-command) ;; The command is a lisp function, so we call it. - (if (gnus-functionp gnus-article-x-face-command) + (if (functionp gnus-article-x-face-command) (funcall gnus-article-x-face-command face) (error "%s is not a function" gnus-article-x-face-command)) ;; The command is a string, so we interpret the command @@ -2134,23 +2136,23 @@ If PROMPT (the prefix), prompt for a coding system to use." (article-narrow-to-head) (with-current-buffer gnus-original-article-buffer (goto-char (point-min))) - (while (re-search-forward "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" - nil t) + (while (re-search-forward + "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" nil t) (replace-match (save-match-data - (gnus-decode-newsgroups - ;; XXX how to use data in article buffer? - (with-current-buffer gnus-original-article-buffer - (re-search-forward - "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" - nil t) - (match-string 1)) - gnus-newsgroup-name method)) + (gnus-decode-newsgroups + ;; XXX how to use data in article buffer? + (with-current-buffer gnus-original-article-buffer + (re-search-forward + "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" + nil t) + (match-string 1)) + gnus-newsgroup-name method)) t t nil 1)) (goto-char (point-min)) (with-current-buffer gnus-original-article-buffer (goto-char (point-min))) - (while (re-search-forward "^Followup-To:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" - nil t) + (while (re-search-forward + "^Followup-To:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" nil t) (replace-match (save-match-data (gnus-decode-newsgroups ;; XXX how to use data in article buffer? @@ -2303,7 +2305,7 @@ If READ-CHARSET, ask for a coding system." (when entry (setq func (cdr entry))) (cond - ((gnus-functionp func) + ((functionp func) (funcall func)) (t (apply (car func) (cdr func)))))))))) @@ -2577,7 +2579,7 @@ Point is left at the beginning of the narrowed-to region." (< (- (point-max) (point)) limit)) (and (floatp limit) (< (count-lines (point) (point-max)) limit)) - (and (gnus-functionp limit) + (and (functionp limit) (funcall limit)) (and (stringp limit) (not (re-search-forward limit nil t)))) @@ -2779,7 +2781,7 @@ should replace the \"Date:\" one, or should be added below it." gnus-article-time-format) (error nil)) gnus-article-time-format))) - (if (gnus-functionp format) + (if (functionp format) (funcall format time) (concat "Date: " (format-time-string format time))))) ;; ISO 8601. @@ -3316,7 +3318,8 @@ If variable `gnus-use-long-file-name' is non-nil, it is ;; Don't verify multiple headers. (setq headers (mapconcat (lambda (header) (concat header ": " - (mail-fetch-field header) "\n")) + (mail-fetch-field header) + "\n")) (split-string (nth 1 items) ",") ""))) (delete-region (point-min) (point-max)) (insert "-----BEGIN PGP SIGNED MESSAGE-----\n\n") @@ -3818,10 +3821,12 @@ General format specifiers can also be used. See Info node (define-key map (cadr c) (car c))) map)) -(easy-menu-define gnus-mime-button-menu gnus-mime-button-map "MIME button menu." +(easy-menu-define + gnus-mime-button-menu gnus-mime-button-map "MIME button menu." `("MIME Part" ,@(mapcar (lambda (c) - (vector (caddr c) (car c) :enable t)) gnus-mime-button-commands))) + (vector (caddr c) (car c) :enable t)) + gnus-mime-button-commands))) (eval-when-compile (define-compiler-macro popup-menu (&whole form @@ -3909,9 +3914,7 @@ General format specifiers can also be used. See Info node (let ((mbl1 mml-buffer-list)) (setq mml-buffer-list mbl) (set (make-local-variable 'mml-buffer-list) mbl1)) - ;; LOCAL argument of add-hook differs between GNU Emacs - ;; and XEmacs. make-local-hook makes sure they are local. - (make-local-hook 'kill-buffer-hook) + (gnus-make-local-hook 'kill-buffer-hook) (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))) `(lambda (no-highlight) (let ((mail-parse-charset (or gnus-article-charset @@ -3936,77 +3939,78 @@ General format specifiers can also be used. See Info node Replace it with some information about the removed part." (interactive) (gnus-article-check-buffer) - (let* ((data (get-text-property (point) 'gnus-data)) - (handles gnus-article-mime-handles) - (none "(none)") - (description - (or - (mail-decode-encoded-word-string (or (mm-handle-description data) - none)))) - (filename - (or (mail-content-type-get (mm-handle-disposition data) 'filename) - none)) - (type (mm-handle-media-type data))) - (if (mm-multiple-handles gnus-article-mime-handles) - (error "This function is not implemented")) - (with-current-buffer (mm-handle-buffer data) - (let ((bsize (format "%s" (buffer-size)))) - (erase-buffer) - (insert - (concat - "<#part type=text/plain nofile=yes disposition=attachment" - " description=\"Deleted attachment (" bsize " Byte)\">" - ",----\n" - "| The following attachment has been deleted:\n" - "|\n" - "| Type: " type "\n" - "| Filename: " filename "\n" - "| Size (encoded): " bsize " Byte\n" - "| Description: " description "\n" - "`----\n" - "<#/part>")) - (setcdr data - (cdr (mm-make-handle nil `("text/plain")))))) - (set-buffer gnus-summary-buffer) - ;; FIXME: maybe some of the following code (borrowed from - ;; `gnus-mime-save-part-and-strip') isn't necessary? - (gnus-article-edit-article - `(lambda () - (erase-buffer) - (let ((mail-parse-charset (or gnus-article-charset - ',gnus-newsgroup-charset)) - (mail-parse-ignored-charsets - (or gnus-article-ignored-charsets - ',gnus-newsgroup-ignored-charsets)) - (mbl mml-buffer-list)) - (setq mml-buffer-list nil) - (insert-buffer gnus-original-article-buffer) - (mime-to-mml ',handles) - (setq gnus-article-mime-handles nil) - (let ((mbl1 mml-buffer-list)) - (setq mml-buffer-list mbl) - (set (make-local-variable 'mml-buffer-list) mbl1)) - ;; LOCAL argument of add-hook differs between GNU Emacs - ;; and XEmacs. make-local-hook makes sure they are local. - (make-local-hook 'kill-buffer-hook) - (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))) - `(lambda (no-highlight) - (let ((mail-parse-charset (or gnus-article-charset - ',gnus-newsgroup-charset)) - (message-options message-options) - (message-options-set-recipient) - (mail-parse-ignored-charsets - (or gnus-article-ignored-charsets - ',gnus-newsgroup-ignored-charsets))) - (mml-to-mime) - (mml-destroy-buffers) - (remove-hook 'kill-buffer-hook - 'mml-destroy-buffers t) - (kill-local-variable 'mml-buffer-list)) - (gnus-summary-edit-article-done - ,(or (mail-header-references gnus-current-headers) "") - ,(gnus-group-read-only-p) - ,gnus-summary-buffer no-highlight)))) + (unless (and gnus-novice-user + (not (gnus-yes-or-no-p + "Really delete attachment forever? "))) + (let* ((data (get-text-property (point) 'gnus-data)) + (handles gnus-article-mime-handles) + (none "(none)") + (description + (or + (mail-decode-encoded-word-string (or (mm-handle-description data) + none)))) + (filename + (or (mail-content-type-get (mm-handle-disposition data) 'filename) + none)) + (type (mm-handle-media-type data))) + (if (mm-multiple-handles gnus-article-mime-handles) + (error "This function is not implemented")) + (with-current-buffer (mm-handle-buffer data) + (let ((bsize (format "%s" (buffer-size)))) + (erase-buffer) + (insert + (concat + "<#part type=text/plain nofile=yes disposition=attachment" + " description=\"Deleted attachment (" bsize " Byte)\">" + ",----\n" + "| The following attachment has been deleted:\n" + "|\n" + "| Type: " type "\n" + "| Filename: " filename "\n" + "| Size (encoded): " bsize " Byte\n" + "| Description: " description "\n" + "`----\n" + "<#/part>")) + (setcdr data + (cdr (mm-make-handle nil `("text/plain")))))) + (set-buffer gnus-summary-buffer) + ;; FIXME: maybe some of the following code (borrowed from + ;; `gnus-mime-save-part-and-strip') isn't necessary? + (gnus-article-edit-article + `(lambda () + (erase-buffer) + (let ((mail-parse-charset (or gnus-article-charset + ',gnus-newsgroup-charset)) + (mail-parse-ignored-charsets + (or gnus-article-ignored-charsets + ',gnus-newsgroup-ignored-charsets)) + (mbl mml-buffer-list)) + (setq mml-buffer-list nil) + (insert-buffer gnus-original-article-buffer) + (mime-to-mml ',handles) + (setq gnus-article-mime-handles nil) + (let ((mbl1 mml-buffer-list)) + (setq mml-buffer-list mbl) + (set (make-local-variable 'mml-buffer-list) mbl1)) + (gnus-make-local-hook 'kill-buffer-hook) + (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))) + `(lambda (no-highlight) + (let ((mail-parse-charset (or gnus-article-charset + ',gnus-newsgroup-charset)) + (message-options message-options) + (message-options-set-recipient) + (mail-parse-ignored-charsets + (or gnus-article-ignored-charsets + ',gnus-newsgroup-ignored-charsets))) + (mml-to-mime) + (mml-destroy-buffers) + (remove-hook 'kill-buffer-hook + 'mml-destroy-buffers t) + (kill-local-variable 'mml-buffer-list)) + (gnus-summary-edit-article-done + ,(or (mail-header-references gnus-current-headers) "") + ,(gnus-group-read-only-p) + ,gnus-summary-buffer no-highlight))))) ;; Not in `gnus-mime-save-part-and-strip': (gnus-article-edit-done) (gnus-summary-expand-window) @@ -4895,29 +4899,34 @@ If end of article, return non-nil. Otherwise return nil. Argument LINES specifies lines to be scrolled up." (interactive "p") (move-to-window-line -1) - (if (and (not gnus-article-over-scroll) - (save-excursion - (end-of-line) - (and (pos-visible-in-window-p) ;Not continuation line. - (>= (1+ (point)) (point-max))))) ;Allow for trailing newline. + (if (save-excursion + (end-of-line) + (and (pos-visible-in-window-p) ;Not continuation line. + (>= (1+ (point)) (point-max)))) ;Allow for trailing newline. ;; Nothing in this page. (if (or (not gnus-page-broken) (save-excursion (save-restriction (widen) (forward-line 1) (eobp)))) ;Real end-of-buffer? - t ;Nothing more. + (progn + (when gnus-article-over-scroll + (gnus-article-next-page-1 lines)) + t) ;Nothing more. (gnus-narrow-to-page 1) ;Go to next page. nil) ;; More in this page. - (let ((scroll-in-place nil)) - (condition-case () - (scroll-up lines) - (end-of-buffer - ;; Long lines may cause an end-of-buffer error. - (goto-char (point-max))))) - (move-to-window-line 0) + (gnus-article-next-page-1 lines) nil)) +(defun gnus-article-next-page-1 (lines) + (let ((scroll-in-place nil)) + (condition-case () + (scroll-up lines) + (end-of-buffer + ;; Long lines may cause an end-of-buffer error. + (goto-char (point-max))))) + (move-to-window-line 0)) + (defun gnus-article-prev-page (&optional lines) "Show previous page of current article. Argument LINES specifies lines to be scrolled down." @@ -5564,8 +5573,8 @@ groups." (defcustom gnus-button-url-regexp (if (string-match "[[:digit:]]" "1") ;; support POSIX? - "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~%&*+\\/:;.,[:word:]]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)" - "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)\\)") + "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~%&*+\\/:;.,[:word:]]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)" + "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)\\)") "Regular expression that matches URLs." :group 'gnus-article-buttons :type 'regexp) @@ -5929,10 +5938,10 @@ positives are possible." 0 (>= gnus-button-message-level 0) gnus-button-handle-news 3) ("\\b\\(nntp\\|news\\):\\([^>\n\t ]*@[^>)!;:,\n\t ]*\\)" 0 t gnus-button-handle-news 2) - ("\\(\\b<\\(url:[>\n\t ]*\\)?news:[>\n\t ]*\\(//\\)?\\([^>\n\t ]*\\)>\\)" - 1 (>= gnus-button-message-level 0) gnus-button-fetch-group 4) - ("\\bnews:\\(//\\)?\\([^'\">\n\t ]+\\)" - 0 (>= gnus-button-message-level 0) gnus-button-fetch-group 2) + ("\\(\\b<\\(url:[>\n\t ]*\\)?\\(nntp\\|news\\):[>\n\t ]*\\(//\\)?\\([^>\n\t ]*\\)>\\)" + 1 (>= gnus-button-message-level 0) gnus-button-fetch-group 5) + ("\\b\\(nntp\\|news\\):\\(//\\)?\\([^'\">\n\t ]+\\)" + 0 (>= gnus-button-message-level 0) gnus-button-fetch-group 3) ("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2 (>= gnus-button-message-level 0) gnus-button-message-id 3) ("\\( \n\t]+\\)>" @@ -6058,8 +6067,8 @@ variable it the real callback function." 0 (>= gnus-button-browse-level 0) browse-url 0) ("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?]+\\)" 0 (>= gnus-button-message-level 0) gnus-url-mailto 1) - ("^[^:]+:" "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)" - 1 (>= gnus-button-message-level 0) gnus-button-message-id 3)) + ("^[^:]+:" "\\(<\\(url: \\)?\\(nntp\\|news\\):\\([^>\n ]*\\)>\\)" + 1 (>= gnus-button-message-level 0) gnus-button-message-id 4)) "*Alist of headers and regexps to match buttons in article heads. This alist is very similar to `gnus-button-alist', except that each diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index 6431c81..7e10353 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -33,6 +33,8 @@ (require 'gnus-range) (require 'gnus-start) (eval-when-compile + (if (not (fboundp 'gnus-agent-load-alist)) + (defun gnus-agent-load-alist (group))) (require 'gnus-sum)) (defcustom gnus-cache-active-file @@ -331,8 +333,10 @@ Returns the list of articles entered." (when (gnus-cache-possibly-enter-article gnus-newsgroup-name article nil nil nil t) + (setq gnus-newsgroup-undownloaded (delq article gnus-newsgroup-undownloaded)) (push article out)) (gnus-message 2 "Can't cache article %d" article)) + (gnus-summary-update-download-mark article) (gnus-summary-update-secondary-mark article)) (gnus-summary-next-subject 1) (gnus-summary-position-point) @@ -350,7 +354,14 @@ Returns the list of articles removed." (setq article (pop articles)) (gnus-summary-remove-process-mark article) (when (gnus-cache-possibly-remove-article article nil nil nil t) + (when gnus-newsgroup-agentized + (let ((alist (gnus-agent-load-alist gnus-newsgroup-name))) + (unless (cdr (assoc article alist)) + (setq gnus-newsgroup-undownloaded + (gnus-add-to-sorted-list + gnus-newsgroup-undownloaded article))))) (push article out)) + (gnus-summary-update-download-mark article) (gnus-summary-update-secondary-mark article)) (gnus-summary-next-subject 1) (gnus-summary-position-point) diff --git a/lisp/gnus-diary.el b/lisp/gnus-diary.el index 51c8500..c57c0f6 100644 --- a/lisp/gnus-diary.el +++ b/lisp/gnus-diary.el @@ -153,7 +153,7 @@ There are currently two built-in format functions: (if (null delay) "maintenant!" ;; Keep only a precision of two degrees - (and (> (length delay) 1) (setf (nthcdr 2 delay) nil)) + (and (> (length delay) 1) (setcdr (cdr delay) nil)) (concat (if past "il y a " "dans ") (let ((str "") del) @@ -183,7 +183,7 @@ There are currently two built-in format functions: (if (null delay) "now!" ;; Keep only a precision of two degrees - (and (> (length delay) 1) (setf (nthcdr 2 delay) nil)) + (and (> (length delay) 1) (setcdr (cdr delay) nil)) (concat (unless past "in ") (let ((str "") del) diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 58e5cbb..826431c 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -100,18 +100,18 @@ ;; [Note] Now there are three kinds of mule implementations, ;; original MULE, XEmacs/mule and Emacs 20+ including - ;; MULE features. Unfortunately these API are different. In - ;; particular, Emacs (including original MULE) and XEmacs are + ;; MULE features. Unfortunately these APIs are different. In + ;; particular, Emacs (including original Mule) and XEmacs are ;; quite different. However, this version of Gnus doesn't support ;; anything other than XEmacs 20+ and Emacs 20.3+. ;; Predicates to check are following: - ;; (boundp 'MULE) is t only if MULE (original; anything older than + ;; (boundp 'MULE) is t only if Mule (original; anything older than ;; Mule 2.3) is running. - ;; (featurep 'mule) is t when every mule variants are running. + ;; (featurep 'mule) is t when other mule variants are running. ;; It is possible to detect XEmacs/mule by (featurep 'mule) and - ;; checking `emacs-version'. In this case, the implementation for + ;; (featurep 'xemacs). In this case, the implementation for ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule. (defvar gnus-summary-display-table nil diff --git a/lisp/gnus-fun.el b/lisp/gnus-fun.el index 2352372..8791640 100644 --- a/lisp/gnus-fun.el +++ b/lisp/gnus-fun.el @@ -1,4 +1,4 @@ -;;; gnus-fun.el --- various frivoluos extension functions to Gnus +;;; gnus-fun.el --- various frivolous extension functions to Gnus ;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -25,6 +25,10 @@ ;;; Code: +(eval-when-compile + (require 'cl) + (require 'mm-util)) + (defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory) "*Directory where X-Face PBM files are stored." :group 'gnus-fun @@ -107,18 +111,19 @@ Output to the current buffer, replace text, and don't mingle error." (while (and (not done) (> quant 1)) (setq attempt - (gnus-shell-command-to-string - (format gnus-convert-image-to-face-command - (shell-quote-argument (expand-file-name file)) - quant))) - (if (> (length attempt) 740) + (let ((coding-system-for-read 'binary)) + (gnus-shell-command-to-string + (format gnus-convert-image-to-face-command + (shell-quote-argument (expand-file-name file)) + quant)))) + (if (> (length attempt) 726) (progn (setq quant (- quant 2)) (message "Length %d; trying quant %d" (length attempt) quant)) (setq done t))) (if done - (mm-with-unibyte-buffer + (mm-with-unibyte-buffer (insert attempt) (gnus-face-encode)) nil)))) @@ -147,14 +152,14 @@ The PNG is returned as a string." (base64-decode-region (point-min) (point-max))) (buffer-string))) -;;;#autoload +;;;###autoload (defun gnus-convert-png-to-face (file) "Convert FILE to a Face. FILE should be a PNG file that's 48x48 and smaller than or equal to -740 bytes." +726 bytes." (mm-with-unibyte-buffer (insert-file-contents file) - (when (> (buffer-size) 740) + (when (> (buffer-size) 726) (error "The file is %d bytes long, which is too long" (buffer-size))) (gnus-face-encode))) diff --git a/lisp/gnus-gl.el b/lisp/gnus-gl.el index 689e995..1df6838 100644 --- a/lisp/gnus-gl.el +++ b/lisp/gnus-gl.el @@ -810,9 +810,9 @@ If prefix argument ALL is non-nil, all articles are marked as read." (if (null arg) (not gnus-grouplens-mode) (> (prefix-numeric-value arg) 0))) (when gnus-grouplens-mode - (make-local-hook 'gnus-select-article-hook) + (gnus-make-local-hook 'gnus-select-article-hook) (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local) - (make-local-hook 'gnus-exit-group-hook) + (gnus-make-local-hook 'gnus-exit-group-hook) (add-hook 'gnus-exit-group-hook 'bbb-exit-group nil 'local) (make-local-variable 'gnus-score-find-score-files-function) diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 818cbe9..e6bbddc 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -420,7 +420,7 @@ For example: (defcustom gnus-group-name-charset-group-alist (if (or (and (fboundp 'find-coding-system) (find-coding-system 'utf-8)) - (and (fboundp 'coding-system-p) (coding-system-p 'utf-8))) + (mm-coding-system-p 'utf-8)) '((".*" . utf-8)) nil) "Alist of group regexp and the charset for group names. @@ -1091,6 +1091,7 @@ The following commands are available: result))) (defun gnus-group-name-decode (string charset) + ;; Fixme: Don't decode in unibyte mode. (if (and string charset (featurep 'mule)) (mm-decode-coding-string string charset) string)) @@ -1947,6 +1948,25 @@ Returns whether the fetching was successful or not." (defvar gnus-ephemeral-group-server 0) +(defcustom gnus-large-ephemeral-newsgroup 200 + "The number of articles which indicates a large ephemeral newsgroup. +Same as `gnus-large-newsgroup', but only used for ephemeral newsgroups. + +If the number of articles in a newsgroup is greater than this value, +confirmation is required for selecting the newsgroup. If it is nil, no +confirmation is required." + :group 'gnus-group-select + :type '(choice (const :tag "No limit" nil) + integer)) + +(defcustom gnus-fetch-old-ephemeral-headers nil + "Same as `gnus-fetch-old-headers', but only used for ephemeral newsgroups." + :group 'gnus-thread + :type '(choice (const :tag "off" nil) + (const some) + number + (sexp :menu-tag "other" t))) + ;; Enter a group that is not in the group buffer. Non-nil is returned ;; if selection was successful. (defun gnus-group-read-ephemeral-group (group method &optional activate @@ -1996,7 +2016,10 @@ Return the name of the group if selection was successful." (if request-only group (condition-case () - (when (gnus-group-read-group t t group select-articles) + (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) + (gnus-fetch-old-headers + gnus-fetch-old-ephemeral-headers)) + (gnus-group-read-group t t group select-articles)) group) ;;(error nil) (quit @@ -2244,6 +2267,8 @@ ADDRESS." (lambda (group) (gnus-group-delete-group group nil t)))))) +(eval-when-compile (defvar gnus-cache-active-altered)) + (defun gnus-group-delete-group (group &optional force no-prompt) "Delete the current group. Only meaningful with editable groups. If FORCE (the prefix) is non-nil, all the articles in the group will @@ -2271,10 +2296,10 @@ doing the deletion." (gnus-group-goto-group group) (gnus-group-kill-group 1 t) (gnus-sethash group nil gnus-active-hashtb) - (when (and (boundp 'gnus-cache-active-hashtb) - gnus-cache-active-hashtb) - (gnus-sethash group nil gnus-cache-active-hashtb) - (setq gnus-cache-active-altered t)) + (if (boundp 'gnus-cache-active-hashtb) + (when gnus-cache-active-hashtb + (gnus-sethash group nil gnus-cache-active-hashtb) + (setq gnus-cache-active-altered t))) t)) (gnus-group-position-point))) diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index 41965a9..b7329bd 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -598,7 +598,7 @@ COMMAND must be a lisp expression or a string representing a key sequence." (setq did-kill (string-match regexp value))) (cond ((stringp form) ;Keyboard macro. (execute-kbd-macro form)) - ((gnus-functionp form) + ((functionp form) (funcall form)) (t (eval form))))) @@ -617,7 +617,7 @@ COMMAND must be a lisp expression or a string representing a key sequence." (setq did-kill (re-search-forward regexp nil t))) (cond ((stringp form) ;Keyboard macro. (execute-kbd-macro form)) - ((gnus-functionp form) + ((functionp form) (funcall form)) (t (eval form))))))) diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index 84b1701..5f90549 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -146,9 +146,6 @@ See Info node `(gnus)Posting Styles'." :group 'gnus-message :type 'boolean) -(defvar gnus-inews-mark-gcc-as-read nil - "Obsolete variable. Use `gnus-gcc-mark-as-read' instead.") - (make-obsolete-variable 'gnus-inews-mark-gcc-as-read 'gnus-gcc-mark-as-read) @@ -440,10 +437,8 @@ Thank you for your help in stamping out bugs. (let ((mbl1 mml-buffer-list)) (setq mml-buffer-list mbl) ;; Global value (set (make-local-variable 'mml-buffer-list) mbl1);; Local value - ;; LOCAL argument of add-hook differs between GNU Emacs - ;; and XEmacs. make-local-hook makes sure they are local. - (make-local-hook 'kill-buffer-hook) - (make-local-hook 'change-major-mode-hook) + (gnus-make-local-hook 'kill-buffer-hook) + (gnus-make-local-hook 'change-major-mode-hook) (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t) (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)) (mml-destroy-buffers) @@ -517,7 +512,7 @@ Gcc: header for archiving purposes." (while (setq elem (pop alist)) (when (or (and (stringp (car elem)) (string-match (car elem) group)) - (and (gnus-functionp (car elem)) + (and (functionp (car elem)) (funcall (car elem) group)) (and (symbolp (car elem)) (symbol-value (car elem)))) @@ -525,11 +520,11 @@ Gcc: header for archiving purposes." (defun gnus-inews-add-send-actions (winconf buffer article &optional config yanked) - (make-local-hook 'message-sent-hook) + (gnus-make-local-hook 'message-sent-hook) (add-hook 'message-sent-hook (if gnus-agent 'gnus-agent-possibly-do-gcc 'gnus-inews-do-gcc) nil t) (when gnus-agent - (make-local-hook 'message-header-hook) + (gnus-make-local-hook 'message-header-hook) (add-hook 'message-header-hook 'gnus-agent-possibly-save-gcc nil t)) (setq message-post-method `(lambda (arg) @@ -691,7 +686,12 @@ network. The corresponding backend must have a 'request-post method." gnus-newsgroup-name)) ;; #### see comment in gnus-setup-message -- drv (gnus-setup-message 'message - (message-news (gnus-group-real-name gnus-newsgroup-name)))) + (progn + (message-news (gnus-group-real-name gnus-newsgroup-name)) + (set (make-local-variable 'gnus-discouraged-post-methods) + (delq + (car (gnus-find-method-for-group gnus-newsgroup-name)) + (copy-sequence gnus-discouraged-post-methods)))))) (save-excursion (set-buffer buffer) (setq gnus-newsgroup-name group))))) @@ -1204,7 +1204,8 @@ automatically." (defun gnus-summary-wide-reply-with-original (n) "Start composing a wide reply mail to the current message. -The original article will be yanked." +The original article will be yanked. +Uses the process/prefix convention." (interactive "P") (gnus-summary-reply-with-original n t)) @@ -1692,7 +1693,9 @@ this is a reply." ;; Gnus is not running? (gnus-alive-p) (or gnus-gcc-mark-as-read - gnus-inews-mark-gcc-as-read)) + (and + (boundp 'gnus-inews-mark-gcc-as-read) + (symbol-value 'gnus-inews-mark-gcc-as-read)))) (gnus-group-mark-article-read group (cdr group-art))) (kill-buffer (current-buffer))))))))) @@ -1703,7 +1706,7 @@ this is a reply." (message-narrow-to-headers) (let* ((group gnus-outgoing-message-group) (gcc (cond - ((gnus-functionp group) + ((functionp group) (funcall group)) ((or (stringp group) (list group)) group)))) @@ -1744,7 +1747,7 @@ this is a reply." ((and (listp var) (stringp (car var))) ;; A list of groups. var) - ((gnus-functionp var) + ((functionp var) ;; A function. (funcall var group)) (t @@ -1757,7 +1760,7 @@ this is a reply." ;; Regexp. (when (string-match (caar var) group) (cdar var))) - ((gnus-functionp (car var)) + ((functionp (car var)) ;; Function. (funcall (car var) group)) (t @@ -1842,9 +1845,9 @@ this is a reply." (and header (string-match (pop style) header)))))) ((or (symbolp match) - (gnus-functionp match)) + (functionp match)) (cond - ((gnus-functionp match) + ((functionp match) ;; Function to be called. (funcall match)) ((boundp match) @@ -1882,8 +1885,8 @@ this is a reply." ((stringp value) value) ((or (symbolp value) - (gnus-functionp value)) - (cond ((gnus-functionp value) + (functionp value)) + (cond ((functionp value) (funcall value)) ((boundp value) (symbol-value value)))) @@ -1911,8 +1914,7 @@ this is a reply." (setq name (assq 'name results) address (assq 'address results)) (setq results (delq name (delq address results))) - ;; make-local-hook is not obsolete in Emacs 20 or XEmacs. - (make-local-hook 'message-setup-hook) + (gnus-make-local-hook 'message-setup-hook) (setq results (sort results (lambda (x y) (string-lessp (car x) (car y))))) (dolist (result results) diff --git a/lisp/gnus-registry.el b/lisp/gnus-registry.el index 630b555..9d16500 100644 --- a/lisp/gnus-registry.el +++ b/lisp/gnus-registry.el @@ -33,17 +33,21 @@ (require 'gnus-sum) (require 'nnmail) +(defgroup gnus-registry nil + "The Gnus registry." + :group 'gnus) + (defvar gnus-registry-hashtb nil "*The article registry by Message ID.") -(setq gnus-registry-hashtb (make-hash-table - :size 4096 - :test 'equal)) ; we test message ID strings equality -;; sample data-header -;; (defvar tzz-header '(49 "Re[2]: good news" "\"Jonathan Pryor\" " "Mon, 17 Feb 2003 10:41:46 +-0800" "<88288020@dytqq>" "" 896 18 "lockgroove.bwh.harvard.edu spam.asian:49" nil)) +(defvar gnus-registry-headers-hashtb nil + "*The article header registry by Message ID.") -;; (maphash (lambda (key value) (message "key: %s value: %s" key value)) gnus-registry-hashtb) -;; (clrhash gnus-registry-hashtb) +(defcustom gnus-registry-unfollowed-groups '("delayed" "drafts" "queue") + "List of groups that gnus-registry-split-fancy-with-parent won't follow. +The group names are matched, they don't have to be fully qualified." + :group 'gnus-registry + :type '(repeat string)) ;; Function(s) missing in Emacs 20 (when (memq nil (mapcar 'fboundp '(puthash))) @@ -53,10 +57,14 @@ (defalias 'puthash 'cl-puthash))) (defun gnus-registry-translate-to-alist () - (setq gnus-registry-alist (hashtable-to-alist gnus-registry-hashtb))) + (setq gnus-registry-alist (hashtable-to-alist gnus-registry-hashtb)) + (setq gnus-registry-headers-alist (hashtable-to-alist + gnus-registry-headers-hashtb))) (defun gnus-registry-translate-from-alist () - (setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist))) + (setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist)) + (setq gnus-registry-headers-hashtb (alist-to-hashtable + gnus-registry-headers-alist))) (defun alist-to-hashtable (alist) "Build a hashtable from the values in ALIST." @@ -75,32 +83,99 @@ (maphash (lambda (key value) (setq list (cons (cons key value) list))) - hash))) + hash) + list)) (defun gnus-register-action (action data-header from &optional to method) (let* ((id (mail-header-id data-header)) - (hash-entry (gethash id gnus-registry-hashtb))) + (from (gnus-group-guess-full-name from)) + (to (if to (gnus-group-guess-full-name to) nil)) + (to-name (if to to "the Bit Bucket"))) (gnus-message 5 "Registry: article %s %s from %s to %s" - id - (if method "respooling" "going") - (gnus-group-guess-full-name from) - (if to (gnus-group-guess-full-name to) "the Bit Bucket")) - (unless hash-entry - (setq hash-entry (puthash id (list data-header) gnus-registry-hashtb))) - (puthash id (cons (list action from to method) - (gethash id gnus-registry-hashtb)) gnus-registry-hashtb))) + id + (if method "respooling" "going") + from + to) + (unless (gethash id gnus-registry-headers-hashtb) + (puthash id (list data-header) gnus-registry-headers-hashtb)) + (puthash id (cons (list action from to) + (gethash id gnus-registry-hashtb)) + gnus-registry-hashtb))) (defun gnus-register-spool-action (id group) - (gnus-message 5 "Registry: article %s spooled to %s" - id - (gnus-group-prefixed-name - group - gnus-internal-registry-spool-current-method - t)) - (puthash id (cons (list 'spool nil group nil) - (gethash id gnus-registry-hashtb)) gnus-registry-hashtb)) - -(add-hook 'gnus-summary-article-move-hook 'gnus-register-action) ; also does copy, respool, and crosspost + ;; do not process the draft IDs +; (unless (string-match "totally-fudged-out-message-id" id) + (let ((group (gnus-group-guess-full-name group))) + (when (string-match "\r$" id) + (setq id (substring id 0 -1))) + (gnus-message 5 "Registry: article %s spooled to %s" + id + group) + (puthash id (cons (list 'spool nil group) + (gethash id gnus-registry-hashtb)) + gnus-registry-hashtb))) +;) + +;; Function for nn{mail|imap}-split-fancy: look up all references in +;; the cache and if a match is found, return that group. +(defun gnus-registry-split-fancy-with-parent () + "Split this message into the same group as its parent. The parent +is obtained from the registry. This function can be used as an entry +in `nnmail-split-fancy' or `nnimap-split-fancy', for example like +this: (: gnus-registry-split-fancy-with-parent) + +For a message to be split, it looks for the parent message in the +References or In-Reply-To header and then looks in the registry to +see which group that message was put in. This group is returned. + +See the Info node `(gnus)Fancy Mail Splitting' for more details." + (let ((refstr (or (message-fetch-field "references") + (message-fetch-field "in-reply-to"))) + (references nil) + (res nil)) + (when refstr + (setq references (nreverse (gnus-split-references refstr))) + (mapcar (lambda (x) + (setq res (or (gnus-registry-fetch-group x) res)) + (when (or (gnus-registry-grep-in-list + res + gnus-registry-unfollowed-groups) + (gnus-registry-grep-in-list + res + nnmail-split-fancy-with-parent-ignore-groups)) + (setq res nil))) + references) + res))) + +(defun gnus-registry-grep-in-list (word list) + (memq nil + (mapcar 'not + (mapcar + (lambda (x) + (string-match x word)) + list)))) + + +(defun gnus-registry-fetch-group (id) + "Get the group of a message, based on the message ID. +Returns the first place where the trail finds a spool action." + (let ((trail (gethash id gnus-registry-hashtb))) + (dolist (crumb trail) + (let ((action (nth 0 crumb)) + (from (nth 1 crumb)) + (to (nth 2 crumb))) + (when (eq action 'spool) + (return to)))))) + +(defun gnus-registry-clear () + "Clear the Gnus registry." + (interactive) + (setq gnus-registry-alist nil + gnus-registry-headers-alist nil) + (gnus-registry-translate-from-alist)) + +; also does copy, respool, and crosspost +(add-hook 'gnus-summary-article-move-hook 'gnus-register-action) (add-hook 'gnus-summary-article-delete-hook 'gnus-register-action) (add-hook 'gnus-summary-article-expire-hook 'gnus-register-action) (add-hook 'nnmail-spool-hook 'gnus-register-spool-action) diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 3b37a0f..b2188ed 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -2776,7 +2776,7 @@ The list is determined from the variable `gnus-score-file-alist'." ;; Go through all the functions for finding score files (or actual ;; scores) and add them to a list. (while funcs - (when (gnus-functionp (car funcs)) + (when (functionp (car funcs)) (setq score-files (append score-files (nreverse (funcall (car funcs) group))))) @@ -2879,7 +2879,7 @@ If ADAPT, return the home adaptive file instead." ((stringp elem) elem) ;; Function. - ((gnus-functionp elem) + ((functionp elem) (funcall elem group)) ;; Regexp-file cons. ((consp elem) diff --git a/lisp/gnus-sieve.el b/lisp/gnus-sieve.el index d4e557c..b11ade5 100644 --- a/lisp/gnus-sieve.el +++ b/lisp/gnus-sieve.el @@ -4,7 +4,7 @@ ;; Author: NAGY Andras , ;; Simon Josefsson -;; This file is not part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -105,10 +105,11 @@ See the documentation for these variables and functions for details." (require 'sieve) (find-file gnus-sieve-file) (goto-char (point-min)) - (if (re-search-forward - (concat (regexp-quote gnus-sieve-region-start) "\\(.\\|\n\\)*" - (regexp-quote gnus-sieve-region-end)) nil t) - (delete-region (match-beginning 0) (match-end 0)) + (if (re-search-forward (regexp-quote gnus-sieve-region-start) nil t) + (delete-region (match-end 0) + (or (re-search-forward (regexp-quote + gnus-sieve-region-end) nil t) + (point))) (insert sieve-template)) (insert gnus-sieve-region-start (gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost) diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index 77596ea..cf3d24c 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -678,7 +678,7 @@ The following commands are available: ["Subscribe" gnus-browse-unsubscribe-current-group t] ["Read" gnus-browse-read-group t] ["Select" gnus-browse-select-group t] - ["Describe" gnus-browse-describe-groups t] + ["Describe" gnus-browse-describe-group t] ["Next" gnus-browse-next-group t] ["Prev" gnus-browse-prev-group t] ["Exit" gnus-browse-exit t])) @@ -831,7 +831,7 @@ buffer. (if (or (not (gnus-get-info group)) (gnus-ephemeral-group-p group)) (unless (gnus-group-read-ephemeral-group - (gnus-group-real-name group) gnus-browse-current-method nil + group gnus-browse-current-method nil (cons (current-buffer) 'browse)) (error "Couldn't enter %s" group)) (unless (gnus-group-read-group nil no-article group) @@ -876,10 +876,9 @@ buffer. (beginning-of-line) (let ((name (get-text-property (point) 'gnus-group))) (when (re-search-forward ": \\(.*\\)$" (gnus-point-at-eol) t) - (gnus-group-prefixed-name - (or name - (match-string-no-properties 1)) - gnus-browse-current-method))))) + (concat (gnus-method-to-server-name gnus-browse-current-method) ":" + (or name + (match-string-no-properties 1))))))) (defun gnus-browse-describe-group (group) "Describe the current group." diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index c2d88f6..8649ba7 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -32,7 +32,7 @@ (require 'gnus-spec) (require 'gnus-range) (require 'gnus-util) -(require 'message) +(autoload 'message-make-date "message") (eval-when-compile (require 'cl)) (defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc") @@ -1013,7 +1013,7 @@ If LEVEL is non-nil, the news will be set up at level LEVEL." "Call METHOD to subscribe GROUP. If no function returns `non-nil', call `gnus-subscribe-zombies'." (unless (cond - ((gnus-functionp method) + ((functionp method) (funcall method group)) ((listp method) (catch 'found @@ -2884,6 +2884,7 @@ If FORCE is non-nil, the .newsrc file is read." (or (gnus-group-name-charset method name) (gnus-parameter-charset name) gnus-default-charset))) + ;; Fixme: Don't decode in unibyte mode. (when (and str charset (featurep 'mule)) (setq str (mm-decode-coding-string str charset))) (set group str))) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index d83f7d4..b95fdfe 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1327,7 +1327,7 @@ This list will always be a subset of gnus-newsgroup-undownloaded.") (defvar gnus-article-before-search nil) -(defconst gnus-summary-local-variables +(defvar gnus-summary-local-variables '(gnus-newsgroup-name gnus-newsgroup-begin gnus-newsgroup-end gnus-newsgroup-last-rmail gnus-newsgroup-last-mail @@ -2134,9 +2134,9 @@ increase the score of each group you read." ,@(gnus-summary-menu-split (mapcar (lambda (cs) - ;; Since easymenu under FSF Emacs doesn't allow lambda - ;; forms for menu commands, we should provide intern'ed - ;; function symbols. + ;; Since easymenu under Emacs doesn't allow + ;; lambda forms for menu commands, we should + ;; provide intern'ed function symbols. (let ((command (intern (format "\ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) (fset command @@ -2678,7 +2678,7 @@ The following commands are available: (make-local-variable 'gnus-summary-dummy-line-format) (make-local-variable 'gnus-summary-dummy-line-format-spec) (make-local-variable 'gnus-summary-mark-positions) - (make-local-hook 'pre-command-hook) + (gnus-make-local-hook 'pre-command-hook) (add-hook 'pre-command-hook 'gnus-set-global-variables nil t) (gnus-run-hooks 'gnus-summary-mode-hook) (turn-on-gnus-mailing-list-mode) @@ -3616,7 +3616,7 @@ If NO-DISPLAY, don't generate a summary buffer." ((eq gnus-auto-select-subject 'first) ;; Do nothing. ) - ((gnus-functionp gnus-auto-select-subject) + ((functionp gnus-auto-select-subject) (funcall gnus-auto-select-subject)))) (defun gnus-summary-prepare () @@ -4567,6 +4567,11 @@ Unscored articles will be counted as having a score of zero." If nil, use subject instead." :type 'string :group 'gnus-thread) +(defcustom gnus-sum-thread-tree-false-root "> " + "With %B spec, used for a false root of a thread. +If nil, use subject instead." + :type 'string + :group 'gnus-thread) (defcustom gnus-sum-thread-tree-single-indent "" "With %B spec, used for a thread with just one message. If nil, use subject instead." @@ -4837,9 +4842,12 @@ or a straight list of headers." (cond ((not gnus-show-threads) "") ((zerop gnus-tmp-level) - (if (cdar thread) - (or gnus-sum-thread-tree-root subject) - (or gnus-sum-thread-tree-single-indent subject))) + (cond ((cdar thread) + (or gnus-sum-thread-tree-root subject)) + (gnus-tmp-new-adopts + (or gnus-sum-thread-tree-false-root subject)) + (t + (or gnus-sum-thread-tree-single-indent subject)))) (t (concat (apply 'concat (mapcar (lambda (item) @@ -4870,7 +4878,7 @@ or a straight list of headers." (when (nth 1 thread) (push (list (max 0 gnus-tmp-level) - (copy-list tree-stack) + (copy-sequence tree-stack) (nthcdr 1 thread)) stack)) (push (if (nth 1 thread) 1 0) tree-stack) @@ -8533,8 +8541,8 @@ If ARG (the prefix) is a number, show the article with the charset defined in `gnus-summary-show-article-charset-alist', or the charset input. If ARG (the prefix) is non-nil and not a number, show the raw article -without any article massaging functions being run. Normally, the key strokes -are `C-u g'." +without any article massaging functions being run. Normally, the key +strokes are `C-u g'." (interactive "P") (cond ((numberp arg) @@ -9200,9 +9208,13 @@ deleted forever, right now." This command actually deletes articles. This is not a marking command. The article will disappear forever from your life, never to return. + If N is negative, delete backwards. If N is nil and articles have been marked with the process mark, -delete these instead." +delete these instead. + +If `gnus-novice-user' is non-nil you will be asked for +confirmation before the articles are deleted." (interactive "P") (unless (gnus-check-backend-function 'request-expire-articles gnus-newsgroup-name) @@ -9298,7 +9310,7 @@ groups." (let ((mbl1 mml-buffer-list)) (setq mml-buffer-list mbl) (set (make-local-variable 'mml-buffer-list) mbl1)) - (make-local-hook 'kill-buffer-hook) + (gnus-make-local-hook 'kill-buffer-hook) (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))) `(lambda (no-highlight) (let ((mail-parse-charset ',gnus-newsgroup-charset) @@ -10168,7 +10180,7 @@ If ALL is non-nil, also mark ticked and dormant articles as read." (gnus-summary-position-point)) (defun gnus-summary-catchup-from-here (&optional all) - "Mark all unticked articles after the current one as read. + "Mark all unticked articles after (and including) the current one as read. If ALL is non-nil, also mark ticked and dormant articles as read." (interactive "P") (save-excursion @@ -10385,7 +10397,7 @@ Returns nil if no thread was there to be shown." gnus-thread-hide-subtree) (gnus-summary-hide-all-threads (if (or (consp gnus-thread-hide-subtree) - (gnus-functionp gnus-thread-hide-subtree)) + (functionp gnus-thread-hide-subtree)) (gnus-make-predicate gnus-thread-hide-subtree) nil)))) @@ -10801,7 +10813,7 @@ save those articles instead." ;; Regular expression. (ignore-errors (re-search-forward match nil t))) - ((gnus-functionp match) + ((functionp match) ;; Function. (save-restriction (widen) @@ -11431,10 +11443,10 @@ returned." (mail-header-number h)) gnus-newsgroup-headers))) (setq gnus-newsgroup-headers - (merge 'list - gnus-newsgroup-headers - (gnus-fetch-headers articles) - 'gnus-article-sort-by-number)) + (gnus-merge 'list + gnus-newsgroup-headers + (gnus-fetch-headers articles) + 'gnus-article-sort-by-number)) ;; Suppress duplicates? (when gnus-suppress-duplicates (gnus-dup-suppress-articles)) @@ -11563,4 +11575,8 @@ If ALL is a number, fetch this number of articles." (run-hooks 'gnus-sum-load-hook) +;; Local Variables: +;; coding: iso-8859-1 +;; End: + ;;; gnus-sum.el ends here diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index 22ef257..708e779 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -1153,7 +1153,7 @@ articles in the topic and its subtopics." 'gnus-group-sort-topic) (setq gnus-group-change-level-function 'gnus-topic-change-level) (setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group) - (make-local-hook 'gnus-check-bogus-groups-hook) + (gnus-make-local-hook 'gnus-check-bogus-groups-hook) (add-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist nil 'local) (setq gnus-topology-checked-p nil) diff --git a/lisp/gnus-undo.el b/lisp/gnus-undo.el index 7dd333f..cbd506a 100644 --- a/lisp/gnus-undo.el +++ b/lisp/gnus-undo.el @@ -114,7 +114,7 @@ (when (gnus-visual-p 'undo-menu 'menu) (gnus-undo-make-menu-bar)) (gnus-add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map) - (make-local-hook 'post-command-hook) + (gnus-make-local-hook 'post-command-hook) (add-hook 'post-command-hook 'gnus-undo-boundary nil t) (gnus-run-hooks 'gnus-undo-mode-hook))) diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 4498375..f2d399d 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -104,17 +104,12 @@ ;; Added by Geoffrey T. Dairiki . A safe way ;; to limit the length of a string. This function is necessary since ;; `(substr "abc" 0 30)' pukes with "Args out of range". +;; Fixme: Why not `truncate-string-to-width'? (defsubst gnus-limit-string (str width) (if (> (length str) width) (substring str 0 width) str)) -(defsubst gnus-functionp (form) - "Return non-nil if FORM is funcallable." - (or (and (symbolp form) (fboundp form)) - (and (listp form) (eq (car form) 'lambda)) - (byte-code-function-p form))) - (defsubst gnus-goto-char (point) (and point (goto-char point))) @@ -134,6 +129,16 @@ 'point-at-eol 'line-end-position)) +;; The LOCAL arg to `add-hook' is interpreted differently in Emacs and +;; XEmacs. In Emacs we don't need to call `make-local-hook' first. +;; It's harmless, though, so the main purpose of this alias is to shut +;; up the byte compiler. +(defalias 'gnus-make-local-hook + (if (eq (get 'make-local-hook 'byte-compile) + 'byte-compile-obsolete) + 'ignore ; Emacs + 'make-local-hook)) ; XEmacs + (defun gnus-delete-first (elt list) "Delete by side effect the first occurrence of ELT as a member of LIST." (if (equal (car list) elt) @@ -578,7 +583,7 @@ If N, return the Nth ancestor instead." "Return a composite sort condition based on the functions in FUNC." (cond ;; Just a simple function. - ((gnus-functionp funs) funs) + ((functionp funs) funs) ;; No functions at all. ((null funs) funs) ;; A list of functions. @@ -603,7 +608,7 @@ If N, return the Nth ancestor instead." (setq function (cadr function) first 't2 last 't1)) - ((gnus-functionp function) + ((functionp function) ;; Do nothing. ) (t @@ -1026,6 +1031,7 @@ Return the modified alist." (while (search-backward "\\." nil t) (delete-char 1))))) +;; Fixme: Why not use `with-output-to-temp-buffer'? (defmacro gnus-with-output-to-file (file &rest body) (let ((buffer (make-symbol "output-buffer")) (size (make-symbol "output-buffer-size")) @@ -1093,6 +1099,9 @@ Return the modified alist." (remove-text-properties start end properties object)) t)) +;; This might use `compare-strings' to reduce consing in the +;; case-insensitive case, but it has to cope with null args. +;; (`string-equal' uses symbol print names.) (defun gnus-string-equal (x y) "Like `string-equal', except it compares case-insensitively." (and (= (length x) (length y)) @@ -1100,9 +1109,9 @@ Return the modified alist." (string-equal (downcase x) (downcase y))))) (defcustom gnus-use-byte-compile t - "If non-nil, byte-compile crucial run-time codes. -Setting it to nil has no effect after first time running -`gnus-byte-compile'." + "If non-nil, byte-compile crucial run-time code. +Setting it to nil has no effect after the first time `gnus-byte-compile' +is run." :type 'boolean :version "21.1" :group 'gnus-various) @@ -1165,7 +1174,7 @@ If you find some problem with the directory separator character, try (- x ?0))) (defun gnus-url-unhex-string (str &optional allow-newlines) - "Remove %XXX embedded spaces, etc in a url. + "Remove %XX, embedded spaces, etc in a url. If optional second argument ALLOW-NEWLINES is non-nil, then allow the decoding of carriage returns and line feeds in the string, which is normally forbidden in URL encoding." @@ -1354,8 +1363,7 @@ Return nil otherwise." display)) display))))) -(provide 'gnus-util) - +;; Fixme: This has only one use (in gnus-agent), which isn't worthwhile. (defmacro gnus-mapcar (function seq1 &rest seqs2_n) "Apply FUNCTION to each element of the sequences, and make a list of the results. If there are several sequences, FUNCTION is called with that many arguments, @@ -1390,4 +1398,21 @@ sequence, this is like `mapcar'. With several, it is like the Common Lisp (cdr ,result))) `(mapcar ,function ,seq1))) +(if (fboundp 'merge) + (defalias 'gnus-merge 'merge) + ;; Adapted from cl-seq.el + (defun gnus-merge (type list1 list2 pred) + "Destructively merge lists LIST1 and LIST2 to produce a new list. +Argument TYPE is for compatibility and ignored. +Ordering of the elements is preserved according to PRED, a `less-than' +predicate on the elements." + (let ((res nil)) + (while (and list1 list2) + (if (funcall pred (car list2) (car list1)) + (push (pop list2) res) + (push (pop list1) res))) + (nconc (nreverse res) list1 list2)))) + +(provide 'gnus-util) + ;;; gnus-util.el ends here diff --git a/lisp/gnus-win.el b/lisp/gnus-win.el index 71d3dba..e17f2a8 100644 --- a/lisp/gnus-win.el +++ b/lisp/gnus-win.el @@ -305,7 +305,7 @@ See the Gnus manual for an explanation of the syntax used.") ;; The SPLIT might be something that is to be evaled to ;; return a new SPLIT. (while (and (not (assq (car split) gnus-window-to-buffer)) - (gnus-functionp (car split))) + (functionp (car split))) (setq split (eval split))) (let* ((type (car split)) (subs (cddr split)) @@ -368,7 +368,7 @@ See the Gnus manual for an explanation of the syntax used.") (while subs (setq sub (append (pop subs) nil)) (while (and (not (assq (car sub) gnus-window-to-buffer)) - (gnus-functionp (car sub))) + (functionp (car sub))) (setq sub (eval sub))) (when sub (push sub comp-subs) @@ -507,7 +507,7 @@ should have point." ;; The SPLIT might be something that is to be evaled to ;; return a new SPLIT. (while (and (not (assq (car split) gnus-window-to-buffer)) - (gnus-functionp (car split))) + (functionp (car split))) (setq split (eval split))) (setq type (elt split 0)) diff --git a/lisp/gnus.el b/lisp/gnus.el index c08d790..59d0c08 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -286,7 +286,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.18" +(defconst gnus-version-number "0.19" "Version number for this version of Gnus.") (defconst gnus-version (format "Oort Gnus v%s" gnus-version-number) @@ -1810,20 +1810,20 @@ This only makes sense for mail groups." When a spam group is entered, all unread articles are marked as spam.") (defvar gnus-group-spam-exit-processor-ifile "ifile" - "The ifile summary exit spam processor. -Only applicable to spam groups.") + "The ifile summary exit spam processor.") (defvar gnus-group-spam-exit-processor-stat "stat" - "The spam-stat summary exit spam processor. -Only applicable to spam groups.") + "The spam-stat summary exit spam processor.") (defvar gnus-group-spam-exit-processor-bogofilter "bogofilter" - "The Bogofilter summary exit spam processor. -Only applicable to spam groups.") + "The Bogofilter summary exit spam processor.") (defvar gnus-group-spam-exit-processor-blacklist "blacklist" - "The Blacklist summary exit spam processor. -Only applicable to spam groups.") + "The Blacklist summary exit spam processor.") + + (defvar gnus-group-spam-exit-processor-report-gmane "report-gmane" + "The Gmane reporting summary exit spam processor. +Only applicable to NNTP groups with articles from Gmane. See spam-report.el") (defvar gnus-group-ham-exit-processor-ifile "ifile-ham" "The ifile summary exit ham processor. @@ -1860,6 +1860,7 @@ Only applicable to non-spam (unclassified and ham) groups.") (variable-item gnus-group-spam-exit-processor-stat) (variable-item gnus-group-spam-exit-processor-bogofilter) (variable-item gnus-group-spam-exit-processor-blacklist) + (variable-item gnus-group-spam-exit-processor-report-gmane) (variable-item gnus-group-ham-exit-processor-bogofilter) (variable-item gnus-group-ham-exit-processor-ifile) (variable-item gnus-group-ham-exit-processor-stat) @@ -1885,6 +1886,7 @@ for mail groups." (variable-item gnus-group-spam-exit-processor-stat) (variable-item gnus-group-spam-exit-processor-bogofilter) (variable-item gnus-group-spam-exit-processor-blacklist) + (variable-item gnus-group-spam-exit-processor-report-gmane) (variable-item gnus-group-ham-exit-processor-bogofilter) (variable-item gnus-group-ham-exit-processor-ifile) (variable-item gnus-group-ham-exit-processor-stat) @@ -2287,6 +2289,7 @@ such as a mark that says whether an article is stored in the cache gnus-newsrc-last-checked-date gnus-newsrc-alist gnus-server-alist gnus-registry-alist + gnus-registry-headers-alist gnus-killed-list gnus-zombie-list gnus-topic-topology gnus-topic-alist gnus-agent-covered-methods gnus-format-specs) @@ -2300,6 +2303,10 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") "Assoc list of registry data. gnus-registry.el will populate this if it's loaded.") +(defvar gnus-registry-headers-alist nil + "Assoc list of registry header data. +gnus-registry.el will populate this if it's loaded.") + (defvar gnus-newsrc-hashtb nil "Hashtable of gnus-newsrc-alist.") @@ -3179,12 +3186,16 @@ that that variable is buffer-local to the summary buffers." (format "%s+%s" (car method) (nth 1 method))) (defun gnus-group-prefixed-name (group method &optional full) - "Return the whole name from GROUP and METHOD. Call with full set to -get the fully qualified group name (even if the server is native)." - (and (stringp method) (setq method (gnus-server-to-method method))) + "Return the whole name from GROUP and METHOD. +Call with full set to get the fully qualified group name (even if the +server is native)." + (when (stringp method) + (setq method (gnus-server-to-method method))) (if (or (not method) (and (not full) (gnus-server-equal method "native")) - (string-match ":" group)) + ;;;!!! This might not be right. We'll see... + ;(string-match ":" group) + ) group (concat (gnus-method-to-server-name method) ":" group))) @@ -3200,7 +3211,9 @@ native." (defun gnus-group-guess-full-name (group) "Guess the full name from GROUP, even if the method is native." - (gnus-group-full-name group (gnus-find-method-for-group group))) + (if (gnus-group-prefixed-p group) + group + (gnus-group-full-name group (gnus-find-method-for-group group)))) (defun gnus-group-real-prefix (group) "Return the prefix of the current group name." @@ -3208,6 +3221,17 @@ native." (substring group 0 (match-end 0)) "")) +(defun gnus-group-short-name (group) + "Return the short group name." + (let ((prefix (gnus-group-real-prefix group))) + (if (< 0 (length prefix)) + (substring group (length prefix) nil) + group))) + +(defun gnus-group-prefixed-p (group) + "Return the prefix of the current group name." + (< 0 (length (gnus-group-real-prefix group)))) + (defun gnus-summary-buffer-name (group) "Return the summary buffer name of GROUP." (concat "*Summary " (gnus-group-decoded-name group) "*")) diff --git a/lisp/imap.el b/lisp/imap.el index 0492044..a83cee1 100644 --- a/lisp/imap.el +++ b/lisp/imap.el @@ -499,7 +499,7 @@ sure of changing the value of `foo'." (set-buffer buffer) ;; XXX "blue moon" nntp.el bug (goto-char (point-min)) ;; cyrus 1.6.x (13? < x <= 22) queries capabilities - (or (while (looking-at "^C:") + (or (while (looking-at "^C:") (forward-line)) t) ;; cyrus 1.6 imtest print "S: " before server greeting @@ -542,6 +542,7 @@ sure of changing the value of `foo'." cmd done) (while (and (not done) (setq cmd (pop cmds))) (message "Opening GSSAPI IMAP connection with `%s'..." cmd) + (erase-buffer) (let* ((port (or port imap-default-port)) (coding-system-for-read imap-coding-system-for-read) (coding-system-for-write imap-coding-system-for-write) @@ -607,16 +608,17 @@ sure of changing the value of `foo'." cmd done) (while (and (not done) (setq cmd (pop cmds))) (message "imap: Opening SSL connection with `%s'..." cmd) + (erase-buffer) (let* ((port (or port imap-default-ssl-port)) (coding-system-for-read imap-coding-system-for-read) (coding-system-for-write imap-coding-system-for-write) (process-connection-type nil) process) (when (progn - (setq process (start-process + (setq process (start-process name buffer shell-file-name shell-command-switch - (format-spec cmd + (format-spec cmd (format-spec-make ?s server ?p (number-to-string port))))) diff --git a/lisp/lpath.el b/lisp/lpath.el index b195809..97f9e2b 100644 --- a/lisp/lpath.el +++ b/lisp/lpath.el @@ -30,15 +30,14 @@ (if (featurep 'xemacs) (progn - (maybe-fbind '(ccl-execute-on-string - Info-directory Info-menu - char-charset charsetp coding-system-get - coding-system-list coding-system-p decode-coding-region - decode-coding-string define-ccl-program delete-overlay - detect-coding-region encode-coding-region - encode-coding-string event-click-count event-end - event-start find-charset-region - find-coding-systems-for-charsets + (maybe-fbind '(Info-directory + Info-menu ccl-execute-on-string char-charset charsetp + coding-system-get coding-system-list coding-system-p + decode-coding-region decode-coding-string + define-ccl-program delete-overlay detect-coding-region + encode-coding-region encode-coding-string + event-click-count event-end event-start + find-charset-region find-coding-systems-for-charsets find-coding-systems-region find-coding-systems-string get-charset-property mail-abbrevs-setup mouse-minibuffer-check mouse-movement-p mouse-scroll-subr @@ -52,7 +51,9 @@ enable-multibyte-characters gnus-agent-expire-current-dirs language-info-alist mark-active mouse-selection-click-count mouse-selection-click-count-buffer pgg-parse-crc24 - temporary-file-directory transient-mark-mode))) + temporary-file-directory transient-mark-mode + w3-meta-content-type-charset-regexp + w3-meta-charset-content-type-regexp))) (maybe-fbind '(bbdb-complete-name delete-annotation device-connection dfw-device events-to-keys font-lock-set-defaults frame-device diff --git a/lisp/mailcap.el b/lisp/mailcap.el index 605f1b3..6f57a4d 100644 --- a/lisp/mailcap.el +++ b/lisp/mailcap.el @@ -49,6 +49,12 @@ table) "A syntax table for parsing sgml attributes.") +(eval-and-compile + (when (featurep 'xemacs) + (condition-case nil + (require 'lpr) + (error nil)))) + (defvar mailcap-print-command (mapconcat 'identity (cons (if (boundp 'lpr-command) @@ -172,7 +178,11 @@ ("sieve" (viewer . sieve-mode) (test . (fboundp 'sieve-mode)) - (type . "application/sieve"))) + (type . "application/sieve")) + ("pgp-keys" + (viewer . "gpg --import --interactive --verbose") + (type . "application/pgp-keys") + ("needsterminal"))) ("audio" ("x-mpeg" (viewer . "maplay %s") diff --git a/lisp/message.el b/lisp/message.el index 71dfef1..9924662 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -193,7 +193,8 @@ Checks include `subject-cmsg', `multiple-headers', `sendsys', :group 'message-news :type '(repeat sexp)) ; Fixme: improve this -(defcustom message-required-headers '((optional . References) From) +(defcustom message-required-headers '((optional . References) + From (optional . In-Reply-To)) "*Headers to be generated or prompted for when sending a message. Also see `message-required-news-headers' and `message-required-mail-headers'." @@ -690,7 +691,11 @@ variable isn't used." ;; create a dependence to `gnus.el'. :type 'sexp) -(defcustom message-generate-headers-first nil +;; FIXME: This should be a temporary workaround until someone implements a +;; proper solution. If a crash happens while replying, the auto-save file +;; will *not* have a `References:' header if `message-generate-headers-first' +;; is nil. See: http://article.gmane.org/gmane.emacs.gnus.general/51138 +(defcustom message-generate-headers-first '(references) "*If non-nil, generate all required headers before composing. The variables `message-required-news-headers' and `message-required-mail-headers' specify which headers to generate. @@ -702,6 +707,7 @@ are to be deleted and then re-generated before sending, so this variable will not have a visible effect for those headers." :group 'message-headers :type '(choice (const :tag "None" nil) + (const :tag "References" '(references)) (const :tag "All" t) (repeat (sexp :tag "Header")))) @@ -1447,7 +1453,8 @@ no, only reply back to the author." (autoload 'gnus-group-name-decode "gnus-group") (autoload 'gnus-groups-from-server "gnus") (autoload 'rmail-output "rmailout") - (autoload 'gnus-delay-article "gnus-delay")) + (autoload 'gnus-delay-article "gnus-delay") + (autoload 'gnus-make-local-hook "gnus-util")) @@ -2339,9 +2346,7 @@ M-RET `message-newline-and-reformat' (break the line and reformat)." (set (make-local-variable 'tool-bar-map) (message-tool-bar-map)))) (easy-menu-add message-mode-menu message-mode-map) (easy-menu-add message-mode-field-menu message-mode-map) - ;; make-local-hook is harmless though obsolete in Emacs 21. - ;; Emacs 20 and XEmacs need make-local-hook. - (make-local-hook 'after-change-functions) + (gnus-make-local-hook 'after-change-functions) ;; Mmmm... Forbidden properties... (add-hook 'after-change-functions 'message-strip-forbidden-properties nil 'local) @@ -4385,9 +4390,9 @@ If NOW, use that time instead." (lsh (% message-unique-id-char 25) 16)) 4) (message-number-base36 (+ (nth 1 tm) (lsh (/ message-unique-id-char 25) 16)) 4) - ;; Append the newsreader name, because while the generated - ;; ID is unique to this newsreader, other newsreaders might - ;; otherwise generate the same ID via another algorithm. + ;; Append a given name, because while the generated ID is unique + ;; to this newsreader, other newsreaders might otherwise generate + ;; the same ID via another algorithm. ".fsf"))) (defun message-number-base36 (num len) @@ -6522,9 +6527,9 @@ regexp varstr." (message-next-header) (let ((begin (point))) (message-next-header) - (add-text-properties begin (point) - '(intangible t invisible t - message-hidden t)))))))))) + (add-text-properties + begin (point) + '(invisible t message-hidden t)))))))))) (defun message-hide-header-p (regexps) (let ((result nil) diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 9a7d7b5..ee14049 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -266,18 +266,12 @@ use the supplied charset unconditionally." (setq coding-system mail-parse-charset)) (not (eq coding-system 'gnus-decoded))) (if (or force - ;; If a charset was supplied and `code-pages' - ;; hasn't been loaded, then use the supplied - ;; charset unconditionally. - (and (not (featurep 'code-pages)) - charset-supplied)) + ;; If a charset was supplied, then use the + ;; supplied charset unconditionally. + charset-supplied) (mm-decode-coding-region (point-min) (point-max) coding-system) ;; Otherwise allow Emacs to auto-detect the charset. - ;; Messages in windows-125x are frequently incorrectly - ;; advertised as iso-8859-x -- if `code-pages' has been - ;; loaded and configured, we're able to deal with them - ;; properly. (mm-decode-coding-region-safely (point-min) (point-max) coding-system))) (setq buffer-file-coding-system diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 249f3e9..3cf9a0b 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -308,9 +308,11 @@ to: :group 'mime-display) (defcustom mm-tmp-directory - (cond ((fboundp 'temp-directory) (temp-directory)) - ((boundp 'temporary-file-directory) temporary-file-directory) - ("/tmp/")) + (if (fboundp 'temp-directory) + (temp-directory) + (if (boundp 'temporary-file-directory) + temporary-file-directory + "/tmp/")) "Where mm will store its temporary files." :type 'directory :group 'mime-display) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index a705b82..9f579b3 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -71,7 +71,9 @@ (string-as-unibyte . identity) (string-make-unibyte . identity) (string-as-multibyte . identity) - (multibyte-string-p . ignore)))) + (multibyte-string-p . ignore) + (insert-byte . insert-char) + (multibyte-char-to-unibyte . identity)))) (eval-and-compile (defalias 'mm-char-or-char-int-p @@ -154,6 +156,11 @@ (defvar mm-auto-save-coding-system (cond + ((mm-coding-system-p 'utf-8-emacs) ; Mule 7 + (if (memq system-type '(windows-nt ms-dos ms-windows)) + (if (mm-coding-system-p 'utf-8-emacs-dos) + 'utf-8-emacs-dos mm-binary-coding-system) + 'utf-8-emacs)) ((mm-coding-system-p 'emacs-mule) (if (memq system-type '(windows-nt ms-dos ms-windows)) (if (mm-coding-system-p 'emacs-mule-dos) @@ -232,9 +239,11 @@ 'nconc (mapcar (lambda (cs) - (when (and (coding-system-get cs 'mime-charset) + (when (and (or (coding-system-get cs :mime-charset) ; Emacs 22 + (coding-system-get cs 'mime-charset)) (not (eq t (coding-system-get cs 'safe-charsets)))) - (list (cons (coding-system-get cs 'mime-charset) + (list (cons (or (coding-system-get cs :mime-charset) + (coding-system-get cs 'mime-charset)) (delq 'ascii (coding-system-get cs 'safe-charsets)))))) (sort-coding-systems (coding-system-list 'base-only)))))) @@ -278,13 +287,14 @@ Valid elements include: iso-latin-1 utf-8))))) "Preferred coding systems for encoding outgoing mails. -More than one suitable coding systems may be found for some texts. By -default, a coding system with the highest priority is used to encode +More than one suitable coding system may be found for some text. By +default, the coding system with the highest priority is used to encode outgoing mails (see `sort-coding-systems'). If this variable is set, it overrides the default priority." :type '(repeat (symbol :tag "Coding system")) :group 'mime) +;; ?? (defvar mm-use-find-coding-systems-region (fboundp 'find-coding-systems-region) "Use `find-coding-systems-region' to find proper coding systems. @@ -306,7 +316,8 @@ mail with multiple parts is preferred to sending a Unicode one.") (find-coding-systems-for-charsets (list charset))))) (unless mime (when cs - (setq mime (coding-system-get cs 'mime-charset))))) + (setq mime (or (coding-system-get cs :mime-charset) + (coding-system-get cs 'mime-charset)))))) mime) (let ((alist mm-mime-mule-charset-alist) out) @@ -355,7 +366,8 @@ used as the line break code type of the coding system." ;; Do we need -lbt? (dolist (c (mm-get-coding-system-list)) (if (and (null cs) - (eq charset (coding-system-get c 'mime-charset))) + (eq charset (or (coding-system-get c :mime-charset) + (coding-system-get c 'mime-charset)))) (setq cs c))) cs)))) @@ -454,8 +466,10 @@ If the charset is `composition', return the actual one." ;; This exists in Emacs 20. (or (and (mm-preferred-coding-system charset) - (coding-system-get - (mm-preferred-coding-system charset) 'mime-charset)) + (or (coding-system-get + (mm-preferred-coding-system charset) :mime-charset) + (coding-system-get + (mm-preferred-coding-system charset) 'mime-charset))) (and (eq charset 'ascii) 'us-ascii) (mm-preferred-coding-system charset) @@ -502,8 +516,14 @@ If the charset is `composition', return the actual one." (not inconvertible)))) (defun mm-sort-coding-systems-predicate (a b) - (> (length (memq a mm-coding-system-priorities)) - (length (memq b mm-coding-system-priorities)))) + (let ((priorities + (mapcar (lambda (cs) + ;; Note: invalid entries are dropped silently + (and (coding-system-p cs) + (coding-system-base cs))) + mm-coding-system-priorities))) + (> (length (memq a priorities)) + (length (memq b priorities))))) (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. @@ -519,18 +539,27 @@ charset, and a longer list means no appropriate charset." (when mm-coding-system-priorities (setq systems (sort systems 'mm-sort-coding-systems-predicate))) - ;; Fixme: The `mime-charset' (`x-ctext') of `compound-text' - ;; is not in the IANA list. (setq systems (delq 'compound-text systems)) (unless (equal systems '(undecided)) (while systems - (let ((cs (coding-system-get (pop systems) 'mime-charset))) - (if cs + (let* ((head (pop systems)) + (cs (or (coding-system-get head :mime-charset) + (coding-system-get head 'mime-charset)))) + ;; The mime-charset (`x-ctext') of + ;; `compound-text' is not in the IANA list. We + ;; shouldn't normally use anything here with a + ;; mime-charset having an `x-' prefix. + ;; Fixme: allow this to be overridden, since + ;; there is existing use of x-ctext. + ;; Also people apparently need the coding system + ;; `iso-2022-jp-3', which Mule-UCS defines. + (if (and cs + (not (string-match "^[Xx]-" (symbol-name cs)))) (setq systems nil charsets (list cs)))))) charsets)) - ;; Otherwise we're not multibyte, XEmacs or a single coding - ;; system won't cover it. + ;; Otherwise we're not multibyte, we're XEmacs or a single + ;; coding system won't cover it. (setq charsets (mm-delete-duplicates (mapcar 'mm-mime-charset @@ -556,7 +585,7 @@ Use unibyte mode for this." (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body)) (defmacro mm-with-unibyte-current-buffer (&rest forms) - "Evaluate FORMS with current current buffer temporarily made unibyte. + "Evaluate FORMS with current buffer temporarily made unibyte. Also bind `default-enable-multibyte-characters' to nil. Equivalent to `progn' in XEmacs" (let ((multibyte (make-symbol "multibyte")) @@ -670,7 +699,7 @@ Mule4 only." A buffer may be modified in several ways after reading into the buffer due to advanced Emacs features, such as file-name-handlers, format decoding, find-file-hooks, etc. -If INHIBIT is non-nil, inhibit mm-inhibit-file-name-handlers. +If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'. This function ensures that none of these modifications will take place." (let ((format-alist nil) (auto-mode-alist (if inhibit nil (mm-auto-mode-alist))) diff --git a/lisp/mm-view.el b/lisp/mm-view.el index 47daf7c..05c4df8 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -327,7 +327,7 @@ map."))) (if entry (setq func (cdr entry))) (cond - ((gnus-functionp func) + ((functionp func) (funcall func handle)) (t (apply (car func) handle (cdr func)))))) diff --git a/lisp/mml-sec.el b/lisp/mml-sec.el index a55e170..c18cf2f 100644 --- a/lisp/mml-sec.el +++ b/lisp/mml-sec.el @@ -2,7 +2,8 @@ ;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Author: Simon Josefsson -;; This file is not part of GNU Emacs, but the same permissions apply. + +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -23,10 +24,14 @@ ;;; Code: -(require 'mml2015) -(require 'mml1991) (require 'mml-smime) (eval-when-compile (require 'cl)) +(autoload 'mml2015-sign "mml2015") +(autoload 'mml2015-encrypt "mml2015") +(autoload 'mml1991-sign "mml1991") +(autoload 'mml1991-encrypt "mml1991") +(autoload 'message-goto-body "message") +(autoload 'mml-insert-tag "mml") (defvar mml-sign-alist '(("smime" mml-smime-sign-buffer mml-smime-sign-query) diff --git a/lisp/mml-smime.el b/lisp/mml-smime.el index 5939b08..bccc8a1 100644 --- a/lisp/mml-smime.el +++ b/lisp/mml-smime.el @@ -1,10 +1,10 @@ ;;; mml-smime.el --- S/MIME support for MML -;; Copyright (c) 2000, 2001 Free Software Foundation, Inc. +;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: Gnus, MIME, S/MIME, MML -;; This file is a part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published diff --git a/lisp/mml.el b/lisp/mml.el index 6c0f600..94f3712 100644 --- a/lisp/mml.el +++ b/lisp/mml.el @@ -35,6 +35,7 @@ (autoload 'message-make-message-id "message") (autoload 'gnus-setup-posting-charset "gnus-msg") (autoload 'gnus-add-minor-mode "gnus-ems") + (autoload 'gnus-make-local-hook "gnus-util") (autoload 'message-fetch-field "message") (autoload 'fill-flowed-encode "flow-fill") (autoload 'message-posting-charset "message")) @@ -1070,12 +1071,21 @@ If RAW, don't highlight the article." (gnus-article-prepare-display)))) ;; Disable article-mode-map. (use-local-map nil) - (make-local-hook 'kill-buffer-hook) + (gnus-make-local-hook 'kill-buffer-hook) (add-hook 'kill-buffer-hook (lambda () (mm-destroy-parts gnus-article-mime-handles)) nil t) (setq buffer-read-only t) (local-set-key "q" (lambda () (interactive) (kill-buffer nil))) + (local-set-key "=" (lambda () (interactive) (delete-other-windows))) + (local-set-key "\r" + (lambda () + (interactive) + (widget-button-press (point)))) + (local-set-key gnus-mouse-2 + (lambda (event) + (interactive "@e") + (widget-button-press (widget-event-point event) event))) (goto-char (point-min))))) (defun mml-validate () diff --git a/lisp/mml1991.el b/lisp/mml1991.el index 49419b5..d72ceaa 100644 --- a/lisp/mml1991.el +++ b/lisp/mml1991.el @@ -5,7 +5,7 @@ ;; Simon Josefsson (Mailcrypt interface, Gnus glue) ;; Keywords PGP -;; This file is (not yet) part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -26,6 +26,13 @@ ;;; Code: +(eval-when-compile + (require 'cl) + (require 'mm-util)) + +(autoload 'quoted-printable-decode-region "qp") +(autoload 'quoted-printable-encode-region "qp") + (defvar mml1991-use mml2015-use "The package used for PGP.") diff --git a/lisp/mml2015.el b/lisp/mml2015.el index 34007f1..60c9e94 100644 --- a/lisp/mml2015.el +++ b/lisp/mml2015.el @@ -806,7 +806,9 @@ (defun mml2015-pgg-sign (cont) (let ((pgg-errors-buffer mml2015-result-buffer) - (boundary (funcall mml-boundary-function (incf mml-multipart-number)))) + (boundary (funcall mml-boundary-function (incf mml-multipart-number))) + (pgg-default-user-id (or (message-options-get 'message-sender) + pgg-default-user-id))) (unless (pgg-sign-region (point-min) (point-max)) (pop-to-buffer mml2015-result-buffer) (error "Sign error")) diff --git a/lisp/nndb.el b/lisp/nndb.el index da53530..1a269f5 100644 --- a/lisp/nndb.el +++ b/lisp/nndb.el @@ -8,7 +8,7 @@ ;; David Blacka ;; Keywords: news -;; This file is NOT part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/lisp/nndiary.el b/lisp/nndiary.el index 0484dc8..cec8ee4 100644 --- a/lisp/nndiary.el +++ b/lisp/nndiary.el @@ -1410,7 +1410,7 @@ all. This may very well take some time.") (nth 6 date-elts)))) reminder res) ;; remove the DOW and DST entries - (setf (nthcdr 6 date-elts) (nthcdr 8 date-elts)) + (setcdr (nthcdr 5 date-elts) (nthcdr 8 date-elts)) (while (setq reminder (pop reminders)) (push (cond ((eq (cdr reminder) 'minute) diff --git a/lisp/nnimap.el b/lisp/nnimap.el index 6daace9..31a7837 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -1267,7 +1267,9 @@ function is generally only called when Gnus is shutting down." (when (setq rule (nnimap-split-find-rule server inbox)) ;; iterate over articles (dolist (article (imap-search nnimap-split-predicate)) - (when (if nnimap-split-download-body + (when (if (if (eq nnimap-split-download-body 'default) + nnimap-split-download-body-default + nnimap-split-download-body) (and (nnimap-request-article article) (mail-narrow-to-head)) (nnimap-request-head article)) @@ -1285,16 +1287,18 @@ function is generally only called when Gnus is shutting down." (setq removeorig t) (when nnmail-cache-accepted-message-ids (with-current-buffer nntp-server-buffer - (let (msgid) - (and (setq msgid + (let (msgid) + (and (setq msgid (nnmail-fetch-field "message-id")) - (nnmail-cache-insert msgid to-group))))) + (nnmail-cache-insert msgid to-group))))) ;; Add the group-art list to the history list. (push (list (cons to-group 0)) nnmail-split-history)) (t (message "IMAP split failed to move %s:%s:%d to %s" server inbox article to-group)))) - (if nnimap-split-download-body + (if (if (eq nnimap-split-download-body 'default) + nnimap-split-download-body-default + nnimap-split-download-body) (widen)) ;; remove article if it was successfully copied somewhere (and removeorig diff --git a/lisp/nnmail.el b/lisp/nnmail.el index 77ae803..1f15ab3 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -28,6 +28,7 @@ (eval-when-compile (require 'cl)) +(require 'gnus) ; for macro gnus-kill-buffer, at least (require 'nnheader) (require 'message) (require 'custom) @@ -1544,7 +1545,7 @@ See the documentation for the variable `nnmail-split-fancy' for details." (defun nnmail-split-fancy-with-parent () "Split this message into the same group as its parent. This function can be used as an entry in `nnmail-split-fancy', for -example like this: (: nnmail-split-fancy) +example like this: (: nnmail-split-fancy-with-parent) For a message to be split, it looks for the parent message in the References or In-Reply-To header and then looks in the message id cache file (given by the variable `nnmail-message-id-cache-file') to diff --git a/lisp/nnmaildir.el b/lisp/nnmaildir.el index 501e559..5391192 100644 --- a/lisp/nnmaildir.el +++ b/lisp/nnmaildir.el @@ -799,11 +799,13 @@ by nnmaildir-request-article.") (setq dirs (funcall srv-ls srv-dir nil "\\`[^.]" 'nosort) dirs (if (zerop (length target-prefix)) dirs - (remove-if (lambda (dir) - (and (>= (length dir) (length target-prefix)) - (string= (substring dir 0 (length target-prefix)) - target-prefix))) - dirs)) + (gnus-remove-if + (lambda (dir) + (and (>= (length dir) (length target-prefix)) + (string= (substring dir 0 + (length target-prefix)) + target-prefix))) + dirs)) seen (nnmaildir--up2-1 (length dirs)) seen (make-vector seen 0)) (mapcar diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index 4569dbd..e33843c 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -55,7 +55,7 @@ (defvoo nnmbox-current-group nil "Current nnmbox news group directory.") -(defconst nnmbox-mbox-buffer nil) +(defvar nnmbox-mbox-buffer nil) (defvoo nnmbox-status-string "") diff --git a/lisp/nnrss.el b/lisp/nnrss.el index 4eefba0..9d8c90c 100644 --- a/lisp/nnrss.el +++ b/lisp/nnrss.el @@ -401,7 +401,8 @@ ARTICLE is the article number of the current headline.") ;;; Snarf functions (defun nnrss-check-group (group server) - (let (file xml subject url extra changed author date rss-ns rdf-ns content-ns dc-ns) + (let (file xml subject url extra changed author + date rss-ns rdf-ns content-ns dc-ns) (if (and nnrss-use-local (file-exists-p (setq file (expand-file-name (nnrss-translate-file-chars @@ -412,7 +413,9 @@ ARTICLE is the article number of the current headline.") (second (assoc group nnrss-group-alist)))) (unless url (setq url - (nnrss-discover-feed (read-string (format "URL to search for %s: " group) "http://"))) + (nnrss-discover-feed + (read-string + (format "URL to search for %s: " group) "http://"))) (let ((pair (assoc group nnrss-server-data))) (if pair (setcdr (cdr pair) (list url)) @@ -510,15 +513,13 @@ It is useful when `(setq nnrss-use-local t)'." (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " ")) (defun nnrss-node-text (namespace local-name element) - (let* ((node (assq (intern (concat namespace (symbol-name local-name))) element)) + (let* ((node (assq (intern (concat namespace (symbol-name local-name))) + element)) (text (if (and node (listp node)) (nnrss-node-just-text node) node)) - (cleaned-text (if text - (replace-regexp-in-string - " *$" "" (replace-regexp-in-string - "^ *" "" (replace-regexp-in-string - "^[[:cntrl:]]+" "" text)))))) + (cleaned-text (if text (gnus-replace-in-string + text "^[[:cntrl:]]+\\|^ +\\| +$" "")))) (if (string-equal "" cleaned-text) nil cleaned-text))) diff --git a/lisp/pgg-def.el b/lisp/pgg-def.el index 53a1ad7..9a5d7ff 100644 --- a/lisp/pgg-def.el +++ b/lisp/pgg-def.el @@ -1,22 +1,22 @@ ;;; pgg-def.el --- functions/macros for defining PGG functions -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2003 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 ;; Keywords: PGP, OpenPGP, GnuPG -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/pgg-gpg.el b/lisp/pgg-gpg.el index 8718f44..4a4f6f7 100644 --- a/lisp/pgg-gpg.el +++ b/lisp/pgg-gpg.el @@ -6,17 +6,17 @@ ;; Created: 1999/10/28 ;; Keywords: PGP, OpenPGP, GnuPG -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/pgg-parse.el b/lisp/pgg-parse.el index 881c27e..bff16f0 100644 --- a/lisp/pgg-parse.el +++ b/lisp/pgg-parse.el @@ -1,22 +1,22 @@ ;;; pgg-parse.el --- OpenPGP packet parsing -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2003 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/10/28 ;; Keywords: PGP, OpenPGP, GnuPG -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/pgg-pgp.el b/lisp/pgg-pgp.el index 4ac1b5d..d246537 100644 --- a/lisp/pgg-pgp.el +++ b/lisp/pgg-pgp.el @@ -1,22 +1,22 @@ ;;; pgg-pgp.el --- PGP 2.* and 6.* support for PGG. -;; Copyright (C) 1999,2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 ;; Keywords: PGP, OpenPGP -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/pgg-pgp5.el b/lisp/pgg-pgp5.el index fccd80b..db954dc 100644 --- a/lisp/pgg-pgp5.el +++ b/lisp/pgg-pgp5.el @@ -1,22 +1,22 @@ ;;; pgg-pgp5.el --- PGP 5.* support for PGG. -;; Copyright (C) 1999,2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 ;; Keywords: PGP, OpenPGP -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/pgg.el b/lisp/pgg.el index f69298c..cce3c09 100644 --- a/lisp/pgg.el +++ b/lisp/pgg.el @@ -1,42 +1,48 @@ ;;; pgg.el --- glue for the various PGP implementations. -;; Copyright (C) 1999,2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/10/28 ;; Keywords: PGP -;; This file is part of SEMI (Secure Emacs MIME Interface). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. - ;;; Commentary: -;; ;;; Code: (require 'pgg-def) (require 'pgg-parse) +;; Don't merge these two `eval-when-compile's. +(eval-when-compile + (require 'cl)) +;; Fixme: This would be better done with an autoload for +;; `url-insert-file-contents', and the url stuff rationalized. +;; (`locate-library' can say whether the url code is available.) (eval-when-compile (ignore-errors (require 'w3) (require 'url))) +;; Fixme: Avoid this and use mm-make-temp-file (especially for +;; something sensitive like pgp). (defvar pgg-temporary-file-directory (cond ((fboundp 'temp-directory) (temp-directory)) ((boundp 'temporary-file-directory) temporary-file-directory) diff --git a/lisp/qp.el b/lisp/qp.el index 3a4d492..62d7562 100644 --- a/lisp/qp.el +++ b/lisp/qp.el @@ -1,6 +1,6 @@ ;;; qp.el --- Quoted-Printable functions -;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail, extensions @@ -32,13 +32,18 @@ (require 'mm-util) (eval-when-compile (defvar mm-use-ultra-safe-encoding)) +;;;###autoload (defun quoted-printable-decode-region (from to &optional coding-system) "Decode quoted-printable in the region between FROM and TO, per RFC 2045. If CODING-SYSTEM is non-nil, decode bytes into characters with that coding-system. Interactively, you can supply the CODING-SYSTEM argument -with \\[universal-coding-system-argument]." +with \\[universal-coding-system-argument]. + +The CODING-SYSTEM argument is a historical hangover and is deprecated. +QP encodes raw bytes and should be decoded into raw bytes. Decoding +them into characters should be done separately." (interactive ;; Let the user determine the coding system with "C-x RET c". (list (region-beginning) (region-end) coding-system-for-read)) @@ -66,14 +71,10 @@ with \\[universal-coding-system-argument]." (let ((byte (string-to-int (buffer-substring (1+ (point)) (+ 3 (point))) 16))) - (insert byte) - (delete-char 3) - ;; Why backward-char??? - ;;(unless (eq byte 61) ;; 61 is not ?= in XEmacs - ;; (backward-char)) - )) + (mm-insert-byte byte 1) + (delete-char 3))) (t - (message "Malformed quoted-printable text") + (error "Malformed quoted-printable text") (forward-char))))) (if coding-system (mm-decode-coding-region (point-min) (point-max) coding-system))))) @@ -97,6 +98,15 @@ You should probably avoid non-ASCII characters in this arg. If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and encode lines starting with \"From\"." (interactive "r") + (save-excursion + (goto-char from) + (if (fboundp 'string-to-multibyte) ; Emacs 22 + (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]") + to t) + ;; Fixme: This is somewhat misleading. + (error "Multibyte character in QP encoding region")) + (if (re-search-forward (mm-string-as-multibyte "[^\0-\377]") to t) + (error "Multibyte character in QP encoding region")))) (unless class ;; Avoid using 8bit characters. = is \075. ;; Equivalent to "^\000-\007\013\015-\037\200-\377=" @@ -104,19 +114,14 @@ encode lines starting with \"From\"." (save-excursion (save-restriction (narrow-to-region from to) - ;; We can live with characters between 00-FF. - (goto-char (point-min)) - (while (not (eobp)) - (if (>= (char-after) 256) - (error "Multibyte character in QP encoding region")) - (forward-char)) ;; Encode all the non-ascii and control characters. (goto-char (point-min)) (while (and (skip-chars-forward class) (not (eobp))) (insert (prog1 - (format "=%02X" (char-after)) + ;; To unibyte in case of Emacs 22 eight-bit. + (format "=%02X" (mm-multibyte-char-to-unibyte (char-after))) (delete-char 1)))) ;; Encode white space at the end of lines. (goto-char (point-min)) @@ -131,7 +136,7 @@ encode lines starting with \"From\"." (and (boundp 'mm-use-ultra-safe-encoding) mm-use-ultra-safe-encoding))) (when (or fold mm-use-ultra-safe-encoding) - (let ((tab-width 1)) ; HTAB is one character. + (let ((tab-width 1)) ; HTAB is one character. (goto-char (point-min)) (while (not (eobp)) ;; In ultra-safe mode, encode "From " at the beginning @@ -140,7 +145,7 @@ encode lines starting with \"From\"." (if (looking-at "From ") (replace-match "From=20" nil t) (if (looking-at "-") - (replace-match "=2D" nil t)))) + (replace-match "=2D" nil t)))) (end-of-line) ;; Fold long lines. (while (> (current-column) 76) ; tab-width must be 1. diff --git a/lisp/rfc1843.el b/lisp/rfc1843.el index a57d16a..b0b8f8e 100644 --- a/lisp/rfc1843.el +++ b/lisp/rfc1843.el @@ -1,10 +1,10 @@ ;;; rfc1843.el --- HZ (rfc1843) decoding -;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. +;; Copyright (c) 1998, 1999, 2000, 2003 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: news HZ HZ+ mail i18n -;; This file is a part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published @@ -43,11 +43,11 @@ (defvar rfc1843-hzp-word-regexp "~\\({\\([\041-\167][\041-\176]\\| \\)+\\|\ -[<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)") +\[<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)") (defvar rfc1843-hzp-word-regexp-strictly "~\\({\\([\041-\167][\041-\176]\\)+\\|\ -[<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)") +\[<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)") (defcustom rfc1843-decode-loosely nil "Loosely check HZ encoding if non-nil. diff --git a/lisp/sieve-manage.el b/lisp/sieve-manage.el index b3015ab..8897dd1 100644 --- a/lisp/sieve-manage.el +++ b/lisp/sieve-manage.el @@ -3,7 +3,7 @@ ;; Author: Simon Josefsson -;; This file is not part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/lisp/sieve-mode.el b/lisp/sieve-mode.el index f47b5d0..e804e96 100644 --- a/lisp/sieve-mode.el +++ b/lisp/sieve-mode.el @@ -3,7 +3,7 @@ ;; Author: Simon Josefsson -;; This file is not part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/lisp/sieve.el b/lisp/sieve.el index ad62856..8297f57 100644 --- a/lisp/sieve.el +++ b/lisp/sieve.el @@ -3,7 +3,7 @@ ;; Author: Simon Josefsson -;; This file is not part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -370,8 +370,7 @@ Server : " server ":" (or port "2000") " (if (sieve-manage-ok-p err) (message (concat "Sieve upload done. Use `C-c RET' to manage scripts.")) - (message "Sieve upload failed: %s" - (replace-regexp-in-string "[\n\r\t]+" " " (nth 2 err)))))))) + (message "Sieve upload failed: %s" (nth 2 err))))))) ;;;###autoload (defun sieve-upload-and-bury (&optional name) diff --git a/lisp/smime.el b/lisp/smime.el index 0605511..0df851f 100644 --- a/lisp/smime.el +++ b/lisp/smime.el @@ -1,10 +1,10 @@ ;;; smime.el --- S/MIME support library -;; Copyright (c) 2000, 2001 Free Software Foundation, Inc. +;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: SMIME X.509 PEM OpenSSL -;; This file is not a part of GNU Emacs, but the same permissions apply. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published @@ -366,6 +366,9 @@ Any details (stdout and stderr) are left in the buffer specified by (insert-buffer-substring smime-details-buffer) nil)) +(eval-when-compile + (defvar from)) + (defun smime-decrypt-region (b e keyfile) "Decrypt S/MIME message in region between B and E with key in KEYFILE. On success, replaces region with decrypted data and return non-nil. @@ -390,6 +393,9 @@ in the buffer specified by `smime-details-buffer'." (delete-file tmpfile))) (progn (delete-region b e) + (when (boundp 'from) + ;; `from' is dynamically bound in mm-dissect. + (insert "From: " from "\n")) (insert-buffer-substring buffer) (kill-buffer buffer) t) diff --git a/lisp/spam-report.el b/lisp/spam-report.el new file mode 100644 index 0000000..fafb891 --- /dev/null +++ b/lisp/spam-report.el @@ -0,0 +1,97 @@ +;;; spam-report.el --- Reporting spam +;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. + +;; Author: Teodor Zlatanov +;; Keywords: network + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; This module addresses a few aspects of spam reporting under Gnus. Page +;;; breaks are used for grouping declarations and documentation relating to +;;; each particular aspect. + +;;; Code: +(require 'gnus) +(require 'gnus-sum) + +(defgroup spam-report nil + "Spam reporting configuration.") + +(defcustom spam-report-gmane-regex nil + "String matching Gmane newsgroups if wanted, e.g. \"^nntp+.*:gmane.\" +This is probably handled better with group/topic parameters." + :type 'regexp + :group 'spam-report) + +(defcustom spam-report-gmane-spam-header + "^X-Report-Spam: http://\\([^/]+\\)\\(.*\\)$" + "String matching Gmane spam-reporting header. Two match groups are needed." + :type 'regexp + :group 'spam-report) + +(defcustom spam-report-gmane-use-article-number t + "Whether the article number (faster!) or the header should be used." + :type 'boolean + :group 'spam-report) + +(defun spam-report-gmane (article) + "Report an article as spam through Gmane" + (interactive "nEnter the article number: ") + (when (and gnus-newsgroup-name + (or (null spam-report-gmane-regex) + (string-match spam-report-gmane-regex gnus-newsgroup-name))) + (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article) + (if spam-report-gmane-use-article-number + (spam-report-url-ping "spam.gmane.org" + (format "/%s:%d" + (gnus-group-real-name gnus-newsgroup-name) + (gnus-summary-article-number))) + (with-current-buffer nntp-server-buffer + (gnus-request-head article gnus-newsgroup-name) + (goto-char (point-min)) + (if (re-search-forward spam-report-gmane-spam-header nil t) + (let* ((host (match-string 1)) + (report (match-string 2)) + (url (format "http://%s%s" host report))) + (gnus-message 10 "Reporting spam through URL %s..." url) + (spam-report-url-ping host report)) + (gnus-message 10 "Could not find X-Report-Spam in article %d..." + article)))))) + + +(defun spam-report-url-ping (host report) + "Ping a host through HTTP, addressing a specific GET resource" + (let ((tcp-connection)) + (with-temp-buffer + (or (setq tcp-connection + (open-network-stream + "URL ping" + (buffer-name) + host + 80)) + (error "Could not open connection to %s" host)) + (set-marker (process-mark tcp-connection) (point-min)) + (process-send-string tcp-connection + (format "GET %s HTTP/1.1\nHost: %s\n\n" + report host))))) + +(provide 'spam-report) + +;;; spam-report.el ends here. diff --git a/lisp/spam.el b/lisp/spam.el index ff63026..b6e25db 100644 --- a/lisp/spam.el +++ b/lisp/spam.el @@ -52,6 +52,10 @@ (eval-and-compile (autoload 'query-dig "dig")) +;; autoload spam-report +(eval-and-compile + (autoload 'spam-report-gmane "spam-report")) + ;; autoload query-dns (eval-and-compile (autoload 'query-dns "dns")) @@ -74,6 +78,14 @@ spam groups." :type 'boolean :group 'spam) +(defcustom spam-mark-only-unseen-as-spam t + "Whether only unseen articles should be marked as spam in spam +groups. When nil, all unread articles in a spam group are marked as +spam. Set this if you want to leave an article unread in a spam group +without losing it to the automatic spam-marking process." + :type 'boolean + :group 'spam) + (defcustom spam-mark-ham-unread-before-move-from-spam-group nil "Whether ham should be marked unread before it's moved out of a spam group according to ham-process-destination. This variable is an @@ -335,6 +347,9 @@ your main source of newsgroup names." (member processor (car (gnus-parameter-spam-process group))) nil)) +(defun spam-group-spam-processor-report-gmane-p (group) + (spam-group-processor-p group 'gnus-group-spam-exit-processor-report-gmane)) + (defun spam-group-spam-processor-bogofilter-p (group) (spam-group-processor-p group 'gnus-group-spam-exit-processor-bogofilter)) @@ -394,6 +409,10 @@ your main source of newsgroup names." (gnus-message 5 "Registering spam with the blacklist") (spam-blacklist-register-routine)) + (when (spam-group-spam-processor-report-gmane-p gnus-newsgroup-name) + (gnus-message 5 "Registering spam with the Gmane report") + (spam-report-gmane-register-routine)) + (if spam-move-spam-nonspam-groups-only (when (not (spam-group-spam-contents-p gnus-newsgroup-name)) (spam-mark-spam-as-expired-and-move-routine @@ -441,13 +460,15 @@ your main source of newsgroup names." ;; check the global list of group names spam-junk-mailgroups and the ;; group parameters (when (spam-group-spam-contents-p gnus-newsgroup-name) - (gnus-message 5 "Marking unread articles as spam") - (let ((articles gnus-newsgroup-articles) - article) - (while articles - (setq article (pop articles)) - (when (eq (gnus-summary-article-mark article) gnus-unread-mark) - (gnus-summary-mark-article article gnus-spam-mark)))))) + (gnus-message 5 "Marking %s articles as spam" + (if spam-mark-only-unseen-as-spam + "unseen" + "unread")) + (let ((articles (if spam-mark-only-unseen-as-spam + gnus-newsgroup-unseen + gnus-newsgroup-unreads))) + (dolist (article articles) + (gnus-summary-mark-article article gnus-spam-mark))))) (defun spam-mark-spam-as-expired-and-move-routine (&optional group) (gnus-summary-kill-process-mark) @@ -588,32 +609,35 @@ definitely a spam.") "The spam-list-of-statistical-checks list contains all the mail splitters that need to have the full message body available.") -(defun spam-split () +(defun spam-split (&rest specific-checks) "Split this message into the `spam' group if it is spam. This function can be used as an entry in `nnmail-split-fancy', for -example like this: (: spam-split) +example like this: (: spam-split). It can take checks as parameters. See the Info node `(gnus)Fancy Mail Splitting' for more details." (interactive) (save-excursion - (dolist (check spam-list-of-statistical-checks) - (when (symbol-value check) - (widen) - (gnus-message 8 "spam-split: widening the buffer (%s requires it)" - (symbol-name check)) - (return))) -;; (progn (widen) (debug (buffer-string))) - (let ((list-of-checks spam-list-of-checks) - decision) - (while (and list-of-checks (not decision)) - (let ((pair (pop list-of-checks))) - (when (symbol-value (car pair)) - (gnus-message 5 "spam-split: calling the %s function" (symbol-name (cdr pair))) - (setq decision (funcall (cdr pair)))))) - (if (eq decision t) - nil - decision)))) - + (save-restriction + (dolist (check spam-list-of-statistical-checks) + (when (symbol-value check) + (widen) + (gnus-message 8 "spam-split: widening the buffer (%s requires it)" + (symbol-name check)) + (return))) + ;; (progn (widen) (debug (buffer-string))) + (let ((list-of-checks spam-list-of-checks) + decision) + (while (and list-of-checks (not decision)) + (let ((pair (pop list-of-checks))) + (when (and (symbol-value (car pair)) + (or (null specific-checks) + (memq (car pair) specific-checks))) + (gnus-message 5 "spam-split: calling the %s function" (symbol-name (cdr pair))) + (setq decision (funcall (cdr pair)))))) + (if (eq decision t) + nil + decision))))) + (defun spam-setup-widening () (dolist (check spam-list-of-statistical-checks) (when (symbol-value check) @@ -960,8 +984,14 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)." (spam-enter-whitelist from)))))) -;;;; Bogofilter +;;;; Spam-report glue +(defun spam-report-gmane-register-routine () + (spam-generic-register-routine + 'spam-report-gmane + nil)) + +;;;; Bogofilter (defun spam-check-bogofilter-headers (&optional score) (let ((header (message-fetch-field spam-bogofilter-header))) (when (and header @@ -979,7 +1009,8 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)." (save-window-excursion (gnus-summary-show-article t) (set-buffer gnus-article-buffer) - (let ((score (spam-check-bogofilter t))) + (let ((score (or (spam-check-bogofilter-headers t) + (spam-check-bogofilter t)))) (message "Spamicity score %s" score) (or score "0")))) diff --git a/lisp/uudecode.el b/lisp/uudecode.el index 8ef210a..75b7c86 100644 --- a/lisp/uudecode.el +++ b/lisp/uudecode.el @@ -1,11 +1,11 @@ ;;; uudecode.el -- elisp native uudecode -;; Copyright (c) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (c) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: uudecode news -;; This file is a part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/make.bat b/make.bat index bd3cbf2..ddd22a3 100755 --- a/make.bat +++ b/make.bat @@ -21,7 +21,7 @@ goto noemacs set EMACS=emacs.bat echo. echo *************************************************************************** -echo * Using emacs.bat (If you've got en Emacs >= 20.3 please remove Emacs.bat, +echo * Using emacs.bat (If you've got en Emacs >= 20.3 please remove Emacs.bat, echo * it isn't needed anymore. echo *************************************************************************** echo. @@ -42,12 +42,13 @@ if not exist %1\..\site-lisp mkdir %1\..\site-lisp if not exist %1\..\site-lisp\gnus mkdir %1\..\site-lisp\gnus if not exist %1\..\site-lisp\subdirs.el set subdirwarning=yes :emacsnocopy +set EMACS_ARGS=-batch -q -no-site-file set GNUS_INFO_DIR=%1\..\info set GNUS_LISP_DIR=%1\..\site-lisp\gnus\lisp set GNUS_ETC_DIR=%1\..\site-lisp\gnus\etc goto lisp - -:xemacs + +:xemacs set EMACS=xemacs.exe if not "%2" == "/copy" goto xemacsnocopy if not exist %1\..\..\site-packages\ mkdir %1\..\..\site-packages\ @@ -55,6 +56,7 @@ if not exist %1\..\..\site-packages\info mkdir %1\..\..\site-packages\info if not exist %1\..\..\site-packages\lisp mkdir %1\..\..\site-packages\lisp if not exist %1\..\..\site-packages\etc mkdir %1\..\..\site-packages\etc :xemacsnocopy +set EMACS_ARGS=-batch -no-autoloads set GNUS_INFO_DIR=%1\..\..\site-packages\info set GNUS_LISP_DIR=%1\..\..\site-packages\lisp\gnus set GNUS_ETC_DIR=%1\..\..\site-packages\etc @@ -66,7 +68,7 @@ echo. goto lisp :lisp -set EMACSBATCH=call %1\%EMACS% -no-site-file -batch -q +set EMACSBATCH=call %1\%EMACS% %EMACS_ARGS% cd lisp if exist gnus-load.el del gnus-load.el echo. @@ -97,7 +99,7 @@ goto infotest cd ..\texi if exist sieve del sieve makeinfo sieve.texi -if exist sieve goto minfo +if exist sieve goto minfo REM It seems that makeinfo isn't available set EMACSINFO=%EMACSBATCH% -l infohack.el -f batch-makeinfo echo. @@ -108,7 +110,7 @@ echo. goto info :minfo -set EMACSINFO=makeinfo +set EMACSINFO=makeinfo echo. echo *************************************************************************** echo * Using makeinfo @@ -156,8 +158,8 @@ if ErrorLevel 1 set ERROR=%ERROR%,copy-pgg-info echo. echo *************************************************************************** -echo * You should add the following lines to -echo * %GNUS_INFO_DIR%\dir +echo * You should add the following lines to +echo * %GNUS_INFO_DIR%\dir echo * if they aren't already there: echo * echo * * PGG: (pgg). Emacs interface to various PGP implementations. @@ -184,7 +186,7 @@ goto warnings :nocopy echo. echo *************************************************************************** -echo * You chose not to copy the files, therefore you should add the +echo * You chose not to copy the files, therefore you should add the echo * following lines to the TOP of your [X]emacs customization file: echo * echo * (add-to-list 'load-path "/Path/to/gnus/lisp") @@ -258,14 +260,14 @@ echo. echo *************************************************************************** echo * Usage: make.bat :[X]Emacs-exe-dir: [/copy] echo * -echo * where: :[X]Emacs-exe-dir: is the directory your -echo * emacs.exe respectively xemacs.exe resides in, +echo * where: :[X]Emacs-exe-dir: is the directory your +echo * emacs.exe respectively xemacs.exe resides in, echo * e.g. G:\Programme\XEmacs\XEmacs-21.4.11\i586-pc-win32\ echo * or G:\Emacs\bin echo * /copy indicates that the compiled files should be copied to your echo * emacs lisp, info, and etc site directories. echo * -echo * Note: If you have Emacs/w3 you should set the environment variable +echo * Note: If you have Emacs/w3 you should set the environment variable echo * W3DIR to the directory where w3 is installed eg. echo * set W3DIR=d:\lisp\w3-4.0pre46\lisp echo *************************************************************************** diff --git a/texi/ChangeLog b/texi/ChangeLog index 93b7209..164a4a9 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,74 @@ +2003-04-27 Jesper Harder + + * message.texi, gnus.texi: Use the second arg to @uref where it + makes sense to make HTML and PDF output look nicer. + +2003-04-26 Jesper Harder + + * gnus-faq.texi: Make it compile in the LaTeX version. Remove + redundant entries in @urefs. + (FAQ - Glossary): Remove the final @bye since it breaks the Gnus + manual. + ([1.2]): @subsection -> @subheading. + + * texi2latex.el (latexi-translate-file): Support @r, @env, + @heading, @subheading, @TeX. + + * gnus.texi, message.texi, emacs-mime.texi: Markup improvements + and fixes. + +2003-04-24 Reiner Steib + + * gnus.texi (Selecting a Group): Add gnus-large-ephemeral-newsgroup. + (Filling In Threads): Add gnus-fetch-old-ephemeral-headers. + (Terminology): Index. + +2003-04-22 Jesper Harder + + * gnus.texi: nil -> @code{nil}. Capitalize "Rmail" and "Babyl" + consistently. + +2003-04-22 Reiner Steib + + * gnus-faq.texi: Allow inclusion in `gnus.texi' again. + +2003-04-21 Reiner Steib + + * gnus-faq.texi: New, the Gnus FAQ from http://my.gnus.org/FAQ. + From Frank Schmitt . + + * gnus.texi (Server Variables): Added server parameters and index. + +2003-04-21 Kai Gro,A_(Bjohann + + * gnus.texi (Group Parameters): Pointer to + gnus-newsgroup-variables. + +2003-04-20 Jesper Harder + + * gnus.texi (Summary Buffer Lines): Add + gnus-sum-thread-tree-false-root. + +2003-04-15 Michael Shields + + * gnus.texi (Group Parameters, Hiding Headers): Document that + the broken-reply-to group parameter now also affects header + hiding. + * gnus.texi (Summary Mail Commands): Suggest setting the + broken-reply-to parameter if you find yourself using `B r'. + +2003-04-16 Simon Josefsson + + * emacs-mime.texi (MML Definition): Add sender tag. + +2003-04-16 Lars Magne Ingebrigtsen + + * gnus.texi (Group Line Specification): Add. + +2003-04-13 Simon Josefsson + + * gnus.texi (Security): Add text about PGP key snarf. + 2003-04-13 Lars Magne Ingebrigtsen * gnus.texi (Misc Article): Addition. diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi index a36c5b0..40b91b1 100644 --- a/texi/emacs-mime.texi +++ b/texi/emacs-mime.texi @@ -76,24 +76,24 @@ license to the document, as described in section 6 of the license. @top Emacs MIME This manual documents the libraries used to compose and display -@sc{mime} messages. +@acronym{MIME} messages. This manual is directed at users who want to modify the behaviour of -the @sc{mime} encoding/decoding process or want a more detailed -picture of how the Emacs @sc{mime} library works, and people who want -to write functions and commands that manipulate @sc{mime} elements. +the @acronym{MIME} encoding/decoding process or want a more detailed +picture of how the Emacs @acronym{MIME} library works, and people who want +to write functions and commands that manipulate @acronym{MIME} elements. -@sc{mime} is short for @dfn{Multipurpose Internet Mail Extensions}. +@acronym{MIME} is short for @dfn{Multipurpose Internet Mail Extensions}. This standard is documented in a number of RFCs; mainly RFC2045 (Format of Internet Message Bodies), RFC2046 (Media Types), RFC2047 (Message -Header Extensions for Non-ASCII Text), RFC2048 (Registration +Header Extensions for Non-@acronym{ASCII} Text), RFC2048 (Registration Procedures), RFC2049 (Conformance Criteria and Examples). It is highly -recommended that anyone who intends writing @sc{mime}-compliant software +recommended that anyone who intends writing @acronym{MIME}-compliant software read at least RFC2045 and RFC2047. @menu * Decoding and Viewing:: A framework for decoding and viewing. -* Composing:: MML; a language for describing @sc{mime} parts. +* Composing:: MML; a language for describing @acronym{MIME} parts. * Interface Functions:: An abstraction over the basic functions. * Basic Functions:: Utility and basic parsing functions. * Standards:: A summary of RFCs and working documents used. @@ -104,16 +104,16 @@ read at least RFC2045 and RFC2047. @node Decoding and Viewing @chapter Decoding and Viewing -This chapter deals with decoding and viewing @sc{mime} messages on a +This chapter deals with decoding and viewing @acronym{MIME} messages on a higher level. -The main idea is to first analyze a @sc{mime} article, and then allow +The main idea is to first analyze a @acronym{MIME} article, and then allow other programs to do things based on the list of @dfn{handles} that are returned as a result of this analysis. @menu -* Dissection:: Analyzing a @sc{mime} message. -* Non-MIME:: Analyzing a non-@sc{mime} message. +* Dissection:: Analyzing a @acronym{MIME} message. +* Non-MIME:: Analyzing a non-@acronym{MIME} message. * Handles:: Handle manipulations. * Display:: Displaying handles. * Display Customization:: Variables that affect display. @@ -126,15 +126,15 @@ returned as a result of this analysis. @section Dissection The @code{mm-dissect-buffer} is the function responsible for dissecting -a @sc{mime} article. If given a multipart message, it will recursively +a @acronym{MIME} article. If given a multipart message, it will recursively descend the message, following the structure, and return a tree of -@sc{mime} handles that describes the structure of the message. +@acronym{MIME} handles that describes the structure of the message. @node Non-MIME @section Non-MIME @vindex mm-uu-configure-list -Gnus also understands some non-@sc{mime} attachments, such as +Gnus also understands some non-@acronym{MIME} attachments, such as postscript, uuencode, binhex, yenc, shar, forward, gnatsweb, pgp, diff. Each of these features can be disabled by add an item into @code{mm-uu-configure-list}. For example, @@ -167,7 +167,7 @@ Shar archive file. @item forward @findex forward -Non-@sc{mime} forwarded message. +Non-@acronym{MIME} forwarded message. @item gnatsweb @findex gnatsweb @@ -175,15 +175,15 @@ Gnatsweb attachment. @item pgp-signed @findex pgp-signed -PGP signed clear text. +@acronym{PGP} signed clear text. @item pgp-encrypted @findex pgp-encrypted -PGP encrypted clear text. +@acronym{PGP} encrypted clear text. @item pgp-key @findex pgp-key -PGP public keys. +@acronym{PGP} public keys. @item emacs-sources @findex emacs-sources @@ -203,7 +203,7 @@ are automatically sent to. It only works in groups matching @node Handles @section Handles -A @sc{mime} handle is a list that fully describes a @sc{mime} +A @acronym{MIME} handle is a list that fully describes a @acronym{MIME} component. The following macros can be used to access elements in a handle: @@ -211,7 +211,7 @@ The following macros can be used to access elements in a handle: @table @code @item mm-handle-buffer @findex mm-handle-buffer -Return the buffer that holds the contents of the undecoded @sc{mime} +Return the buffer that holds the contents of the undecoded @acronym{MIME} part. @item mm-handle-type @@ -261,11 +261,11 @@ Remove the part (if it has been displayed). @item mm-inlinable-p @findex mm-inlinable-p -Say whether a @sc{mime} type can be displayed inline. +Say whether a @acronym{MIME} type can be displayed inline. @item mm-automatic-display-p @findex mm-automatic-display-p -Say whether a @sc{mime} type should be displayed automatically. +Say whether a @acronym{MIME} type should be displayed automatically. @item mm-destroy-part @findex mm-destroy-part @@ -293,7 +293,7 @@ Prompt for a mailcap method to use to view the part. @item mm-inline-media-tests @vindex mm-inline-media-tests -This is an alist where the key is a @sc{mime} type, the second element +This is an alist where the key is a @acronym{MIME} type, the second element is a function to display the part @dfn{inline} (i.e., inside Emacs), and the third element is a form to be @code{eval}ed to say whether the part can be displayed inline. @@ -306,7 +306,7 @@ and, if so, how to do it. It does not say whether parts are @vindex mm-inlined-types This, on the other hand, says what types are to be displayed inline, if they satisfy the conditions set by the variable above. It's a list of -@sc{mime} media types. +@acronym{MIME} media types. @item mm-automatic-display @vindex mm-automatic-display @@ -326,14 +326,14 @@ be killed when selecting a different article. @item mm-attachment-override-types @vindex mm-attachment-override-types -Some @sc{mime} agents create parts that have a content-disposition of +Some @acronym{MIME} agents create parts that have a content-disposition of @samp{attachment}. This variable allows overriding that disposition and displaying the part inline. (Note that the disposition is only overridden if we are able to, and want to, display the part inline.) @item mm-discouraged-alternatives @vindex mm-discouraged-alternatives -List of @sc{mime} types that are discouraged when viewing +List of @acronym{MIME} types that are discouraged when viewing @samp{multipart/alternative}. Viewing agents are supposed to view the last possible part of a message, as that is supposed to be the richest. However, users may prefer other types instead, and this list says what @@ -371,17 +371,17 @@ variable will cause @samp{text/html} parts to be treated as attachments. @item mm-text-html-renderer @vindex mm-text-html-renderer -This selects the function used to render @sc{html}. The predefined +This selects the function used to render @acronym{HTML}. The predefined renderers are selected by the symbols @code{w3}, @code{w3m}@footnote{See @uref{http://emacs-w3m.namazu.org/} for more information about emacs-w3m}, @code{links}, @code{lynx}, @code{w3m-standalone} or @code{html2text}. If @code{nil} use an external viewer. You can also specify a function, which will be -called with a @sc{mime} handle as the argument. +called with a @acronym{MIME} handle as the argument. @item mm-inline-text-html-with-images @vindex mm-inline-text-html-with-images -Some @sc{html} mails might have the trick of spammers using +Some @acronym{HTML} mails might have the trick of spammers using @samp{} tags. It is likely to be intended to verify whether you have read the mail. You can prevent your personal informations from leaking by setting this option to @code{nil} (which is the default). @@ -394,9 +394,9 @@ or @kbd{I} instead.} @item mm-w3m-safe-url-regexp @vindex mm-w3m-safe-url-regexp A regular expression that matches safe URL names, i.e. URLs that are -unlikely to leak personal information when rendering @sc{html} email -(the default value is @samp{\\`cid:}). If @code{nil} consider all -URLs safe. +unlikely to leak personal information when rendering @acronym{HTML} +email (the default value is @samp{\\`cid:}). If @code{nil} consider +all URLs safe. @item mm-inline-text-html-with-w3m-keymap @vindex mm-inline-text-html-with-w3m-keymap @@ -425,7 +425,7 @@ Directory for storing temporary files. @item mm-file-name-rewrite-functions @vindex mm-file-name-rewrite-functions -A list of functions used for rewriting file names of @sc{mime} +A list of functions used for rewriting file names of @acronym{MIME} parts. Each function is applied successively to the file name. Ready-made functions include @@ -456,7 +456,7 @@ The standard Emacs functions @code{capitalize}, @code{downcase}, @item mm-path-name-rewrite-functions @vindex mm-path-name-rewrite-functions -List of functions used for rewriting the full file names of @sc{mime} +List of functions used for rewriting the full file names of @acronym{MIME} parts. This is used when viewing parts externally, and is meant for transforming the absolute name so that non-compliant programs can find the file where it's saved. @@ -479,7 +479,7 @@ Here's an example viewer for displaying @code{text/enriched} inline: (mm-insert-inline handle text))) @end lisp -We see that the function takes a @sc{mime} handle as its parameter. It +We see that the function takes a @acronym{MIME} handle as its parameter. It then goes to a temporary buffer, inserts the text of the part, does some work on the text, stores the result, goes back to the buffer it was called from and inserts the result. @@ -499,22 +499,22 @@ tell it to insert, but it also sets things up so that the text can be @cindex MML @cindex MIME Meta Language -Creating a @sc{mime} message is boring and non-trivial. Therefore, a +Creating a @acronym{MIME} message is boring and non-trivial. Therefore, a library called @code{mml} has been defined that parses a language called -MML (@sc{mime} Meta Language) and generates @sc{mime} messages. +MML (@acronym{MIME} Meta Language) and generates @acronym{MIME} messages. @findex mml-generate-mime The main interface function is @code{mml-generate-mime}. It will examine the contents of the current (narrowed-to) buffer and return a -string containing the @sc{mime} message. +string containing the @acronym{MIME} message. @menu * Simple MML Example:: An example MML document. * MML Definition:: All valid MML elements. * Advanced MML Example:: Another example MML document. * Encoding Customization:: Variables that affect encoding. -* Charset Translation:: How charsets are mapped from @sc{mule} to @sc{mime}. -* Conversion:: Going from @sc{mime} to MML and vice versa. +* Charset Translation:: How charsets are mapped from @sc{mule} to @acronym{MIME}. +* Conversion:: Going from @acronym{MIME} to MML and vice versa. * Flowed text:: Soft and hard newlines. @end menu @@ -576,12 +576,12 @@ but that's not necessary unless the value contains white space. So The following parameters have meaning in MML; parameters that have no meaning are ignored. The MML parameter names are the same as the -@sc{mime} parameter names; the things in the parentheses say which +@acronym{MIME} parameter names; the things in the parentheses say which header it will be used in. @table @samp @item type -The @sc{mime} type of the part (@code{Content-Type}). +The @acronym{MIME} type of the part (@code{Content-Type}). @item filename Use the contents of the file in the body of the part @@ -620,6 +620,10 @@ RFC822 date when the part was read (@code{Content-Disposition}). Who to encrypt/sign the part to. This field is used to override any auto-detection based on the To/CC headers. +@item sender +Identity used to sign the part. This field is used to override the +default key used. + @item size The size (in octets) of the part (@code{Content-Disposition}). @@ -701,7 +705,7 @@ This plain text part is an attachment. <#/multipart> @end example -And this is the resulting @sc{mime} message: +And this is the resulting @acronym{MIME} message: @example Content-Type: multipart/mixed; boundary="=-=-=" @@ -774,7 +778,7 @@ This plain text part is an attachment. @item mm-body-charset-encoding-alist @vindex mm-body-charset-encoding-alist -Mapping from @sc{mime} charset to encoding to use. This variable is +Mapping from @acronym{MIME} charset to encoding to use. This variable is usually used except, e.g., when other requirements force a specific encoding (digitally signed messages require 7bit encodings). The default is @@ -806,10 +810,10 @@ basis by using the @code{charset} MML tag (@pxref{MML Definition}). @item mm-content-transfer-encoding-defaults @vindex mm-content-transfer-encoding-defaults -Mapping from @sc{mime} types to encoding to use. This variable is usually +Mapping from @acronym{MIME} types to encoding to use. This variable is usually used except, e.g., when other requirements force a safer encoding (digitally signed messages require 7bit encoding). Besides the normal -@sc{mime} encodings, @code{qp-or-base64} may be used to indicate that for +@acronym{MIME} encodings, @code{qp-or-base64} may be used to indicate that for each case the most efficient of quoted-printable and base64 should be used. You can override this setting on a per-message basis by using the @code{encoding} MML tag (@pxref{MML Definition}). @@ -830,19 +834,19 @@ encoding messages that are to be digitally signed). @section Charset Translation @cindex charsets -During translation from MML to @sc{mime}, for each @sc{mime} part which +During translation from MML to @acronym{MIME}, for each @acronym{MIME} part which has been composed inside Emacs, an appropriate charset has to be chosen. @vindex mail-parse-charset If you are running a non-@sc{mule} Emacs, this process is simple: If the -part contains any non-ASCII (8-bit) characters, the @sc{mime} charset +part contains any non-@acronym{ASCII} (8-bit) characters, the @acronym{MIME} charset given by @code{mail-parse-charset} (a symbol) is used. (Never set this variable directly, though. If you want to change the default charset, please consult the documentation of the package which you use to process -@sc{mime} messages. +@acronym{MIME} messages. @xref{Various Message Variables, , Various Message Variables, message, Message Manual}, for example.) -If there are only ASCII characters, the @sc{mime} charset US-ASCII is +If there are only @acronym{ASCII} characters, the @acronym{MIME} charset US-ASCII is used, of course. @cindex MULE @@ -851,17 +855,17 @@ used, of course. @vindex mm-mime-mule-charset-alist Things are slightly more complicated when running Emacs with @sc{mule} support. In this case, a list of the @sc{mule} charsets used in the -part is obtained, and the @sc{mule} charsets are translated to @sc{mime} +part is obtained, and the @sc{mule} charsets are translated to @acronym{MIME} charsets by consulting the variable @code{mm-mime-mule-charset-alist}. -If this results in a single @sc{mime} charset, this is used to encode -the part. But if the resulting list of @sc{mime} charsets contains more +If this results in a single @acronym{MIME} charset, this is used to encode +the part. But if the resulting list of @acronym{MIME} charsets contains more than one element, two things can happen: If it is possible to encode the part via UTF-8, this charset is used. (For this, Emacs must support the @code{utf-8} coding system, and the part must consist entirely of characters which have Unicode counterparts.) If UTF-8 is not available for some reason, the part is split into several ones, so that each one -can be encoded with a single @sc{mime} charset. The part can only be -split at line boundaries, though---if more than one @sc{mime} charset is +can be encoded with a single @acronym{MIME} charset. The part can only be +split at line boundaries, though---if more than one @acronym{MIME} charset is required to encode a single line, it is not possible to encode the part. When running Emacs with @sc{mule} support, the preferences for which @@ -884,23 +888,23 @@ Customization}). @section Conversion @findex mime-to-mml -A (multipart) @sc{mime} message can be converted to MML with the +A (multipart) @acronym{MIME} message can be converted to MML with the @code{mime-to-mml} function. It works on the message in the current -buffer, and substitutes MML markup for @sc{mime} boundaries. +buffer, and substitutes MML markup for @acronym{MIME} boundaries. Non-textual parts do not have their contents in the buffer, but instead have the contents in separate buffers that are referred to from the MML tags. @findex mml-to-mime -An MML message can be converted back to @sc{mime} by the +An MML message can be converted back to @acronym{MIME} by the @code{mml-to-mime} function. These functions are in certain senses ``lossy''---you will not get back -an identical message if you run @sc{mime-to-mml} and then -@sc{mml-to-mime}. Not only will trivial things like the order of the +an identical message if you run @code{mime-to-mml} and then +@code{mml-to-mime}. Not only will trivial things like the order of the headers differ, but the contents of the headers may also be different. For instance, the original message may use base64 encoding on text, -while @sc{mml-to-mime} may decide to use quoted-printable encoding, and +while @code{mml-to-mime} may decide to use quoted-printable encoding, and so on. In essence, however, these two functions should be the inverse of each @@ -912,7 +916,7 @@ if not identical. @section Flowed text @cindex format=flowed -The Emacs @sc{mime} library will respect the @code{use-hard-newlines} +The Emacs @acronym{MIME} library will respect the @code{use-hard-newlines} variable (@pxref{Hard and Soft Newlines, ,Hard and Soft Newlines, emacs, Emacs Manual}) when encoding a message, and the ``format=flowed'' Content-Type parameter when decoding a message. @@ -942,9 +946,9 @@ low-level libraries that are described in the next chapter. Standards change, and so programs have to change to fit in the new mold. For instance, RFC2045 describes a syntax for the -@code{Content-Type} header that only allows ASCII characters in the +@code{Content-Type} header that only allows @acronym{ASCII} characters in the parameter list. RFC2231 expands on RFC2045 syntax to provide a scheme -for continuation headers and non-ASCII characters. +for continuation headers and non-@acronym{ASCII} characters. The traditional way to deal with this is just to update the library functions to parse the new syntax. However, this is sometimes the wrong @@ -953,7 +957,7 @@ both the old syntax as well as the new syntax, and if there is only one library, one must choose between the old version of the library and the new version of the library. -The Emacs @sc{mime} library takes a different tack. It defines a +The Emacs @acronym{MIME} library takes a different tack. It defines a series of low-level libraries (@file{rfc2047.el}, @file{rfc2231.el} and so on) that parses strictly according to the corresponding standard. However, normal programs would not use the functions @@ -1091,12 +1095,12 @@ Return the value of the field under point. @item mail-encode-encoded-word-region @findex mail-encode-encoded-word-region -Encode the non-ASCII words in the region. For instance, +Encode the non-@acronym{ASCII} words in the region. For instance, @samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}. @item mail-encode-encoded-word-buffer @findex mail-encode-encoded-word-buffer -Encode the non-ASCII words in the current buffer. This function is +Encode the non-@acronym{ASCII} words in the current buffer. This function is meant to be called narrowed to the headers of a message. @item mail-encode-encoded-word-string @@ -1159,7 +1163,7 @@ on. High-level functionality is dealt with in the next chapter @node rfc2045 @section rfc2045 -RFC2045 is the ``main'' @sc{mime} document, and as such, one would +RFC2045 is the ``main'' @acronym{MIME} document, and as such, one would imagine that there would be a lot to implement. But there isn't, since most of the implementation details are delegated to the subsequent RFCs. @@ -1270,8 +1274,8 @@ Narrow the buffer to the header section of the current buffer. @node rfc2047 @section rfc2047 -RFC2047 (Message Header Extensions for Non-ASCII Text) specifies how -non-ASCII text in headers are to be encoded. This is actually rather +RFC2047 (Message Header Extensions for Non-@acronym{ASCII} Text) specifies how +non-@acronym{ASCII} text in headers are to be encoded. This is actually rather complicated, so a number of variables are necessary to tweak what this library does. @@ -1352,7 +1356,7 @@ Decode a string and return the results. @node time-date @section time-date -While not really a part of the @sc{mime} library, it is convenient to +While not really a part of the @acronym{MIME} library, it is convenient to document this library here. It deals with parsing @code{Date} headers and manipulating time. (Not by using tesseracts, though, I'm sorry to say.) @@ -1612,11 +1616,11 @@ Decode the encoded text in the region. @cindex HZ @cindex Chinese -RFC1843 deals with mixing Chinese and ASCII characters in messages. In -essence, RFC1843 switches between ASCII and Chinese by doing this: +RFC1843 deals with mixing Chinese and @acronym{ASCII} characters in messages. In +essence, RFC1843 switches between @acronym{ASCII} and Chinese by doing this: @example -This sentence is in ASCII. +This sentence is in @acronym{ASCII}. The next sentence is in GB.~@{<:Ky2;S@{#,NpJ)l6HK!#~@}Bye. @end example @@ -1637,7 +1641,7 @@ Decode a HZ-encoded string and return the result. @node mailcap @section mailcap -The @file{~/.mailcap} file is parsed by most @sc{mime}-aware message +The @file{~/.mailcap} file is parsed by most @acronym{MIME}-aware message handlers and describes how elements are supposed to be displayed. Here's an example file: @@ -1669,7 +1673,7 @@ Interface functions: Parse the @file{~/.mailcap} file. @item mailcap-mime-info -Takes a @sc{mime} type as its argument and returns the matching viewer. +Takes a @acronym{MIME} type as its argument and returns the matching viewer. @end table @@ -1679,7 +1683,7 @@ Takes a @sc{mime} type as its argument and returns the matching viewer. @node Standards @chapter Standards -The Emacs @sc{mime} library implements handling of various elements +The Emacs @acronym{MIME} library implements handling of various elements according to a (somewhat) large number of RFCs, drafts and standards documents. This chapter lists the relevant ones. They can all be fetched from @uref{http://quimby.gnus.org/notes/}. @@ -1699,7 +1703,7 @@ Format of Internet Message Bodies Media Types @item RFC2047 -Message Header Extensions for Non-ASCII Text +Message Header Extensions for Non-@acronym{ASCII} Text @item RFC2048 Registration Procedures @@ -1708,18 +1712,18 @@ Registration Procedures Conformance Criteria and Examples @item RFC2231 -@sc{mime} Parameter Value and Encoded Word Extensions: Character Sets, +@acronym{MIME} Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations @item RFC1843 HZ - A Data Format for Exchanging Files of Arbitrarily Mixed Chinese and -ASCII characters +@acronym{ASCII} characters @item draft-ietf-drums-msg-fmt-05.txt Draft for the successor of RFC822 @item RFC2112 -The @sc{mime} Multipart/Related Content-type +The @acronym{MIME} Multipart/Related Content-type @item RFC1892 The Multipart/Report Content Type for the Reporting of Mail System diff --git a/texi/gnus-faq.texi b/texi/gnus-faq.texi index d3da1d5..00dec35 100644 --- a/texi/gnus-faq.texi +++ b/texi/gnus-faq.texi @@ -1,673 +1,2637 @@ @c Insert "\input texinfo" at 1st line before texing this file alone. @c -*-texinfo-*- -@c Copyright (C) 1995, 2001, 2002 Free Software Foundation, Inc. +@c Copyright (C) 1995, 2001, 2003 Free Software Foundation, Inc. @setfilename gnus-faq.info +@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top + @node Frequently Asked Questions +@comment node-name, next, previous, up + +@c @chapter Frequently Asked Questions @section Frequently Asked Questions +@c - Uncomment @chapter, comment @section +@c - run (texinfo-every-node-update) +@c - revert it. + +@menu +* FAQ - Introduction:: About Gnus and this FAQ. +* FAQ 1 - Installation:: Installation of Gnus. +* FAQ 2 - Startup / Group buffer:: Start up questions and the first buffer Gnus shows you. +* FAQ 3 - Getting messages:: Making Gnus read your mail and news. +* FAQ 4 - Reading messages:: How to efficiently read messages. +* FAQ 5 - Composing messages:: Composing mails or Usenet postings. +* FAQ 6 - Old messages:: Importing, archiving, searching and deleting messages. +* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. +* FAQ 8 - Getting help:: When this FAQ isn't enough. +* FAQ 9 - Tuning Gnus:: How to make Gnus faster. +* FAQ - Glossary:: Terms used in the FAQ explained. +@end menu + + +@subheading Abstract + + This is the new Gnus Frequently Asked Questions list. If you have a +Web browser, the official hypertext version is at +@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from +@uref{http://sourceforge.net/projects/gnus/}. + + + Please submit features and suggestions to the + @uref{mailto:faq-discuss@@my.gnus.org,FAQ discussion list}. + The list is protected against junk mail with + @uref{http://smarden.org/qconfirm/index.html,qconfirm}. As + a subscriber, your submissions will automatically pass. You can + also subscribe to the list by sending a blank email to + @email{faq-discuss-subscribe@@my.gnus.org} + and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse the archive}. + +@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions +@comment node-name, next, previous, up +@heading Introduction + This is the Gnus Frequently Asked Questions list. -If you have a Web browser, the official hypertext version is at -@uref{http://www.ccs.neu.edu/software/contrib/gnus/}, and has -probably been updated since you got this manual. + +Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented + as a part of Emacs. It's been around in some form for almost a decade + now, and has been distributed as a standard part of Emacs for much of + that time. Gnus 5 is the latest (and greatest) incarnation. The + original version was called GNUS, and was written by Masanobu UMEDA. + When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and + decided to rewrite Gnus. + + Its biggest strength is the fact that it is extremely + customizable. It is somewhat intimidating at first glance, but + most of the complexity can be ignored until you're ready to take + advantage of it. If you receive a reasonable volume of e-mail + (you're on various mailing lists), or you would like to read + high-volume mailing lists but cannot keep up with them, or read + high volume newsgroups or are just bored, then Gnus is what you + want. + + This FAQ was maintained by Justin Sheehy until March 2002. He + would like to thank Steve Baur and Per Abrahamsen for doing a wonderful + job with this FAQ before him. We would like to do the same - thanks, + Justin! + + + If you have a Web browser, the official hypertext version is at: + @uref{http://my.gnus.org/FAQ/}. + This version is much nicer than the unofficial hypertext + versions that are archived at Utrecht, Oxford, Smart Pages, Ohio + State, and other FAQ archives. See the resources question below + if you want information on obtaining it in another format. + + + The information contained here was compiled with the assistance + of the Gnus development mailing list, and any errors or + misprints are the my.gnus.org team's fault, sorry. + + +@ifnottex +@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions +@end ifnottex +@section Installation @menu -* Installation FAQ:: Installation of Gnus. -* Customization FAQ:: Customizing Gnus. -* Reading News FAQ:: News Reading Questions. -* Reading Mail FAQ:: Mail Reading Questions. +* [1.1]:: What is the latest version of Gnus? +* [1.2]:: What's new in 5.10.0? +* [1.3]:: Where and how to get Gnus? +* [1.4]:: What to do with the tarball now? +* [1.5]:: Which version of Emacs do I need? +* [1.6]:: How do I run Gnus on both Emacs and XEmacs? @end menu -@node Installation FAQ -@subsection Installation +@ifnottex +@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation +@end ifnottex +@subheading Question 1.1: -@itemize @bullet -@item -Q1.1 What is the latest version of Gnus? +What is the latest version of Gnus? -The latest (and greatest) version is 5.0.10. You might also run -across something called @emph{September Gnus}. September Gnus -is the alpha version of the next major release of Gnus. It is currently -not stable enough to run unless you are prepared to debug lisp. +Answer: -@item -Q1.2 Where do I get Gnus? + Jingle please: Gnus 5.10.0 is released, get it while it's + hot! As well as the step in version number is rather + small, Gnus 5.10 has tons of new features which you + shouldn't miss, however if you are cautious, you might + prefer to stay with 5.8.8 respectively 5.9 (they are + basically the same) until some bugfix releases are out. + +@ifnottex +@node [1.2], [1.3], [1.1], FAQ 1 - Installation +@end ifnottex +@subheading Question 1.2: -Any of the following locations: +What's new in 5.10.0? -@itemize @minus -@item -@uref{ftp://ftp.ifi.uio.no/pub/emacs/gnus/gnus.tar.gz} +Answer: -@item -@uref{ftp://ftp.pilgrim.umass.edu/pub/misc/ding/} + First of all, you should have a look into the file + GNUS-NEWS in the toplevel directory of the Gnus tarball, + there the most important changes are listed. Here's a + short list of the changes I find especially + important/interesting: + -@item -@file{gopher://gopher.pilgrim.umass.edu/11/pub/misc/ding/} + -@item -@uref{ftp://aphrodite.nectar.cs.cmu.edu/pub/ding-gnus/} +@itemize @bullet{} @item -@uref{ftp://ftp.solace.mh.se:/pub/gnu/elisp/} + Major rewrite of the Gnus agent, Gnus agent is now + active by default. + + + Many new article washing functions for dealing with + ugly formatted articles. + + + Anti Spam features. + + message-utils now included in Gnus. + + + New format specifiers for summary lines, e.g. %B for + a complex trn-style thread tree. + @end itemize + +@ifnottex +@node [1.3], [1.4], [1.2], FAQ 1 - Installation +@end ifnottex +@subheading Question 1.3: + +Where and how to get Gnus? + +Answer: + + The latest released version of Gnus isn't included in + Emacs 21 and until now it also isn't available through the + package system of XEmacs 21.4, therefor you should get the + Gnus tarball from + @uref{http://www.gnus.org/dist/gnus.tar.gz} + or via anonymous FTP from + @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. + +@ifnottex +@node [1.4], [1.5], [1.3], FAQ 1 - Installation +@end ifnottex +@subheading Question 1.4: + + What to do with the tarball now? + + +Answer: + + Untar it via @samp{tar xvzf gnus.tar.gz} and do the common + @samp{./configure; make; make install} circle. + (under MS-Windows either get the Cygwin environment from + @uref{http://www.cygwin.com} + which allows you to do what's described above or unpack the + tarball with some packer (e.g. Winace from + @uref{http://www.winace.com}) + and use the batch-file make.bat included in the tarball to install + Gnus. If you don't want to (or aren't allowed to) install Gnus + system-wide, you can install it in your home directory and add the + following lines to your ~/.xemacs/init.el or ~/.emacs: + -@item -Q1.3 Which version of Emacs do I need? +@example -At least GNU Emacs 19.28, or XEmacs 19.12 is recommended. GNU Emacs -19.25 has been reported to work under certain circumstances, but it -doesn't @emph{officially} work on it. 19.27 has also been reported to -work. Gnus has been reported to work under OS/2 as well as Unix. +(add-to-list 'load-path "/path/to/gnus/lisp") +(if (featurep 'xemacs) + (add-to-list 'Info-directory-list "/path/to/gnus/texi/") + (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) + +@end example +@noindent + Make sure that you don't have any gnus related stuff + before this line, on MS Windows use something like + "C:/path/to/lisp" (yes, "/"). + +@ifnottex +@node [1.5], [1.6], [1.4], FAQ 1 - Installation +@end ifnottex +@subheading Question 1.5: + +Which version of Emacs do I need? + +Answer: + + Gnus 5.10.0 requires an Emacs version that is greater + than or equal to Emacs 20.3 or XEmacs 20.1. + +@ifnottex +@node [1.6], , [1.5], FAQ 1 - Installation +@end ifnottex +@subheading Question 1.6: + +How do I run Gnus on both Emacs and XEmacs? + +Answer: + + You can't use the same copy of Gnus in both as the Lisp + files are byte-compiled to a format which is different + depending on which Emacs did the compilation. Get one copy + of Gnus for Emacs and one for XEmacs. + +@ifnottex +@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions +@end ifnottex +@section Startup / Group buffer -@item -Q1.4 Where is timezone.el? +@menu +* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save file exists. Do you want to read it?", what does this mean and how to prevent it? +* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? +* [2.3]:: How to change the format of the lines in Group buffer? +* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my groups into categories so I can easier browse through them? +* [2.5]:: How to manually sort the groups in Group buffer? How to sort the groups in a topic? +@end menu -Upgrade to XEmacs 19.13. In earlier versions of XEmacs this file was -placed with Gnus 4.1.3, but that has been corrected. +@ifnottex +@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer +@end ifnottex +@subheading Question 2.1: + + Every time I start Gnus I get a message "Gnus auto-save + file exists. Do you want to read it?", what does this mean + and how to prevent it? + + +Answer: + + This message means that the last time you used Gnus, it + wasn't properly exited and therefor couldn't write its + informations to disk (e.g. which messages you read), you + are now asked if you want to restore those informations + from the auto-save file. + + + To prevent this message make sure you exit Gnus + via @samp{q} in group buffer instead of + just killing Emacs. + +@ifnottex +@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer +@end ifnottex +@subheading Question: 2.2 + + Gnus doesn't remember which groups I'm subscribed to, + what's this? + + +Answer: + + You get the message described in the q/a pair above while + starting Gnus, right? It's an other symptom for the same + problem, so read the answer above. + +@ifnottex +@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer +@end ifnottex +@subheading Question 2.3: + + How to change the format of the lines in Group buffer? + + +Answer: + + You've got to tweak the value of the variable + gnus-group-line-format. See the manual node "Group Line + Specification" for information on how to do this. An + example for this (guess from whose .gnus :-)): + +@example -@item -Q1.5 When I run Gnus on XEmacs 19.13 I get weird error messages. +(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") + +@end example + +@ifnottex +@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer +@end ifnottex +@subheading Question 2.4: + + My group buffer becomes a bit crowded, is there a way to + sort my groups into categories so I can easier browse + through them? + + +Answer: + + Gnus offers the topic mode, it allows you to sort your + groups in, well, topics, e.g. all groups dealing with + Linux under the topic linux, all dealing with music under + the topic music and all dealing with scottish music under + the topic scottish which is a subtopic of music. + + + To enter topic mode, just hit t while in Group buffer. Now + you can use @samp{T n} to create a topic + at point and @samp{T m} to move a group to + a specific topic. For more commands see the manual or the + menu. You might want to include the %P specifier at the + beginning of your gnus-group-line-format variable to have + the groups nicely indented. + +@ifnottex +@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer +@end ifnottex +@subheading Question 2.5: + + How to manually sort the groups in Group buffer? How to + sort the groups in a topic? + + +Answer: + + Move point over the group you want to move and + hit @samp{C-k}, now move point to the + place where you want the group to be and + hit @samp{C-y}. + +@ifnottex +@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions +@end ifnottex +@section Getting messages -You're running an old version of Gnus. Upgrade to at least version -5.0.4. +@menu +* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says "nntp (news) open error", what to do? +* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. +* [3.3]:: My news server requires authentication, how to store user name and password on disk? +* [3.4]:: Gnus seems to start up OK, but I can't find out how to subscribe to a group. +* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to post on this server as well as I am, what's that? +* [3.6]:: I want Gnus to fetch news from several servers, is this possible? +* [3.7]:: And how about local spool files? +* [3.8]:: OK, reading news works now, but I want to be able to read my mail with Gnus, too. How to do it? +* [3.9]:: And what about IMAP? +* [3.10]:: At the office we use one of those MS Exchange servers, can I use Gnus to read my mail from it? +* [3.11]:: Can I tell Gnus not to delete the mails on the server it retrieves via POP3? +@end menu +@ifnottex +@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.1: -@item -Q1.6 How do I unsubscribe from the Mailing List? + I just installed Gnus, started it via + @samp{M-x gnus} + but it only says "nntp (news) open error", what to do? + -Send an e-mail message to @file{ding-request@@ifi.uio.no} with the magic word -@emph{unsubscribe} somewhere in it, and you will be removed. +Answer: -If you are reading the digest version of the list, send an e-mail message -to @* -@file{ding-rn-digests-d-request@@moe.shore.net} -with @emph{unsubscribe} as the subject and you will be removed. + You've got to tell Gnus where to fetch the news from. Read + the documentation for information on how to do this. As a + first start, put those lines in ~/.gnus: + +@example -@item -Q1.7 How do I run Gnus on both Emacs and XEmacs? +(setq gnus-select-method '(nntp "news.yourprovider.net")) +(setq user-mail-address "you@@yourprovider.net") +(setq user-full-name "Your Name") + +@end example + +@ifnottex +@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.2: + + I'm working under Windows and have no idea what ~/.gnus means. + + +Answer: + + The ~/ means the home directory where Gnus and Emacs look for the +configuration files. However, you don't really need to know what this +means, it suffices that Emacs knows what it means :-) You can type +@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on +Windows), and Emacs will open the right file for you. (It will most +likely be new, and thus empty.) However, I'd discourage you from +doing so, since the directory Emacs chooses will most certainly not be +what you want, so let's do it the correct way. The first thing you've +got to do is to create a suitable directory (no blanks in directory +name please) e.g. @file{c:\myhome}. Then you must set the environment +variable HOME to this directory. To do this under Win9x or Me include +the line + -The basic answer is to byte-compile under XEmacs, and then you can -run under either Emacsen. There is, however, a potential version -problem with easymenu.el with Gnu Emacs prior to 19.29. +@example -Per Abrahamsen writes :@* -The internal easymenu.el interface changed between 19.28 and 19.29 in -order to make it possible to create byte compiled files that can be -shared between Gnu Emacs and XEmacs. The change is upward -compatible, but not downward compatible. -This gives the following compatibility table: +SET HOME=C:\myhome + +@end example + +@noindent + in your autoexec.bat and reboot. Under NT, 2000 and XP, + hit Winkey+Pause/Break to enter system options (if it + doesn't work, go to Control Panel -> System). There you'll + find the possibility to set environment variables, create + a new one with name HOME and value @file{c:\myhome}, a reboot is + not necessary. + + + Now to create ~/.gnus, say + @samp{C-x C-f ~/.gnus RET C-x C-s}. + in Emacs. + +@ifnottex +@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.3: + + My news server requires authentication, how to store + user name and password on disk? + + +Answer: + + Create a file ~/.authinfo which includes for each server a line like this + @example -Compiled with: | Can be used with: -----------------+-------------------------------------- -19.28 | 19.28 19.29 -19.29 | 19.29 XEmacs -XEmacs | 19.29 XEmacs +machine news.yourprovider.net login YourUserName password YourPassword @end example -If you have Gnu Emacs 19.28 or earlier, or XEmacs 19.12 or earlier, get -a recent version of auc-menu.el from -@uref{ftp://ftp.iesd.auc.dk/pub/emacs-lisp/auc-menu.el}, and install it -under the name easymenu.el somewhere early in your load path. +@noindent +. + Make sure that the file isn't readable to others if you + work on a OS which is capable of doing so. (Under Unix + say +@example +chmod 600 ~/.authinfo +@end example -@item -Q1.8 What resources are available? - -There is the newsgroup Gnu.emacs.gnus. Discussion of Gnus 5.x is now -taking place there. There is also a mailing list, send mail to -@file{ding-request@@ifi.uio.no} with the magic word @emph{subscribe} -somewhere in it. - -@emph{NOTE:} the traffic on this list is heavy so you may not want to be -on it (unless you use Gnus as your mailer reader, that is). The mailing -list is mainly for developers and testers. - -Gnus has a home World Wide Web page at@* -@uref{http://www.ifi.uio.no/~larsi/ding.html}. - -Gnus has a write up in the X Windows Applications FAQ at@* -@uref{http://www.ee.ryerson.ca:8080/~elf/xapps/Q-III.html}. - -The Gnus manual is also available on the World Wide Web. The canonical -source is in Norway at@* -@uref{http://www.ifi.uio.no/~larsi/ding-manual/gnus_toc.html}. - -There are three mirrors in the United States: -@enumerate -@item -@uref{http://www.miranova.com/gnus-man/} +@noindent + in a shell.) + +@ifnottex +@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.4: + + Gnus seems to start up OK, but I can't find out how to + subscribe to a group. + + +Answer: + + If you know the name of the group say @samp{U + name.of.group RET} in group buffer (use the + tab-completion Luke). Otherwise hit ^ in group buffer, + this brings you to the server buffer. Now place point (the + cursor) over the server which carries the group you want, + hit @samp{RET}, move point to the group + you want to subscribe to and say @samp{u} + to subscribe to it. + +@ifnottex +@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.5: + + Gnus doesn't show all groups / Gnus says I'm not allowed to + post on this server as well as I am, what's that? + + +Answer: + + Some providers allow restricted anonymous access and full + access only after authorization. To make Gnus send authinfo + to those servers append + -@item -@uref{http://www.pilgrim.umass.edu/pub/misc/ding/manual/gnus_toc.html} +@example +force yes +@end example + -@item -@uref{http://www.rtd.com/~woo/gnus/} +@noindent + to the line for those servers in ~/.authinfo. + +@ifnottex +@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.6: -@end enumerate + I want Gnus to fetch news from several servers, is this possible? + -PostScript copies of the Gnus Reference card are available from@* -@uref{ftp://ftp.cs.ualberta.ca/pub/oolog/gnus/}. They are mirrored at@* -@uref{ftp://ftp.pilgrim.umass.edu/pub/misc/ding/refcard/} in the -United States. And@* -@uref{ftp://marvin.fkphy.uni-duesseldorf.de/pub/gnus/} -in Germany. - -An online version of the Gnus FAQ is available at@* -@uref{http://www.miranova.com/~steve/gnus-faq.html}. Off-line formats -are also available:@* -ASCII: @uref{ftp://ftp.miranova.com/pub/gnus/gnus-faq}@* -PostScript: @uref{ftp://ftp.miranova.com/pub/gnus/gnus-faq.ps}. +Answer: + Of course. You can specify more sources for articles in the + variable gnus-secondary-select-methods. Add something like + this in ~/.gnus: + -@item -Q1.9 Gnus hangs on connecting to NNTP server +@example -I am running XEmacs on SunOS and Gnus prints a message about Connecting -to NNTP server and then just hangs. +(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) +(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net")) + +@end example + +@ifnottex +@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.7: -Ben Wing writes :@* -I wonder if you're hitting the infamous @emph{libresolv} problem. -The basic problem is that under SunOS you can compile either -with DNS or NIS name lookup libraries but not both. Try -substituting the IP address and see if that works; if so, you -need to download the sources and recompile. + And how about local spool files? + +Answer: -@item -Q1.10 Mailcrypt 3.4 doesn't work + No problem, this is just one more select method called + nnspool, so you want this: + -This problem is verified to still exist in Gnus 5.0.9 and Mailcrypt 3.4. -The answer comes from Peter Arius -. +@example -I found out that mailcrypt uses -@code{gnus-eval-in-buffer-window}, which is a macro. -It seems as if you have -compiled mailcrypt with plain old GNUS in load path, and the XEmacs byte -compiler has inserted that macro definition into -@file{mc-toplev.elc}. -The solution is to recompile @file{mc-toplev.el} with Gnus 5 in -load-path, and it works fine. +(add-to-list 'gnus-secondary-select-methods '(nnspool "")) + +@end example -Steve Baur adds :@* -The problem also manifests itself if neither GNUS 4 nor Gnus 5 is in the -load-path. +@noindent + Or this if you don't want an NNTP Server as primary news source: + +@example -@item -Q1.11 What other packages work with Gnus? +(setq gnus-select-method '(nnspool "")) + +@end example -@itemize @minus -@item -Mailcrypt. +@noindent + Gnus will look for the spool file in /usr/spool/news, if you + want something different, change the line above to something like this: + -Mailcrypt is an Emacs interface to PGP. It works, it installs -without hassle, and integrates very easily. Mailcrypt can be -obtained from@* -@uref{ftp://cag.lcs.mit.edu/pub/patl/mailcrypt-3.4.tar.gz}. +@example -@item -Tools for Mime. - -Tools for Mime is an Emacs MUA interface to MIME. Installation is -a two-step process unlike most other packages, so you should -be prepared to move the byte-compiled code somewhere. There -are currently two versions of this package available. It can -be obtained from@* -@uref{ftp://ftp.jaist.ac.jp/pub/GNU/elisp/}. -Be sure to apply the supplied patch. It works with Gnus through -version 5.0.9. In order for all dependencies to work correctly -the load sequence is as follows: -@lisp - (load "tm-setup") - (load "gnus") - (load "mime-compose") -@end lisp - -@emph{NOTE:} Loading the package disables citation highlighting by -default. To get the old behavior back, use the @kbd{M-t} command. +(add-to-list 'gnus-secondary-select-methods + '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + +@end example -@end itemize +@noindent + This sets the spool directory for this server only. + You might have to specify more stuff like the program used + to post articles, see the Gnus manual on how to do this. + +@ifnottex +@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.8: + + OK, reading news works now, but I want to be able to read my mail + with Gnus, too. How to do it? + + +Answer: + + That's a bit harder since there are many possible sources + for mail, many possible ways for storing mail and many + different ways for sending mail. The most common cases are + these: 1: You want to read your mail from a pop3 server and + send them directly to a SMTP Server 2: Some program like + fetchmail retrieves your mail and stores it on disk from + where Gnus shall read it. Outgoing mail is sent by + Sendmail, Postfix or some other MTA. Sometimes, you even + need a combination of the above cases. + + + However, the first thing to do is to tell Gnus in which way + it should store the mail, in Gnus terminology which back end + to use. Gnus supports many different back ends, the most + commonly used one is nnml. It stores every mail in one file + and is therefor quite fast. However you might prefer a one + file per group approach if your file system has problems with + many small files, the nnfolder back end is then probably the + choice for you. To use nnml add the following to ~/.gnus: + -@end itemize +@example +(add-to-list 'gnus-secondary-select-methods '(nnml "")) + +@end example -@node Customization FAQ -@subsection Customization +@noindent + As you might have guessed, if you want nnfolder, it's + -@itemize @bullet -@item -Q2.1 Custom Edit does not work under XEmacs +@example -The custom package has not been ported to XEmacs. +(add-to-list 'gnus-secondary-select-methods '(nnfolder "")) + +@end example + + Now we need to tell Gnus, where to get it's mail from. If + it's a POP3 server, then you need something like this: + -@item -Q2.2 How do I quote messages? +@example -I see lots of messages with quoted material in them. I am wondering -how to have Gnus do it for me. +(eval-after-load "mail-source" + '(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net" + :user "yourUserName" + :password "yourPassword")) + +@end example -This is Gnus, so there are a number of ways of doing this. You can use -the built-in commands to do this. There are the @kbd{F} and @kbd{R} -keys from the summary buffer which automatically include the article -being responded to. These commands are also selectable as @i{Followup -and Yank} and @i{Reply and Yank} in the Post menu. +@noindent + Make sure ~/.gnus isn't readable to others if you store + your password there. If you want to read your mail from a + traditional spool file on your local machine, it's + -@kbd{C-c C-y} grabs the previous message and prefixes each line with -@code{message-indentation-spaces} spaces or @code{message-yank-prefix} if that is -non-nil, unless you have set your own @code{mail-citation-hook}, which will -be called to do the job. +@example -You might also consider the Supercite package, which allows for pretty -arbitrarily complex quoting styles. Some people love it, some people -hate it. +(eval-after-load "mail-source" + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) + +@end example +@noindent + If it's a Maildir, with one file per message as used by + postfix, Qmail and (optionally) fetchmail it's + -@item -Q2.3 How can I keep my nnvirtual:* groups sorted? +@example -How can I most efficiently arrange matters so as to keep my nnvirtual:* -(etc) groups at the top of my group selection buffer, whilst keeping -everything sorted in alphabetical order. - -If you don't subscribe often to new groups then the easiest way is to -first sort the groups and then manually kill and yank the virtuals -wherever you want them. +(eval-after-load "mail-source" + '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" + :subdirs ("cur" "new"))) + +@end example +@noindent + And finally if you want to read your mail from several files + in one directory, for example because procmail already split your + mail, it's + -@item -Q2.4 Any good suggestions on stuff for an all.SCORE file? +@example -Here is a collection of suggestions from the Gnus mailing list. +(eval-after-load "mail-source" + '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml")) + +@end example -@enumerate -@item -From ``Dave Disser'' @* -I like blasting anything without lowercase letters. Weeds out most of -the make $$ fast, as well as the lame titles like ``IBM'' and ``HP-UX'' -with no further description. -@lisp - (("Subject" - ("^\\(Re: \\)?[^a-z]*$" -200 nil R))) -@end lisp +@noindent + Where :suffix ".prcml" tells Gnus only to use files with the + suffix .prcml. + -@item -From ``Peter Arius'' @* -The most vital entries in my (still young) all.SCORE: -@lisp -(("xref" - ("alt.fan.oj-simpson" -1000 nil s)) - ("subject" - (concat "\\<\\(make\\|fast\\|big\\)\\s-*" - "\\(money\\|cash\\|bucks?\\)\\>" - -1000 nil r) - ("$$$$" -1000 nil s))) -@end lisp + OK, now you only need to tell Gnus how to send mail. If you + want to send mail via sendmail (or whichever MTA is playing + the role of sendmail on your system), you don't need to do + anything. However, if you want to send your mail to an + SMTP Server you need the following in your ~/.gnus + -@item -From ``Per Abrahamsen'' @* -@lisp -(("subject" - ;; CAPS OF THE WORLD, UNITE - ("^..[^a-z]+$" -1 nil R) - ;; $$$ Make Money $$$ (Try work) - ("$" -1 nil s) - ;; I'm important! And I have exclamation marks to prove it! - ("!" -1 nil s))) -@end lisp +@example -@item -From ``heddy boubaker'' @* -I would like to contribute with mine. -@lisp -( - (read-only t) - ("subject" - ;; ALL CAPS SUBJECTS - ("^\\([Rr][Ee]: +\\)?[^a-z]+$" -1 nil R) - ;; $$$ Make Money $$$ - ("$$" -10 nil s) - ;; Empty subjects are worthless! - ("^ *\\([(<]none[>)]\\|(no subject\\( given\\)?)\\)? *$" - -10 nil r) - ;; Sometimes interesting announces occur! - ("ANN?OU?NC\\(E\\|ING\\)" +10 nil r) - ;; Some people think they're on mailing lists - ("\\(un\\)?sub?scribe" -100 nil r) - ;; Stop Micro$oft NOW!! - ;; ("concat" used to avoid overfull box.) - (concat "\\(m\\(icro\\)?[s$]\\(oft\\|lot\\)?-?\\)?" - "wind?\\(ows\\|aube\\|oze\\)?[- ]*" - "\\('?95\\|NT\\|3[.]1\\|32\\)" -1001 nil r) - ;; I've nothing to buy - ("\\(for\\|4\\)[- ]*sale" -100 nil r) - ;; SELF-DISCIPLINED people - ("\\[[^a-z0-9 \t\n][^a-z0-9 \t\n]\\]" +100 nil r) - ) - ("from" - ;; To keep track of posters from my site - (".dgac.fr" +1000 nil s)) - ("followup" - ;; Keep track of answers to my posts - ("boubaker" +1000 nil s)) - ("lines" - ;; Some people have really nothing to say!! - (1 -10 nil <=)) - (mark -100) - (expunge -1000) - ) -@end lisp +(setq send-mail-function 'smtpmail-send-it) +(setq message-send-mail-function 'smtpmail-send-it) +(setq smtpmail-default-smtp-server "smtp.yourProvider.net") + +@end example + +@ifnottex +@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.9: -@item -From ``Christopher Jones'' @* -The sample @file{all.SCORE} files from Per and boubaker could be -augmented with: -@lisp - (("subject" - ;; No junk mail please! - ("please ignore" -500 nil s) - ("test" -500 nil e)) - ) -@end lisp + And what about IMAP? + -@item -From ``Brian Edmonds'' @* -Augment any of the above with a fast method of scoring down -excessively cross posted articles. -@lisp - ("xref" - ;; the more cross posting, the exponentially worse the article - ("^xref: \\S-+ \\S-+ \\S-+ \\S-+" -1 nil r) - ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -2 nil r) - ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -4 nil r) - ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -8 nil r) - ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - -16 nil r) - (concat "^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - " \\S-+ \\S-+" - -32 nil r) - (concat "^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - " \\S-+ \\S-+ \\S-+" -64 nil r) - (concat "^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - " \\S-+ \\S-+ \\S-+ \\S-+" -128 nil r) - (concat "^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - " \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -256 nil r) - (concat "^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" - " \\S-+" \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -512 nil r)) -@end lisp - -@end enumerate +Answer: + There are two ways of using IMAP with Gnus. The first one is + to use IMAP like POP3, that means Gnus fetches the mail from + the IMAP server and stores it on disk. If you want to do + this (you don't really want to do this) add the following to + ~/.gnus + -@item -Q2.5 What do I use to yank-through when replying? +@example -You should probably reply and followup with @kbd{R} and @kbd{F}, instead -of @kbd{r} and @kbd{f}, which solves your problem. But you could try -something like: +(add-to-list 'mail-sources '(imap :server "mail.mycorp.com" + :user "username" + :pass "password" + :stream network + :authentication login + :mailbox "INBOX" + :fetchflag "\\Seen")) + +@end example + +@noindent + You might have to tweak the values for stream and/or + authentification, see the Gnus manual node "Mail Source + Specifiers" for possible values. + + + If you want to use IMAP the way it's intended, you've got to + follow a different approach. You've got to add the nnimap + back end to your select method and give the information + about the server there. + @example -(defconst mail-yank-ignored-headers - "^.*:" - "Delete these headers from message when it's inserted in reply.") + +(add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) + @end example +@noindent + Again, you might have to specify how to authenticate to the + server if Gnus can't guess the correct way, see the Manual + Node "IMAP" for detailed information. + +@ifnottex +@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.10: + + At the office we use one of those MS Exchange servers, can I use + Gnus to read my mail from it? + + +Answer: + + Offer your administrator a pair of new running shoes for + activating IMAP on the server and follow the instructions + above. + +@ifnottex +@node [3.11], , [3.10], FAQ 3 - Getting messages +@end ifnottex +@subheading Question 3.11: + + Can I tell Gnus not to delete the mails on the server it + retrieves via POP3? + + +Answer: + + First of all, that's not the way POP3 is intended to work, + if you have the possibility, you should use the IMAP + Protocol if you want your messages to stay on the + server. Nevertheless there might be situations where you + need the feature, but sadly Gnus itself has no predefined + functionality to do so. + + + However this is Gnus county so there are possibilities to + achieve what you want. The easiest way is to get an external + program which retrieves copies of the mail and stores them + on disk, so Gnus can read it from there. On Unix systems you + could use e.g. fetchmail for this, on MS Windows you can use + Hamster, an excellent local news and mail server. + + + The other solution would be, to replace the method Gnus + uses to get mail from POP3 servers by one which is capable + of leaving the mail on the server. If you use XEmacs, get + the package mail-lib, it includes an enhanced pop3.el, + look in the file, there's documentation on how to tell + Gnus to use it and not to delete the retrieved mail. For + GNU Emacs look for the file epop3.el which can do the same + (If you know the home of this file, please send me an + e-mail). You can also tell Gnus to use an external program + (e.g. fetchmail) to fetch your mail, see the info node + "Mail Source Specifiers" in the Gnus manual on how to do + it. + + +@ifnottex +@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions +@end ifnottex +@section Reading messages -@item -Q2.6 I don't like the default WWW browser +@menu +* [4.1]:: When I enter a group, all read messages are gone. How to view them again? +* [4.2]:: How to tell Gnus to show an important message every time I enter a group, even when it's read? +* [4.3]:: How to view the headers of a message? +* [4.4]:: How to view the raw unformatted message? +* [4.5]:: How can I change the headers Gnus displays by default at the top of the article buffer? +* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the text part if it's available. How to do it? +* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? +* [4.8]:: Is there anything I can do to make poorly formatted mails more readable? +* [4.9]:: Is there a way to automatically ignore posts by specific authors or with specific words in the subject? And can I highlight more interesting ones in some way? +* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set other variables specific for some groups? +* [4.11]:: Can I highlight messages written by me and follow-ups to those? +* [4.12]:: The number of total messages in a group which Gnus displays in group buffer is by far to high, especially in mail groups. Is this a bug? +* [4.13]:: I don't like the layout of summary and article buffer, how to change it? Perhaps even a three pane display? +* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? +* [4.15]:: How to split incoming mails in several groups? +@end menu -Now when choosing an URL Gnus starts up a W3 buffer, I would like it -to always use Netscape (I don't browse in text-mode ;-). +@ifnottex +@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.1: -@enumerate -@item -Activate `Customize...' from the `Help' menu. + When I enter a group, all read messages are gone. How to view them again? + -@item -Scroll down to the `WWW Browser' field. +Answer: -@item -Click `mouse-2' on `WWW Browser'. + If you enter the group by saying + @samp{RET} + in summary buffer with point over the group, only unread and ticked messages are loaded. Say + @samp{C-u RET} + instead to load all available messages. If you want only the e.g. 300 newest say + @samp{C-u 300 RET} + -@item -Select `Netscape' from the pop up menu. + Loading only unread messages can be annoying if you have threaded view enabled, say + -@item -Press `C-c C-c' +@example -@end enumerate +(setq gnus-fetch-old-headers 'some) + +@end example + + +@noindent + in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load + all articles (Warning: Both settings enlarge the amount of data which is + fetched when you enter a group and slow down the process of entering a group). + + + If you already use Gnus 5.10.0, you can say + @samp{/o N} + In summary buffer to load the last N messages, this feature is not available in 5.8.8 + + + If you don't want all old messages, but the parent of the message you're just reading, + you can say @samp{^}, if you want to retrieve the whole thread + the message you're just reading belongs to, @samp{A T} is your friend. + +@ifnottex +@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.2: + + How to tell Gnus to show an important message every time I + enter a group, even when it's read? + + +Answer: + + You can tick important messages. To do this hit + @samp{u} while point is in summary buffer + over the message. When you want to remove the mark, hit + either @samp{d} (this deletes the tick + mark and set's unread mark) or @samp{M c} + (which deletes all marks for the message). + +@ifnottex +@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.3: + + How to view the headers of a message? + + +Answer: + + Say @samp{t} + to show all headers, one more + @samp{t} + hides them again. + +@ifnottex +@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.4: + + How to view the raw unformatted message? + + +Answer: + + Say + @samp{C-u g} + to show the raw message + @samp{g} + returns to normal view. + +@ifnottex +@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.5: + + How can I change the headers Gnus displays by default at + the top of the article buffer? + + +Answer: + + The variable gnus-visible-headers controls which headers + are shown, its value is a regular expression, header lines + which match it are shown. So if you want author, subject, + date, and if the header exists, Followup-To and MUA / NUA + say this in ~/.gnus: + -If you are using XEmacs then to specify Netscape do -@lisp - (setq gnus-button-url 'gnus-netscape-open-url) -@end lisp +@example +(setq gnus-visible-headers +"^\\(From:\\|Subject:\\|Date:\\|Followup-To:\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") + +@end example + +@ifnottex +@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.6: -@item -Q2.7 What, if any, relation is between ``ask-server'' and ``(setq -gnus-read-active-file 'some)''? + I'd like Gnus NOT to render HTML-mails but show me the + text part if it's available. How to do it? + -In order for Gnus to show you the complete list of newsgroups, it will -either have to either store the list locally, or ask the server to -transmit the list. You enable the first with +Answer: -@lisp - (setq gnus-save-killed-list t) -@end lisp + Say + -and the second with +@example -@lisp - (setq gnus-read-active-file t) -@end lisp +(eval-after-load "mm-decode" + '(progn + (add-to-list 'mm-discouraged-alternatives "text/html") + (add-to-list 'mm-discouraged-alternatives "text/richtext"))) + +@end example -If both are disabled, Gnus will not know what newsgroups exists. There -is no option to get the list by casting a spell. +@noindent + in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add + +@example -@item -Q2.8 Moving between groups is slow. +(setq mm-automatic-display (remove "text/html" mm-automatic-display)) + +@end example -Per Abrahamsen writes:@* +@noindent + too. + +@ifnottex +@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.7: -Do you call @code{define-key} or something like that in one of the -summary mode hooks? This would force Emacs to recalculate the keyboard -shortcuts. Removing the call should speed up @kbd{M-x gnus-summary-mode -RET} by a couple of orders of magnitude. You can use + Can I use some other browser than w3 to render my HTML-mails? + -@lisp -(define-key gnus-summary-mode-map KEY COMMAND) -@end lisp +Answer: -in your @file{.gnus} instead. + Only if you use Gnus 5.10.0 or younger. In this case you've got the + choice between w3, w3m, links, lynx and html2text, which + one is used can be specified in the variable + mm-text-html-renderer, so if you want links to render your + mail say + -@end itemize +@example +(setq mm-text-html-renderer 'links) + +@end example + +@ifnottex +@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.8: + + Is there anything I can do to make poorly formatted mails + more readable? + + +Answer: + + Gnus offers you several functions to "wash" incoming mail, + you can find them if you browse through the menu, item Article->Washing. The most + interesting ones are probably "Wrap long lines" ( + @samp{W w} + ), "Decode ROT13" ( + @samp{W r} + ) and "Outlook Deuglify" which repairs the dumb quoting used + by many users of Microsoft products ( + @samp{W Y f} gives you full deuglify. + See @samp{W Y C-h} or + have a look at the menus for other deuglifications). + Outlook deuglify is only available since Gnus 5.10.0. + +@ifnottex +@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.9: + + Is there a way to automatically ignore posts by specific + authors or with specific words in the subject? And can I + highlight more interesting ones in some way? + + +Answer: + + You want Scoring. Scoring means, that you define rules + which assign each message an integer value. Depending on + the value the message is highlighted in summary buffer (if + it's high, say +2000) or automatically marked read (if the + value is low, say -800) or some other action happens. + + + There are basically three ways of setting up rules which assign + the scoring-value to messages. The first and easiest way is to set + up rules based on the article you are just reading. Say you're + reading a message by a guy who always writes nonsense and you want + to ignore his messages in the future. Hit + @samp{L}, to set up a rule which lowers the score. + Now Gnus asks you which the criteria for lowering the Score shall + be. Hit @samp{?} twice to see all possibilities, + we want @samp{a} which means the author (the from + header). Now Gnus wants to know which kind of matching we want. + Hit either @samp{e} for an exact match or + @samp{s} for substring-match and delete afterwards + everything but the name to score down all authors with the given + name no matter which email address is used. Now you need to tell + Gnus when to apply the rule and how long it should last, hit e.g. + @samp{p} to apply the rule now and let it last + forever. If you want to raise the score instead of lowering it say + @samp{I} instead of @samp{L}. + + + You can also set up rules by hand. To do this say @samp{V + f} in summary buffer. Then you are asked for the name + of the score file, it's name.of.group.SCORE for rules valid in + only one group or all.Score for rules valid in all groups. See the + Gnus manual for the exact syntax, basically it's one big list + whose elements are lists again. the first element of those lists + is the header to score on, then one more list with what to match, + which score to assign, when to expire the rule and how to do the + matching. If you find me very interesting, you could e.g. add the + following to your all.Score: + -@node Reading News FAQ -@subsection Reading News +@example -@itemize @bullet -@item -Q3.1 How do I convert my kill files to score files? +(("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) + ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) + +@end example -@samp{ethanb@@ptolemy.astro.washington.edu, Ethan Bradford} write a -kill-to-score translator. It is available from@* -@uref{http://baugi.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el}. +@noindent + This would add 999 to the score of messages written by me + and 500 to the score of messages which are a (possibly + indirect) answer to a message written by me. Of course + nobody with a sane mind would do this :-) + + + The third alternative is adaptive scoring. This means Gnus + watches you and tries to find out what you find + interesting and what annoying and sets up rules + which reflect this. Adaptive scoring can be a huge help + when reading high traffic groups. If you want to activate + adaptive scoring say + +@example -@item -Q3.2 My news server has a lot of groups, and killing groups is painfully -slow. +(setq gnus-use-adaptive-scoring t) + +@end example -Don't do that then. The best way to get rid of groups that should be -dead is to edit your newsrc directly. This problem will be addressed -in the near future. +@noindent + in ~/.gnus. + +@ifnottex +@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.10: + + How can I disable threading in some (e.g. mail-) groups, or + set other variables specific for some groups? + + +Answer: + + While in group buffer move point over the group and hit + @samp{G c}, this opens a buffer where you + can set options for the group. At the bottom of the buffer + you'll find an item that allows you to set variables + locally for the group. To disable threading enter + gnus-show-threads as name of variable and nil as + value. Hit button done at the top of the buffer when + you're ready. + +@ifnottex +@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.11: + + Can I highlight messages written by me and follow-ups to + those? + + +Answer: + + Stop those "Can I ..." questions, the answer is always yes + in Gnus Country :-). It's a three step process: First we + make faces (specifications of how summary-line shall look + like) for those postings, then we'll give them some + special score and finally we'll tell Gnus to use the new + faces. You can find detailed instructions on how to do it on + @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} + +@ifnottex +@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.12: + + The number of total messages in a group which Gnus + displays in group buffer is by far to high, especially in + mail groups. Is this a bug? + + +Answer: + + No, that's a matter of design of Gnus, fixing this would + mean reimplementation of major parts of Gnus' + back ends. Gnus thinks "highest-article-number - + lowest-article-number = total-number-of-articles". This + works OK for Usenet groups, but if you delete and move + many messages in mail groups, this fails. To cure the + symptom, enter the group via @samp{C-u RET} + (this makes Gnus get all messages), then + hit @samp{M P b} to mark all messages and + then say @samp{B m name.of.group} to move + all messages to the group they have been in before, they + get new message numbers in this process and the count is + right again (until you delete and move your mail to other + groups again). + +@ifnottex +@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.13: + + I don't like the layout of summary and article buffer, how + to change it? Perhaps even a three pane display? + + +Answer: + + You can control the windows configuration by calling the + function gnus-add-configuration. The syntax is a bit + complicated but explained very well in the manual node + "Window Layout". Some popular examples: + + + Instead 25% summary 75% article buffer 35% summary and 65% + article (the 1.0 for article means "take the remaining + space"): + +@example -@item -Q3.3 How do I use an NNTP server with authentication? +(gnus-add-configuration '(article (vertical 1.0 (summary .35 point) (article 1.0)))) + +@end example + -Put the following into your .gnus: -@lisp - (add-hook 'nntp-server-opened-hook 'nntp-send-authinfo) -@end lisp + A three pane layout, Group buffer on the left, summary + buffer top-right, article buffer bottom-right: + +@example -@item -Q3.4 Not reading the first article. +(gnus-add-configuration + '(article + (horizontal 1.0 + (vertical 25 + (group 1.0)) + (vertical 1.0 + (summary 0.25 point) + (article 1.0))))) +(gnus-add-configuration + '(summary + (horizontal 1.0 + (vertical 25 + (group 1.0)) + (vertical 1.0 + (summary 1.0 point))))) + +@end example + +@ifnottex +@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.14: + + I don't like the way the Summary buffer looks, how to tweak it? + + +Answer: + + You've got to play around with the variable + gnus-summary-line-format. It's value is a string of + symbols which stand for things like author, date, subject + etc. A list of the available specifiers can be found in the + manual node "Summary Buffer Lines" and the often forgotten + node "Formatting Variables" and it's sub-nodes. There + you'll find useful things like positioning the cursor and + tabulators which allow you a summary in table form, but + sadly hard tabulators are broken in 5.8.8. + + + Since 5.10.0, Gnus offers you some very nice new specifiers, + e.g. %B which draws a thread-tree and %&user-date which + gives you a date where the details are dependent of the + articles age. Here's an example which uses both: + -How do I avoid reading the first article when a group is selected? +@example -@enumerate -@item -Use @kbd{RET} to select the group instead of @kbd{SPC}. +(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") + +@end example -@item -@code{(setq gnus-auto-select first nil)} +@noindent + resulting in: + -@item -Luis Fernandes writes:@* -This is what I use...customize as necessary... +@example + +:O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 +:O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 +:R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 +:O \-> ... | 21 |Kai Grossjohann | 0:01 +:R > Re: Cry for help: deuglify.el - moving stuf| 28 |Lars Magne Ingebrigt |Sat 23:34 +:O \-> ... | 115 |Raymond Scholz | 1:24 +:O \-> ... | 19 |Lars Magne Ingebrigt |15:33 +:O Slow mailing list | 13 |Lars Magne Ingebrigt |Sat 23:49 +:O Re: `@@' mark not documented | 13 |Lars Magne Ingebrigt |Sat 23:50 +:R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 +:O \-> ... | 18 |Kai Grossjohann | 0:35 +:O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 + +@end example + +@ifnottex +@node [4.15], , [4.14], FAQ 4 - Reading messages +@end ifnottex +@subheading Question 4.15: + + How to split incoming mails in several groups? + + +Answer: + + Gnus offers two possibilities for splitting mail, the easy + nnmail-split-methods and the more powerful Fancy Mail + Splitting. I'll only talk about the first one, refer to + the manual, node "Fancy Mail Splitting" for the latter. + + + The value of nnmail-split-methods is a list, each element + is a list which stands for a splitting rule. Each rule has + the form "group where matching articles should go to", + "regular expression which has to be matched", the first + rule which matches wins. The last rule must always be a + general rule (regular expression .*) which denotes where + articles should go which don't match any other rule. If + the folder doesn't exist yet, it will be created as soon + as an article lands there. By default the mail will be + send to all groups whose rules match. If you + don't want that (you probably don't want), say + + +@example + +(setq nnmail-crosspost nil) + +@end example + +@noindent + in ~/.gnus. + + + An example might be better than thousand words, so here's + my nnmail-split-methods. Note that I send duplicates in a + special group and that the default group is spam, since I + filter all mails out which are from some list I'm + subscribed to or which are addressed directly to me + before. Those rules kill about 80% of the Spam which + reaches me (Email addresses are changed to prevent spammers + from using them): + + +@example + +(setq nnmail-split-methods + '(("duplicates" "^Gnus-Warning:.*duplicate") + ("XEmacs-NT" "^\\(To:\\|CC:\\).*localpart@@xemacs.bla.*") + ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") + ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") + ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") + ("Tagesschau" "^From: tagesschau $") + ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") + ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") + ("Spam" "^Received: from link2buy.com") + ("Spam" "^CC: .*azzrael@@t-online.bla") + ("Spam" "^X-Mailer-Version: 1.50 BETA") + ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") + ("Spam" ""))) + +@end example + + +@ifnottex +@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions +@end ifnottex +@section Composing messages + +@menu +* [5.1]:: What are the basic commands I need to know for sending mail and postings? +* [5.2]:: How to enable automatic word-wrap when composing messages? +* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? +* [5.4]:: Can I set things like From, Signature etc group based on the group I post too? +* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? +* [5.6]:: Can I set the dictionary based on the group I'm posting to? +* [5.7]:: Is there some kind of address-book, so I needn't remember all those email addresses? +* [5.8]:: Sometimes I see little images at the top of article buffer. What's that and how can I send one with my postings, too? +* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. Can Gnus warn me, when I'm replying by mail in newsgroups? +* [5.10]:: How to tell Gnus not to generate a sender header? +* [5.11]:: I want gnus to locally store copies of my send mail and news, how to do it? +* [5.12]:: People tell me my Message-IDs are not correct, why aren't they and how to fix it? +@end menu + +@ifnottex +@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.1: + + What are the basic commands I need to know for sending mail and postings? + + +Answer: + + To start composing a new mail hit @samp{m} + either in Group or Summary buffer, for a posting, it's + either @samp{a} in Group buffer and + filling the Newsgroups header manually + or @samp{a} in the Summary buffer of the + group where the posting shall be send to. Replying by mail + is + @samp{r} if you don't want to cite the + author, or import the cited text manually and + @samp{R} to cite the text of the original + message. For a follow up to a newsgroup, it's + @samp{f} and @samp{F} + (analog to @samp{r} and + @samp{R}. + + + Enter new headers above the line saying "--text follows + this line--", enter the text below the line. When ready + hit @samp{C-c C-c}, to send the message, + if you want to finish it later hit @samp{C-c + C-d} to save it in the drafts group, where you + can start editing it again by saying @samp{D + e}. + +@ifnottex +@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.2: + + How to enable automatic word-wrap when composing messages? + + +Answer: + + Say + + +@example + +(add-hook 'message-mode-hook + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) + +@end example + +@noindent + in ~/.gnus. You can reformat a paragraph by hitting + @samp{M-q} (as usual) + +@ifnottex +@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.3: + + How to set stuff like From, Organization, Reply-To, signature...? + + +Answer: + + There are other ways, but you should use posting styles + for this. (See below why). + This example should make the syntax clear: + + +@example + +(setq gnus-posting-styles + '((".*" + (name "Frank Schmitt") + (address "me@@there.bla") + (organization "Hamme net, kren mer och nimmi") + (signature-file "~/.signature") + ("X-SampleHeader" "foobar") + (eval (setq some-variable "Foo bar"))))) + +@end example + +@noindent + The ".*" means that this settings are the default ones + (see below), valid values for the first element of the + following lists are signature, signature-file, + organization, address, name or body. The attribute name + can also be a string. In that case, this will be used as + a header name, and the value will be inserted in the + headers of the article; if the value is `nil', the header + name will be removed. You can also say (eval (foo bar)), + then the function foo will be evaluated with argument bar + and the result will be thrown away. + +@ifnottex +@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.4: + + Can I set things like From, Signature etc group based on the group I post too? + + +Answer: + + That's the strength of posting styles. Before, we used ".*" + to set the default for all groups. You can use a regexp + like "^gmane" and the following settings are only applied + to postings you send to the gmane hierarchy, use + ".*binaries" instead and they will be applied to postings + send to groups containing the string binaries in their + name etc. + + + You can instead of specifying a regexp specify a function + which is evaluated, only if it returns true, the + corresponding settings take effect. Two interesting + candidates for this are message-news-p which returns t if + the current Group is a newsgroup and the corresponding + message-mail-p. + + + Note that all forms that match are applied, that means in + the example below, when I post to + gmane.mail.spam.spamassassin.general, the settings under + ".*" are applied and the settings under message-news-p and + those under "^gmane" and those under + "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because + of this put general settings at the top and specific ones + at the bottom. + + +@example + +(setq gnus-posting-styles + '((".*" ;;default + (name "Frank Schmitt") + (organization "Hamme net, kren mer och nimmi") + (signature-file "~/.signature") ) + ((message-news-p) ;;Usenet news? + (address "mySpamTrap@@Frank-Schmitt.bla") + ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) + ((message-mail-p) ;;mail? + (address "usedForMails@@Frank-Schmitt.bla") ) + ("^gmane" ;;this is mail, too in fact + (address "usedForMails@@Frank-Schmitt.net") + ("Reply-To" nil) ) + ("^gmane.mail.spam.spamassassin.general$" + (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) + (address "Azzrael@@rz-online.de")) )) + +@end example + +@ifnottex +@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.5: + + Is there a spell-checker? Perhaps even on-the-fly spell-checking? + + +Answer: + + You can use ispell.el to spell-check stuff in Emacs. So the + first thing to do is to make sure that you've got either + @uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} + or @uref{http://aspell.sourceforge.net/,aspell} + installed and in your Path. Then you need + @uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el} + and for on-the-fly spell-checking + @uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el}. + Ispell.el is shipped with Gnus Emacs and available through the Emacs package system, + flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is + available through the package system, so there should be no need to install them + manually. + + + Ispell.el assumes you use ispell, if you choose aspell say + + +@example +(setq ispell-program-name "aspell") +@end example + + +@noindent + in your Emacs configuration file. + + + If you want your outgoing messages to be spell-checked, say + + +@example +(add-hook 'message-send-hook 'ispell-message) +@end example + +@noindent + In your ~/.gnus, if you prefer on-the-fly spell-checking say + + +@example +(add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) +@end example + +@ifnottex +@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.6: + + Can I set the dictionary based on the group I'm posting to? + + +Answer: + + Yes, say something like + + +@example -@lisp -;;; Don't auto-select first article if reading sources, or -;;; archives or jobs postings, etc. and just display the -;;; summary buffer (add-hook 'gnus-select-group-hook - (function - (lambda () - (cond ((string-match "sources" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - ((string-match "jobs" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - ((string-match "comp\\.archives" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - ((string-match "reviews" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - ((string-match "announce" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - ((string-match "binaries" gnus-newsgroup-name) - (setq gnus-auto-select-first nil)) - (t - (setq gnus-auto-select-first t)))))) -@end lisp + (lambda () + (cond + ((string-match + "^de\\." (gnus-group-real-name gnus-newsgroup-name)) + (ispell-change-dictionary "deutsch8")) + (t + (ispell-change-dictionary "english"))))) + +@end example + -@item -Per Abrahamsen writes:@* -Another possibility is to create an @file{all.binaries.all.SCORE} file -like this: +@noindent + in ~/.gnus. Change "^de\\." and "deutsch8" to something + that suits your needs. + +@ifnottex +@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.7: -@lisp -((local - (gnus-auto-select-first nil))) -@end lisp + Is there some kind of address-book, so I needn't remember + all those email addresses? + -and insert -@lisp - (setq gnus-auto-select-first t) -@end lisp +Answer: -in your @file{.gnus}. + There's an very basic solution for this, mail aliases. + You can store your mail addresses in a ~/.mailrc file using a simple + alias syntax: + -@end enumerate +@example -@item -Q3.5 Why aren't BBDB known posters marked in the summary buffer? +alias al "Al " + +@end example -Brian Edmonds writes:@* -Due to changes in Gnus 5.0, @file{bbdb-gnus.el} no longer marks known -posters in the summary buffer. An updated version, @file{gnus-bbdb.el} -is available at the locations listed below. This package also supports -autofiling of incoming mail to folders specified in the BBDB. Extensive -instructions are included as comments in the file. +@noindent + Then typing your alias (followed by a space or punctuation + character) on a To: or Cc: line in the message buffer will + cause gnus to insert the full address for you. See the + node "Mail Aliases" in Message (not Gnus) manual for + details. + -Send mail to @file{majordomo@@edmonds.home.cs.ubc.ca} with the following -line in the body of the message: @emph{get misc gnus-bbdb.el}. + However, what you really want is the Insidious Big Brother + Database bbdb. Get it through the XEmacs package system or from + @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. + Now place the following in ~/.gnus, to activate bbdb for Gnus: + -Or get it from the World Wide Web:@* -@uref{http://www.cs.ubc.ca/spider/edmonds/gnus-bbdb.el}. +@example -@end itemize +(require 'bbdb) +(bbdb-initialize 'gnus 'message) + +@end example +@noindent + Now you probably want some general bbdb configuration, + place them in ~/.emacs: + -@node Reading Mail FAQ -@subsection Reading Mail +@example -@itemize @bullet -@item -Q4.1 What does the message ``Buffer has changed on disk'' mean in a mail -group? +(require 'bbdb) +;;If you don't live in Northern America, you should disable the +;;syntax check for telephone numbers by saying +(setq bbdb-north-american-phone-numbers-p nil) +;;Tell bbdb about your email address: +(setq bbdb-user-mail-names + (regexp-opt '("Your.Email@@here.bla" + "Your.other@@mail.there.bla"))) +;;cycling while completing email addresses +(setq bbdb-complete-name-allow-cycling t) +;;No popup-buffers +(setq bbdb-use-pop-up nil) + +@end example -Your filter program should not deliver mail directly to your folders, -instead it should put the mail into spool files. Gnus will then move -the mail safely from the spool files into the folders. This will -eliminate the problem. Look it up in the manual, in the section -entitled ``Mail & Procmail''. +@noindent + Now you should be ready to go. Say @samp{M-x bbdb RET + RET} to open a bbdb buffer showing all + entries. Say @samp{c} to create a new + entry, @samp{b} to search your BBDB and + @samp{C-o} to add a new field to an + entry. If you want to add a sender to the BBDB you can + also just hit `:' on the posting in the summary buffer and + you are done. When you now compose a new mail, + hit @samp{TAB} to cycle through know + recipients. + +@ifnottex +@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.8: + + Sometimes I see little images at the top of article + buffer. What's that and how can I send one with my + postings, too? + + +Answer: + + Those images are called X-Faces. They are 48*48 pixel b/w + pictures, encoded in a header line. If you want to include + one in your posts, you've got to convert some image to a + X-Face. So fire up some image manipulation program (say + Gimp), open the image you want to include, cut out the + relevant part, reduce color depth to 1 bit, resize to + 48*48 and save as bitmap. Now you should get the compface + package from + @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. + and create the actual X-face by saying + +@example -@item -Q4.2 How do you make articles un-expirable? +cat file.xbm | xbm2ikon |compface > file.face +cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted + +@end example -I am using nnml to read news and have used -@code{gnus-auto-expirable-newsgroups} to automagically expire articles -in some groups (Gnus being one of them). Sometimes there are -interesting articles in these groups that I want to keep. Is there any -way of explicitly marking an article as un-expirable - that is mark it -as read but not expirable? +@noindent + if you can't use compface, there's an online X-face converter at + @uref{http://www.dairiki.org/xface/}. + If you use MS Windows, you could also use the WinFace program from + @uref{http://www.xs4all.nl/~walterln/winface/}. + Now you only have to tell Gnus to include the X-face in your postings by saying + -Use @kbd{u}, @kbd{!}, @kbd{d} or @kbd{M-u} in the summary buffer. You -just remove the @kbd{E} mark by setting some other mark. It's not -necessary to tick the articles. +@example +(setq message-default-headers + (with-temp-buffer + (insert "X-Face: ") + (insert-file-contents "~/.xemacs/xface") + (buffer-string))) + +@end example -@item -Q4.3 How do I delete bogus nnml: groups? +@noindent + in ~/.gnus. + +@ifnottex +@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.9: -My problem is that I have various mail (nnml) groups generated while -experimenting with Gnus. How do I remove them now? Setting the level to -9 does not help. Also @code{gnus-group-check-bogus-groups} does not -recognize them. + Sometimes I accidentally hit r instead of f in + newsgroups. Can Gnus warn me, when I'm replying by mail in + newsgroups? + -Removing mail groups is tricky at the moment. (It's on the to-do list, -though.) You basically have to kill the groups in Gnus, shut down Gnus, -edit the active file to exclude these groups, and probably remove the -nnml directories that contained these groups as well. Then start Gnus -back up again. +Answer: + Put this in ~/.gnus: + -@item -Q4.4 What happened to my new mail groups? +@example + +(setq gnus-confirm-mail-reply-to-news t) + +@end example -I got new mail, but I have -never seen the groups they should have been placed in. +@noindent + if you already use Gnus 5.10.0, if you still use 5.8.8 or + 5.9 try this instead: + -They are probably there, but as zombies. Press @kbd{A z} to list -zombie groups, and then subscribe to the groups you want with @kbd{u}. -This is all documented quite nicely in the user's manual. +@example +(defadvice gnus-summary-reply (around reply-in-news activate) + (interactive) + (when (or (not (gnus-news-group-p gnus-newsgroup-name)) + (y-or-n-p "Really reply? ")) + ad-do-it)) + +@end example + +@ifnottex +@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.10: -@item -Q4.5 Not scoring mail groups + How to tell Gnus not to generate a sender header? + -How do you @emph{totally} turn off scoring in mail groups? +Answer: -Use an nnbabyl:all.SCORE (or nnmh, or nnml, or whatever) file containing: + Since 5.10.0 Gnus doesn't generate a sender header by + default. For older Gnus' try this in ~/.gnus: + @example -((adapt ignore) - (local (gnus-use-scoring nil)) - (exclude-files "all.SCORE")) + +(eval-after-load "message" + '(add-to-list 'message-syntax-checks '(sender . disabled))) + @end example + + +@ifnottex +@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.11: + + I want gnus to locally store copies of my send mail and + news, how to do it? + + +Answer: + + You must set the variable gnus-message-archive-group to do + this. You can set it to a string giving the name of the + group where the copies shall go or like in the example + below use a function which is evaluated and which returns + the group to use. + -@end itemize +@example + +(setq gnus-message-archive-group + '((if (message-news-p) + "nnml:Send-News" + "nnml:Send-Mail"))) + +@end example + + +@ifnottex +@node [5.12], , [5.11], FAQ 5 - Composing messages +@end ifnottex +@subheading Question 5.12: + + People tell me my Message-IDs are not correct, why + aren't they and how to fix it? + + +Answer: + + The message-ID is an unique identifier for messages you + send. To make it unique, Gnus need to know which machine + name to put after the "@@". If the name of the machine + where Gnus is running isn't suitable (it probably isn't + at most private machines) you can tell Gnus what to use + by saying: + +@example + +(defun message-make-message-id() + (concat "<"(message-unique-id)"@@yourmachine.yourdomain.tld>")) + +@end example + + +@noindent + in ~/.gnus. If you have no idea what to insert for + "yourmachine.yourdomain.tld", you've got several + choices. You can either ask your provider if he allows + you to use something like + yourUserName.userfqdn.provider.net, or you can use + somethingUnique.yourdomain.tld if you own the domain + yourdomain.tld, or you can register at a service which + gives private users a FQDN for free, e.g. + @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. + (Sorry but this website is in German, if you know of an + English one offering the same, drop me a note). + + + Finally you can tell Gnus not to generate a Message-ID + for News at all (and letting the server do the job) by saying + + +@example +(setq message-required-news-headers + (remove' Message-ID message-required-news-headers)) + +@end example + +@noindent + you can also tell Gnus not to generate Message-IDs for mail by saying + + +@example + +(setq message-required-mail-headers + (remove' Message-ID message-required-mail-headers)) + +@end example + +@noindent + , however some mail servers don't generate proper + Message-IDs, too, so test if your Mail Server behaves + correctly by sending yourself a Mail and looking at the Message-ID. + + +@ifnottex +@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions +@end ifnottex +@section Old messages + +@menu +* [6.1]:: How to import my old mail into Gnus? +* [6.2]:: How to archive interesting messages? +* [6.3]:: How to search for a specific message? +* [6.4]:: How to get rid of old unwanted mail? +* [6.5]:: I want that all read messages are expired (at least in some groups). How to do it? +* [6.6]:: I don't want expiration to delete my mails but to move them to another group. +@end menu + +@ifnottex +@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.1: + + How to import my old mail into Gnus? + + +Answer: + + The easiest way is to tell your old mail program to + export the messages in mbox format. Most Unix mailers + are able to do this, if you come from the MS Windows + world, you may find tools at + @uref{http://mbx2mbox.sourceforge.net/}. + + + Now you've got to import this mbox file into Gnus. To do + this, create a nndoc group based on the mbox file by + saying @samp{G f /path/file.mbox RET} in + Group buffer. You now have read-only access to your + mail. If you want to import the messages to your normal + Gnus mail groups hierarchy, enter the nndoc group you've + just created by saying @samp{C-u RET} + (thus making sure all messages are retrieved), mark all + messages by saying @samp{M P b} and + either copy them to the desired group by saying + @samp{B c name.of.group RET} or send them + through nnmail-split-methods (respool them) by saying + @samp{B r}. + +@ifnottex +@node [6.2], [6.3], [6.1], FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.2: + + How to archive interesting messages? + + +Answer: + + If you stumble across an interesting message, say in + gnu.emacs.gnus and want to archive it there are several + solutions. The first and easiest is to save it to a file + by saying @samp{O f}. However, wouldn't + it be much more convenient to have more direct access to + the archived message from Gnus? If you say yes, put this + snippet by Frank Haun in + ~/.gnus: + + +@example + +(defun my-archive-article (&optional n) + "Copies one or more article(s) to a corresponding `nnml:' group, e.g. +`gnus.ding' goes to `nnml:1.gnus.ding'. And `nnml:List-gnus.ding' goes +to `nnml:1.List-gnus-ding'. + +Use process marks or mark a region in the summary buffer to archive +more then one article." + (interactive "P") + (let ((archive-name + (format + "nnml:1.%s" + (if (featurep 'xemacs) + (replace-in-string gnus-newsgroup-name "^.*:" "") + (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) + (gnus-summary-copy-article n archive-name))) + +@end example + +@noindent + You can now say @samp{M-x + my-archive-article} in summary buffer to + archive the article under the cursor in a nnml + group. (Change nnml to your preferred back end) + + + Of course you can also make sure the cache is enabled by saying + + +@example + +(setq gnus-use-cache t) + +@end example + +@noindent + then you only have to set either the tick or the dormant + mark for articles you want to keep, setting the read + mark will remove them from cache. + +@ifnottex +@node [6.3], [6.4], [6.2], FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.3: + + How to search for a specific message? + + +Answer: + + There are several ways for this, too. For a posting from + a Usenet group the easiest solution is probably to ask + @uref{http://groups.google.com,groups.google.com}, + if you found the posting there, tell Google to display + the raw message, look for the message-id, and say + @samp{M-^ the@@message.id RET} in a + summary buffer. + Since Gnus 5.10.0 there's also a Gnus interface for + groups.google.com which you can call with + @samp{G W}) in group buffer. + + + Another idea which works for both mail and news groups + is to enter the group where the message you are + searching is and use the standard Emacs search + @samp{C-s}, it's smart enough to look at + articles in collapsed threads, too. If you want to + search bodies, too try @samp{M-s} + instead. Further on there are the + gnus-summary-limit-to-foo functions, which can help you, + too. + + + Of course you can also use grep to search through your + local mail, but this is both slow for big archives and + inconvenient since you are not displaying the found mail + in Gnus. Here comes nnir into action. Nnir is a front end + to search engines like swish-e or swish++ and + others. You index your mail with one of those search + engines and with the help of nnir you can search trough + the indexed mail and generate a temporary group with all + messages which met your search criteria. If this sound + cool to you get nnir.el from + @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} + or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. + Instructions on how to use it are at the top of the file. + +@ifnottex +@node [6.4], [6.5], [6.3], FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.4: + + How to get rid of old unwanted mail? + + +Answer: + + You can of course just mark the mail you don't need + anymore by saying @samp{#} with point + over the mail and then say @samp{B DEL} + to get rid of them forever. You could also instead of + actually deleting them, send them to a junk-group by + saying @samp{B m nnml:trash-bin} which + you clear from time to time, but both are not the intended + way in Gnus. + + + In Gnus, we let mail expire like news expires on a news + server. That means you tell Gnus the message is + expirable (you tell Gnus "I don't need this mail + anymore") by saying @samp{E} with point + over the mail in summary buffer. Now when you leave the + group, Gnus looks at all messages which you marked as + expirable before and if they are old enough (default is + older than a week) they are deleted. + +@ifnottex +@node [6.5], [6.6], [6.4], FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.5: + + I want that all read messages are expired (at least in + some groups). How to do it? + + +Answer: + + If you want all read messages to be expired (e.g. in + mailing lists where there's an online archive), you've + got two choices: auto-expire and + total-expire. Auto-expire means, that every article + which has no marks set and is selected for reading is + marked as expirable, Gnus hits @samp{E} + for you every time you read a message. Total-expire + follows a slightly different approach, here all article + where the read mark is set are expirable. + + + To activate auto-expire, include auto-expire in the + Group parameters for the group. (Hit @samp{G + c} in summary buffer with point over the + group to change group parameters). For total-expire add + total-expire to the group-parameters. + + + Which method you choose is merely a matter of taste: + Auto-expire is faster, but it doesn't play together with + Adaptive Scoring, so if you want to use this feature, + you should use total-expire. + + + If you want a message to be excluded from expiration in + a group where total or auto expire is active, set either + tick (hit @samp{u}) or dormant mark (hit + @samp{u}), when you use auto-expire, you + can also set the read mark (hit + @samp{d}). + +@ifnottex +@node [6.6], , [6.5], FAQ 6 - Old messages +@end ifnottex +@subheading Question 6.6: + + I don't want expiration to delete my mails but to move them + to another group. + + +Answer: + + Say something like this in ~/.gnus: + + +@example + +(setq nnmail-expiry-target "nnml:expired") + +@end example + +@noindent + (If you want to change the value of nnmail-expiry-target + on a per group basis see the question "How can I disable + threading in some (e.g. mail-) groups, or set other + variables specific for some groups?") + + +@ifnottex +@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions +@end ifnottex +@section Gnus in a dial-up environment + +@menu +* [7.1]:: I don't have a permanent connection to the net, how can I minimize the time I've got to be connected? +* [7.2]:: So what was this thing about the Agent? +* [7.3]:: I want to store article bodies on disk, too. How to do it? +* [7.4]:: How to tell Gnus not to try to send mails / postings while I'm offline? +@end menu + + +@ifnottex +@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment +@end ifnottex +@subheading Question 7.1: + + I don't have a permanent connection to the net, how can + I minimize the time I've got to be connected? + + +Answer: + + You've got basically two options: Either you use the + Gnus Agent (see below) for this, or you can install + programs which fetch your news and mail to your local + disk and Gnus reads the stuff from your local + machine. + + + If you want to follow the second approach, you need a + program which fetches news and offers them to Gnus, a + program which does the same for mail and a program which + receives the mail you write from Gnus and sends them + when you're online. + + + Let's talk about Unix systems first: For the news part, + the easiest solution is a small nntp server like + @uref{http://www.leafnode.org/,Leafnode} or + @uref{http://infa.abo.fi/~patrik/sn/,sn}, + of course you can also install a full featured news + server like + @uref{http://www.isc.org/products/INN/,inn}. + Then you want to fetch your Mail, popular choices + are @uref{http://www.catb.org/~esr/fetchmail/,fetchmail} + and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. + You should tell those to write the mail to your disk and + Gnus to read it from there. Last but not least the mail + sending part: This can be done with every MTA like + @uref{http://www.sendmail.org/,sendmail}, + @uref{http://www.qmail.org/,postfix}, + @uref{http://www.exim.org/,exim} or + @uref{http://www.qmail.org/,qmail}. + + + On windows boxes I'd vote for + @uref{http://www.tglsoft.de/,Hamster}, + it's a small freeware, open-source program which fetches + your mail and news from remote servers and offers them + to Gnus (or any other mail and/or news reader) via nntp + respectively POP3 or IMAP. It also includes a smtp + server for receiving mails from Gnus. + +@ifnottex +@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment +@end ifnottex +@subheading Question 7.2: + + So what was this thing about the Agent? + + +Answer: + + The Gnus agent is part of Gnus, it allows you to fetch + mail and news and store them on disk for reading them + later when you're offline. It kind of mimics offline + newsreaders like e.g. Forte Agent. If you want to use + the Agent place the following in ~/.gnus if you are + still using 5.8.8 or 5.9 (it's the default since 5.10.0): + + +@example + +(setq gnus-agent t) + +@end example + + + Now you've got to select the servers whose groups can be + stored locally. To do this, open the server buffer + (that is press @samp{^} while in the + group buffer). Now select a server by moving point to + the line naming that server. Finally, agentize the + server by typing @samp{J a}. If you + make a mistake, or change your mind, you can undo this + action by typing @samp{J r}. When + you're done, type 'q' to return to the group buffer. + Now the next time you enter a group on a agentized + server, the headers will be stored on disk and read from + there the next time you enter the group. + +@ifnottex +@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment +@end ifnottex +@subheading Question 7.3: + + I want to store article bodies on disk, too. How to do it? + + +Answer: + + You can tell the agent to automatically fetch the bodies + of articles which fulfill certain predicates, this is + done in a special buffer which can be reached by + saying @samp{J c} in group + buffer. Please refer to the documentation for + information which predicates are possible and how + exactly to do it. + + + Further on you can tell the agent manually which + articles to store on disk. There are two ways to do + this: Number one: In the summary buffer, process mark a + set of articles that shall be stored in the agent by + saying @samp{#} with point over the + article and then type @samp{J s}. The + other possibility is to set, again in the summary + buffer, downloadable (%) marks for the articles you + want by typing @samp{@@} with point over + the article and then typing @samp{J u}. + What's the difference? Well, process marks are erased as + soon as you exit the summary buffer while downloadable + marks are permanent. You can actually set downloadable + marks in several groups then use fetch session ('J s' in + the GROUP buffer) to fetch all of those articles. The + only downside is that fetch session also fetches all of + the headers for every selected group on an agentized + server. Depending on the volume of headers, the initial + fetch session could take hours. + +@ifnottex +@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment +@end ifnottex +@subheading Question 7.4: + + How to tell Gnus not to try to send mails / postings + while I'm offline? + + +Answer: + + All you've got to do is to tell Gnus when you are online + (plugged) and when you are offline (unplugged), the rest + works automatically. You can toggle plugged/unplugged + state by saying @samp{J j} in group + buffer. To start Gnus unplugged say @samp{M-x + gnus-unplugged} instead of + @samp{M-x gnus}. Note that for this to + work, the agent must be active. + + +@ifnottex +@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions +@end ifnottex +@section Getting help + +@menu +* [8.1]:: How to find information and help inside Emacs? +* [8.2]:: I can't find anything in the Gnus manual about X (e.g. attachments, PGP, MIME...), is it not documented? +* [8.3]:: Which websites should I know? +* [8.4]:: Which mailing lists and newsgroups are there? +* [8.5]:: Where to report bugs? +* [8.6]:: I need real-time help, where to find it? +@end menu + +@ifnottex +@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.1: + + How to find information and help inside Emacs? + + +Answer: + + The first stop should be the Gnus manual (Say + @samp{C-h i d m Gnus RET} to start the + Gnus manual, then walk through the menus or do a + full-text search with @samp{s}). Then + there are the general Emacs help commands starting with + C-h, type @samp{C-h ? ?} to get a list + of all available help commands and their meaning. Finally + @samp{M-x apropos-command} lets you + search through all available functions and @samp{M-x + apropos} searches the bound variables. + +@ifnottex +@node [8.2], [8.3], [8.1], FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.2: + + I can't find anything in the Gnus manual about X + (e.g. attachments, PGP, MIME...), is it not documented? + + +Answer: + + There's not only the Gnus manual but also the manuals + for message, emacs-mime, sieve and pgg. Those packages + are distributed with Gnus and used by Gnus but aren't + really part of core Gnus, so they are documented in + different info files, you should have a look in those + manuals, too. + +@ifnottex +@node [8.3], [8.4], [8.2], FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.3: + + Which websites should I know? + + +Answer: + + The two most important ones are the + @uref{http://www.gnus.org,official Gnus website}. + and it's sister site + @uref{http://my.gnus.org,my.gnus.org (MGO)}, + hosting an archive of lisp snippets, howtos, a (not + really finished) tutorial and this FAQ. + + + Tell me about other sites which are interesting. + +@ifnottex +@node [8.4], [8.5], [8.3], FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.4: + + Which mailing lists and newsgroups are there? + + +Answer: + + There's the newsgroup gnu.emacs.gnus (pull it from + e.g. news.gnus.org) which deals with general questions + and the ding mailing list (ding@@gnus.org) dealing with + development of Gnus. You can read the ding list via + NNTP, too under the name gnus.ding from news.gnus.org. + + + If you want to stay in the big8, + news.software.newssreaders is also read by some Gnus + users (but chances for qualified help are much better in + the above groups) and if you speak German, there's + de.comm.software.gnus. + +@ifnottex +@node [8.5], [8.6], [8.4], FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.5: + + Where to report bugs? + + +Answer: + + Say @samp{M-x gnus-bug}, this will start + a message to the + @uref{mailto:bugs@@gnus.org,gnus bug mailing list} + including information about your environment which make + it easier to help you. + +@ifnottex +@node [8.6], , [8.5], FAQ 8 - Getting help +@end ifnottex +@subheading Question 8.6: + + I need real-time help, where to find it? + + +Answer: + + Point your IRC client to irc.my.gnus.org channel + #mygnus. Don't be afraid if people there speak German, + they are willing and capable of switching to + English when people from outside Germany enter. + + +@ifnottex +@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions +@end ifnottex +@section Tuning Gnus + +@menu +* [9.1]:: Starting Gnus is really slow, how to speed it up? +* [9.2]:: How to speed up the process of entering a group? +* [9.3]:: Sending mail becomes slower and slower, what's up? +@end menu + +@ifnottex +@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus +@end ifnottex +@subheading Question 9.1: + + Starting Gnus is really slow, how to speed it up? + + +Answer: + + The reason for this could be the way Gnus reads it's + active file, see the node "The Active File" in the Gnus + manual for things you might try to speed the process up. + An other idea would be to byte compile your ~/.gnus (say + @samp{M-x byte-compile-file RET ~/.gnus + RET} to do it). Finally, if you have require + statements in your .gnus, you could replace them with + eval-after-load, which loads the stuff not at startup + time, but when it's needed. Say you've got this in your + ~/.gnus: + + +@example + +(require 'message) +(add-to-list 'message-syntax-checks '(sender . disabled)) + +@end example + +@noindent + then as soon as you start Gnus, message.el is loaded. If + you replace it with + + +@example + +(eval-after-load "message" + '(add-to-list 'message-syntax-checks '(sender . disabled))) + +@end example + +@noindent + it's loaded when it's needed. + +@ifnottex +@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus +@end ifnottex +@subheading Question 9.2: + + How to speed up the process of entering a group? + + +Answer: + + A speed killer is setting the variable + gnus-fetch-old-headers to anything different from nil, + so don't do this if speed is an issue. To speed up + building of summary say + + +@example + +(gnus-compile) + +@end example + +@noindent + at the bottom of your ~/.gnus, this will make gnus + byte-compile things like + gnus-summary-line-format. + then you could increase the value of gc-cons-threshold + by saying something like + + +@example + +(setq gc-cons-threshold 3500000) + +@end example + +@noindent + in ~/.emacs. If you don't care about width of CJK + characters or use Gnus 5.10.0 or younger together with a + recent GNU Emacs, you should say + + +@example + +(setq gnus-use-correct-string-widths nil) + +@end example + + +@noindent + in ~/.gnus (thanks to Jesper harder for the last + two suggestions). Finally if you are still using 5.8.8 + or 5.9 and experience speed problems with summary + buffer generation, you definitely should update to + 5.10.0 since there quite some work on improving it has + been done. + +@ifnottex +@node [9.3], , [9.2], FAQ 9 - Tuning Gnus +@end ifnottex +@subheading Question 9.3: + + Sending mail becomes slower and slower, what's up? + + +Answer: + + The reason could be that you told Gnus to archive the + messages you wrote by setting + gnus-message-archive-group. Try to use a nnml group + instead of an archive group, this should bring you back + to normal speed. + + +@ifnottex +@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions +@end ifnottex +@section Glossary + +@table @dfn + +@item ~/.gnus + When the term ~/.gnus is used it just means your Gnus + configuration file. You might as well call it ~/.gnus.el or + specify another name. + + +@item Back End + In Gnus terminology a back end is a virtual server, a layer + between core Gnus and the real NNTP-, POP3-, IMAP- or + whatever-server which offers Gnus a standardized interface + to functions like "get message", "get Headers" etc. + + +@item Emacs + When the term Emacs is used in this FAQ, it means either GNU + Emacs or XEmacs. + + +@item Message + In this FAQ message means a either a mail or a posting to a + Usenet Newsgroup or to some other fancy back end, no matter + of which kind it is. + + +@item MUA + MUA is an acronym for Mail User Agent, it's the program you + use to read and write e-mails. + + +@item NUA + NUA is an acronym for News User Agent, it's the program you + use to read and write Usenet news. + +@end table + +@c @bye diff --git a/texi/gnus.texi b/texi/gnus.texi index 2a0898c..0680001 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -33,7 +33,7 @@ \makeindex \begin{document} -\newcommand{\gnusversionname}{Oort Gnus v0.18} +\newcommand{\gnusversionname}{Oort Gnus v0.19} \newcommand{\gnuschaptername}{} \newcommand{\gnussectionname}{} @@ -53,6 +53,7 @@ \newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}} \newcommand{\gnuscode}[1]{\gnustt{#1}} +\newcommand{\gnusenv}[1]{\gnustt{#1}} \newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''} \newcommand{\gnuslisp}[1]{\gnustt{#1}} \newcommand{\gnuskbd}[1]{`\gnustt{#1}'} @@ -60,6 +61,7 @@ \newcommand{\gnusfile}[1]{`\gnustt{#1}'} \newcommand{\gnusdfn}[1]{\textit{#1}} \newcommand{\gnusi}[1]{\textit{#1}} +\newcommand{\gnusr}[1]{\textrm{#1}} \newcommand{\gnusstrong}[1]{\textbf{#1}} \newcommand{\gnusemph}[1]{\textit{#1}} \newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}} @@ -68,7 +70,7 @@ \newcommand{\gnusversion}[1]{{\small\textit{#1}}} \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}} \newcommand{\gnusresult}[1]{\gnustt{=> #1}} -\newcommand{\gnusacronym}[1]{\textit{#1}} +\newcommand{\gnusacronym}[1]{\textsc{#1}} \newcommand{\gnusemail}[1]{\textit{#1}} \newcommand{\gnusbullet}{{${\bullet}$}} @@ -383,11 +385,11 @@ license to the document, as described in section 6 of the license. @ifinfo You can read news (and mail) from within Emacs by using Gnus. The news -can be gotten by any nefarious means you can think of---@sc{nntp}, local +can be gotten by any nefarious means you can think of---@acronym{NNTP}, local spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Oort Gnus v0.18. +This manual corresponds to Oort Gnus v0.19. @end ifinfo @@ -428,16 +430,16 @@ the program. * Scoring:: Assigning values to articles. * Various:: General purpose settings. * The End:: Farewell and goodbye. -* Appendices:: Terminology, Emacs intro, FAQ, History, Internals. +* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals. * Index:: Variable, function and concept index. * Key Index:: Key Index. Other related manuals * Message:(message). Composing messages. -* Emacs-MIME:(emacs-mime). Composing messages; MIME-specific parts. +* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts. * Sieve:(sieve). Managing Sieve scripts in Emacs. -* PGG:(pgg). PGP/MIME with Gnus. +* PGG:(pgg). @acronym{PGP/MIME} with Gnus. @detailmenu --- The Detailed Node Listing --- @@ -629,7 +631,7 @@ Various Summary Stuff Article Buffer * Hiding Headers:: Deciding what headers should be displayed. -* Using MIME:: Pushing articles through @sc{mime} before reading them. +* Using MIME:: Pushing articles through @acronym{MIME} before reading them. * Customizing Articles:: Tailoring the look of the articles. * Article Keymap:: Keystrokes available in the article buffer. * Misc Article:: Other stuff. @@ -651,7 +653,7 @@ Select Methods * Getting News:: Reading USENET news with Gnus. * Getting Mail:: Reading your personal mail with Gnus. * Browsing the Web:: Getting messages from a plethora of Web sources. -* IMAP:: Using Gnus as a @sc{imap} client. +* IMAP:: Using Gnus as a @acronym{IMAP} client. * Other Sources:: Reading directories, files, SOUP packets. * Combined Groups:: Combining groups into one group. * Gnus Unplugged:: Reading news and mail offline. @@ -668,10 +670,10 @@ Server Buffer Getting News -* NNTP:: Reading news from an @sc{nntp} server. +* NNTP:: Reading news from an @acronym{NNTP} server. * News Spool:: Reading news from the local spool. -@sc{nntp} +@acronym{NNTP} * Direct Functions:: Connecting directly to the server. * Indirect Functions:: Connecting indirectly to the server. @@ -702,7 +704,7 @@ Mail Sources Choosing a Mail Back End * Unix Mail Box:: Using the (quite) standard Un*x mbox. -* Rmail Babyl:: Emacs programs use the rmail babyl format. +* Rmail Babyl:: Emacs programs use the Rmail Babyl format. * Mail Spool:: Store your mail in a private spool? * MH Spool:: An mhspool-like back end. * Maildir:: Another one-file-per-message format. @@ -719,13 +721,13 @@ Browsing the Web * RSS:: Reading RDF site summary. * Customizing w3:: Doing stuff to Emacs/w3 from Gnus. -@sc{imap} +@acronym{IMAP} * Splitting in IMAP:: Splitting mail with nnimap. * Expiring in IMAP:: Expiring mail with nnimap. * Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox. * Expunging mailboxes:: Equivalent of a ``compress mailbox'' button. -* A note on namespaces:: How to (not) use IMAP namespace in Gnus. +* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus. Other Sources @@ -758,7 +760,7 @@ Gnus Unplugged * Agent as Cache:: The Agent is a big cache too. * Agent Expiry:: How to make old articles go away. * Agent Regeneration:: How to recover from lost connections and other accidents. -* Agent and IMAP:: How to use the Agent with IMAP. +* Agent and IMAP:: How to use the Agent with @acronym{IMAP}. * Outgoing Messages:: What happens when you post/mail something? * Agent Variables:: Customizing is fun. * Example Setup:: An example @file{~/.gnus.el} file for offline people. @@ -981,7 +983,7 @@ news. This variable should be a list where the first element says native method. All groups not fetched with this method are foreign groups. -For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where +For instance, if the @samp{news.somewhere.edu} @acronym{NNTP} server is where you want to get your daily dosage of news from, you'd say: @lisp @@ -1000,12 +1002,13 @@ server is running Leafnode; in this case, use @code{(nntp "localhost")}. @vindex gnus-nntpserver-file @cindex NNTPSERVER -@cindex @sc{nntp} server +@cindex @acronym{NNTP} server If this variable is not set, Gnus will take a look at the -@code{NNTPSERVER} environment variable. If that variable isn't set, +@env{NNTPSERVER} environment variable. If that variable isn't set, Gnus will see whether @code{gnus-nntpserver-file} -(@file{/etc/nntpserver} by default) has any opinions on the matter. If -that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server. That's a long shot, though. +(@file{/etc/nntpserver} by default) has any opinions on the matter. +If that fails as well, Gnus will try to use the machine running Emacs +as an @acronym{NNTP} server. That's a long shot, though. @vindex gnus-nntp-server If @code{gnus-nntp-server} is set, this variable will override @@ -1015,7 +1018,7 @@ If @code{gnus-nntp-server} is set, this variable will override @vindex gnus-secondary-servers @vindex gnus-nntp-server You can also make Gnus prompt you interactively for the name of an -@sc{nntp} server. If you give a non-numerical prefix to @code{gnus} +@acronym{NNTP} server. If you give a non-numerical prefix to @code{gnus} (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers in the @code{gnus-secondary-servers} list (if any). You can also just type in the name of any server you feel like visiting. (Note that this @@ -1025,7 +1028,7 @@ server.) @findex gnus-group-browse-foreign-server @kindex B (Group) -However, if you use one @sc{nntp} server regularly and are just +However, if you use one @acronym{NNTP} server regularly and are just interested in a couple of groups from a different server, you would be better served by using the @kbd{B} command in the group buffer. It will let you have a look at what groups are available, and you can subscribe @@ -1341,7 +1344,7 @@ New groups that match this regexp are subscribed using @section Changing Servers @cindex changing servers -Sometimes it is necessary to move from one @sc{nntp} server to another. +Sometimes it is necessary to move from one @acronym{NNTP} server to another. This happens very rarely, but perhaps you change jobs, or one server is very flaky and you want to use another. @@ -1351,7 +1354,7 @@ Changing the server is pretty easy, right? You just change @emph{Wrong!} Article numbers are not (in any way) kept synchronized between different -@sc{nntp} servers, and the only way Gnus keeps track of what articles +@acronym{NNTP} servers, and the only way Gnus keeps track of what articles you have read is by keeping track of article numbers. So when you change @code{gnus-select-method}, your @file{.newsrc} file becomes worthless. @@ -1569,7 +1572,7 @@ variable. If this variable is @code{nil}, Gnus will ask for group info in total lock-step, which isn't very fast. If it is @code{some} and you use an -@sc{nntp} server, Gnus will pump out commands as fast as it can, and +@acronym{NNTP} server, Gnus will pump out commands as fast as it can, and read all the replies in one swoop. This will normally result in better performance, but if the server does not support the aforementioned @code{LIST ACTIVE group} command, this isn't very nice to the server. @@ -1790,7 +1793,7 @@ Number of unseen articles. Estimated total number of articles. (This is really @var{max-number} minus @var{min-number} plus 1.) -Gnus uses this estimation because the @sc{nntp} protocol provides +Gnus uses this estimation because the @acronym{NNTP} protocol provides efficient access to @var{max-number} and @var{min-number} but getting the true unread message count is not possible efficiently. For hysterical raisins, even the mail back ends, where the true number of @@ -1816,7 +1819,10 @@ Group comment (@pxref{Group Parameters}) or group name if there is no comment element in the group parameters. @item D -Newsgroup description. +Newsgroup description. You need to read the group descriptions +before these will appear, and to do that, you either have to set +@code{gnus-read-active-file} or use the group buffer @kbd{M-d} +command. @item o @samp{m} if moderated. @@ -2120,6 +2126,10 @@ number (@code{-n}), the @code{n} oldest articles will be fetched. If it is positive, the @code{n} articles that have arrived most recently will be fetched. +@vindex gnus-large-ephemeral-newsgroup +Same as @code{gnus-large-newsgroup}, but only used for ephemeral +newsgroups. + @vindex gnus-select-group-hook @vindex gnus-auto-select-first @vindex gnus-auto-select-subject @@ -2264,7 +2274,7 @@ read articles (@code{gnus-group-clear-data}). @item M-x gnus-group-clear-data-on-native-groups @kindex M-x gnus-group-clear-data-on-native-groups @findex gnus-group-clear-data-on-native-groups -If you have switched from one @sc{nntp} server to another, all your marks +If you have switched from one @acronym{NNTP} server to another, all your marks and read ranges have become worthless. You can use this command to clear out all data that you have on your native groups. Use with caution. @@ -2491,7 +2501,7 @@ consulted. @cindex making groups Make a new group (@code{gnus-group-make-group}). Gnus will prompt you for a name, a method and possibly an @dfn{address}. For an easier way -to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}. +to subscribe to @acronym{NNTP} groups, @pxref{Browse Foreign Server}. @item G r @kindex G r (Group) @@ -2639,7 +2649,7 @@ methods. If @code{gnus-activate-foreign-newsgroups} is a positive number, Gnus will check all foreign groups with this level or lower at startup. This might take quite a while, especially if you subscribe to lots of -groups from different @sc{nntp} servers. Also @pxref{Group Levels}; +groups from different @acronym{NNTP} servers. Also @pxref{Group Levels}; @code{gnus-activate-level} also affects activation of foreign newsgroups. @@ -2742,10 +2752,11 @@ of whether it has any unread articles. @item broken-reply-to @cindex broken-reply-to Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To} -headers in this group are to be ignored. This can be useful if you're -reading a mailing list group where the listserv has inserted -@code{Reply-To} headers that point back to the listserv itself. This is -broken behavior. So there! +headers in this group are to be ignored, and for the header to be hidden +if @code{reply-to} is part of @code{gnus-boring-article-headers}. This +can be useful if you're reading a mailing list group where the listserv +has inserted @code{Reply-To} headers that point back to the listserv +itself. That is broken behavior. So there! @item to-group @cindex to-group @@ -2829,7 +2840,7 @@ Display all articles, both read and unread. @item an integer Display the last @var{integer} articles in the group. This is the same as -entering the group with C-u @var{integer}. +entering the group with @kbd{C-u @var{integer}}. @item default Display the default visible articles, which normally includes unread and @@ -2912,9 +2923,9 @@ instead of @code{gnus-post-method}. @item banner @cindex banner -An item like @code{(banner . "regex")} causes any part of an article -that matches the regular expression "regex" to be stripped. Instead of -"regex", you can also use the symbol @code{signature} which strips the +An item like @code{(banner . @var{regexp})} causes any part of an article +that matches the regular expression @var{regexp} to be stripped. Instead of +@var{regexp}, you can also use the symbol @code{signature} which strips the last signature or any of the elements of the alist @code{gnus-article-banner-alist}. @@ -2947,8 +2958,20 @@ that group. @code{gnus-show-threads} will be made into a local variable in the summary buffer you enter, and the form @code{nil} will be @code{eval}ed there. +Note that this feature sets the variable locally to the summary buffer. +But some variables are evaluated in the article buffer, or in the +message buffer (of a reply or followup or otherwise newly created +message). As a workaround, it might help to add the variable in +question to @code{gnus-newsgroup-variables}. @xref{Various Summary +Stuff}. So if you want to set @code{message-from-style} via the group +parameters, then you may need the following statement elsewhere in your +@file{~/.gnus} file: +@lisp +(add-to-list 'gnus-newsgroup-variables 'message-from-style) +@end lisp + @vindex gnus-list-identifiers -A use for this feature, is to remove a mailing list identifier tag in +A use for this feature is to remove a mailing list identifier tag in the subject fields of articles. E.g. if the news group @samp{nntp+news.gnus.org:gmane.text.docbook.apps} has the tag @samp{DOC-BOOK-APPS:} in the subject of all articles, this tag can be @@ -2956,7 +2979,6 @@ removed from the article subjects in the summary buffer for the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} into the group parameters for the group. - This can also be used as a group-specific hook function, if you'd like. If you want to hear a beep when you enter a group, you could put something like @code{(dummy-variable (ding))} in the parameters of that @@ -3017,7 +3039,7 @@ These commands all list various slices of the groups available. List all groups that have unread articles (@code{gnus-group-list-groups}). If the numeric prefix is used, this command will list only groups of level ARG and lower. By default, it -only lists groups of level five (i. e., +only lists groups of level five (i.e., @code{gnus-group-default-list-level}) or lower (i.e., just subscribed groups). @@ -4025,7 +4047,7 @@ whether they are empty or not. @item gnus-group-name-charset-method-alist @vindex gnus-group-name-charset-method-alist An alist of method and the charset for group names. It is used to show -non-ASCII group names. +non-@acronym{ASCII} group names. For example: @lisp @@ -4037,9 +4059,9 @@ For example: @cindex UTF-8 group names @vindex gnus-group-name-charset-group-alist An alist of regexp of group name and the charset for group names. It -is used to show non-ASCII group names. @code{((".*" utf-8))} is the -default value if UTF-8 is supported, otherwise the default is -@code{nil}. +is used to show non-@acronym{ASCII} group names. @code{((".*" +utf-8))} is the default value if UTF-8 is supported, otherwise the +default is @code{nil}. For example: @lisp @@ -4114,13 +4136,13 @@ news. @vindex gnus-group-faq-directory @cindex FAQ @cindex ange-ftp -Try to fetch the FAQ for the current group -(@code{gnus-group-fetch-faq}). Gnus will try to get the FAQ from -@code{gnus-group-faq-directory}, which is usually a directory on a -remote machine. This variable can also be a list of directories. In -that case, giving a prefix to this command will allow you to choose -between the various sites. @code{ange-ftp} (or @code{efs}) will be used -for fetching the file. +Try to fetch the @acronym{FAQ} for the current group +(@code{gnus-group-fetch-faq}). Gnus will try to get the @acronym{FAQ} +from @code{gnus-group-faq-directory}, which is usually a directory on +a remote machine. This variable can also be a list of directories. +In that case, giving a prefix to this command will allow you to choose +between the various sites. @code{ange-ftp} (or @code{efs}) will be +used for fetching the file. If fetching from the first site is unsuccessful, Gnus will attempt to go through @code{gnus-group-faq-directory} and try to open them one by one. @@ -4505,13 +4527,23 @@ lines. A thread could be drawn like this: You can customize the appearance with the following options. Note that it is possible to make the thread display look really neat by -replacing the default ASCII characters with graphic line-drawing -glyphs. +replacing the default @acronym{ASCII} characters with graphic +line-drawing glyphs. @table @code @item gnus-sum-thread-tree-root @vindex gnus-sum-thread-tree-root Used for the root of a thread. If @code{nil}, use subject -instead. The default is @samp{> }. +instead. The default is @samp{> }. + +@item gnus-sum-thread-tree-false-root +@vindex gnus-sum-thread-tree-false-root +Used for the false root of a thread (@pxref{Loose Threads}). If +@code{nil}, use subject instead. The default is @samp{> }. + +@item gnus-sum-thread-tree-false-root +@vindex gnus-sum-thread-tree-false-root +Used for the root of a thread if it is a false root. If @code{nil}, +use subject instead. The default is @samp{> }. @item gnus-sum-thread-tree-single-indent @vindex gnus-sum-thread-tree-single-indent @@ -4666,7 +4698,7 @@ headers are used instead. @vindex nnmail-extra-headers A related variable is @code{nnmail-extra-headers}, which controls when -to include extra headers when generating overview (@sc{nov}) files. +to include extra headers when generating overview (@acronym{NOV}) files. If you have old overview files, you should regenerate them after changing this variable, by entering the server buffer using @kbd{^}, and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause @@ -4698,7 +4730,7 @@ convince their news server administrator to provide some additional support: The above is mostly useful for mail groups, where you have control over -the @sc{nov} files that are created. However, if you can persuade your +the @acronym{NOV} files that are created. However, if you can persuade your nntp admin to add (in the usual implementation, notably INN): @example @@ -5211,6 +5243,10 @@ command uses the process/prefix convention. @findex gnus-summary-reply-broken-reply-to Mail a reply to the author of the current article but ignore the @code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}). +If you need this because a mailing list incorrectly sets a +@code{Reply-To} header pointing to the list, you probably want to set +the @code{broken-reply-to} group parameter instead, so things will work +correctly. @xref{Group Parameters}. @item S B R @kindex S B R (Summary) @@ -5230,11 +5266,11 @@ Forward the current article to some other person is forwarded according to the value of (@code{message-forward-as-mime}) and (@code{message-forward-show-mml}); if the prefix is 1, decode the message and forward directly inline; if the prefix is 2, forward message -as an rfc822 @sc{mime} section; if the prefix is 3, decode message and -forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message +as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and +forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message directly inline; otherwise, the message is forwarded as no prefix given but use the flipped value of (@code{message-forward-as-mime}). By -default, the message is decoded and forwarded as an rfc822 @sc{mime} +default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section. @item S m @@ -5383,11 +5419,11 @@ Forward the current article to a newsgroup of (@code{message-forward-as-mime}) and (@code{message-forward-show-mml}); if the prefix is 1, decode the message and forward directly inline; if the prefix is 2, forward message -as an rfc822 @sc{mime} section; if the prefix is 3, decode message and -forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message +as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and +forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message directly inline; otherwise, the message is forwarded as no prefix given but use the flipped value of (@code{message-forward-as-mime}). By -default, the message is decoded and forwarded as an rfc822 @sc{mime} section. +default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section. @item S O p @kindex S O p (Summary) @@ -6575,6 +6611,11 @@ This variable can also be set to @code{invisible}. This won't have any visible effects, but is useful if you use the @kbd{A T} command a lot (@pxref{Finding the Parent}). +@item gnus-fetch-old-ephemeral-headers +@vindex gnus-fetch-old-ephemeral-headers +Same as @code{gnus-fetch-old-headers}, but only used for ephemeral +newsgroups. + @item gnus-build-sparse-threads @vindex gnus-build-sparse-threads Fetching old headers can be slow. A low-rent similar effect can be @@ -6951,7 +6992,7 @@ say something like: @cindex article pre-fetch @cindex pre-fetch -If you read your news from an @sc{nntp} server that's far away, the +If you read your news from an @acronym{NNTP} server that's far away, the network latencies may make reading articles a chore. You have to wait for a while after pressing @kbd{n} to go to the next article before the article appears. Why can't Gnus just go ahead and fetch the article @@ -6972,7 +7013,7 @@ thing to do, but I don't see any real alternatives. Setting up that extra connection takes some time, so Gnus startup will be slower. Gnus will fetch more articles than you will read. This will mean that -the link between your machine and the @sc{nntp} server will become more +the link between your machine and the @acronym{NNTP} server will become more loaded than if you didn't use article pre-fetch. The server itself will also become more loaded---both with the extra article requests, and the extra connection. @@ -7044,7 +7085,7 @@ The default value is @code{(read exit)}. @cindex article caching @cindex caching -If you have an @emph{extremely} slow @sc{nntp} connection, you may +If you have an @emph{extremely} slow @acronym{NNTP} connection, you may consider turning article caching on. Each article will then be stored locally under your home directory. As you may surmise, this could potentially use @emph{huge} amounts of disk space, as well as eat up all @@ -7085,7 +7126,7 @@ So where does the massive article-fetching and storing come into the picture? The @code{gnus-jog-cache} command will go through all subscribed newsgroups, request all unread articles, score them, and store them in the cache. You should only ever, ever ever ever, use this -command if 1) your connection to the @sc{nntp} server is really, really, +command if 1) your connection to the @acronym{NNTP} server is really, really, really slow and 2) you have a really, really, really huge disk. Seriously. One way to cut down on the number of articles downloaded is to score unwanted articles down and have them marked as read. They will @@ -7111,7 +7152,7 @@ The cache stores information on what articles it contains in its active file (@code{gnus-cache-active-file}). If this file (or any other parts of the cache) becomes all messed up for some reason or other, Gnus offers two functions that will try to set things right. @kbd{M-x -gnus-cache-generate-nov-databases} will (re)build all the @sc{nov} +gnus-cache-generate-nov-databases} will (re)build all the @acronym{NOV} files, and @kbd{gnus-cache-generate-active} will (re)generate the active file. @@ -7233,7 +7274,7 @@ Save the current article in mail format @item O r @kindex O r (Summary) @findex gnus-summary-save-article-rmail -Save the current article in rmail format +Save the current article in Rmail format (@code{gnus-summary-save-article-rmail}). @item O f @@ -7282,10 +7323,10 @@ complete headers in the piped output. @findex gnus-summary-muttprint @vindex gnus-summary-muttprint-program Save the current article into muttprint. That is, print it using the -external program Muttprint (see -@uref{http://muttprint.sourceforge.net/}). The program name and -options to use is controlled by the variable -@code{gnus-summary-muttprint-program}. (@code{gnus-summary-muttprint}). +external program @uref{http://muttprint.sourceforge.net/, +Muttprint}. The program name and options to use is controlled by the +variable @code{gnus-summary-muttprint-program}. +(@code{gnus-summary-muttprint}). @end table @@ -7315,7 +7356,7 @@ functions below, or you can create your own. @findex gnus-summary-save-in-rmail @vindex gnus-rmail-save-name @findex gnus-plain-save-name -This is the default format, @dfn{babyl}. Uses the function in the +This is the default format, @dfn{Babyl}. Uses the function in the @code{gnus-rmail-save-name} variable to get a file name to save the article in. The default is @code{gnus-plain-save-name}. @@ -7369,7 +7410,7 @@ reader to use this setting. @vindex gnus-article-save-directory All of these functions, except for the last one, will save the article in the @code{gnus-article-save-directory}, which is initialized from the -@code{SAVEDIR} environment variable. This is @file{~/News/} by +@env{SAVEDIR} environment variable. This is @file{~/News/} by default. As you can see above, the functions use different functions to find a @@ -7472,9 +7513,9 @@ If you'd like to save articles in a hierarchy that looks something like a spool, you could @lisp -(setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy +(setq gnus-use-long-file-name '(not-save)) ; @r{to get a hierarchy} (setq gnus-default-article-saver - 'gnus-summary-save-in-file) ; no encoding + 'gnus-summary-save-in-file) ; @r{no encoding} @end lisp Then just save with @kbd{o}. You'd then read this hierarchy with @@ -7743,9 +7784,9 @@ Files with name matching this regular expression won't be viewed. @item gnus-uu-ignore-files-by-type @vindex gnus-uu-ignore-files-by-type -Files with a @sc{mime} type matching this variable won't be viewed. +Files with a @acronym{MIME} type matching this variable won't be viewed. Note that Gnus tries to guess what type the file is based on the name. -@code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly +@code{gnus-uu} is not a @acronym{MIME} package (yet), so this is slightly kludgey. @item gnus-uu-tmp-dir @@ -7795,7 +7836,7 @@ Hook run before sending a message to @code{uudecode}. @vindex gnus-uu-view-with-metamail @cindex metamail Non-@code{nil} means that @code{gnus-uu} will ignore the viewing -commands defined by the rule variables and just fudge a @sc{mime} +commands defined by the rule variables and just fudge a @acronym{MIME} content type based on the file name. The result will be fed to @code{metamail} for viewing. @@ -8096,7 +8137,7 @@ too much cruft in most articles. @findex gnus-article-hide Do quite a lot of hiding on the article buffer (@kbd{gnus-article-hide}). In particular, this function will hide -headers, PGP, cited text and the signature. +headers, @acronym{PGP}, cited text and the signature. @item W W h @kindex W W h (Summary) @@ -8138,7 +8179,7 @@ subject. This can also be a list of regular expressions. @item W W P @kindex W W P (Summary) @findex gnus-article-hide-pem -Hide @sc{pem} (privacy enhanced messages) cruft +Hide @acronym{PEM} (privacy enhanced messages) cruft (@code{gnus-article-hide-pem}). @item W W B @@ -8417,24 +8458,23 @@ CRs into LF (this takes care of Mac line endings) @kindex W q (Summary) @findex gnus-article-de-quoted-unreadable Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). -Quoted-Printable is one common @sc{mime} encoding employed when sending -non-ASCII (i. e., 8-bit) articles. It typically makes strings like -@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very -readable to me. Note that this is usually done automatically by -Gnus if the message in question has a @code{Content-Transfer-Encoding} -header that says that this encoding has been done. -If a prefix is given, a charset will be asked for. +Quoted-Printable is one common @acronym{MIME} encoding employed when +sending non-@acronym{ASCII} (i.e., 8-bit) articles. It typically +makes strings like @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which +doesn't look very readable to me. Note that this is usually done +automatically by Gnus if the message in question has a +@code{Content-Transfer-Encoding} header that says that this encoding +has been done. If a prefix is given, a charset will be asked for. @item W 6 @kindex W 6 (Summary) @findex gnus-article-de-base64-unreadable -Treat base64 (@code{gnus-article-de-base64-unreadable}). -Base64 is one common @sc{mime} encoding employed when sending non-ASCII -(i. e., 8-bit) articles. Note that this is usually done -automatically by Gnus if the message in question has a -@code{Content-Transfer-Encoding} header that says that this encoding has -been done. -If a prefix is given, a charset will be asked for. +Treat base64 (@code{gnus-article-de-base64-unreadable}). Base64 is +one common @acronym{MIME} encoding employed when sending +non-@acronym{ASCII} (i.e., 8-bit) articles. Note that this is +usually done automatically by Gnus if the message in question has a +@code{Content-Transfer-Encoding} header that says that this encoding +has been done. If a prefix is given, a charset will be asked for. @item W Z @kindex W Z (Summary) @@ -8454,9 +8494,9 @@ the newlines (@code{gnus-article-unsplit-urls}). @item W h @kindex W h (Summary) @findex gnus-article-wash-html -Treat @sc{html} (@code{gnus-article-wash-html}). Note that this is +Treat @acronym{HTML} (@code{gnus-article-wash-html}). Note that this is usually done automatically by Gnus if the message in question has a -@code{Content-Type} header that says that the message is @sc{html}. +@code{Content-Type} header that says that the message is @acronym{HTML}. If a prefix is given, a charset will be asked for. @@ -8464,7 +8504,7 @@ If a prefix is given, a charset will be asked for. The default is to use the function specified by @code{mm-text-html-renderer} (@pxref{Display Customization, ,Display Customization, emacs-mime, The Emacs MIME Manual}) to convert the -@sc{html}, but this is controlled by the +@acronym{HTML}, but this is controlled by the @code{gnus-article-wash-function} variable. Pre-defined functions you can use include: @@ -8473,17 +8513,16 @@ can use include: Use Emacs/w3. @item w3m -Use emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more -information). +Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}. @item links -Use Links (see @uref{http://artax.karlin.mff.cuni.cz/~mikulas/links/}). +Use @uref{http://links.sf.net/, Links}. @item lynx -Use Lynx (see @uref{http://lynx.browser.org/}). +Use @uref{http://lynx.isc.org/, Lynx}. @item html2text -Use html2text -- a simple @sc{html} converter included with Gnus. +Use html2text---a simple @acronym{HTML} converter included with Gnus. @end table @@ -8502,17 +8541,19 @@ Add clickable buttons to the article headers @item W p @kindex W p (Summary) @findex gnus-article-verify-x-pgp-sig -Verify a signed control message (@code{gnus-article-verify-x-pgp-sig}). -Control messages such as @code{newgroup} and @code{checkgroups} are -usually signed by the hierarchy maintainer. You need to add the PGP -public key of the maintainer to your keyring to verify the -message.@footnote{PGP keys for many hierarchies are available at -@uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}} +Verify a signed control message +(@code{gnus-article-verify-x-pgp-sig}). Control messages such as +@code{newgroup} and @code{checkgroups} are usually signed by the +hierarchy maintainer. You need to add the @acronym{PGP} public key of +the maintainer to your keyring to verify the +message.@footnote{@acronym{PGP} keys for many hierarchies are +available at @uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}} @item W s @kindex W s (Summary) @findex gnus-summary-force-verify-and-decrypt -Verify a signed (PGP, @sc{pgp/mime} or @sc{s/mime}) message +Verify a signed (@acronym{PGP}, @acronym{PGP/MIME} or +@acronym{S/MIME}) message (@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}. @item W a @@ -8624,7 +8665,7 @@ one that handles article bodies and one that handles article heads: This is an alist where each entry has this form: @lisp -(REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR) +(@var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par}) @end lisp @table @var @@ -8672,12 +8713,12 @@ article head only, and that each entry has an additional element that is used to say what headers to apply the buttonize coding to: @lisp -(HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR) +(@var{header} @var{regexp} @var{nutton-par} @var{use-p} @var{function} @var{data-par}) @end lisp @var{header} is a regular expression. -@subsubheading Related variables and functions +@subsubsection Related variables and functions @item gnus-button-@var{*}-level @xref{Article Button Levels}. @@ -8767,7 +8808,7 @@ specific groups (@pxref{Group Parameters}). Here's an example for the variable @code{gnus-parameters}: @lisp -;; increase `gnus-button-*-level' in some groups: +;; @r{increase @code{gnus-button-*-level} in some groups:} (setq gnus-parameters '(("\\<\\(emacs\\|gnus\\)\\>" (gnus-button-emacs-level 10)) ("\\" (gnus-button-man-level 10)) @@ -8813,7 +8854,7 @@ Related variables and functions include @item gnus-button-tex-level @vindex gnus-button-tex-level -Controls the display of references to TeX or LaTeX stuff, e.g. for CTAN +Controls the display of references to @TeX{} or LaTeX stuff, e.g. for CTAN URLs. See the variables @code{gnus-ctan-url}, @code{gnus-button-ctan-handler}, @code{gnus-button-ctan-directory-regexp}, and @@ -8929,7 +8970,7 @@ try to match the headers to what you have (@pxref{Picons}). Smileys are those little @samp{:-)} symbols that people like to litter their messages with (@pxref{Smileys}). -All these functions are toggles--if the elements already exist, +All these functions are toggles---if the elements already exist, they'll be removed. @table @kbd @@ -8994,13 +9035,13 @@ from the end of the body towards the beginning.) One likely value is: @lisp (setq gnus-signature-separator - '("^-- $" ; The standard - "^-- *$" ; A common mangling - "^-------*$" ; Many people just use a looong - ; line of dashes. Shame! - "^ *--------*$" ; Double-shame! - "^________*$" ; Underscores are also popular - "^========*$")) ; Pervert! + '("^-- $" ; @r{The standard} + "^-- *$" ; @r{A common mangling} + "^-------*$" ; @r{Many people just use a looong} + ; @r{line of dashes. Shame!} + "^ *--------*$" ; @r{Double-shame!} + "^________*$" ; @r{Underscores are also popular} + "^========*$")) ; @r{Pervert!} @end lisp The more permissive you are, the more likely it is that you'll get false @@ -9059,43 +9100,43 @@ Translate the article from one language to another @cindex viewing attachments The following commands all understand the numerical prefix. For -instance, @kbd{3 b} means ``view the third @sc{mime} part''. +instance, @kbd{3 b} means ``view the third @acronym{MIME} part''. @table @kbd @item b @itemx K v @kindex b (Summary) @kindex K v (Summary) -View the @sc{mime} part. +View the @acronym{MIME} part. @item K o @kindex K o (Summary) -Save the @sc{mime} part. +Save the @acronym{MIME} part. @item K c @kindex K c (Summary) -Copy the @sc{mime} part. +Copy the @acronym{MIME} part. @item K e @kindex K e (Summary) -View the @sc{mime} part externally. +View the @acronym{MIME} part externally. @item K i @kindex K i (Summary) -View the @sc{mime} part internally. +View the @acronym{MIME} part internally. @item K | @kindex K | (Summary) -Pipe the @sc{mime} part to an external command. +Pipe the @acronym{MIME} part to an external command. @end table -The rest of these @sc{mime} commands do not use the numerical prefix in +The rest of these @acronym{MIME} commands do not use the numerical prefix in the same manner: @table @kbd @item K b @kindex K b (Summary) -Make all the @sc{mime} parts have buttons in front of them. This is +Make all the @acronym{MIME} parts have buttons in front of them. This is mostly useful if you wish to save (or perform other actions) on inlined parts. @@ -9110,7 +9151,7 @@ be viewed in a more pleasant manner @item X m @kindex X m (Summary) @findex gnus-summary-save-parts -Save all parts matching a @sc{mime} type to a directory +Save all parts matching a @acronym{MIME} type to a directory (@code{gnus-summary-save-parts}). Understands the process/prefix convention (@pxref{Process/Prefix}). @@ -9136,13 +9177,13 @@ This command looks in the @code{Content-Type} header to determine the charset. If there is no such header in the article, you can give it a prefix, which will prompt for the charset to decode as. In regional groups where people post using some common encoding (but do not -include @sc{mime} headers), you can set the @code{charset} group/topic +include @acronym{MIME} headers), you can set the @code{charset} group/topic parameter to the required charset (@pxref{Group Parameters}). @item W M v @kindex W M v (Summary) @findex gnus-mime-view-all-parts -View all the @sc{mime} parts in the current article +View all the @acronym{MIME} parts in the current article (@code{gnus-mime-view-all-parts}). @end table @@ -9152,7 +9193,7 @@ Relevant variables: @table @code @item gnus-ignored-mime-types @vindex gnus-ignored-mime-types -This is a list of regexps. @sc{mime} types that match a regexp from +This is a list of regexps. @acronym{MIME} types that match a regexp from this list will be completely ignored by Gnus. The default value is @code{nil}. @@ -9166,35 +9207,35 @@ To have all Vcards be ignored, you'd say something like this: @item gnus-article-loose-mime @vindex gnus-article-loose-mime If non-@code{nil}, Gnus won't required the @samp{MIME-Version} header -before interpreting the message as a @sc{mime} message. This helps +before interpreting the message as a @acronym{MIME} message. This helps when reading messages from certain broken mail user agents. The default is @code{nil}. @item gnus-article-emulate-mime @vindex gnus-article-emulate-mime -There are other, non-@sc{mime} encoding methods used. The most common +There are other, non-@acronym{MIME} encoding methods used. The most common is @samp{uuencode}, but yEncode is also getting to be popular. If -This variable is non-@code{nil}, Gnus will look in message bodies to +this variable is non-@code{nil}, Gnus will look in message bodies to see if it finds these encodings, and if so, it'll run them through the -Gnus @sc{mime} machinery. The default is @code{t}. +Gnus @acronym{MIME} machinery. The default is @code{t}. @item gnus-unbuttonized-mime-types @vindex gnus-unbuttonized-mime-types -This is a list of regexps. @sc{mime} types that match a regexp from -this list won't have @sc{mime} buttons inserted unless they aren't +This is a list of regexps. @acronym{MIME} types that match a regexp from +this list won't have @acronym{MIME} buttons inserted unless they aren't displayed or this variable is overridden by @code{gnus-buttonized-mime-types}. The default value is @code{(".*/.*")}. This variable is only used when -@code{gnus-inhibit-mime-unbuttonizing} is nil. +@code{gnus-inhibit-mime-unbuttonizing} is @code{nil}. @item gnus-buttonized-mime-types @vindex gnus-buttonized-mime-types -This is a list of regexps. @sc{mime} types that match a regexp from -this list will have @sc{mime} buttons inserted unless they aren't +This is a list of regexps. @acronym{MIME} types that match a regexp from +this list will have @acronym{MIME} buttons inserted unless they aren't displayed. This variable overrides @code{gnus-unbuttonized-mime-types}. The default value is @code{nil}. This variable is only used when @code{gnus-inhibit-mime-unbuttonizing} -is nil. +is @code{nil}. To see e.g. security buttons but no other buttons, you could set this variable to @code{("multipart/signed")} and leave @@ -9202,12 +9243,12 @@ variable to @code{("multipart/signed")} and leave @item gnus-inhibit-mime-unbuttonizing @vindex gnus-inhibit-mime-unbuttonizing -If this is non-nil, then all @sc{mime} parts get buttons. The default -value is @code{nil}. +If this is non-@code{nil}, then all @acronym{MIME} parts get buttons. The +default value is @code{nil}. @item gnus-article-mime-part-function @vindex gnus-article-mime-part-function -For each @sc{mime} part, this function will be called with the @sc{mime} +For each @acronym{MIME} part, this function will be called with the @acronym{MIME} handle as the parameter. The function is meant to be used to allow users to gather information from the article (e. g., add Vcard info to the bbdb database) or to do actions based on parts (e. g., automatically @@ -9228,11 +9269,11 @@ Here's an example function the does the latter: @vindex gnus-mime-multipart-functions @item gnus-mime-multipart-functions -Alist of @sc{mime} multipart types and functions to handle them. +Alist of @acronym{MIME} multipart types and functions to handle them. @vindex mm-file-name-rewrite-functions @item mm-file-name-rewrite-functions -List of functions used for rewriting file names of @sc{mime} parts. +List of functions used for rewriting file names of @acronym{MIME} parts. Each function takes a file name as input and returns a file name. Ready-made functions include@* @@ -9273,9 +9314,9 @@ to your @file{~/.gnus.el} file. @section Charsets @cindex charsets -People use different charsets, and we have @sc{mime} to let us know what +People use different charsets, and we have @acronym{MIME} to let us know what charsets they use. Or rather, we wish we had. Many people use -newsreaders and mailers that do not understand or use @sc{mime}, and +newsreaders and mailers that do not understand or use @acronym{MIME}, and just send out messages without saying what character sets they use. To help a bit with this, some local news hierarchies have policies that say what character set is the default. For instance, the @samp{fj} @@ -9287,7 +9328,7 @@ variable, which is an alist of regexps (use the first item to match full group names) and default charsets to be used when reading these groups. @vindex gnus-newsgroup-ignored-charsets -In addition, some people do use soi-disant @sc{mime}-aware agents that +In addition, some people do use soi-disant @acronym{MIME}-aware agents that aren't. These blithely mark messages as being in @code{iso-8859-1} even if they really are in @code{koi-8}. To help here, the @code{gnus-newsgroup-ignored-charsets} variable can be used. The @@ -9298,7 +9339,7 @@ which includes values some agents insist on having in there. @vindex gnus-group-posting-charset-alist When posting, @code{gnus-group-posting-charset-alist} is used to -determine which charsets should not be encoded using the @sc{mime} +determine which charsets should not be encoded using the @acronym{MIME} encodings. For instance, some hierarchies discourage using quoted-printable header encoding. @@ -9328,7 +9369,7 @@ encode using quoted-printable) or @code{t} (always use 8bit). Other charset tricks that may be useful, although not Gnus-specific: -If there are several @sc{mime} charsets that encode the same Emacs +If there are several @acronym{MIME} charsets that encode the same Emacs charset, you can choose what charset to use by saying the following: @lisp @@ -9337,7 +9378,7 @@ charset, you can choose what charset to use by saying the following: @end lisp This means that Russian will be encoded using @code{koi8-r} instead of -the default @code{iso-8859-5} @sc{mime} charset. +the default @code{iso-8859-5} @acronym{MIME} charset. If you want to read messages in @code{koi8-u}, you can cheat and say @@ -9450,7 +9491,7 @@ Commands}). @findex gnus-summary-refer-parent-article If you'd like to read the parent of the current article, and it is not displayed in the summary buffer, you might still be able to. That is, -if the current group is fetched by @sc{nntp}, the parent hasn't expired +if the current group is fetched by @acronym{NNTP}, the parent hasn't expired and the @code{References} in the current article are not mangled, you can just press @kbd{^} or @kbd{A r} (@code{gnus-summary-refer-parent-article}). If everything goes well, @@ -9493,7 +9534,7 @@ by giving the @kbd{A T} command a numerical prefix. @kindex M-^ (Summary) @cindex Message-ID @cindex fetching by Message-ID -You can also ask the @sc{nntp} server for an arbitrary article, no +You can also ask the @acronym{NNTP} server for an arbitrary article, no matter what group it belongs to. @kbd{M-^} (@code{gnus-summary-refer-article}) will ask you for a @code{Message-ID}, which is one of those long, hard-to-read thingies @@ -9508,8 +9549,8 @@ by giving this command a prefix. @vindex gnus-refer-article-method If the group you are reading is located on a back end that does not support fetching by @code{Message-ID} very well (like @code{nnspool}), -you can set @code{gnus-refer-article-method} to an @sc{nntp} method. It -would, perhaps, be best if the @sc{nntp} server you consult is the one +you can set @code{gnus-refer-article-method} to an @acronym{NNTP} method. It +would, perhaps, be best if the @acronym{NNTP} server you consult is the one updating the spool you are reading from, but that's not really necessary. @@ -10028,10 +10069,10 @@ the list in one particular group: @item gnus-newsgroup-variables A list of newsgroup (summary buffer) local variables, or cons of variables and their default values (when the default values are not -nil), that should be made global while the summary buffer is active. -These variables can be used to set variables in the group parameters -while still allowing them to affect operations done in other -buffers. For example: +@code{nil}), that should be made global while the summary buffer is +active. These variables can be used to set variables in the group +parameters while still allowing them to affect operations done in +other buffers. For example: @lisp (setq gnus-newsgroup-variables @@ -10052,13 +10093,13 @@ buffers. For example: @kindex H f (Summary) @findex gnus-summary-fetch-faq @vindex gnus-group-faq-directory -Try to fetch the FAQ (list of frequently asked questions) for the -current group (@code{gnus-summary-fetch-faq}). Gnus will try to get the -FAQ from @code{gnus-group-faq-directory}, which is usually a directory -on a remote machine. This variable can also be a list of directories. -In that case, giving a prefix to this command will allow you to choose -between the various sites. @code{ange-ftp} or @code{efs} will probably -be used for fetching the file. +Try to fetch the @acronym{FAQ} (list of frequently asked questions) +for the current group (@code{gnus-summary-fetch-faq}). Gnus will try +to get the @acronym{FAQ} from @code{gnus-group-faq-directory}, which +is usually a directory on a remote machine. This variable can also be +a list of directories. In that case, giving a prefix to this command +will allow you to choose between the various sites. @code{ange-ftp} +or @code{efs} will probably be used for fetching the file. @item H d @kindex H d (Summary) @@ -10346,11 +10387,11 @@ excessive crossposting (@pxref{Summary Mail Commands}). @cindex cross-posting @cindex Xref -@cindex @sc{nov} +@cindex @acronym{NOV} One thing that may cause Gnus to not do the cross-posting thing -correctly is if you use an @sc{nntp} server that supports @sc{xover} +correctly is if you use an @acronym{NNTP} server that supports @sc{xover} (which is very nice, because it speeds things up considerably) which -does not include the @code{Xref} header in its @sc{nov} lines. This is +does not include the @code{Xref} header in its @acronym{NOV} lines. This is Evil, but all too common, alas, alack. Gnus tries to Do The Right Thing even with @sc{xover} by registering the @code{Xref} lines of all articles you actually read, but if you kill the articles, or just mark @@ -10360,7 +10401,7 @@ the cross reference mechanism. @cindex LIST overview.fmt @cindex overview.fmt -To check whether your @sc{nntp} server includes the @code{Xref} header +To check whether your @acronym{NNTP} server includes the @code{Xref} header in its overview files, try @samp{telnet your.nntp.server nntp}, @samp{MODE READER} on @code{inn} servers, and then say @samp{LIST overview.fmt}. This may not work, but if it does, and the last line you @@ -10389,16 +10430,16 @@ reasons. @enumerate @item -The @sc{nntp} server may fail to generate the @code{Xref} header. This +The @acronym{NNTP} server may fail to generate the @code{Xref} header. This is evil and not very common. @item -The @sc{nntp} server may fail to include the @code{Xref} header in the +The @acronym{NNTP} server may fail to include the @code{Xref} header in the @file{.overview} data bases. This is evil and all too common, alas. @item You may be reading the same group (or several related groups) from -different @sc{nntp} servers. +different @acronym{NNTP} servers. @item You may be getting mail that duplicates articles posted to groups. @@ -10458,18 +10499,19 @@ to you to figure out, I think. @section Security Gnus is able to verify signed messages or decrypt encrypted messages. -The formats that are supported are PGP, @sc{pgp/mime} and @sc{s/mime}, -however you need some external programs to get things to work: +The formats that are supported are @acronym{PGP}, @acronym{PGP/MIME} +and @acronym{S/MIME}, however you need some external programs to get +things to work: @enumerate @item -To handle PGP and PGP/MIME messages, you have to install an OpenPGP -implementation such as GnuPG. The lisp interface to GnuPG included -with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), but -Mailcrypt and gpg.el are also supported. +To handle @acronym{PGP} and @acronym{PGP/MIME} messages, you have to +install an OpenPGP implementation such as GnuPG. The lisp interface +to GnuPG included with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG +Manual}), but Mailcrypt and gpg.el are also supported. @item -To handle @sc{s/mime} message, you need to install OpenSSL. OpenSSL 0.9.6 +To handle @acronym{S/MIME} message, you need to install OpenSSL. OpenSSL 0.9.6 or newer is recommended. @end enumerate @@ -10492,18 +10534,40 @@ protocols. Otherwise, ask user. @item mml1991-use @vindex mml1991-use -Symbol indicating elisp interface to OpenPGP implementation for PGP -messages. The default is @code{pgg}, but @code{mailcrypt} and -@code{gpg} are also supported although deprecated. +Symbol indicating elisp interface to OpenPGP implementation for +@acronym{PGP} messages. The default is @code{pgg}, but +@code{mailcrypt} and @code{gpg} are also supported although +deprecated. @item mml2015-use @vindex mml2015-use Symbol indicating elisp interface to OpenPGP implementation for -PGP/MIME messages. The default is @code{pgg}, but @code{mailcrypt} -and @code{gpg} are also supported although deprecated. +@acronym{PGP/MIME} messages. The default is @code{pgg}, but +@code{mailcrypt} and @code{gpg} are also supported although +deprecated. @end table +@cindex snarfing keys +@cindex importing PGP keys +@cindex PGP key ring import +Snarfing OpenPGP keys (i.e., importing keys from articles into your +key ring) is not supported explicitly through a menu item or command, +rather Gnus do detect and label keys as @samp{application/pgp-keys}, +allowing you to specify whatever action you think is appropriate +through the usual @acronym{MIME} infrastructure. You can use a +@file{~/.mailcap} entry (@pxref{mailcap, , mailcap, emacs-mime, The +Emacs MIME Manual}) such as the following to import keys using GNU +Privacy Guard when you click on the @acronym{MIME} button +(@pxref{Using MIME}). + +@example +application/pgp-keys; gpg --import --interactive --verbose; needsterminal +@end example + +This happens to also be the default action defined in +@code{mailcap-mime-data}. + @node Mailing List @section Mailing List @@ -10562,7 +10626,7 @@ tell Gnus otherwise. @menu * Hiding Headers:: Deciding what headers should be displayed. -* Using MIME:: Pushing articles through @sc{mime} before reading them. +* Using MIME:: Pushing articles through @acronym{MIME} before reading them. * Customizing Articles:: Tailoring the look of the articles. * Article Keymap:: Keystrokes available in the article buffer. * Misc Article:: Other stuff. @@ -10663,7 +10727,8 @@ Remove the @code{Followup-To} header if it is identical to the @code{Newsgroups} header. @item reply-to Remove the @code{Reply-To} header if it lists the same address as the -@code{From} header. +@code{From} header, or if the @code{broken-reply-to} group parameter is +set. @item newsgroups Remove the @code{Newsgroups} header if it only contains the current group name. @@ -10697,34 +10762,34 @@ This is also the default value for this variable. @node Using MIME @section Using MIME -@cindex @sc{mime} +@cindex @acronym{MIME} Mime is a standard for waving your hands through the air, aimlessly, while people stand around yawning. -@sc{mime}, however, is a standard for encoding your articles, aimlessly, +@acronym{MIME}, however, is a standard for encoding your articles, aimlessly, while all newsreaders die of fear. -@sc{mime} may specify what character set the article uses, the encoding +@acronym{MIME} may specify what character set the article uses, the encoding of the characters, and it also makes it possible to embed pictures and other naughty stuff in innocent-looking articles. @vindex gnus-display-mime-function @findex gnus-display-mime -Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function} -to display the @sc{mime} parts. This is @code{gnus-display-mime} by +Gnus pushes @acronym{MIME} articles through @code{gnus-display-mime-function} +to display the @acronym{MIME} parts. This is @code{gnus-display-mime} by default, which creates a bundle of clickable buttons that can be used to -display, save and manipulate the @sc{mime} objects. +display, save and manipulate the @acronym{MIME} objects. The following commands are available when you have placed point over a -@sc{mime} button: +@acronym{MIME} button: @table @kbd @findex gnus-article-press-button @item RET (Article) @kindex RET (Article) @itemx BUTTON-2 (Article) -Toggle displaying of the @sc{mime} object +Toggle displaying of the @acronym{MIME} object (@code{gnus-article-press-button}). If builtin viewers can not display the object, Gnus resorts to external viewers in the @file{mailcap} files. If a viewer has the @samp{copiousoutput} specification, the @@ -10734,48 +10799,48 @@ object is displayed inline. @item M-RET (Article) @kindex M-RET (Article) @itemx v (Article) -Prompt for a method, and then view the @sc{mime} object using this +Prompt for a method, and then view the @acronym{MIME} object using this method (@code{gnus-mime-view-part}). @findex gnus-mime-view-part-as-type @item t (Article) @kindex t (Article) -View the @sc{mime} object as if it were a different @sc{mime} media type +View the @acronym{MIME} object as if it were a different @acronym{MIME} media type (@code{gnus-mime-view-part-as-type}). @findex gnus-mime-view-part-as-charset @item C (Article) @kindex C (Article) -Prompt for a charset, and then view the @sc{mime} object using this +Prompt for a charset, and then view the @acronym{MIME} object using this charset (@code{gnus-mime-view-part-as-charset}). @findex gnus-mime-save-part @item o (Article) @kindex o (Article) -Prompt for a file name, and then save the @sc{mime} object +Prompt for a file name, and then save the @acronym{MIME} object (@code{gnus-mime-save-part}). @findex gnus-mime-save-part-and-strip @item C-o (Article) @kindex C-o (Article) -Prompt for a file name, then save the @sc{mime} object and strip it from +Prompt for a file name, then save the @acronym{MIME} object and strip it from the article. Then proceed to article editing, where a reasonable suggestion is being made on how the altered article should look -like. The stripped @sc{mime} object will be referred via the -message/external-body @sc{mime} type. +like. The stripped @acronym{MIME} object will be referred via the +message/external-body @acronym{MIME} type. (@code{gnus-mime-save-part-and-strip}). @findex gnus-mime-delete-part @item d (Article) @kindex d (Article) -Delete the @sc{mime} object from the article and replace it with some -information about the removed @sc{mime} object +Delete the @acronym{MIME} object from the article and replace it with some +information about the removed @acronym{MIME} object (@code{gnus-mime-delete-part}). @findex gnus-mime-copy-part @item c (Article) @kindex c (Article) -Copy the @sc{mime} object to a fresh buffer and display this buffer +Copy the @acronym{MIME} object to a fresh buffer and display this buffer (@code{gnus-mime-copy-part}). Compressed files like @file{.gz} and @file{.bz2} are automatically decompressed if @code{auto-compression-mode} is enabled (@pxref{Compressed Files,, @@ -10784,14 +10849,14 @@ Accessing Compressed Files, emacs, The Emacs Editor}). @findex gnus-mime-print-part @item p (Article) @kindex p (Article) -Print the @sc{mime} object (@code{gnus-mime-print-part}). This +Print the @acronym{MIME} object (@code{gnus-mime-print-part}). This command respects the @samp{print=} specifications in the @file{.mailcap} file. @findex gnus-mime-inline-part @item i (Article) @kindex i (Article) -Insert the contents of the @sc{mime} object into the buffer +Insert the contents of the @acronym{MIME} object into the buffer (@code{gnus-mime-inline-part}) as text/plain. If given a prefix, insert the raw contents without decoding. If given a numerical prefix, you can do semi-manual charset stuff (see @@ -10801,36 +10866,36 @@ Article}). @findex gnus-mime-view-part-internally @item E (Article) @kindex E (Article) -View the @sc{mime} object with an internal viewer. If no internal +View the @acronym{MIME} object with an internal viewer. If no internal viewer is available, use an external viewer (@code{gnus-mime-view-part-internally}). @findex gnus-mime-view-part-externally @item e (Article) @kindex e (Article) -View the @sc{mime} object with an external viewer. +View the @acronym{MIME} object with an external viewer. (@code{gnus-mime-view-part-externally}). @findex gnus-mime-pipe-part @item | (Article) @kindex | (Article) -Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}). +Output the @acronym{MIME} object to a process (@code{gnus-mime-pipe-part}). @findex gnus-mime-action-on-part @item . (Article) @kindex . (Article) -Interactively run an action on the @sc{mime} object +Interactively run an action on the @acronym{MIME} object (@code{gnus-mime-action-on-part}). @end table -Gnus will display some @sc{mime} objects automatically. The way Gnus +Gnus will display some @acronym{MIME} objects automatically. The way Gnus determines which parts to do this with is described in the Emacs -@sc{mime} manual. +@acronym{MIME} manual. It might be best to just use the toggling functions from the article buffer to avoid getting nasty surprises. (For instance, you enter the -group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has +group @samp{alt.sing-a-long} and, before you know it, @acronym{MIME} has decoded the sound file in the article and some horrible sing-a-long song comes screaming out your speakers, and you can't find the volume button, because there isn't one, and people are starting to look at you, and you @@ -10897,7 +10962,7 @@ predicate. The following predicates are recognized: @code{or}, @end enumerate You may have noticed that the word @dfn{part} is used here. This refers -to the fact that some messages are @sc{mime} multipart articles that may +to the fact that some messages are @acronym{MIME} multipart articles that may be divided into several parts. Articles that are not multiparts are considered to contain just a single part. @@ -11099,7 +11164,7 @@ article buffer. @vindex gnus-article-decode-hook @item gnus-article-decode-hook @cindex MIME -Hook used to decode @sc{mime} articles. The default value is +Hook used to decode @acronym{MIME} articles. The default value is @code{(article-decode-charset article-decode-encoded-words)} @vindex gnus-article-prepare-hook @@ -11162,7 +11227,7 @@ Displayed when Gnus has treated emphasised strings in the article buffer. @end table @item m -The number of @sc{mime} parts in the article. +The number of @acronym{MIME} parts in the article. @end table @@ -11184,10 +11249,10 @@ This is the delimiter mentioned above. By default, it is @samp{^L} @vindex gnus-use-idna @item gnus-use-idna This variable controls whether Gnus performs IDNA decoding of -internationalized domain names inside @sc{From:}, @sc{To:} and -@sc{Cc:} headers. This requires GNU Libidn -(@url{http://www.gnu.org/software/libidn/}, and this variable is only -enabled if you have installed it. +internationalized domain names inside @samp{From}, @samp{To} and +@samp{Cc} headers. This requires +@uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this +variable is only enabled if you have installed it. @end table @@ -11307,7 +11372,7 @@ When sending mail, Message invokes @code{message-send-mail-function}. The default function, @code{message-send-mail-with-sendmail}, pipes your article to the @code{sendmail} binary for further queuing and sending. When your local system is not configured for sending mail -using @code{sendmail}, and you have access to a remote @sc{smtp} +using @code{sendmail}, and you have access to a remote @acronym{SMTP} server, you can set @code{message-send-mail-function} to @code{smtpmail-send-it} and make sure to setup the @code{smtpmail} package correctly. An example: @@ -11317,9 +11382,10 @@ package correctly. An example: smtpmail-default-smtp-server "YOUR SMTP HOST") @end lisp -To the thing similar to this, there is @code{message-smtpmail-send-it}. -It is useful if your ISP requires the POP-before-SMTP authentication. -See the documentation for the function @code{mail-source-touch-pop}. +To the thing similar to this, there is +@code{message-smtpmail-send-it}. It is useful if your ISP requires +the @acronym{POP}-before-@acronym{SMTP} authentication. See the +documentation for the function @code{mail-source-touch-pop}. Other possible choices for @code{message-send-mail-function} includes @code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail}, @@ -11337,7 +11403,7 @@ posting: @cindex mailing lists If your news server offers groups that are really mailing lists -gatewayed to the @sc{nntp} server, you can read those groups without +gatewayed to the @acronym{NNTP} server, you can read those groups without problems, but you can't post/followup to them without some difficulty. One solution is to add a @code{to-address} to the group parameters (@pxref{Group Parameters}). An easier thing to do is set the @@ -11356,7 +11422,7 @@ Gnus version), @code{emacs-gnus} (show only Emacs and Gnus versions), @code{emacs-gnus-config} (same as @code{emacs-gnus} plus system configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus system type) or a custom string. If you set it to a string, be sure to -use a valid format, see RFC 2616." +use a valid format, see RFC 2616. @end table @@ -11641,16 +11707,16 @@ So here's a new example: (organization "People's Front Against MWM")) ("^rec.humor" (signature my-funny-signature-randomizer)) - ((equal (system-name) "gnarly") ;; A form + ((equal (system-name) "gnarly") ;; @r{A form} (signature my-quote-randomizer)) - (message-news-p ;; A function symbol + (message-news-p ;; @r{A function symbol} (signature my-news-signature)) - (window-system ;; A value symbol + (window-system ;; @r{A value symbol} ("X-Window-System" (format "%s" window-system))) - ;; If I'm replying to Larsi, set the Organization header. + ;; @r{If I'm replying to Larsi, set the Organization header.} ((header "from" "larsi.*org") (Organization "Somewhere, Inc.")) - ((posting-from-work-p) ;; A user defined function + ((posting-from-work-p) ;; @r{A user defined function} (signature-file "~/.work-signature") (address "user@@bar.foo") (body "You are fired.\n\nSincerely, your boss.") @@ -11775,10 +11841,10 @@ typically enter that group and send all the articles off. @cindex using s/mime @cindex using smime -Gnus can digitally sign and encrypt your messages, using vanilla PGP -format or @sc{pgp/mime} or @sc{s/mime}. For decoding such messages, -see the @code{mm-verify-option} and @code{mm-decrypt-option} options -(@pxref{Security}). +Gnus can digitally sign and encrypt your messages, using vanilla +@acronym{PGP} format or @acronym{PGP/MIME} or @acronym{S/MIME}. For +decoding such messages, see the @code{mm-verify-option} and +@code{mm-decrypt-option} options (@pxref{Security}). @vindex gnus-message-replysign @vindex gnus-message-replyencrypt @@ -11791,7 +11857,7 @@ are in reply to encrypted messages. Gnus offers @code{gnus-message-replysignencrypted} (on by default) will sign automatically encrypted messages. -Instructing MML to perform security operations on a @sc{mime} part is +Instructing MML to perform security operations on a @acronym{MIME} part is done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c C-m c} key map for encryption, as follows. @@ -11801,37 +11867,37 @@ C-m c} key map for encryption, as follows. @kindex C-c C-m s s @findex mml-secure-message-sign-smime -Digitally sign current message using @sc{s/mime}. +Digitally sign current message using @acronym{S/MIME}. @item C-c C-m s o @kindex C-c C-m s o @findex mml-secure-message-sign-pgp -Digitally sign current message using PGP. +Digitally sign current message using @acronym{PGP}. @item C-c C-m s p @kindex C-c C-m s p @findex mml-secure-message-sign-pgp -Digitally sign current message using @sc{pgp/mime}. +Digitally sign current message using @acronym{PGP/MIME}. @item C-c C-m c s @kindex C-c C-m c s @findex mml-secure-message-encrypt-smime -Digitally encrypt current message using @sc{s/mime}. +Digitally encrypt current message using @acronym{S/MIME}. @item C-c C-m c o @kindex C-c C-m c o @findex mml-secure-message-encrypt-pgp -Digitally encrypt current message using PGP. +Digitally encrypt current message using @acronym{PGP}. @item C-c C-m c p @kindex C-c C-m c p @findex mml-secure-message-encrypt-pgpmime -Digitally encrypt current message using @sc{pgp/mime}. +Digitally encrypt current message using @acronym{PGP/MIME}. @item C-c C-m C-n @kindex C-c C-m C-n @@ -11849,7 +11915,7 @@ Remove security related MML tags from message. A @dfn{foreign group} is a group not read by the usual (or default) means. It could be, for instance, a group from a different -@sc{nntp} server, it could be a virtual group, or it could be your own +@acronym{NNTP} server, it could be a virtual group, or it could be your own personal mail group. A foreign group (or any group, really) is specified by a @dfn{name} and @@ -11865,7 +11931,7 @@ we do just that (@pxref{Server Buffer}). The @dfn{name} of the group is the name the back end will recognize the group as. -For instance, the group @samp{soc.motss} on the @sc{nntp} server +For instance, the group @samp{soc.motss} on the @acronym{NNTP} server @samp{some.where.edu} will have the name @samp{soc.motss} and select method @code{(nntp "some.where.edu")}. Gnus will call this group @samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp} @@ -11878,7 +11944,7 @@ The different methods all have their peculiarities, of course. * Getting News:: Reading USENET news with Gnus. * Getting Mail:: Reading your personal mail with Gnus. * Browsing the Web:: Getting messages from a plethora of Web sources. -* IMAP:: Using Gnus as a @sc{imap} client. +* IMAP:: Using Gnus as a @acronym{IMAP} client. * Other Sources:: Reading directories, files, SOUP packets. * Combined Groups:: Combining groups into one group. * Gnus Unplugged:: Reading news and mail offline. @@ -11896,14 +11962,14 @@ the actual media and Gnus, so we might just as well say that each back end represents a virtual server. For instance, the @code{nntp} back end may be used to connect to several -different actual @sc{nntp} servers, or, perhaps, to many different ports -on the same actual @sc{nntp} server. You tell Gnus which back end to +different actual @acronym{NNTP} servers, or, perhaps, to many different ports +on the same actual @acronym{NNTP} server. You tell Gnus which back end to use, and what parameters to set by specifying a @dfn{select method}. These select method specifications can sometimes become quite complicated---say, for instance, that you want to read from the -@sc{nntp} server @samp{news.funet.fi} on port number 13, which -hangs if queried for @sc{nov} headers and has a buggy select. Ahem. +@acronym{NNTP} server @samp{news.funet.fi} on port number 13, which +hangs if queried for @acronym{NOV} headers and has a buggy select. Ahem. Anyway, if you had to specify that for each group that used this server, that would be too much work, so Gnus offers a way of naming select methods, which is what you do in the server buffer. @@ -12084,9 +12150,9 @@ Here's the method for a public spool: @cindex proxy @cindex firewall -If you are behind a firewall and only have access to the @sc{nntp} +If you are behind a firewall and only have access to the @acronym{NNTP} server from the firewall machine, you can instruct Gnus to @code{rlogin} -on the firewall machine and telnet from there to the @sc{nntp} server. +on the firewall machine and telnet from there to the @acronym{NNTP} server. Doing this can be rather fiddly, but your virtual server definition should probably look something like this: @@ -12163,6 +12229,8 @@ buffer, and you should be able to enter any of the groups displayed. @node Server Variables @subsection Server Variables +@cindex server variables +@cindex server parameters One sticky point when defining variables (both on back ends and in Emacs in general) is that some variables are typically initialized from other @@ -12187,6 +12255,7 @@ manual, but here's an example @code{nnml} definition: (nnml-newsgroups-file "~/my-mail/newsgroups")) @end lisp +Server variables are often called @dfn{server parameters}. @node Servers and Methods @subsection Servers and Methods @@ -12274,11 +12343,11 @@ Set server status to offline (@code{gnus-server-offline-server}). @cindex news back ends A newsreader is normally used for reading news. Gnus currently provides -only two methods of getting news---it can read from an @sc{nntp} server, +only two methods of getting news---it can read from an @acronym{NNTP} server, or it can read from a local spool. @menu -* NNTP:: Reading news from an @sc{nntp} server. +* NNTP:: Reading news from an @acronym{NNTP} server. * News Spool:: Reading news from the local spool. @end menu @@ -12287,11 +12356,11 @@ or it can read from a local spool. @subsection NNTP @cindex nntp -Subscribing to a foreign group from an @sc{nntp} server is rather easy. -You just specify @code{nntp} as method and the address of the @sc{nntp} +Subscribing to a foreign group from an @acronym{NNTP} server is rather easy. +You just specify @code{nntp} as method and the address of the @acronym{NNTP} server as the, uhm, address. -If the @sc{nntp} server is located at a non-standard port, setting the +If the @acronym{NNTP} server is located at a non-standard port, setting the third element of the select method to this port number should allow you to connect to the right port. You'll have to edit the group info for that (@pxref{Foreign Groups}). @@ -12314,7 +12383,7 @@ server: @findex nntp-send-authinfo @findex nntp-send-mode-reader is run after a connection has been made. It can be used to send -commands to the @sc{nntp} server after it has been contacted. By +commands to the @acronym{NNTP} server after it has been contacted. By default it sends the command @code{MODE READER} to the server with the @code{nntp-send-mode-reader} function. This function should always be present in this hook. @@ -12323,7 +12392,7 @@ present in this hook. @vindex nntp-authinfo-function @findex nntp-send-authinfo @vindex nntp-authinfo-file -This function will be used to send @samp{AUTHINFO} to the @sc{nntp} +This function will be used to send @samp{AUTHINFO} to the @acronym{NNTP} server. The default function is @code{nntp-send-authinfo}, which looks through your @file{~/.authinfo} (or whatever you've set the @code{nntp-authinfo-file} variable to) for applicable entries. If none @@ -12405,7 +12474,7 @@ nntpd 1.5.11t, since that command chokes that server, I've been told. @item nntp-maximum-request @vindex nntp-maximum-request -If the @sc{nntp} server doesn't support @sc{nov} headers, this back end +If the @acronym{NNTP} server doesn't support @acronym{NOV} headers, this back end will collect headers by sending a series of @code{head} commands. To speed things up, the back end sends lots of these commands without waiting for reply, and then reads all the replies. This is controlled @@ -12415,7 +12484,7 @@ your network is buggy, you should set this to 1. @item nntp-connection-timeout @vindex nntp-connection-timeout If you have lots of foreign @code{nntp} groups that you connect to -regularly, you're sure to have problems with @sc{nntp} servers not +regularly, you're sure to have problems with @acronym{NNTP} servers not responding properly, or being too loaded to reply within reasonable time. This is can lead to awkward problems, which can be helped somewhat by setting @code{nntp-connection-timeout}. This is an integer @@ -12429,7 +12498,7 @@ no timeouts are done. @c @cindex dynamic IP addresses @c If you're running Gnus on a machine that has a dynamically assigned @c address, Gnus may become confused. If the address of your machine -@c changes after connecting to the @sc{nntp} server, Gnus will simply sit +@c changes after connecting to the @acronym{NNTP} server, Gnus will simply sit @c waiting forever for replies from the server. To help with this @c unfortunate problem, you can set this command to a number. Gnus will @c then, if it sits waiting for a reply from the server longer than that @@ -12445,7 +12514,7 @@ no timeouts are done. @item nntp-server-hook @vindex nntp-server-hook -This hook is run as the last step when connecting to an @sc{nntp} +This hook is run as the last step when connecting to an @acronym{NNTP} server. @item nntp-buggy-select @@ -12454,24 +12523,24 @@ Set this to non-@code{nil} if your select routine is buggy. @item nntp-nov-is-evil @vindex nntp-nov-is-evil -If the @sc{nntp} server does not support @sc{nov}, you could set this -variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov} +If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this +variable to @code{t}, but @code{nntp} usually checks automatically whether @acronym{NOV} can be used. @item nntp-xover-commands @vindex nntp-xover-commands @cindex nov @cindex XOVER -List of strings used as commands to fetch @sc{nov} lines from a +List of strings used as commands to fetch @acronym{NOV} lines from a server. The default value of this variable is @code{("XOVER" "XOVERVIEW")}. @item nntp-nov-gap @vindex nntp-nov-gap -@code{nntp} normally sends just one big request for @sc{nov} lines to +@code{nntp} normally sends just one big request for @acronym{NOV} lines to the server. The server responds with one huge list of lines. However, if you have read articles 2-5000 in the group, and only want to read -article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov} +article 1 and 5001, that means that @code{nntp} will fetch 4999 @acronym{NOV} lines that you will not need. This variable says how big a gap between two consecutive articles is allowed to be before the @code{XOVER} request is split into several request. Note that if your @@ -12481,7 +12550,7 @@ that fetching will probably be slower. If this variable is @code{nil}, @item nntp-prepare-server-hook @vindex nntp-prepare-server-hook -A hook run before attempting to connect to an @sc{nntp} server. +A hook run before attempting to connect to an @acronym{NNTP} server. @item nntp-warn-about-losing-connection @vindex nntp-warn-about-losing-connection @@ -12491,8 +12560,8 @@ server closes connection. @item nntp-record-commands @vindex nntp-record-commands If non-@code{nil}, @code{nntp} will log all commands it sends to the -@sc{nntp} server (along with a timestamp) in the @samp{*nntp-log*} -buffer. This is useful if you are debugging a Gnus/@sc{nntp} connection +@acronym{NNTP} server (along with a timestamp) in the @samp{*nntp-log*} +buffer. This is useful if you are debugging a Gnus/@acronym{NNTP} connection that doesn't seem to work. @item nntp-open-connection-function @@ -12541,7 +12610,7 @@ this to, say, 1. @cindex direct connection functions These functions are called direct because they open a direct connection -between your machine and the @sc{nntp} server. The behavior of these +between your machine and the @acronym{NNTP} server. The behavior of these functions is also affected by commonly understood variables (@pxref{Common Variables}). @@ -12554,13 +12623,12 @@ remote system. @findex nntp-open-tls-stream @item nntp-open-tls-stream Opens a connection to a server over a @dfn{secure} channel. To use -this you must have GNUTLS installed (see -@uref{http://www.gnu.org/software/gnutls/}). You then define a server -as follows: +this you must have @uref{http://www.gnu.org/software/gnutls/, GNUTLS} +installed. You then define a server as follows: @lisp -;; "nntps" is port 563 and is predefined in our /etc/services -;; however, gnutls-cli -p doesn't like named ports. +;; @r{"nntps" is port 563 and is predefined in our @file{/etc/services}} +;; @r{however, @samp{gnutls-cli -p} doesn't like named ports.} ;; (nntp "snews.bar.com" (nntp-open-connection-function nntp-open-tls-stream) @@ -12570,14 +12638,14 @@ as follows: @findex nntp-open-ssl-stream @item nntp-open-ssl-stream -Opens a connection to a server over a @dfn{secure} channel. To use this -you must have OpenSSL (@uref{http://www.openssl.org}) or SSLeay -installed (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}. You then -define a server as follows: +Opens a connection to a server over a @dfn{secure} channel. To use +this you must have @uref{http://www.openssl.org, OpenSSL} or +@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL, SSLeay} installed. You +then define a server as follows: @lisp -;; "snews" is port 563 and is predefined in our /etc/services -;; however, openssl s_client -port doesn't like named ports. +;; @r{"snews" is port 563 and is predefined in our @file{/etc/services}} +;; @r{however, @samp{openssl s_client -port} doesn't like named ports.} ;; (nntp "snews.bar.com" (nntp-open-connection-function nntp-open-ssl-stream) @@ -12587,7 +12655,7 @@ define a server as follows: @findex nntp-open-telnet-stream @item nntp-open-telnet-stream -Opens a connection to an @sc{nntp} server by simply @samp{telnet}'ing +Opens a connection to an @acronym{NNTP} server by simply @samp{telnet}'ing it. You might wonder why this function exists, since we have the default @code{nntp-open-network-stream} which would do the job. (One of) the reason(s) is that if you are behind a firewall but have direct @@ -12611,7 +12679,7 @@ session, which is not a good idea. @cindex indirect connection functions These functions are called indirect because they connect to an -intermediate host before actually connecting to the @sc{nntp} server. +intermediate host before actually connecting to the @acronym{NNTP} server. All of these functions and related variables are also said to belong to the ``via'' family of connection: they're all prefixed with ``via'' to make things cleaner. The behavior of these functions is also affected by @@ -12621,7 +12689,7 @@ commonly understood variables (@pxref{Common Variables}). @item nntp-open-via-rlogin-and-telnet @findex nntp-open-via-rlogin-and-telnet Does an @samp{rlogin} on a remote system, and then does a @samp{telnet} -to the real @sc{nntp} server from there. This is useful for instance if +to the real @acronym{NNTP} server from there. This is useful for instance if you need to connect to a firewall machine first. @code{nntp-open-via-rlogin-and-telnet}-specific variables: @@ -12715,27 +12783,29 @@ where you would put a @samp{SOCKS} wrapper for instance. @item nntp-address @vindex nntp-address -The address of the @sc{nntp} server. +The address of the @acronym{NNTP} server. @item nntp-port-number @vindex nntp-port-number -Port number to connect to the @sc{nntp} server. The default is -@samp{nntp}. If you use @sc{nntp} over @sc{tls}/@sc{ssl}, you may -want to use integer ports rather than named ports (i.e, use @samp{563} -instead of @samp{snews} or @samp{nntps}), because external TLS/SSL -tools may not work with named ports. +Port number to connect to the @acronym{NNTP} server. The default is +@samp{nntp}. If you use @acronym{NNTP} over +@acronym{tls}/@acronym{ssl}, you may want to use integer ports rather +than named ports (i.e, use @samp{563} instead of @samp{snews} or +@samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may +not work with named ports. @item nntp-end-of-line @vindex nntp-end-of-line -String to use as end-of-line marker when talking to the @sc{nntp} +String to use as end-of-line marker when talking to the @acronym{NNTP} server. This is @samp{\r\n} by default, but should be @samp{\n} when using a non native connection function. @item nntp-telnet-command @vindex nntp-telnet-command -Command to use when connecting to the @sc{nntp} server through -@samp{telnet}. This is NOT for an intermediate host. This is just for -the real @sc{nntp} server. The default is @samp{telnet}. +Command to use when connecting to the @acronym{NNTP} server through +@samp{telnet}. This is @emph{not} for an intermediate host. This is +just for the real @acronym{NNTP} server. The default is +@samp{telnet}. @item nntp-telnet-switches @vindex nntp-telnet-switches @@ -12780,7 +12850,7 @@ Where @code{nnspool} looks for the articles. This is normally @item nnspool-nov-directory @vindex nnspool-nov-directory -Where @code{nnspool} will look for @sc{nov} files. This is normally +Where @code{nnspool} will look for @acronym{NOV} files. This is normally @file{/usr/spool/news/over.view/}. @item nnspool-lib-dir @@ -12805,15 +12875,16 @@ The name of the active date file. @item nnspool-nov-is-evil @vindex nnspool-nov-is-evil -If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files +If non-@code{nil}, @code{nnspool} won't try to use any @acronym{NOV} files that it finds. @item nnspool-sift-nov-with-sed @vindex nnspool-sift-nov-with-sed @cindex sed If non-@code{nil}, which is the default, use @code{sed} to get the -relevant portion from the overview file. If nil, @code{nnspool} will -load the entire file into a buffer and process it there. +relevant portion from the overview file. If @code{nil}, +@code{nnspool} will load the entire file into a buffer and process it +there. @end table @@ -12874,13 +12945,13 @@ mail, is that the transport mechanism has very little to do with how they want to treat a message. Many people subscribe to several mailing lists. These are transported -via @sc{smtp}, and are therefore mail. But we might go for weeks without +via @acronym{SMTP}, and are therefore mail. But we might go for weeks without answering, or even reading these messages very carefully. We may not need to save them because if we should need to read one again, they are archived somewhere else. Some people have local news groups which have only a handful of readers. -These are transported via @sc{nntp}, and are therefore news. But we may need +These are transported via @acronym{NNTP}, and are therefore news. But we may need to read and answer a large fraction of the messages very carefully in order to do our work. And there may not be an archive, so we may need to save the interesting messages the same way we would personal mail. @@ -13028,21 +13099,21 @@ function. @vindex nnmail-mail-splitting-charset @vindex nnmail-mail-splitting-decodes -By default the splitting codes @sc{mime} decodes headers so you can match -on non-ASCII strings. The @code{nnmail-mail-splitting-charset} -variable specifies the default charset for decoding. The behaviour -can be turned off completely by binding -@code{nnmail-mail-splitting-decodes} to nil, which is useful if you -want to match articles based on the raw header data. +By default the splitting codes @acronym{MIME} decodes headers so you +can match on non-@acronym{ASCII} strings. The +@code{nnmail-mail-splitting-charset} variable specifies the default +charset for decoding. The behaviour can be turned off completely by +binding @code{nnmail-mail-splitting-decodes} to @code{nil}, which is +useful if you want to match articles based on the raw header data. @vindex nnmail-resplit-incoming -By default, splitting is performed on all incoming messages. If -you specify a @code{directory} entry for the variable -@code{mail-sources} @pxref{Mail Source Specifiers}, however, then -splitting does @emph{not} happen by default. You can set the variable -@code{nnmail-resplit-incoming} to a non-nil value to make splitting -happen even in this case. (This variable has no effect on other kinds -of entries.) +By default, splitting is performed on all incoming messages. If you +specify a @code{directory} entry for the variable @code{mail-sources} +@pxref{Mail Source Specifiers}, however, then splitting does +@emph{not} happen by default. You can set the variable +@code{nnmail-resplit-incoming} to a non-@code{nil} value to make +splitting happen even in this case. (This variable has no effect on +other kinds of entries.) Gnus gives you all the opportunity you could possibly want for shooting yourself in the foot. Let's say you create a group that will contain @@ -13058,9 +13129,9 @@ month's rent money. @node Mail Sources @subsection Mail Sources -Mail can be gotten from many different sources---the mail spool, from a -POP mail server, from a procmail directory, or from a maildir, for -instance. +Mail can be gotten from many different sources---the mail spool, from +a @acronym{POP} mail server, from a procmail directory, or from a +maildir, for instance. @menu * Mail Source Specifiers:: How to specify what a mail source is. @@ -13101,7 +13172,7 @@ Keywords: @table @code @item :path -The file name. Defaults to the value of the @code{MAIL} +The file name. Defaults to the value of the @env{MAIL} environment variable or the value of @code{rmail-spool-directory} (usually something like @file{/usr/mail/spool/user-name}). @@ -13122,10 +13193,10 @@ Or using the default file name: (file) @end lisp -If the mail spool file is not located on the local machine, it's best to -use POP or @sc{imap} or the like to fetch the mail. You can not use ange-ftp -file names here---it has no way to lock the mail spool while moving the -mail. +If the mail spool file is not located on the local machine, it's best +to use @acronym{POP} or @acronym{IMAP} or the like to fetch the mail. +You can not use ange-ftp file names here---it has no way to lock the +mail spool while moving the mail. If it's impossible to set up a proper server, you can use ssh instead. @@ -13151,20 +13222,20 @@ Alter this script to fit find the @samp{movemail} you want to use. @item directory @vindex nnmail-scan-directory-mail-source-once -Get mail from several files in a directory. This is typically used when -you have procmail split the incoming mail into several files. That is, -there is a one-to-one correspondence between files in that directory and -groups, so that mail from the file @file{foo.bar.spool} will be put in -the group @code{foo.bar}. (You can change the suffix to be used instead -of @code{.spool}.) Setting -@code{nnmail-scan-directory-mail-source-once} to non-nil forces Gnus to -scan the mail source only once. This is particularly useful if you want -to scan mail groups at a specified level. +Get mail from several files in a directory. This is typically used +when you have procmail split the incoming mail into several files. +That is, there is a one-to-one correspondence between files in that +directory and groups, so that mail from the file @file{foo.bar.spool} +will be put in the group @code{foo.bar}. (You can change the suffix +to be used instead of @code{.spool}.) Setting +@code{nnmail-scan-directory-mail-source-once} to non-@code{nil} forces +Gnus to scan the mail source only once. This is particularly useful +if you want to scan mail groups at a specified level. @vindex nnmail-resplit-incoming There is also the variable @code{nnmail-resplit-incoming}, if you set -that to a non-nil value, then the normal splitting process is applied -to all the files from the directory, @ref{Splitting Mail}. +that to a non-@code{nil} value, then the normal splitting process is +applied to all the files from the directory, @ref{Splitting Mail}. Keywords: @@ -13197,33 +13268,33 @@ An example directory mail source: @end lisp @item pop -Get mail from a POP server. +Get mail from a @acronym{POP} server. Keywords: @table @code @item :server -The name of the POP server. The default is taken from the -@code{MAILHOST} environment variable. +The name of the @acronym{POP} server. The default is taken from the +@env{MAILHOST} environment variable. @item :port -The port number of the POP server. This can be a number (eg, +The port number of the @acronym{POP} server. This can be a number (eg, @samp{:port 1234}) or a string (eg, @samp{:port "pop3"}). If it is a string, it should be a service name as listed in @file{/etc/services} on Unix systems. The default is @samp{"pop3"}. On some systems you might need to specify it as @samp{"pop-3"} instead. @item :user -The user name to give to the POP server. The default is the login +The user name to give to the @acronym{POP} server. The default is the login name. @item :password -The password to give to the POP server. If not specified, the user is -prompted. +The password to give to the @acronym{POP} server. If not specified, +the user is prompted. @item :program -The program to use to fetch mail from the POP server. This should be -a @code{format}-like string. Here's an example: +The program to use to fetch mail from the @acronym{POP} server. This +should be a @code{format}-like string. Here's an example: @example fetchmail %u@@%s -P %p %t @@ -13261,9 +13332,9 @@ A script to be run after fetching the mail. The syntax is the same as the @code{:program} keyword. This can also be a function to be run. @item :function -The function to use to fetch mail from the POP server. The function is -called with one parameter---the name of the file where the mail should -be moved to. +The function to use to fetch mail from the @acronym{POP} server. The +function is called with one parameter---the name of the file where the +mail should be moved to. @item :authentication This can be either the symbol @code{password} or the symbol @code{apop} @@ -13275,8 +13346,8 @@ and says what authentication scheme to use. The default is If the @code{:program} and @code{:function} keywords aren't specified, @code{pop3-movemail} will be used. -Here are some examples. Fetch from the default POP server, using the -default user name, and default fetcher: +Here are some examples. Fetch from the default @acronym{POP} server, +using the default user name, and default fetcher: @lisp (pop) @@ -13305,7 +13376,7 @@ Keywords: @table @code @item :path The name of the directory where the mails are stored. The default is -taken from the @code{MAILDIR} environment variable or +taken from the @env{MAILDIR} environment variable or @file{~/Maildir/}. @item :subdirs The subdirectories of the Maildir. The default is @@ -13334,32 +13405,32 @@ Two example maildir mail sources: @end lisp @item imap -Get mail from a @sc{imap} server. If you don't want to use @sc{imap} -as intended, as a network mail reading protocol (ie with nnimap), for -some reason or other, Gnus let you treat it similar to a POP server -and fetches articles from a given @sc{imap} mailbox. @xref{IMAP}, for -more information. +Get mail from a @acronym{IMAP} server. If you don't want to use +@acronym{IMAP} as intended, as a network mail reading protocol (ie +with nnimap), for some reason or other, Gnus let you treat it similar +to a @acronym{POP} server and fetches articles from a given +@acronym{IMAP} mailbox. @xref{IMAP}, for more information. -Note that for the Kerberos, GSSAPI, TLS/SSL and STARTTLS support you +Note that for the Kerberos, GSSAPI, @acronym{TLS}/@acronym{SSL} and STARTTLS support you may need external programs and libraries, @xref{IMAP}. Keywords: @table @code @item :server -The name of the @sc{imap} server. The default is taken from the -@code{MAILHOST} environment variable. +The name of the @acronym{IMAP} server. The default is taken from the +@env{MAILHOST} environment variable. @item :port -The port number of the @sc{imap} server. The default is @samp{143}, or -@samp{993} for TLS/SSL connections. +The port number of the @acronym{IMAP} server. The default is @samp{143}, or +@samp{993} for @acronym{TLS}/@acronym{SSL} connections. @item :user -The user name to give to the @sc{imap} server. The default is the login +The user name to give to the @acronym{IMAP} server. The default is the login name. @item :password -The password to give to the @sc{imap} server. If not specified, the user is +The password to give to the @acronym{IMAP} server. If not specified, the user is prompted. @item :stream @@ -13406,7 +13477,7 @@ which normally is the mailbox which receive incoming mail. @item :predicate The predicate used to find articles to fetch. The default, @samp{UNSEEN UNDELETED}, is probably the best choice for most people, but if you -sometimes peek in your mailbox with a @sc{imap} client and mark some +sometimes peek in your mailbox with a @acronym{IMAP} client and mark some articles as read (or; SEEN) you might want to set this to @samp{1:*}. Then all articles in the mailbox is fetched, no matter what. For a complete list of predicates, see RFC 2060 section 6.4.4. @@ -13418,12 +13489,12 @@ would simply mark them as read. These are the two most likely choices, but more flags are defined in RFC 2060 section 2.3.2. @item :dontexpunge -If non-nil, don't remove all articles marked as deleted in the mailbox -after finishing the fetch. +If non-@code{nil}, don't remove all articles marked as deleted in the +mailbox after finishing the fetch. @end table -An example @sc{imap} mail source: +An example @acronym{IMAP} mail source: @lisp (imap :server "mail.mycorp.com" @@ -13434,7 +13505,7 @@ An example @sc{imap} mail source: @item webmail Get mail from a webmail server, such as @uref{www.hotmail.com}, @uref{webmail.netscape.com}, @uref{www.netaddress.com}, -@uref{mail.yahoo..com}. +@uref{mail.yahoo.com}. NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is required for url "4.0pre.46". @@ -13457,8 +13528,8 @@ The password to give to the webmail server. If not specified, the user is prompted. @item :dontexpunge -If non-nil, only fetch unread articles and don't move them to trash -folder after finishing the fetch. +If non-@code{nil}, only fetch unread articles and don't move them to +trash folder after finishing the fetch. @end table @@ -13479,8 +13550,9 @@ Keywords: @table @code @item :plugged -If non-nil, fetch the mail even when Gnus is unplugged. If you use -directory source to get mail, you can specify it as in this example: +If non-@code{nil}, fetch the mail even when Gnus is unplugged. If you +use directory source to get mail, you can specify it as in this +example: @lisp (setq mail-sources @@ -13540,7 +13612,7 @@ files. If a positive number, delete files older than number of days @item mail-source-delete-old-incoming-confirm @vindex mail-source-delete-old-incoming-confirm -If @code{non-nil}, ask for for confirmation before deleting old incoming +If non-@code{nil}, ask for for confirmation before deleting old incoming files. This variable only applies when @code{mail-source-delete-incoming} is a positive number. @@ -13568,8 +13640,8 @@ All new mail files will get this file mode. The default is 384. @item mail-source-movemail-program @vindex mail-source-movemail-program -If non-nil, name of program for fetching new mail. If nil, -@code{movemail} in @var{exec-directory}. +If non-@code{nil}, name of program for fetching new mail. If +@code{nil}, @code{movemail} in @var{exec-directory}. @end table @@ -13587,8 +13659,8 @@ If this variable (and the obsolescent @code{nnmail-spool-file}) is @code{nil}, the mail back ends will never attempt to fetch mail by themselves. -If you want to fetch mail both from your local spool as well as a POP -mail server, you'd say something like: +If you want to fetch mail both from your local spool as well as a +@acronym{POP} mail server, you'd say something like: @lisp (setq mail-sources @@ -13709,28 +13781,28 @@ play with the @code{nnmail-split-fancy} variable. Let's look at an example value of this variable first: @lisp -;; Messages from the mailer daemon are not crossposted to any of -;; the ordinary groups. Warnings are put in a separate group -;; from real errors. +;; @r{Messages from the mailer daemon are not crossposted to any of} +;; @r{the ordinary groups. Warnings are put in a separate group} +;; @r{from real errors.} (| ("from" mail (| ("subject" "warn.*" "mail.warning") "mail.misc")) - ;; Non-error messages are crossposted to all relevant - ;; groups, but we don't crosspost between the group for the - ;; (ding) list and the group for other (ding) related mail. + ;; @r{Non-error messages are crossposted to all relevant} + ;; @r{groups, but we don't crosspost between the group for the} + ;; @r{(ding) list and the group for other (ding) related mail.} (& (| (any "ding@@ifi\\.uio\\.no" "ding.list") ("subject" "ding" "ding.misc")) - ;; Other mailing lists... + ;; @r{Other mailing lists@dots{}} (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list") (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list") - ;; Both lists below have the same suffix, so prevent - ;; cross-posting to mkpkg.list of messages posted only to - ;; the bugs- list, but allow cross-posting when the - ;; message was really cross-posted. + ;; @r{Both lists below have the same suffix, so prevent} + ;; @r{cross-posting to mkpkg.list of messages posted only to} + ;; @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") - ;; People... + ;; @r{People@dots{}} (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) - ;; Unmatched mail goes to the catch all group. + ;; @r{Unmatched mail goes to the catch all group.} "misc.misc") @end lisp @@ -13845,33 +13917,34 @@ string into the subject line, you have to resort to manually moving the messages into the right group. With this function, you only have to do it once per thread. -To use this feature, you have to set @code{nnmail-treat-duplicates} and -@code{nnmail-cache-accepted-message-ids} to a non-nil value. And then -you can include @code{nnmail-split-fancy-with-parent} using the colon -feature, like so: +To use this feature, you have to set @code{nnmail-treat-duplicates} +and @code{nnmail-cache-accepted-message-ids} to a non-@code{nil} +value. And then you can include @code{nnmail-split-fancy-with-parent} +using the colon feature, like so: @lisp -(setq nnmail-treat-duplicates 'warn ; or 'delete +(setq nnmail-treat-duplicates 'warn ; @r{or @code{delete}} nnmail-cache-accepted-message-ids t nnmail-split-fancy '(| (: nnmail-split-fancy-with-parent) - ;; other splits go here + ;; @r{other splits go here} )) @end lisp This feature works as follows: when @code{nnmail-treat-duplicates} is -non-nil, Gnus records the message id of every message it sees in the -file specified by the variable @code{nnmail-message-id-cache-file}, -together with the group it is in (the group is omitted for non-mail -messages). When mail splitting is invoked, the function -@code{nnmail-split-fancy-with-parent} then looks at the References (and -In-Reply-To) header of each message to split and searches the file -specified by @code{nnmail-message-id-cache-file} for the message ids. -When it has found a parent, it returns the corresponding group name -unless the group name matches the regexp -@code{nnmail-split-fancy-with-parent-ignore-groups}. It is recommended -that you set @code{nnmail-message-id-cache-length} to a somewhat higher -number than the default so that the message ids are still in the cache. -(A value of 5000 appears to create a file some 300 kBytes in size.) +non-@code{nil}, Gnus records the message id of every message it sees +in the file specified by the variable +@code{nnmail-message-id-cache-file}, together with the group it is in +(the group is omitted for non-mail messages). When mail splitting is +invoked, the function @code{nnmail-split-fancy-with-parent} then looks +at the References (and In-Reply-To) header of each message to split +and searches the file specified by @code{nnmail-message-id-cache-file} +for the message ids. When it has found a parent, it returns the +corresponding group name unless the group name matches the regexp +@code{nnmail-split-fancy-with-parent-ignore-groups}. It is +recommended that you set @code{nnmail-message-id-cache-length} to a +somewhat higher number than the default so that the message ids are +still in the cache. (A value of 5000 appears to create a file some +300 kBytes in size.) @vindex nnmail-cache-accepted-message-ids When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus also records the message ids of moved articles, so that the followup @@ -13968,7 +14041,7 @@ may use it for only some of them, by using @code{nnmail-split-fancy} splits like this: @lisp -(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL) +(: gnus-group-split-fancy @var{groups} @var{no-crosspost} @var{catch-all}) @end lisp @var{groups} may be a regular expression or a list of group names whose @@ -13999,7 +14072,7 @@ automatically, just tell @code{gnus-group-split-setup} to do it for you. For example, add to your @file{~/.gnus.el}: @lisp -(gnus-group-split-setup AUTO-UPDATE CATCH-ALL) +(gnus-group-split-setup @var{auto-update} @var{catch-all}) @end lisp If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update} @@ -14204,7 +14277,7 @@ parameter. default value is @code{delete}, but this can also be a string (which should be the name of the group the message should be moved to), or a function (which will be called in a buffer narrowed to the message in question, and with the name of the group being moved -from as its parameter) which should return a target -- either a group +from as its parameter) which should return a target---either a group name or @code{delete}. Here's an example for specifying a group name: @@ -14398,11 +14471,11 @@ methods: @lisp (setq nnmail-split-fancy - '(| ;; Messages duplicates go to a separate group. + '(| ;; @r{Messages duplicates go to a separate group.} ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate") - ;; Message from daemons, postmaster, and the like to another. + ;; @r{Message from daemons, postmaster, and the like to another.} (any mail "mail.misc") - ;; Other rules. + ;; @r{Other rules.} [ ... ] )) @end lisp @@ -14410,7 +14483,7 @@ Or something like: @lisp (setq nnmail-split-methods '(("duplicates" "^Gnus-Warning:.*duplicate") - ;; Other rules. + ;; @r{Other rules.} [...])) @end lisp @@ -14438,7 +14511,7 @@ mail, which should help. @vindex nnmh-get-new-mail @vindex nnfolder-get-new-mail This might be too much, if, for instance, you are reading mail quite -happily with @code{nnml} and just want to peek at some old @sc{rmail} +happily with @code{nnml} and just want to peek at some old Rmail file you have stashed away with @code{nnbabyl}. All back ends have variables called back-end-@code{get-new-mail}. If you want to disable the @code{nnbabyl} mail reading, you edit the virtual server for the @@ -14463,7 +14536,7 @@ Spool}). @menu * Unix Mail Box:: Using the (quite) standard Un*x mbox. -* Rmail Babyl:: Emacs programs use the rmail babyl format. +* Rmail Babyl:: Emacs programs use the Rmail Babyl format. * Mail Spool:: Store your mail in a private spool? * MH Spool:: An mhspool-like back end. * Maildir:: Another one-file-per-message format. @@ -14506,11 +14579,11 @@ into groups. Default is @code{t}. @node Rmail Babyl @subsubsection Rmail Babyl @cindex nnbabyl -@cindex rmail mbox +@cindex Rmail mbox @vindex nnbabyl-active-file @vindex nnbabyl-mbox-file -The @dfn{nnbabyl} back end will use a babyl mail box (aka. @dfn{rmail +The @dfn{nnbabyl} back end will use a Babyl mail box (aka. @dfn{Rmail mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail article to say which group it belongs in. @@ -14519,7 +14592,7 @@ Virtual server settings: @table @code @item nnbabyl-mbox-file @vindex nnbabyl-mbox-file -The name of the rmail mbox file. The default is @file{~/RMAIL} +The name of the Rmail mbox file. The default is @file{~/RMAIL} @item nnbabyl-active-file @vindex nnbabyl-active-file @@ -14536,7 +14609,7 @@ If non-@code{nil}, @code{nnbabyl} will read incoming mail. Default is @node Mail Spool @subsubsection Mail Spool @cindex nnml -@cindex mail @sc{nov} spool +@cindex mail @acronym{NOV} spool The @dfn{nnml} spool mail format isn't compatible with any other known format. It should be used with some caution. @@ -14561,7 +14634,7 @@ to trudge through a big mbox file just to read your new mail. @code{nnml} is probably the slowest back end when it comes to article splitting. It has to create lots of files, and it also generates -@sc{nov} databases for the incoming mails. This makes it possibly the +@acronym{NOV} databases for the incoming mails. This makes it possibly the fastest back end when it comes to reading mail. @cindex self contained nnml servers @@ -14606,12 +14679,12 @@ If non-@code{nil}, @code{nnml} will read incoming mail. The default is @item nnml-nov-is-evil @vindex nnml-nov-is-evil -If non-@code{nil}, this back end will ignore any @sc{nov} files. The +If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The default is @code{nil}. @item nnml-nov-file-name @vindex nnml-nov-file-name -The name of the @sc{nov} files. The default is @file{.overview}. +The name of the @acronym{NOV} files. The default is @file{.overview}. @item nnml-prepare-save-mail-hook @vindex nnml-prepare-save-mail-hook @@ -14634,7 +14707,7 @@ files. @end table @findex nnml-generate-nov-databases -If your @code{nnml} groups and @sc{nov} files get totally out of whack, +If your @code{nnml} groups and @acronym{NOV} files get totally out of whack, you can do a complete update by typing @kbd{M-x nnml-generate-nov-databases}. This command will trawl through the entire @code{nnml} hierarchy, looking at each and every article, so it @@ -14649,7 +14722,7 @@ Commands}). @cindex mh-e mail spool @code{nnmh} is just like @code{nnml}, except that is doesn't generate -@sc{nov} databases and it doesn't keep an active file or marks file. +@acronym{NOV} databases and it doesn't keep an active file or marks file. This makes @code{nnmh} a @emph{much} slower back end than @code{nnml}, but it also makes it easier to write procmail scripts for. @@ -14702,7 +14775,7 @@ nnmaildir is designed to be perfectly reliable: @kbd{C-g} will never corrupt its data in memory, and @code{SIGKILL} will never corrupt its data in the filesystem. -nnmaildir stores article marks and NOV data in each maildir. So you +nnmaildir stores article marks and @acronym{NOV} data in each maildir. So you can copy a whole maildir from one Gnus setup to another, and you will keep your marks. @@ -14726,7 +14799,7 @@ which is processed by @code{eval} and @code{expand-file-name} to get the path of the directory for this server. The form is @code{eval}ed only when the server is opened; the resulting string is used until the server is closed. (If you don't know about forms and @code{eval}, -don't worry - a simple string will work.) This parameter is not +don't worry---a simple string will work.) This parameter is not optional; you must specify it. I don't recommend using @code{"~/Mail"} or a subdirectory of it; several other parts of Gnus use that directory by default for various things, and may get confused @@ -14843,7 +14916,7 @@ maildir as read-only. This means: articles are not renamed from @file{new/} into @file{cur/}; articles are only found in @file{new/}, not @file{cur/}; articles are never deleted; articles cannot be edited. @file{new/} is expected to be a symlink to the @file{new/} -directory of another maildir - e.g., a system-wide mailbox containing +directory of another maildir---e.g., a system-wide mailbox containing a mailing list of common interest. Everything in the maildir outside @file{new/} is @emph{not} treated as read-only, so for a shared mailbox, you do still need to set up your own maildir (or have write @@ -14880,12 +14953,12 @@ probably be removed eventually; it ought to be done in Gnus proper, or abandoned if it's not worthwhile. @item nov-cache-size -An integer specifying the size of the NOV memory cache. To speed -things up, nnmaildir keeps NOV data in memory for a limited number of +An integer specifying the size of the @acronym{NOV} memory cache. To speed +things up, nnmaildir keeps @acronym{NOV} data in memory for a limited number of articles in each group. (This is probably not worthwhile, and will probably be removed in the future.) This parameter's value is noticed -only the first time a group is seen after the server is opened - i.e., -when you first start Gnus, typically. The NOV cache is never resized +only the first time a group is seen after the server is opened---i.e., +when you first start Gnus, typically. The @acronym{NOV} cache is never resized until the server is closed and reopened. The default is an estimate of the number of articles that would be displayed in the summary buffer: a count of articles that are either marked with @code{tick} or @@ -14905,14 +14978,14 @@ available in the variable @code{nnmaildir-article-file-name} after you request the article in the summary buffer. @subsubsection NOV data -An article identified by @code{uniq} has its NOV data (used to +An article identified by @code{uniq} has its @acronym{NOV} data (used to generate lines in the summary buffer) stored in @code{.nnmaildir/nov/uniq}. There is no @code{nnmaildir-generate-nov-databases} function. (There isn't much -need for it - an article's NOV data is updated automatically when the +need for it---an article's @acronym{NOV} data is updated automatically when the article or @code{nnmail-extra-headers} has changed.) You can force -nnmaildir to regenerate the NOV data for a single article simply by -deleting the corresponding NOV file, but @emph{beware}: this will also +nnmaildir to regenerate the @acronym{NOV} data for a single article simply by +deleting the corresponding @acronym{NOV} file, but @emph{beware}: this will also cause nnmaildir to assign a new article number for this article, which may cause trouble with @code{seen} marks, the Agent, and the cache. @@ -15007,17 +15080,17 @@ extract some information from it before removing it. @item nnfolder-nov-is-evil @vindex nnfolder-nov-is-evil -If non-@code{nil}, this back end will ignore any @sc{nov} files. The +If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The default is @code{nil}. @item nnfolder-nov-file-suffix @vindex nnfolder-nov-file-suffix -The extension for @sc{nov} files. The default is @file{.nov}. +The extension for @acronym{NOV} files. The default is @file{.nov}. @item nnfolder-nov-directory @vindex nnfolder-nov-directory -The directory where the @sc{nov} files should be stored. If nil, -@code{nnfolder-directory} is used. +The directory where the @acronym{NOV} files should be stored. If +@code{nil}, @code{nnfolder-directory} is used. @item nnfolder-marks-is-evil @vindex nnfolder-marks-is-evil @@ -15030,8 +15103,8 @@ The extension for @sc{marks} files. The default is @file{.mrk}. @item nnfolder-marks-directory @vindex nnfolder-marks-directory -The directory where the @sc{marks} files should be stored. If nil, -@code{nnfolder-directory} is used. +The directory where the @sc{marks} files should be stored. If +@code{nil}, @code{nnfolder-directory} is used. @end table @@ -15054,9 +15127,9 @@ and so selection of a suitable back end is required in order to get that mail within spitting distance of Gnus. The same concept exists for Usenet itself: Though access to articles is -typically done by @sc{nntp} these days, once upon a midnight dreary, everyone +typically done by @acronym{NNTP} these days, once upon a midnight dreary, everyone in the world got at Usenet by running a reader on the machine where the -articles lay (the machine which today we call an @sc{nntp} server), and +articles lay (the machine which today we call an @acronym{NNTP} server), and access was by the reader stepping into the articles' directory spool area directly. One can still select between either the @code{nntp} or @code{nnspool} back ends, to select between these methods, if one happens @@ -15095,12 +15168,12 @@ was used for mail landing on the system, but Babyl had its own internal format to which mail was converted, primarily involving creating a spool-file-like entity with a scheme for inserting Babyl-specific headers and status bits above the top of each message in the file. -RMAIL was Emacs' first mail reader, it was written by Richard Stallman, -and Stallman came out of that TOPS/Babyl environment, so he wrote RMAIL +Rmail was Emacs' first mail reader, it was written by Richard Stallman, +and Stallman came out of that TOPS/Babyl environment, so he wrote Rmail to understand the mail files folks already had in existence. Gnus (and VM, for that matter) continue to support this format because it's perceived as having some good qualities in those mailer-specific -headers/status bits stuff. RMAIL itself still exists as well, of +headers/status bits stuff. Rmail itself still exists as well, of course, and is still maintained by Stallman. Both of the above forms leave your mail in a single file on your @@ -15118,7 +15191,7 @@ Usenet-style active file (analogous to what one finds in an INN- or CNews-based news system in (for instance) @file{/var/lib/news/active}, or what is returned via the @samp{NNTP LIST} verb) and also creates @dfn{overview} files for efficient group entry, as has been defined for -@sc{nntp} servers for some years now. It is slower in mail-splitting, +@acronym{NNTP} servers for some years now. It is slower in mail-splitting, due to the creation of lots of files, updates to the @code{nnml} active file, and additions to overview files on a per-message basis, but it is extremely fast on access because of what amounts to the indexing support @@ -15139,7 +15212,7 @@ tiny files. The Rand MH mail-reading system has been around UNIX systems for a very long time; it operates by splitting one's spool file of messages into -individual files, but with little or no indexing support -- @code{nnmh} +individual files, but with little or no indexing support---@code{nnmh} is considered to be semantically equivalent to ``@code{nnml} without active file or overviews''. This is arguably the worst choice, because one gets the slowness of individual file creation married to the @@ -15174,8 +15247,8 @@ filename is unrelated to the article number in Gnus. @code{nnmaildir} also stores the equivalent of @code{nnml}'s overview files in one file per article, so it uses about twice as many inodes as @code{nnml}. (Use @code{df -i} to see how plentiful your inode supply is.) If this slows -you down or takes up very much space, consider switching to ReiserFS -(@uref{http://www.namesys.com/}) or another non-block-structured +you down or takes up very much space, consider switching to +@uref{http://www.namesys.com/, ReiserFS} or another non-block-structured file system. Since maildirs don't require locking for delivery, the maildirs you use @@ -15255,7 +15328,7 @@ interfaces to these sources. All the web sources require Emacs/w3 and the url library to work. The main caveat with all these web sources is that they probably won't -work for a very long time. Gleaning information from the @sc{html} data +work for a very long time. Gleaning information from the @acronym{HTML} data is guesswork at best, and when the layout is altered, the Gnus back end will fail. If you have reasonably new versions of these back ends, though, you should be ok. @@ -15393,7 +15466,7 @@ Format string URL to fetch an article by @code{Message-ID}. @cindex Slashdot @cindex nnslashdot -Slashdot (@uref{http://slashdot.org/}) is a popular news site, with +@uref{http://slashdot.org/, Slashdot} is a popular news site, with lively discussion following the news articles. @code{nnslashdot} will let you read this forum in a convenient manner. @@ -15416,12 +15489,12 @@ If you want to remove an old @code{nnslashdot} group, the @kbd{G DEL} command is the most handy tool (@pxref{Foreign Groups}). When following up to @code{nnslashdot} comments (or posting new -comments), some light @sc{html}izations will be performed. In +comments), some light @acronym{HTML}izations will be performed. In particular, text quoted with @samp{> } will be quoted with @code{blockquote} instead, and signatures will have @code{br} added to -the end of each line. Other than that, you can just write @sc{html} +the end of each line. Other than that, you can just write @acronym{HTML} directly into the message buffer. Note that Slashdot filters out some -@sc{html} forms. +@acronym{HTML} forms. The following variables can be altered to change its behavior: @@ -15483,7 +15556,7 @@ updated. The default is 0. @cindex nnultimate @cindex Ultimate Bulletin Board -The Ultimate Bulletin Board (@uref{http://www.ultimatebb.com/}) is +@uref{http://www.ultimatebb.com/, The Ultimate Bulletin Board} is probably the most popular Web bulletin board system used. It has a quite regular and nice interface, and it's possible to get the information Gnus needs to keep groups updated. @@ -15520,10 +15593,10 @@ groups updated. @findex gnus-group-make-warchive-group The easiest way to get started with @code{nnwarchive} is to say something like the following in the group buffer: @kbd{M-x -gnus-group-make-warchive-group RET an_egroup RET egroups RET -www.egroups.com RET your@@email.address RET}. (Substitute the -@sc{an_egroup} with the mailing list you subscribed, the -@sc{your@@email.address} with your email address.), or to browse the +gnus-group-make-warchive-group RET @var{an_egroup} RET egroups RET +www.egroups.com RET @var{your@@email.address RET}}. (Substitute the +@var{an_egroup} with the mailing list you subscribed, the +@var{your@@email.address} with your email address.), or to browse the back end by @kbd{B nnwarchive RET mail-archive RET}. The following @code{nnwarchive} variables can be altered: @@ -15631,58 +15704,59 @@ browser like Netscape). Here's one way: @end lisp Put that in your @file{.emacs} file, and hitting links in w3-rendered -@sc{html} in the Gnus article buffers will use @code{browse-url} to +@acronym{HTML} in the Gnus article buffers will use @code{browse-url} to follow the link. @node IMAP @section IMAP @cindex nnimap -@cindex @sc{imap} +@cindex @acronym{IMAP} -@sc{imap} is a network protocol for reading mail (or news, or @dots{}), -think of it as a modernized @sc{nntp}. Connecting to a @sc{imap} +@acronym{IMAP} is a network protocol for reading mail (or news, or @dots{}), +think of it as a modernized @acronym{NNTP}. Connecting to a @acronym{IMAP} server is much similar to connecting to a news server, you just specify the network address of the server. -@sc{imap} has two properties. First, @sc{imap} can do everything that -POP can, it can hence be viewed as a POP++. Secondly, @sc{imap} is a -mail storage protocol, similar to @sc{nntp} being a news storage -protocol -- however, @sc{imap} offers more features than @sc{nntp} -because news is more or less read-only whereas mail is read-write. +@acronym{IMAP} has two properties. First, @acronym{IMAP} can do +everything that @acronym{POP} can, it can hence be viewed as a +@acronym{POP++}. Secondly, @acronym{IMAP} is a mail storage protocol, +similar to @acronym{NNTP} being a news storage protocol---however, +@acronym{IMAP} offers more features than @acronym{NNTP} because news +is more or less read-only whereas mail is read-write. -If you want to use @sc{imap} as a POP++, use an imap entry in -@code{mail-sources}. With this, Gnus will fetch mails from the -@sc{imap} server and store them on the local disk. This is not the -usage described in this section--@xref{Mail Sources}. +If you want to use @acronym{IMAP} as a @acronym{POP++}, use an imap +entry in @code{mail-sources}. With this, Gnus will fetch mails from +the @acronym{IMAP} server and store them on the local disk. This is +not the usage described in this section---@xref{Mail Sources}. -If you want to use @sc{imap} as a mail storage protocol, use an nnimap +If you want to use @acronym{IMAP} as a mail storage protocol, use an nnimap entry in @code{gnus-secondary-select-methods}. With this, Gnus will -manipulate mails stored on the @sc{imap} server. This is the kind of +manipulate mails stored on the @acronym{IMAP} server. This is the kind of usage explained in this section. -A server configuration in @file{~/.gnus.el} with a few @sc{imap} servers -might look something like the following. (Note that for TLS/SSL, you +A server configuration in @file{~/.gnus.el} with a few @acronym{IMAP} servers +might look something like the following. (Note that for @acronym{TLS}/@acronym{SSL}, you need external programs and libraries, see below.) @lisp (setq gnus-secondary-select-methods - '((nnimap "simpleserver") ; no special configuration - ; perhaps a ssh port forwarded server: + '((nnimap "simpleserver") ; @r{no special configuration} + ; @r{perhaps a ssh port forwarded server:} (nnimap "dolk" (nnimap-address "localhost") (nnimap-server-port 1430)) - ; a UW server running on localhost + ; @r{a UW server running on localhost} (nnimap "barbar" (nnimap-server-port 143) (nnimap-address "localhost") (nnimap-list-pattern ("INBOX" "mail/*"))) - ; anonymous public cyrus server: + ; @r{anonymous public cyrus server:} (nnimap "cyrus.andrew.cmu.edu" (nnimap-authenticator anonymous) (nnimap-list-pattern "archive.*") (nnimap-stream network)) - ; a ssl server on a non-standard port: + ; @r{a ssl server on a non-standard port:} (nnimap "vic20" (nnimap-address "vic20.somewhere.com") (nnimap-server-port 9930) @@ -15702,12 +15776,12 @@ server: @item nnimap-address @vindex nnimap-address -The address of the remote @sc{imap} server. Defaults to the virtual +The address of the remote @acronym{IMAP} server. Defaults to the virtual server name if not specified. @item nnimap-server-port @vindex nnimap-server-port -Port on server to contact. Defaults to port 143, or 993 for TLS/SSL. +Port on server to contact. Defaults to port 143, or 993 for @acronym{TLS}/@acronym{SSL}. Note that this should be an integer, example server specification: @@ -15720,8 +15794,8 @@ Note that this should be an integer, example server specification: @vindex nnimap-list-pattern String or list of strings of mailboxes to limit available groups to. This is used when the server has very many mailboxes and you're only -interested in a few -- some servers export your home directory via -@sc{imap}, you'll probably want to limit the mailboxes to those in +interested in a few---some servers export your home directory via +@acronym{IMAP}, you'll probably want to limit the mailboxes to those in @file{~/Mail/*} then. The string can also be a cons of REFERENCE and the string as above, what @@ -15741,7 +15815,7 @@ Example server specification: @vindex nnimap-stream The type of stream used to connect to your server. By default, nnimap will detect and automatically use all of the below, with the exception -of TLS/SSL. (@sc{imap} over TLS/SSL is being replaced by STARTTLS, which +of @acronym{TLS}/@acronym{SSL}. (@acronym{IMAP} over @acronym{TLS}/@acronym{SSL} is being replaced by STARTTLS, which can be automatically detected, but it's not widely deployed yet.) Example server specification: @@ -15761,16 +15835,16 @@ Please note that the value of @code{nnimap-stream} is a symbol! @dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program. @item @dfn{starttls:} Connect via the STARTTLS extension (similar to -TLS/SSL). Requires the external library @samp{starttls.el} and program +@acronym{TLS}/@acronym{SSL}). Requires the external library @samp{starttls.el} and program @samp{starttls}. @item -@dfn{tls:} Connect through TLS. Requires GNUTLS (the program +@dfn{tls:} Connect through @acronym{TLS}. Requires GNUTLS (the program @samp{gnutls-cli}). @item -@dfn{ssl:} Connect through SSL. Requires OpenSSL (the program +@dfn{ssl:} Connect through @acronym{SSL}. Requires OpenSSL (the program @samp{openssl}) or SSLeay (@samp{s_client}). @item -@dfn{shell:} Use a shell command to start @sc{imap} connection. +@dfn{shell:} Use a shell command to start @acronym{IMAP} connection. @item @dfn{network:} Plain, TCP/IP network connection. @end itemize @@ -15781,28 +15855,28 @@ using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version 1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type} to make @code{imap.el} use a pty instead of a pipe when communicating with @samp{imtest}. You will then suffer from a line length -restrictions on @sc{imap} commands, which might make Gnus seem to hang +restrictions on @acronym{IMAP} commands, which might make Gnus seem to hang indefinitely if you have many articles in a mailbox. The variable @code{imap-kerberos4-program} contain parameters to pass to the imtest program. -For TLS connection, the @code{gnutls-cli} program from GNUTLS is +For @acronym{TLS} connection, the @code{gnutls-cli} program from GNUTLS is needed. It is available from @uref{http://www.gnu.org/software/gnutls/}. @vindex imap-gssapi-program This parameter specifies a list of command lines that invoke a GSSAPI -authenticated IMAP stream in a subshell. They are tried sequentially -until a connection is made, or the list has been exhausted. By -default, @samp{gsasl} from GNU SASL, available from +authenticated @acronym{IMAP} stream in a subshell. They are tried +sequentially until a connection is made, or the list has been +exhausted. By default, @samp{gsasl} from GNU SASL, available from @uref{http://www.gnu.org/software/gsasl/}, and the @samp{imtest} program from Cyrus IMAPD (see @code{imap-kerberos4-program}), are tried. @vindex imap-ssl-program -For SSL connections, the OpenSSL program is available from +For @acronym{SSL} connections, the OpenSSL program is available from @uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay, -and nnimap support it too - although the most recent versions of +and nnimap support it too---although the most recent versions of SSLeay, 0.9.x, are known to have serious bugs making it useless. Earlier versions, especially 0.8.x, of SSLeay are known to work. The variable @code{imap-ssl-program} contain parameters to pass @@ -15810,7 +15884,7 @@ to OpenSSL/SSLeay. @vindex imap-shell-program @vindex imap-shell-host -For @sc{imap} connections using the @code{shell} stream, the variable +For @acronym{IMAP} connections using the @code{shell} stream, the variable @code{imap-shell-program} specify what program to call. @item nnimap-authenticator @@ -15849,8 +15923,8 @@ external library @code{digest-md5.el}. @item nnimap-expunge-on-close @cindex Expunging @vindex nnimap-expunge-on-close -Unlike Parmenides the @sc{imap} designers has decided that things that -doesn't exist actually does exist. More specifically, @sc{imap} has +Unlike Parmenides the @acronym{IMAP} designers has decided that things that +doesn't exist actually does exist. More specifically, @acronym{IMAP} has this concept of marking articles @code{Deleted} which doesn't actually delete them, and this (marking them @code{Deleted}, that is) is what nnimap does when you delete a article in Gnus (with @kbd{B DEL} or @@ -15873,7 +15947,7 @@ The default behavior, delete all articles marked as ``Deleted'' when closing a mailbox. @item never Never actually delete articles. Currently there is no way of showing -the articles marked for deletion in nnimap, but other @sc{imap} clients +the articles marked for deletion in nnimap, but other @acronym{IMAP} clients may allow you to do this. If you ever want to run the EXPUNGE command manually, @xref{Expunging mailboxes}. @item ask @@ -15885,11 +15959,11 @@ articles or not. @item nnimap-importantize-dormant @vindex nnimap-importantize-dormant -If non-nil (the default), marks dormant articles as ticked (as well), -for other @sc{imap} clients. Within Gnus, dormant articles will +If non-@code{nil} (the default), marks dormant articles as ticked (as +well), for other @acronym{IMAP} clients. Within Gnus, dormant articles will naturally still (only) be marked as dormant. This is to make dormant -articles stand out, just like ticked articles, in other @sc{imap} -clients. (In other words, Gnus has two ``Tick'' marks and @sc{imap} +articles stand out, just like ticked articles, in other @acronym{IMAP} +clients. (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP} has only one.) Probably the only reason for frobing this would be if you're trying @@ -15909,7 +15983,7 @@ as ticked for other users. @cindex Expunging @vindex nnimap-expunge-search-string -This variable contain the @sc{imap} search command sent to server when +This variable contain the @acronym{IMAP} search command sent to server when searching for articles eligible for expiring. The default is @code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by UID set and the second @code{%s} is replaced by a date. @@ -15934,7 +16008,7 @@ variable @code{nntp-authinfo-file} for exact syntax; also see * Expiring in IMAP:: Expiring mail with nnimap. * Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox. * Expunging mailboxes:: Equivalent of a ``compress mailbox'' button. -* A note on namespaces:: How to (not) use IMAP namespace in Gnus. +* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus. @end menu @@ -15945,8 +16019,8 @@ variable @code{nntp-authinfo-file} for exact syntax; also see Splitting is something Gnus users has loved and used for years, and now the rest of the world is catching up. Yeah, dream on, not many -@sc{imap} server has server side splitting and those that have splitting -seem to use some non-standard protocol. This means that @sc{imap} +@acronym{IMAP} server has server side splitting and those that have splitting +seem to use some non-standard protocol. This means that @acronym{IMAP} support for Gnus has to do it's own splitting. And it does. @@ -15960,8 +16034,9 @@ Here are the variables of interest: @cindex crosspost @vindex nnimap-split-crosspost -If non-nil, do crossposting if several split methods match the mail. If -nil, the first match in @code{nnimap-split-rule} found will be used. +If non-@code{nil}, do crossposting if several split methods match the +mail. If @code{nil}, the first match in @code{nnimap-split-rule} +found will be used. Nnmail equivalent: @code{nnmail-crosspost}. @@ -15970,9 +16045,9 @@ Nnmail equivalent: @code{nnmail-crosspost}. @cindex inbox @vindex nnimap-split-inbox -A string or a list of strings that gives the name(s) of @sc{imap} -mailboxes to split from. Defaults to nil, which means that splitting is -disabled! +A string or a list of strings that gives the name(s) of @acronym{IMAP} +mailboxes to split from. Defaults to @code{nil}, which means that +splitting is disabled! @lisp (setq nnimap-split-inbox @@ -15989,7 +16064,7 @@ New mail found in @code{nnimap-split-inbox} will be split according to this variable. This variable contains a list of lists, where the first element in the -sublist gives the name of the @sc{imap} mailbox to move articles +sublist gives the name of the @acronym{IMAP} mailbox to move articles matching the regexp in the second element in the sublist. Got that? Neither did I, we need examples. @@ -16018,8 +16093,8 @@ matching messages should simply be deleted. Use with care. The second element can also be a function. In that case, it will be called with the first element of the rule as the argument, in a buffer -containing the headers of the article. It should return a non-nil value -if it thinks that the mail belongs in that group. +containing the headers of the article. It should return a +non-@code{nil} value if it thinks that the mail belongs in that group. Nnmail users might recollect that the last regexp had to be empty to match all articles (like in the example above). This is not required in @@ -16067,7 +16142,7 @@ Nnmail equivalent: @code{nnmail-split-methods}. Mail matching this predicate in @code{nnimap-split-inbox} will be split, it is a string and the default is @samp{UNSEEN UNDELETED}. -This might be useful if you use another @sc{imap} client to read mail in +This might be useful if you use another @acronym{IMAP} client to read mail in your inbox but would like Gnus to split all articles in the inbox regardless of readedness. Then you might change this to @samp{UNDELETED}. @@ -16099,10 +16174,10 @@ Nnmail equivalent: @code{nnmail-split-fancy}. @findex nnimap-split-download-body @vindex nnimap-split-download-body -Set to non-nil to download entire articles during splitting. This is -generally not required, and will slow things down considerably. You -may need it if you want to use an advanced splitting function that -analyses the body to split the article. +Set to non-@code{nil} to download entire articles during splitting. +This is generally not required, and will slow things down +considerably. You may need it if you want to use an advanced +splitting function that analyses the body to split the article. @end table @@ -16112,13 +16187,13 @@ analyses the body to split the article. Even though @code{nnimap} is not a proper @code{nnmail} derived back end, it supports most features in regular expiring (@pxref{Expiring -Mail}). Unlike splitting in IMAP (@pxref{Splitting in IMAP}) it do -not clone the @code{nnmail} variables (i.e., creating +Mail}). Unlike splitting in @acronym{IMAP} (@pxref{Splitting in +IMAP}) it does not clone the @code{nnmail} variables (i.e., creating @var{nnimap-expiry-wait}) but reuse the @code{nnmail} variables. What follows below are the variables used by the @code{nnimap} expiry process. -A note on how the expire mark is stored on the @sc{imap} server is +A note on how the expire mark is stored on the @acronym{IMAP} server is appropriate here as well. The expire mark is translated into a @code{imap} client specific mark, @code{gnus-expire}, and stored on the message. This means that likely only Gnus will understand and treat @@ -16139,7 +16214,7 @@ number, the symbol @code{immediate} or @code{never}. This variable is supported, and internally implemented by calling the @code{nnmail} functions that handle this. It contains an optimization -that if the destination is a IMAP group on the same server, the +that if the destination is a @acronym{IMAP} group on the same server, the article is copied instead of appended (that is, uploaded again). @end table @@ -16148,13 +16223,13 @@ article is copied instead of appended (that is, uploaded again). @subsection Editing IMAP ACLs @cindex editing imap acls @cindex Access Control Lists -@cindex Editing @sc{imap} ACLs +@cindex Editing @acronym{IMAP} ACLs @kindex G l @findex gnus-group-nnimap-edit-acl -ACL stands for Access Control List. ACLs are used in @sc{imap} for +ACL stands for Access Control List. ACLs are used in @acronym{IMAP} for limiting (or enabling) other users access to your mail boxes. Not all -@sc{imap} servers support this, this function will give an error if it +@acronym{IMAP} servers support this, this function will give an error if it doesn't. To edit a ACL for a mailbox, type @kbd{G l} @@ -16171,7 +16246,7 @@ follow the list without subscribing to it. @item At least with the Cyrus server, you are required to give the user ``anyone'' posting ("p") capabilities to have ``plussing'' work (that is, -mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox +mail sent to user+mailbox@@domain ending up in the @acronym{IMAP} mailbox INBOX.mailbox). @end itemize @@ -16196,8 +16271,8 @@ delete them. @cindex IMAP namespace @cindex namespaces -The IMAP protocol has a concept called namespaces, described by the -following text in the RFC: +The @acronym{IMAP} protocol has a concept called namespaces, described +by the following text in the RFC: @example 5.1.2. Mailbox Namespace Naming Convention @@ -16215,20 +16290,21 @@ following text in the RFC: to a different object (e.g. a user's private mailbox). @end example -While there is nothing in this text that warrants concern for the IMAP -implementation in Gnus, some servers use namespace prefixes in a way -that does not work with how Gnus uses mailbox names. - -Specifically, University of Washington's IMAP server uses mailbox -names like @code{#driver.mbx/read-mail} which are valid only in the -@sc{create} and @sc{append} commands. After the mailbox is created -(or a messages is appended to a mailbox), it must be accessed without -the namespace prefix, i.e. @code{read-mail}. Since Gnus do not make it -possible for the user to guarantee that user entered mailbox names -will only be used with the CREATE and APPEND commands, you should -simply not use the namespace prefixed mailbox names in Gnus. - -See the UoW @sc{imapd} documentation for the @code{#driver.*/} prefix +While there is nothing in this text that warrants concern for the +@acronym{IMAP} implementation in Gnus, some servers use namespace +prefixes in a way that does not work with how Gnus uses mailbox names. + +Specifically, University of Washington's @acronym{IMAP} server uses +mailbox names like @code{#driver.mbx/read-mail} which are valid only +in the @sc{create} and @sc{append} commands. After the mailbox is +created (or a messages is appended to a mailbox), it must be accessed +without the namespace prefix, i.e. @code{read-mail}. Since Gnus do +not make it possible for the user to guarantee that user entered +mailbox names will only be used with the CREATE and APPEND commands, +you should simply not use the namespace prefixed mailbox names in +Gnus. + +See the UoW IMAPD documentation for the @code{#driver.*/} prefix for more information on how to use the prefixes. They are a power tool and should be used only if you are sure what the effects are. @@ -16268,7 +16344,7 @@ enter the @code{ange-ftp} file name @code{ange-ftp} or @code{efs} will actually allow you to read this directory over at @samp{sina} as a newsgroup. Distributed news ahoy! -@code{nndir} will use @sc{nov} files if they are present. +@code{nndir} will use @acronym{NOV} files if they are present. @code{nndir} is a ``read-only'' back end---you can't delete or expire articles with this method. You can use @code{nnmh} or @code{nnml} for @@ -16350,11 +16426,11 @@ Name of the map files. as a newsgroup. Several files types are supported: @table @code -@cindex babyl -@cindex rmail mbox +@cindex Babyl +@cindex Rmail mbox @item babyl -The babyl (rmail) mail box. +The Babyl (Rmail) mail box. @cindex mbox @cindex Unix mbox @@ -16380,13 +16456,13 @@ Forwarded articles. Netscape mail boxes. @item mime-parts -@sc{mime} multipart messages. +@acronym{MIME} multipart messages. @item standard-digest The standard (RFC 1153) digest format. @item mime-digest -A @sc{mime} digest of messages. +A @acronym{MIME} digest of messages. @item lanl-gov-announce Announcement messages from LANL Gov Announce. @@ -16579,14 +16655,14 @@ To hook your own document definition into @code{nndoc}, use the @code{nndoc-add-type} function. It takes two parameters---the first is the definition itself and the second (optional) parameter says where in the document type definition alist to put this definition. -The alist is traversed sequentially, and @code{nndoc-TYPE-type-p} is -called for a given type @code{TYPE}. So @code{nndoc-mmdf-type-p} is -called to see whether a document is of @code{mmdf} type, and so on. -These type predicates should return @code{nil} if the document is not -of the correct type; @code{t} if it is of the correct type; and a -number if the document might be of the correct type. A high number -means high probability; a low number means low probability with -@samp{0} being the lowest valid number. +The alist is traversed sequentially, and +@code{nndoc-@var{type}-type-p} is called for a given type @var{type}. +So @code{nndoc-mmdf-type-p} is called to see whether a document is of +@code{mmdf} type, and so on. These type predicates should return +@code{nil} if the document is not of the correct type; @code{t} if it +is of the correct type; and a number if the document might be of the +correct type. A high number means high probability; a low number +means low probability with @samp{0} being the lowest valid number. @node SOUP @@ -17055,9 +17131,9 @@ inherited. @cindex nnkiboze @cindex kibozing -@dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of) +@dfn{Kibozing} is defined by @acronym{oed} as ``grepping through (parts of) the news feed''. @code{nnkiboze} is a back end that will do this for -you. Oh joy! Now you can grind any @sc{nntp} server down to a halt +you. Oh joy! Now you can grind any @acronym{NNTP} server down to a halt with useless requests! Oh happiness! @kindex G k (Group) @@ -17066,25 +17142,25 @@ buffer. The address field of the @code{nnkiboze} method is, as with @code{nnvirtual}, a regexp to match groups to be ``included'' in the -@code{nnkiboze} group. That's where most similarities between @code{nnkiboze} -and @code{nnvirtual} end. +@code{nnkiboze} group. That's where most similarities between +@code{nnkiboze} and @code{nnvirtual} end. -In addition to this regexp detailing component groups, an @code{nnkiboze} group -must have a score file to say what articles are to be included in -the group (@pxref{Scoring}). +In addition to this regexp detailing component groups, an +@code{nnkiboze} group must have a score file to say what articles are +to be included in the group (@pxref{Scoring}). @kindex M-x nnkiboze-generate-groups @findex nnkiboze-generate-groups You must run @kbd{M-x nnkiboze-generate-groups} after creating the -@code{nnkiboze} groups you want to have. This command will take time. Lots of -time. Oodles and oodles of time. Gnus has to fetch the headers from -all the articles in all the component groups and run them through the -scoring process to determine if there are any articles in the groups -that are to be part of the @code{nnkiboze} groups. +@code{nnkiboze} groups you want to have. This command will take time. +Lots of time. Oodles and oodles of time. Gnus has to fetch the +headers from all the articles in all the component groups and run them +through the scoring process to determine if there are any articles in +the groups that are to be part of the @code{nnkiboze} groups. Please limit the number of component groups by using restrictive regexps. Otherwise your sysadmin may become annoyed with you, and the -@sc{nntp} site may throw you off and never let you back in again. +@acronym{NNTP} site may throw you off and never let you back in again. Stranger things have happened. @code{nnkiboze} component groups do not have to be alive---they can be dead, @@ -17093,12 +17169,12 @@ and they can be foreign. No restrictions. @vindex nnkiboze-directory The generation of an @code{nnkiboze} group means writing two files in @code{nnkiboze-directory}, which is @file{~/News/} by default. One -contains the @sc{nov} header lines for all the articles in the group, +contains the @acronym{NOV} header lines for all the articles in the group, and the other is an additional @file{.newsrc} file to store information on what groups have been searched through to find component articles. Articles marked as read in the @code{nnkiboze} group will have -their @sc{nov} lines removed from the @sc{nov} file. +their @acronym{NOV} lines removed from the @acronym{NOV} file. @node Gnus Unplugged @@ -17138,7 +17214,7 @@ Of course, to use it as such, you have to learn a few new commands. * Agent as Cache:: The Agent is a big cache too. * Agent Expiry:: How to make old articles go away. * Agent Regeneration:: How to recover from lost connections and other accidents. -* Agent and IMAP:: How to use the Agent with IMAP. +* Agent and IMAP:: How to use the Agent with @acronym{IMAP}. * Outgoing Messages:: What happens when you post/mail something? * Agent Variables:: Customizing is fun. * Example Setup:: An example @file{~/.gnus.el} file for offline people. @@ -17941,7 +18017,7 @@ recommended that you first close all summary buffers. @findex gnus-agent-regenerate-group @kindex M-x gnus-agent-regenerate-group The command @code{gnus-agent-regenerate-group} uses the local copies -of individual articles to repair the local NOV(header) database. It +of individual articles to repair the local @acronym{NOV}(header) database. It then updates the internal data structures that document which articles are stored locally. An optional argument will mark articles in the agent as unread. @@ -17950,12 +18026,12 @@ agent as unread. @subsection Agent and IMAP The Agent works with any Gnus back end, including nnimap. However, -since there are some conceptual differences between @sc{nntp} and -@sc{imap}, this section (should) provide you with some information to -make Gnus Agent work smoother as a @sc{imap} Disconnected Mode client. +since there are some conceptual differences between @acronym{NNTP} and +@acronym{IMAP}, this section (should) provide you with some information to +make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client. The first thing to keep in mind is that all flags (read, ticked, etc) -are kept on the @sc{imap} server, rather than in @file{.newsrc} as is the +are kept on the @acronym{IMAP} server, rather than in @file{.newsrc} as is the case for nntp. Thus Gnus need to remember flag changes when disconnected, and synchronize these flags when you plug back in. @@ -17977,7 +18053,7 @@ re-connect, you can do it manually with the in the group buffer. Some things are currently not implemented in the Agent that you'd might -expect from a disconnected @sc{imap} client, including: +expect from a disconnected @acronym{IMAP} client, including: @itemize @bullet @@ -18043,9 +18119,9 @@ Hook run when finished fetching articles. @item gnus-agent-cache @vindex gnus-agent-cache -Variable to control whether use the locally stored @sc{nov} and +Variable to control whether use the locally stored @acronym{NOV} and articles when plugged, e.g. essentially using the Agent as a cache. -The default is non-nil, which means to use the Agent as a cache. +The default is non-@code{nil}, which means to use the Agent as a cache. @item gnus-agent-go-online @vindex gnus-agent-go-online @@ -18117,20 +18193,20 @@ setup, you may be able to use something like the following as your @file{~/.gnus.el} file to get started. @lisp -;;; Define how Gnus is to fetch news. We do this over @sc{nntp} -;;; from your ISP's server. +;;; @r{Define how Gnus is to fetch news. We do this over @acronym{NNTP}} +;;; @r{from your ISP's server.} (setq gnus-select-method '(nntp "news.your-isp.com")) -;;; Define how Gnus is to read your mail. We read mail from -;;; your ISP's POP server. +;;; @r{Define how Gnus is to read your mail. We read mail from} +;;; @r{your ISP's @acronym{POP} server.} (setq mail-sources '((pop :server "pop.your-isp.com"))) -;;; Say how Gnus is to store the mail. We use nnml groups. +;;; @r{Say how Gnus is to store the mail. We use nnml groups.} (setq gnus-secondary-select-methods '((nnml ""))) -;;; Make Gnus into an offline newsreader. -;;; (gnus-agentize) ; The obsolete setting. -;;; (setq gnus-agent t) ; Now the default. +;;; @r{Make Gnus into an offline newsreader.} +;;; (gnus-agentize) ; @r{The obsolete setting.} +;;; (setq gnus-agent t) ; @r{Now the default.} @end lisp That should be it, basically. Put that in your @file{~/.gnus.el} file, @@ -18140,7 +18216,7 @@ gnus}. If this is the first time you've run Gnus, you will be subscribed automatically to a few default newsgroups. You'll probably want to subscribe to more groups, and to do that, you have to query the -@sc{nntp} server for a complete list of groups with the @kbd{A A} +@acronym{NNTP} server for a complete list of groups with the @kbd{A A} command. This usually takes quite a while, but you only have to do it once. @@ -18388,7 +18464,7 @@ Score on the @code{Message-ID} header. @item e Score on an ``extra'' header, that is, one of those in gnus-extra-headers, -if your @sc{nntp} server tracks additional header data in overviews. +if your @acronym{NNTP} server tracks additional header data in overviews. @item f Score on followups---this matches the author name, and adds scores to @@ -18552,7 +18628,7 @@ variable to @code{t} to do that. (It is @code{t} by default.) @item gnus-kill-files-directory @vindex gnus-kill-files-directory All kill and score files will be stored in this directory, which is -initialized from the @code{SAVEDIR} environment variable by default. +initialized from the @env{SAVEDIR} environment variable by default. This is @file{~/News/} by default. @item gnus-score-file-suffix @@ -18685,10 +18761,10 @@ Function called with the name of the score file just written. @item gnus-score-thread-simplify @vindex gnus-score-thread-simplify -If this variable is non-@code{nil}, article subjects will be simplified -for subject scoring purposes in the same manner as with +If this variable is non-@code{nil}, article subjects will be +simplified for subject scoring purposes in the same manner as with threading---according to the current value of -gnus-simplify-subject-functions. If the scoring entry uses +@code{gnus-simplify-subject-functions}. If the scoring entry uses @code{substring} or @code{exact} matching, the match will also be simplified in this manner. @@ -18803,7 +18879,7 @@ gnus-extra-headers, you can score on these headers' values. In this case, there is a 5th element in the score entry, being the name of the header to be scored. The following entry is useful in your @file{all.SCORE} file in case of spam attacks from a single origin host, -if your @sc{nntp} server tracks NNTP-Posting-Host in overviews: +if your @acronym{NNTP} server tracks NNTP-Posting-Host in overviews: @lisp ("111.222.333.444" -1000 nil s "NNTP-Posting-Host") @@ -19214,8 +19290,8 @@ A list. The elements in this list can be: group name, the @var{file-name} will be used as the home score file. @item -A function. If the function returns non-nil, the result will be used as -the home score file. +A function. If the function returns non-@code{nil}, the result will +be used as the home score file. @item A string. Use the string as the home score file. @@ -19259,9 +19335,9 @@ their own home score files: @lisp (setq gnus-home-score-file - ;; All groups that match the regexp "\\.emacs" + ;; @r{All groups that match the regexp @code{"\\.emacs"}} '(("\\.emacs" "emacs.SCORE") - ;; All the comp groups in one score file + ;; @r{All the comp groups in one score file} ("^comp" "comp.SCORE"))) @end lisp @@ -19542,7 +19618,7 @@ Other programs use a totally different kill file syntax. If Gnus encounters what looks like a @code{rn} kill file, it will take a stab at interpreting it. -Two summary functions for editing a GNUS kill file: +Two summary functions for editing a @sc{gnus} kill file: @table @kbd @@ -19630,7 +19706,7 @@ before. @section GroupLens @cindex GroupLens -GroupLens (@uref{http://www.cs.umn.edu/Research/GroupLens/}) is a +@uref{http://www.cs.umn.edu/Research/GroupLens/, GroupLens} is a collaborative filtering system that helps you work together with other people to find the quality news articles out of the huge volume of news articles generated every day. @@ -19659,10 +19735,9 @@ so this section is mostly of historical interest. @node Using GroupLens @subsection Using GroupLens -To use GroupLens you must register a pseudonym with your local Better -Bit Bureau (BBB). -@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only -better bit in town at the moment. +To use GroupLens you must register a pseudonym with your local +@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html, Better Bit +Bureau (BBB)} is the only better bit in town at the moment. Once you have registered you'll need to set a couple of variables. @@ -20430,19 +20505,19 @@ paragraph.) Here's an alternative recipe for the group buffer: @lisp -;; Create three face types. +;; @r{Create three face types.} (setq gnus-face-1 'bold) (setq gnus-face-3 'italic) -;; We want the article count to be in -;; a bold and green face. So we create -;; a new face called `my-green-bold'. +;; @r{We want the article count to be in} +;; @r{a bold and green face. So we create} +;; @r{a new face called @code{my-green-bold}.} (copy-face 'bold 'my-green-bold) -;; Set the color. +;; @r{Set the color.} (set-face-foreground 'my-green-bold "ForestGreen") (setq gnus-face-2 'my-green-bold) -;; Set the new & fancy format. +;; @r{Set the new & fancy format.} (setq gnus-group-line-format "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n") @end lisp @@ -20480,7 +20555,7 @@ strings. However, when combining various strings of different size, it can often be more convenient to just output the strings, and then worry about lining up the following text afterwards. -To do that, Gnus supplies tabulator specs--@samp{%=}. There are two +To do that, Gnus supplies tabulator specs---@samp{%=}. There are two different types---@dfn{hard tabulators} and @dfn{soft tabulators}. @samp{%50=} will insert space characters to pad the line up to column @@ -21045,8 +21120,8 @@ been idle for thirty minutes: (gnus-demon-close-connections nil 30) @end lisp -Here's a handler that scans for PGP headers every hour when Emacs is -idle: +Here's a handler that scans for @acronym{PGP} headers every hour when +Emacs is idle: @lisp (gnus-demon-scan-pgp 60 t) @@ -21743,7 +21818,7 @@ processing, for instance DCC implements such a system. In essence, @code{N} systems around the world agree that a machine @samp{X} in China, Ghana, or California is sending out spam e-mail, and these @code{N} systems enter @samp{X} or the spam e-mail from @samp{X} into -a database. The criteria for spam detection vary - it may be the +a database. The criteria for spam detection vary---it may be the number of messages sent, the content of the messages, and so on. When a user of the distributed processing system wants to find out if a message is spam, he consults one of those @code{N} systems. @@ -21806,7 +21881,7 @@ This says that all mail to this address is suspect, but if it has a header, it's probably ok. All the rest goes to the @samp{spam} group. (This idea probably comes from Tim Pierce.) -In addition, many mail spammers talk directly to your @sc{smtp} server +In addition, many mail spammers talk directly to your @acronym{SMTP} server and do not include your email address explicitly in the @code{To} header. Why they do this is unknown---perhaps it's to thwart this thwarting scheme? In any case, this is trivial to deal with---you just @@ -22144,10 +22219,10 @@ but you can customize it. The boolean variable @code{nnimap-split-download-body} needs to be set, if you want to split based on the whole message instead of just the headers. By default, the nnimap backend will only retrieve the -message headers. If you use spam-check-bogofilter, spam-check-ifile, -or spam-check-stat (the splitters that can benefit from the full -message body), you should set this variable. It is not set by default -because it will slow IMAP down. +message headers. If you use @code{spam-check-bogofilter}, +@code{spam-check-ifile}, or @code{spam-check-stat} (the splitters that +can benefit from the full message body), you should set this variable. +It is not set by default because it will slow @acronym{IMAP} down. @xref{Splitting in IMAP}. @@ -22306,10 +22381,10 @@ contains outdated servers. The blackhole check uses the @code{dig.el} package, but you can tell @code{spam.el} to use @code{dns.el} instead for better performance if -you set @code{spam-use-dig} to nil. It is not recommended at this -time to set @code{spam-use-dig} to nil despite the possible -performance improvements, because some users may be unable to use it, -but you can try it and see if it works for you. +you set @code{spam-use-dig} to @code{nil}. It is not recommended at +this time to set @code{spam-use-dig} to @code{nil} despite the +possible performance improvements, because some users may be unable to +use it, but you can try it and see if it works for you. @end defvar @@ -22322,7 +22397,7 @@ The list of servers to consult for blackhole checks. @defvar spam-blackhole-good-server-regex A regular expression for IPs that should not be checked against the -blackhole server list. When set to nil, it has no effect. +blackhole server list. When set to @code{nil}, it has no effect. @end defvar @@ -22591,19 +22666,19 @@ functionality @lisp (defun spam-blackbox-register-spam-routine () (spam-generic-register-routine - ;; the spam function + ;; @r{the spam function} (lambda (article) (let ((from (spam-fetch-field-from-fast article))) (when (stringp from) (blackbox-do-something-with-this-spammer from)))) - ;; the ham function + ;; @r{the ham function} nil)) (defun spam-blackbox-register-ham-routine () (spam-generic-register-routine - ;; the spam function + ;; @r{the spam function} nil - ;; the ham function + ;; @r{the ham function} (lambda (article) (let ((from (spam-fetch-field-from-fast article))) (when (stringp from) @@ -22690,14 +22765,14 @@ the the group @samp{nnml:mail.spam}), and you would call @file{~/Mail/mail/misc} (this usually corresponds the the group @samp{nnml:mail.misc}). -When you are using IMAP, you won't have the mails available locally, -so that will not work. One solution is to use the Gnus Agent to cache -the articles. Then you can use directories such as +When you are using @acronym{IMAP}, you won't have the mails available +locally, so that will not work. One solution is to use the Gnus Agent +to cache the articles. Then you can use directories such as @file{"~/News/agent/nnimap/mail.yourisp.com/personal_spam"} for @code{spam-stat-process-spam-directory}. @xref{Agent as Cache}. @defvar spam-stat -This variable holds the hash-table with all the statistics -- the +This variable holds the hash-table with all the statistics---the dictionary we have been talking about. For every word in either collection, this hash-table stores a vector describing how often the word appeared in spam and often it appeared in non-spam mails. @@ -22908,7 +22983,7 @@ variable, which defaults to @file{~/}. @item gnus-directory @vindex gnus-directory Most Gnus storage file and directory variables will be initialized from -this variable, which defaults to the @samp{SAVEDIR} environment +this variable, which defaults to the @env{SAVEDIR} environment variable, or @file{~/News/} if that variable isn't set. Note that Gnus is mostly loaded when the @file{~/.gnus.el} file is read. @@ -22996,7 +23071,7 @@ names who could possibly mess up Gnus internally (like allowing @samp{:} in a group name, which is normally used to delimit method and group). -@sc{imap} users might want to allow @samp{/} in group names though. +@acronym{IMAP} users might want to allow @samp{/} in group names though. @end table @@ -23143,12 +23218,12 @@ released version of Gnus and snuggle up to that instead. In addition to the versions of Gnus which have had their releases coordinated by Lars, one major development has been Semi-gnus from Japan. It's based on a library called @sc{semi}, which provides -@sc{mime} capabilities. +@acronym{MIME} capabilities. These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus. Collectively, they are called ``Semi-gnus'', and different strains are called T-gnus, ET-gnus, Nana-gnus and Chaos. These provide powerful -@sc{mime} and multilingualization things, especially important for +@acronym{MIME} and multilingualization things, especially important for Japanese users. @@ -23294,7 +23369,7 @@ look into implementing the changes when the draft is accepted as an RFC. @item MIME - RFC 2045-2049 etc @cindex MIME -All the various @sc{mime} RFCs are supported. +All the various @acronym{MIME} RFCs are supported. @item Disposition Notifications - RFC 2298 Message Mode is able to request notifications from the receiver. @@ -23302,27 +23377,29 @@ Message Mode is able to request notifications from the receiver. @item PGP - RFC 1991 and RFC 2440 @cindex RFC 1991 @cindex RFC 2440 -RFC 1991 is the original PGP message specification, published as a -Information RFC. RFC 2440 was the follow-up, now called Open PGP, and -put on the Standards Track. Both document a non-@sc{mime} aware PGP -format. Gnus supports both encoding (signing and encryption) and -decoding (verification and decryption). +RFC 1991 is the original @acronym{PGP} message specification, +published as a Information RFC. RFC 2440 was the follow-up, now +called Open PGP, and put on the Standards Track. Both document a +non-@acronym{MIME} aware @acronym{PGP} format. Gnus supports both +encoding (signing and encryption) and decoding (verification and +decryption). @item PGP/MIME - RFC 2015/3156 RFC 2015 (superseded by 3156 which references RFC 2440 instead of RFC -1991) describes the @sc{mime}-wrapping around the RF 1991/2440 format. +1991) describes the @acronym{MIME}-wrapping around the RF 1991/2440 format. Gnus supports both encoding and decoding. @item S/MIME - RFC 2633 -RFC 2633 describes the @sc{s/mime} format. +RFC 2633 describes the @acronym{S/MIME} format. @item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731 -RFC 1730 is @sc{imap} version 4, updated somewhat by RFC 2060 (@sc{imap} 4 -revision 1). RFC 2195 describes CRAM-MD5 authentication for @sc{imap}. RFC -2086 describes access control lists (ACLs) for @sc{imap}. RFC 2359 -describes a @sc{imap} protocol enhancement. RFC 2595 describes the proper -TLS integration (STARTTLS) with @sc{imap}. RFC 1731 describes the -GSSAPI/Kerberos4 mechanisms for @sc{imap}. +RFC 1730 is @acronym{IMAP} version 4, updated somewhat by RFC 2060 +(@acronym{IMAP} 4 revision 1). RFC 2195 describes CRAM-MD5 +authentication for @acronym{IMAP}. RFC 2086 describes access control +lists (ACLs) for @acronym{IMAP}. RFC 2359 describes a @acronym{IMAP} +protocol enhancement. RFC 2595 describes the proper @acronym{TLS} +integration (STARTTLS) with @acronym{IMAP}. RFC 1731 describes the +GSSAPI/Kerberos4 mechanisms for @acronym{IMAP}. @end table @@ -23423,7 +23500,7 @@ Masanobu @sc{Umeda}---the writer of the original @sc{gnus}. @item Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el, -nnwarchive and many, many other things connected with @sc{mime} and +nnwarchive and many, many other things connected with @acronym{MIME} and other types of en/decoding, as well as general bug fixing, new functionality and stuff. @@ -23438,7 +23515,7 @@ Luis Fernandes---design and graphics. Joe Reiss---creator of the smiley faces. @item -Justin Sheehy--the FAQ maintainer. +Justin Sheehy--the @acronym{FAQ} maintainer. @item Erik Naggum---help, ideas, support, code and stuff. @@ -23757,7 +23834,7 @@ The look of all buffers can be changed by setting format-like variables (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). @item -Local spool and several @sc{nntp} servers can be used at once +Local spool and several @acronym{NNTP} servers can be used at once (@pxref{Select Methods}). @item @@ -23837,7 +23914,7 @@ Fetching parents (and other articles) now actually works without glitches (@pxref{Finding the Parent}). @item -Gnus can fetch FAQs and group descriptions (@pxref{Group Information}). +Gnus can fetch @acronym{FAQ}s and group descriptions (@pxref{Group Information}). @item Digests (and other files) can be used as the basis for groups @@ -24211,7 +24288,7 @@ Process mark sets can be pushed and popped (@pxref{Setting Process Marks}). @item -A new mail-to-news back end makes it possible to post even when the @sc{nntp} +A new mail-to-news back end makes it possible to post even when the @acronym{NNTP} server doesn't allow posting (@pxref{Mail-To-News Gateways}). @item @@ -24341,7 +24418,7 @@ text---@kbd{W d}. @item @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for -controlling where and how to send @sc{authinfo} to @sc{nntp} servers. +controlling where and how to send @sc{authinfo} to @acronym{NNTP} servers. @item A command for editing group parameters from the summary buffer @@ -24416,7 +24493,7 @@ More information is available in the info doc at Select Methods -> Getting Mail -> Mail Sources @item -Gnus is now a @sc{mime}-capable reader. This affects many parts of +Gnus is now a @acronym{MIME}-capable reader. This affects many parts of Gnus, and adds a slew of new commands. See the manual for details. @item @@ -24429,7 +24506,7 @@ called to position point. @item The user can now decide which extra headers should be included in -summary buffers and @sc{nov} files. +summary buffers and @acronym{NOV} files. @item @code{gnus-article-display-hook} has been removed. Instead, a number @@ -24445,7 +24522,7 @@ New web-based back ends have been added: @code{nnslashdot}, again, to keep up with ever-changing layouts. @item -Gnus can now read @sc{imap} mail via @code{nnimap}. +Gnus can now read @acronym{IMAP} mail via @code{nnimap}. @end itemize @@ -24543,7 +24620,7 @@ reference manual as source material. It would look quite differently. @item news @cindex news This is what you are supposed to use this thing for---reading news. -News is generally fetched from a nearby @sc{nntp} server, and is +News is generally fetched from a nearby @acronym{NNTP} server, and is generally publicly available to everybody. If you post news, the entire world is likely to read just what you have written, and they'll all snigger mischievously. Behind your back. @@ -24568,20 +24645,21 @@ are reading. @cindex back end Gnus considers mail and news to be mostly the same, really. The only difference is how to access the actual articles. News articles are -commonly fetched via the protocol NNTP, whereas mail messages could be -read from a file on the local disk. The internal architecture of Gnus -thus comprises a `front end' and a number of `back ends'. Internally, -when you enter a group (by hitting @key{RET}, say), you thereby invoke -a function in the front end in Gnus. The front end then `talks' to a -back end and says things like ``Give me the list of articles in the foo -group'' or ``Show me article number 4711''. - -So a back end mainly defines either a protocol (the @code{nntp} back end -accesses news via NNTP, the @code{nnimap} back end accesses mail via -IMAP) or a file format and directory layout (the @code{nnspool} back end -accesses news via the common `spool directory' format, the @code{nnml} -back end access mail via a file format and directory layout that's -quite similar). +commonly fetched via the protocol @acronym{NNTP}, whereas mail +messages could be read from a file on the local disk. The internal +architecture of Gnus thus comprises a `front end' and a number of +`back ends'. Internally, when you enter a group (by hitting +@key{RET}, say), you thereby invoke a function in the front end in +Gnus. The front end then `talks' to a back end and says things like +``Give me the list of articles in the foo group'' or ``Show me article +number 4711''. + +So a back end mainly defines either a protocol (the @code{nntp} back +end accesses news via @acronym{NNTP}, the @code{nnimap} back end +accesses mail via @acronym{IMAP}) or a file format and directory +layout (the @code{nnspool} back end accesses news via the common +`spool directory' format, the @code{nnml} back end access mail via a +file format and directory layout that's quite similar). Gnus does not handle the underlying media, so to speak---this is all done by the back ends. A back end is a collection of functions to @@ -24637,9 +24715,9 @@ A line from the head of an article. @item headers @cindex headers A collection of such lines, or a collection of heads. Or even a -collection of @sc{nov} lines. +collection of @acronym{NOV} lines. -@item @sc{nov} +@item @acronym{NOV} @cindex nov When Gnus enters a group, it asks the back end for the headers of all unread articles in the group. Most servers support the News OverView @@ -24705,6 +24783,7 @@ original. @item ephemeral groups @cindex ephemeral groups +@cindex temporary groups Most groups store data on what articles you have read. @dfn{Ephemeral} groups are groups that will have no data stored---when you exit the group, it'll disappear into the aether. @@ -24768,7 +24847,7 @@ for some quite common situations. If you run Emacs on a machine locally, and get your news from a machine over some very thin strings, you want to cut down on the amount of data -Gnus has to get from the @sc{nntp} server. +Gnus has to get from the @acronym{NNTP} server. @table @code @@ -24781,7 +24860,7 @@ doesn't suddenly decide to fetch the active file anyway. @item gnus-nov-is-evil This one has to be @code{nil}. If not, grabbing article headers from -the @sc{nntp} server will not be very fast. Not all @sc{nntp} servers +the @acronym{NNTP} server will not be very fast. Not all @acronym{NNTP} servers support @sc{xover}; Gnus will detect this by itself. @end table @@ -24903,8 +24982,8 @@ on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp flee}, you have some old @file{.el} files lying around. Delete these. @item -Read the help group (@kbd{G h} in the group buffer) for a FAQ and a -how-to. +Read the help group (@kbd{G h} in the group buffer) for a +@acronym{FAQ} and a how-to. @item @vindex max-lisp-eval-depth @@ -25148,7 +25227,7 @@ Prompts the user for a select method. @node Back End Interface @subsection Back End Interface -Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual +Gnus doesn't know anything about @acronym{NNTP}, spools, mail or virtual groups. It only knows how to talk to @dfn{virtual servers}. A virtual server is a @dfn{back end} and some @dfn{back end variables}. As examples of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}. As @@ -25193,7 +25272,7 @@ return value. Some back ends could be said to be @dfn{server-forming} back ends, and some might be said not to be. The latter are back ends that generally only operate on one group at a time, and have no concept of ``server'' --- they have a group, and they deliver info on that group and nothing +---they have a group, and they deliver info on that group and nothing more. Gnus identifies each message by way of group name and article number. A @@ -25246,10 +25325,10 @@ In the examples and definitions I will refer to the imaginary back end sequences (lists) of article numbers, and most back ends do not support retrieval of @code{Message-ID}s. But they should try for both. -The result data should either be HEADs or @sc{nov} lines, and the result +The result data should either be HEADs or @acronym{NOV} lines, and the result value should either be @code{headers} or @code{nov} to reflect this. This might later be expanded to @code{various}, which will be a mixture -of HEADs and @sc{nov} lines, but this is currently not supported by Gnus. +of HEADs and @acronym{NOV} lines, but this is currently not supported by Gnus. If @var{fetch-old} is non-@code{nil} it says to try fetching ``extra headers'', in some meaning of the word. This is generally done by @@ -25485,10 +25564,10 @@ group-buffer = *active-line / *group-status @item (nnchoke-request-update-info GROUP INFO &optional SERVER) A Gnus group info (@pxref{Group Info}) is handed to the back end for -alterations. This comes in handy if the back end really carries all the -information (as is the case with virtual and imap groups). This +alterations. This comes in handy if the back end really carries all +the information (as is the case with virtual and imap groups). This function should destructively alter the info to suit its needs, and -should return a non-nil value. +should return a non-@code{nil} value. There should be no result data from this function. @@ -25511,7 +25590,7 @@ There should be no result data from this function. Set/remove/add marks on articles. Normally Gnus handles the article marks (such as read, ticked, expired etc) internally, and store them in -@file{~/.newsrc.eld}. Some back ends (such as @sc{imap}) however carry +@file{~/.newsrc.eld}. Some back ends (such as @acronym{IMAP}) however carry all information about the articles on the server, so Gnus need to propagate the mark information to the server. @@ -25568,11 +25647,12 @@ There should be no result data from this function. This function may be called at any time (by Gnus or anything else) to request that the back end check for incoming articles, in one way or -another. A mail back end will typically read the spool file or query the -POP server when this function is invoked. The @var{group} doesn't have -to be heeded---if the back end decides that it is too much work just -scanning for a single group, it may do a total scan of all groups. It -would be nice, however, to keep things local if that's practical. +another. A mail back end will typically read the spool file or query +the @acronym{POP} server when this function is invoked. The +@var{group} doesn't have to be heeded---if the back end decides that +it is too much work just scanning for a single group, it may do a +total scan of all groups. It would be nice, however, to keep things +local if that's practical. There should be no result data from this function. @@ -25834,10 +25914,10 @@ defined now. Below is a slightly shortened version of the @code{nndir} back end. @lisp -;;; nndir.el --- single directory newsgroup access for Gnus -;; Copyright (C) 1995,96 Free Software Foundation, Inc. +;;; @r{nndir.el --- single directory newsgroup access for Gnus} +;; @r{Copyright (C) 1995,96 Free Software Foundation, Inc.} -;;; Code: +;;; @r{Code:} (require 'nnheader) (require 'nnmh) @@ -25865,7 +25945,7 @@ Below is a slightly shortened version of the @code{nndir} back end. (defvoo nndir-status-string "" nil nnmh-status-string) (defconst nndir-version "nndir 1.0") -;;; Interface functions. +;;; @r{Interface functions.} (nnoo-define-basics nndir) @@ -26078,8 +26158,8 @@ manual (@pxref{Score File Format}). @subsection Headers Internally Gnus uses a format for storing article headers that -corresponds to the @sc{nov} format in a mysterious fashion. One could -almost suspect that the author looked at the @sc{nov} specification and +corresponds to the @acronym{NOV} format in a mysterious fashion. One could +almost suspect that the author looked at the @acronym{NOV} specification and just shamelessly @emph{stole} the entire thing, and one would be right. @dfn{Header} is a severely overloaded term. ``Header'' is used in diff --git a/texi/message.texi b/texi/message.texi index 3b86fb6..52982d8 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -309,9 +309,9 @@ constructed. The default value is @code{nil}. @item message-forward-as-mime @vindex message-forward-as-mime If this variable is @code{t} (the default), forwarded messages are -included as inline @sc{mime} RFC822 parts. If it's @code{nil}, forwarded +included as inline @acronym{MIME} RFC822 parts. If it's @code{nil}, forwarded messages will just be copied inline to the new message, like previous, -non @sc{mime}-savvy versions of gnus would do. +non @acronym{MIME}-savvy versions of gnus would do. @item message-forward-before-signature @vindex message-forward-before-signature @@ -502,8 +502,8 @@ better than you do. * Header Commands:: Commands for moving headers or changing headers. * Movement:: Moving around in message buffers. * Insertion:: Inserting things into message buffers. -* MIME:: @sc{mime} considerations. -* IDNA:: Non-ASCII domain name considerations. +* MIME:: @acronym{MIME} considerations. +* IDNA:: Non-@acronym{ASCII} domain name considerations. * Security:: Signing and encrypting messages. * Various Commands:: Various things. * Sending:: Actually sending the message. @@ -819,15 +819,15 @@ See @code{message-mark-insert-begin} and @code{message-mark-insert-end}. @cindex multipart @cindex attachment -Message is a @sc{mime}-compliant posting agent. The user generally -doesn't have to do anything to make the @sc{mime} happen---Message will +Message is a @acronym{MIME}-compliant posting agent. The user generally +doesn't have to do anything to make the @acronym{MIME} happen---Message will automatically add the @code{Content-Type} and @code{Content-Transfer-Encoding} headers. The most typical thing users want to use the multipart things in -@sc{mime} for is to add ``attachments'' to mail they send out. This can +@acronym{MIME} for is to add ``attachments'' to mail they send out. This can be done with the @kbd{C-c C-a} command, which will prompt for a file -name and a @sc{mime} type. +name and a @acronym{MIME} type. You can also create arbitrarily complex multiparts using the MML language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME @@ -839,30 +839,31 @@ Manual}). @cindex internationalized domain names @cindex non-ascii domain names -Message is a @sc{idna}-compliant posting agent. The user generally -doesn't have to do anything to make the @sc{idna} happen---Message -will encode non-ASCII domain names in @code{From}, @code{To}, and -@code{Cc} headers automatically. +Message is a @acronym{IDNA}-compliant posting agent. The user +generally doesn't have to do anything to make the @acronym{IDNA} +happen---Message will encode non-@acronym{ASCII} domain names in @code{From}, +@code{To}, and @code{Cc} headers automatically. -Until IDNA becomes more well known, Message queries you whether IDNA -encoding of the domain name really should occur. Some users might not -be aware that domain names can contain non-ASCII now, so this gives -them a safety net if they accidently typed a non-ASCII domain name. +Until @acronym{IDNA} becomes more well known, Message queries you +whether @acronym{IDNA} encoding of the domain name really should +occur. Some users might not be aware that domain names can contain +non-@acronym{ASCII} now, so this gives them a safety net if they accidently +typed a non-@acronym{ASCII} domain name. @vindex message-use-idna -The @code{message-use-idna} variable control whether @sc{idna} is -used. If the variable is @sc{nil} no IDNA encoding will ever happen, -if it is set to the symbol @sc{ask} the user will be queried (the -default), and if set to @sc{t} IDNA encoding happens automatically. +The @code{message-use-idna} variable control whether @acronym{IDNA} is +used. If the variable is @code{nil} no @acronym{IDNA} encoding will +ever happen, if it is set to the symbol @code{ask} the user will be +queried (the default), and if set to @code{t} @acronym{IDNA} encoding +happens automatically. @findex message-idna-to-ascii-rhs -If you want to experiment with the IDNA encoding, you can invoke -@kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer to have -the non-ASCII domain names encoded while you edit the message. +If you want to experiment with the @acronym{IDNA} encoding, you can +invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer +to have the non-@acronym{ASCII} domain names encoded while you edit the message. -Note that you must have GNU Libidn -(@url{http://www.gnu.org/software/libidn/} installed in order to use -this functionality. +Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU +Libidn} installed in order to use this functionality. @node Security @section Security @@ -876,8 +877,8 @@ this functionality. Using the MML language, Message is able to create digitally signed and digitally encrypted messages. Message (or rather MML) currently -support PGP (RFC 1991), @sc{pgp/mime} (RFC 2015/3156) and @sc{s/mime}. -Instructing MML to perform security operations on a @sc{mime} part is +support @acronym{PGP} (RFC 1991), @acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}. +Instructing MML to perform security operations on a @acronym{MIME} part is done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c C-m c} key map for encryption, as follows. @@ -887,37 +888,37 @@ C-m c} key map for encryption, as follows. @kindex C-c C-m s s @findex mml-secure-message-sign-smime -Digitally sign current message using @sc{s/mime}. +Digitally sign current message using @acronym{S/MIME}. @item C-c C-m s o @kindex C-c C-m s o @findex mml-secure-message-sign-pgp -Digitally sign current message using PGP. +Digitally sign current message using @acronym{PGP}. @item C-c C-m s p @kindex C-c C-m s p @findex mml-secure-message-sign-pgpmime -Digitally sign current message using @sc{pgp/mime}. +Digitally sign current message using @acronym{PGP/MIME}. @item C-c C-m c s @kindex C-c C-m c s @findex mml-secure-message-encrypt-smime -Digitally encrypt current message using @sc{s/mime}. +Digitally encrypt current message using @acronym{S/MIME}. @item C-c C-m c o @kindex C-c C-m c o @findex mml-secure-message-encrypt-pgp -Digitally encrypt current message using PGP. +Digitally encrypt current message using @acronym{PGP}. @item C-c C-m c p @kindex C-c C-m c p @findex mml-secure-message-encrypt-pgpmime -Digitally encrypt current message using @sc{pgp/mime}. +Digitally encrypt current message using @acronym{PGP/MIME}. @item C-c C-m C-n @kindex C-c C-m C-n @@ -930,9 +931,9 @@ These commands do not immediately sign or encrypt the message, they merely insert the proper MML secure tag to instruct the MML engine to perform that operation when the message is actually sent. They may perform other operations too, such as locating and retrieving a -@sc{s/mime} certificate of the person you wish to send encrypted mail +@acronym{S/MIME} certificate of the person you wish to send encrypted mail to. When the mml parsing engine converts your MML into a properly -encoded @sc{mime} message, the secure tag will be replaced with either +encoded @acronym{MIME} message, the secure tag will be replaced with either a part or a multipart tag. If your message contains other mml parts, a multipart tag will be used; if no other parts are present in your message a single part tag will be used. This way, message mode will @@ -958,7 +959,7 @@ example: Will cause Gnus to sign and encrypt in one pass, thus generating a single signed and encrypted part. Note that combined sign and encrypt does not work with all supported OpenPGP implementations (in -particular, PGP version 2 do not support this). +particular, @acronym{PGP} version 2 do not support this). Since signing and especially encryption often is used when sensitive information is sent, you may want to have some way to ensure that your @@ -969,8 +970,8 @@ verify that your long rant about what your ex-significant other or whomever actually did with that funny looking person at that strange party the other night, actually will be sent encrypted. -@emph{Note!} Neither @sc{pgp/mime} nor @sc{s/mime} encrypt/signs -RFC822 headers. They only operate on the @sc{mime} object. Keep this +@emph{Note!} Neither @acronym{PGP/MIME} nor @acronym{S/MIME} encrypt/signs +RFC822 headers. They only operate on the @acronym{MIME} object. Keep this in mind before sending mail with a sensitive Subject line. Actually using the security commands above is not very difficult. At @@ -981,33 +982,33 @@ programs are required to make things work, and some small general hints. @subsection Using S/MIME @emph{Note!} This section assume you have a basic familiarity with -modern cryptography, @sc{s/mime}, various PKCS standards, OpenSSL and +modern cryptography, @acronym{S/MIME}, various PKCS standards, OpenSSL and so on. -The @sc{s/mime} support in Message (and MML) require OpenSSL. OpenSSL -perform the actual @sc{s/mime} sign/encrypt operations. OpenSSL can +The @acronym{S/MIME} support in Message (and MML) require OpenSSL. OpenSSL +perform the actual @acronym{S/MIME} sign/encrypt operations. OpenSSL can be found at @uref{http://www.openssl.org/}. OpenSSL 0.9.6 and later should work. Version 0.9.5a cannot extract mail addresses from -certificates, and it insert a spurious CR character into @sc{mime} +certificates, and it insert a spurious CR character into @acronym{MIME} separators so you may wish to avoid it if you would like to avoid being regarded as someone who send strange mail. (Although by sending -@sc{s/mime} messages you've probably already lost that contest.) +@acronym{S/MIME} messages you've probably already lost that contest.) To be able to send encrypted mail, a personal certificate is not required. Message (MML) need a certificate for the person to whom you wish to communicate with though. You're asked for this when you type @kbd{C-c C-m c s}. Currently there are two ways to retrieve this certificate, from a local file or from DNS. If you chose a local -file, it need to contain a X.509 certificate in PEM format. If you -chose DNS, you're asked for the domain name where the certificate is -stored, the default is a good guess. To my belief, Message (MML) is -the first mail agent in the world to support retrieving @sc{s/mime} -certificates from DNS, so you're not likely to find very many -certificates out there. At least there should be one, stored at the -domain @code{simon.josefsson.org}. LDAP is a more popular method of -distributing certificates, support for it is planned. (Meanwhile, you -can use @code{ldapsearch} from the command line to retrieve a -certificate into a file and use it.) +file, it need to contain a X.509 certificate in @acronym{PEM} format. +If you chose DNS, you're asked for the domain name where the +certificate is stored, the default is a good guess. To my belief, +Message (MML) is the first mail agent in the world to support +retrieving @acronym{S/MIME} certificates from DNS, so you're not +likely to find very many certificates out there. At least there +should be one, stored at the domain @code{simon.josefsson.org}. LDAP +is a more popular method of distributing certificates, support for it +is planned. (Meanwhile, you can use @code{ldapsearch} from the +command line to retrieve a certificate into a file and use it.) As for signing messages, OpenSSL can't perform signing operations without some kind of configuration. Especially, you need to tell it @@ -1019,7 +1020,7 @@ contain a @code{custom} group used for this configuration. So, try Currently there is no support for talking to a CA (or RA) to create your own certificate. None is planned either. You need to do this manually with OpenSSL or using some other program. I used Netscape -and got a free @sc{s/mime} certificate from one of the big CA's on the +and got a free @acronym{S/MIME} certificate from one of the big CA's on the net. Netscape is able to export your private key and certificate in PKCS #12 format. Use OpenSSL to convert this into a plain X.509 certificate in PEM format as follows. @@ -1036,15 +1037,16 @@ care in handling it. @subsection Using PGP/MIME -@sc{pgp/mime} requires an external OpenPGP implementation, such as GNU -Privacy Guard (@uref{http://www.gnupg.org/}). One Emacs interface to -OpenPGP implementations, PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), is -included, but Mailcrypt and Florian Weimer's @code{gpg.el} are also -supported. +@acronym{PGP/MIME} requires an external OpenPGP implementation, such +as @uref{http://www.gnupg.org/, GNU Privacy Guard}. One Emacs +interface to OpenPGP implementations, PGG (@pxref{Top, ,PGG, pgg, PGG +Manual}), is included, but Mailcrypt and Florian Weimer's +@code{gpg.el} are also supported. @vindex gpg-temp-directory Note, if you are using the @code{gpg.el} you must make sure that the -directory specified by @code{gpg-temp-directory} have permissions 0700. +directory specified by @code{gpg-temp-directory} have permissions +0700. Creating your own OpenPGP key is described in detail in the documentation of your OpenPGP implementation, so we refer to it. @@ -1451,9 +1453,9 @@ command line. Doing so would be even more evil than leaving it out. @item message-sendmail-envelope-from @vindex message-sendmail-envelope-from When @code{message-sendmail-f-is-evil} is @code{nil}, this specifies -the address to use in the SMTP envelope. If it is @code{nil}, use -@code{user-mail-address}. If it is the symbol @code{header}, use the -@samp{From} header of the message. +the address to use in the @acronym{SMTP} envelope. If it is +@code{nil}, use @code{user-mail-address}. If it is the symbol +@code{header}, use the @samp{From} header of the message. @item message-mailer-swallows-blank-line @vindex message-mailer-swallows-blank-line @@ -1803,8 +1805,9 @@ signature. So don't remove those characters, even though you might feel that they ruin your beautiful design, like, totally. Also note that no signature should be more than four lines long. -Including ASCII graphics is an efficient way to get everybody to believe -that you are silly and have nothing important to say. +Including @acronym{ASCII} graphics is an efficient way to get +everybody to believe that you are silly and have nothing important to +say. @node Various Message Variables @@ -1814,13 +1817,12 @@ that you are silly and have nothing important to say. @item message-default-charset @vindex message-default-charset @cindex charset -Symbol naming a @sc{mime} charset. Non-ASCII characters in messages are -assumed to be encoded using this charset. The default is @code{nil}, -which means ask the user. (This variable is used only on non-@sc{mule} -Emacsen. -@xref{Charset Translation, , Charset Translation, emacs-mime, - Emacs MIME Manual}, for details on the @sc{mule}-to-@sc{mime} -translation process. +Symbol naming a @acronym{MIME} charset. Non-@acronym{ASCII} +characters in messages are assumed to be encoded using this charset. +The default is @code{nil}, which means ask the user. (This variable +is used only on non-@sc{mule} Emacsen. @xref{Charset Translation, , +Charset Translation, emacs-mime, Emacs MIME Manual}, for details on +the @sc{mule}-to-@acronym{MIME} translation process. @item message-signature-separator @vindex message-signature-separator diff --git a/texi/texi2latex.el b/texi/texi2latex.el index 52eb353..378752e 100644 --- a/texi/texi2latex.el +++ b/texi/texi2latex.el @@ -72,6 +72,7 @@ (latexi-translate-string "@code{\\264}" "@code{\\gnusbackslash{}264}") (latexi-translate-string "@samp{\\Deleted}" "@samp{\\gnusbackslash{}Deleted}") (latexi-translate-string "@samp{\\Seen}" "@samp{\\gnusbackslash{}Seen}") + (latexi-translate-string "@file{c:\\myhome}" "@file{c:\\gnusbackslash{}myhome}") ; (while (re-search-forward "{\"[^\"]*\\(\\\\\\)[^\"]*\"}\\\\" nil t) ; (replace-match "\\verb+\\\\+ " t t)) (while (not (zerop (decf times))) @@ -109,6 +110,14 @@ (if as-a-chapter (latexi-switch-line (format "sub%s" command) arg) (latexi-switch-line command arg))) + ((member command '("heading")) + (if as-a-chapter + (latexi-switch-line "subsection*" arg) + (latexi-switch-line "section*" arg))) + ((member command '("subheading")) + (if as-a-chapter + (latexi-switch-line "subsubsection*" arg) + (latexi-switch-line "subsection*" arg))) ((member command '("chapter")) (if (string-match "Index" arg) (latexi-strip-line) @@ -263,11 +272,13 @@ (latexi-exchange-command (concat "gnus" command) arg)) ((member command '("sc" "file" "dfn" "emph" "kbd" "key" "uref" "code" "samp" "var" "strong" "i" - "result" "acronym" "email")) + "result" "email" "env" "r")) (goto-char (match-beginning 0)) (delete-char 1) (insert "\\gnus")) - ((member command '("copyright" "footnote")) + ((member command '("acronym")) + (latexi-exchange-command (concat "gnus" command) (downcase arg))) + ((member command '("copyright" "footnote" "TeX")) (goto-char (match-beginning 0)) (delete-char 1) (insert "\\"))