mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-47
Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-571 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-572 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-574 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-575 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-576 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-579 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-580 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-31 - miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-33 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-34 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-35 - miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-37 Update from CVS
This commit is contained in:
commit
93952a2d5b
@ -1,3 +1,8 @@
|
||||
2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.in (HAVE_EXECSHIELD): Only define on x86.
|
||||
* configure: Rebuild.
|
||||
|
||||
2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.in: Check for exec-shield.
|
||||
|
18
configure
vendored
18
configure
vendored
@ -4302,7 +4302,7 @@ else
|
||||
fi
|
||||
|
||||
if test "$emacs_cv_execshield" = 1; then
|
||||
# Extract the first word of "setarch", so it can be a program name with args.
|
||||
# Extract the first word of "setarch", so it can be a program name with args.
|
||||
set dummy setarch; ac_word=$2
|
||||
echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
||||
@ -4343,13 +4343,25 @@ echo "${ECHO_T}no" >&6
|
||||
fi
|
||||
|
||||
|
||||
if test "$setarch" != no; then
|
||||
if test "$setarch" != no && test "$machine" = "intel386"; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_EXECSHIELD 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
else
|
||||
case "`cat /proc/sys/kernel/exec-shield`" in
|
||||
0) ;;
|
||||
*)
|
||||
{ { echo "$as_me:$LINENO: error: Exec-shield is turned on.
|
||||
Emacs can not dump itself if exec-shield is turned on.
|
||||
See \`etc/PROBLEMS' for further information." >&5
|
||||
echo "$as_me: error: Exec-shield is turned on.
|
||||
Emacs can not dump itself if exec-shield is turned on.
|
||||
See \`etc/PROBLEMS' for further information." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
#### Extract some information from the operating system and machine files.
|
||||
|
21
configure.in
21
configure.in
@ -1288,13 +1288,22 @@ AC_AIX
|
||||
|
||||
dnl check if exec-shield is present.
|
||||
AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1,
|
||||
emacs_cv_execshield=0)
|
||||
emacs_cv_execshield=0)
|
||||
if test "$emacs_cv_execshield" = 1; then
|
||||
AC_PATH_PROG(SETARCH, setarch, no)
|
||||
AC_SUBST(SETARCH)
|
||||
if test "$setarch" != no; then
|
||||
AC_DEFINE(HAVE_EXECSHIELD, 1, [Define to 1 if this OS has exec shield.])
|
||||
fi
|
||||
AC_PATH_PROG(SETARCH, setarch, no)
|
||||
AC_SUBST(SETARCH)
|
||||
if test "$setarch" != no && test "$machine" = "intel386"; then
|
||||
AC_DEFINE(HAVE_EXECSHIELD, 1,
|
||||
[Define to 1 if this OS has exec shield and we can handle it.])
|
||||
else
|
||||
case "`cat /proc/sys/kernel/exec-shield`" in
|
||||
0) ;;
|
||||
*)
|
||||
AC_MSG_ERROR([Exec-shield is turned on.
|
||||
Emacs can not dump itself if exec-shield is turned on.
|
||||
See `etc/PROBLEMS' for further information.])
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
#### Extract some information from the operating system and machine files.
|
||||
|
@ -1,3 +1,18 @@
|
||||
2004-09-26 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* enriched.doc: `enriched-annotation-alist' is now called
|
||||
`enriched-translations'.
|
||||
|
||||
2004-09-26 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* e/eterm.ti: Comment out smcup, rmcup. Add kbs, kdch1, rc, sc.
|
||||
Reformat.
|
||||
* e/eterm: Regenerate.
|
||||
|
||||
2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* PROBLEMS: Updated exec-shield description.
|
||||
|
||||
2004-09-16 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* e/eterm.ti: Change the strings for smso and rmso.
|
||||
|
1
etc/NEWS
1
etc/NEWS
@ -2330,6 +2330,7 @@ configuration files.
|
||||
|
||||
* Lisp Changes in Emacs 21.4
|
||||
|
||||
+++
|
||||
** Major mode functions now run the new normal hook
|
||||
`after-change-major-mode-hook', at their very end, after the mode hooks.
|
||||
|
||||
|
22
etc/PROBLEMS
22
etc/PROBLEMS
@ -2333,28 +2333,34 @@ The fix is to install a newer version of ncurses, such as version 4.2.
|
||||
*** Linux: Segfault during `make bootstrap' under certain recent versions of the Linux kernel.
|
||||
|
||||
With certain recent Linux kernels (like the one of Redhat Fedora Core
|
||||
1), the new "Exec-shield" functionality is enabled by default, which
|
||||
1 and 2), the new "Exec-shield" functionality is enabled by default, which
|
||||
creates a different memory layout that breaks the emacs dumper.
|
||||
|
||||
Configure can overcome the problem of exec-shield if the architecture is
|
||||
x86 and the program setarch is present. On other architectures no
|
||||
workaround is known.
|
||||
|
||||
You can check the Exec-shield state like this:
|
||||
|
||||
cat /proc/sys/kernel/exec-shield
|
||||
|
||||
It returns 1 or 2 when Exec-shield is enabled, 0 otherwise. Please
|
||||
It returns non-zero when Exec-shield is enabled, 0 otherwise. Please
|
||||
read your system documentation for more details on Exec-shield and
|
||||
associated commands.
|
||||
associated commands. Exec-shield can be turned off with this command:
|
||||
|
||||
echo "0" > /proc/sys/kernel/exec-shield
|
||||
|
||||
When Exec-shield is enabled, building Emacs will segfault during the
|
||||
execution of this command:
|
||||
|
||||
temacs --batch --load loadup [dump|bootstrap]
|
||||
./temacs --batch --load loadup [dump|bootstrap]
|
||||
|
||||
To work around this problem, it is necessary to temporarily disable
|
||||
Exec-shield while building Emacs, using the `setarch' command like
|
||||
this:
|
||||
Exec-shield while building Emacs, or, on x86, by using the `setarch'
|
||||
command when running temacs like this:
|
||||
|
||||
setarch i386 ./temacs --batch --load loadup [dump|bootstrap]
|
||||
|
||||
setarch i386 ./configure <configure parameters>
|
||||
setarch i386 make <make parameters>
|
||||
|
||||
*** Fatal signal in the command temacs -l loadup inc dump.
|
||||
|
||||
|
@ -1,21 +1,61 @@
|
||||
eterm,
|
||||
lines#24,cols#80,
|
||||
colors#8,pairs#64,
|
||||
cuu1=\E[A,cud1=\n,cub1=\b,cuf1=\E[C,home=\E[H,cr=\r,
|
||||
cuu=\E[%p1%dA,cud=\E[%p1%dB,cub=\E[%p1%dD,cuf=\E[%p1%dC,
|
||||
colors#8,
|
||||
cols#80,
|
||||
lines#24,
|
||||
pairs#64,
|
||||
am,
|
||||
mir,
|
||||
xenl,
|
||||
bel=^G,
|
||||
bold=\E[1m,
|
||||
clear=\E[H\E[J,
|
||||
cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
cub1=\b,
|
||||
cub=\E[%p1%dD,
|
||||
cud1=\n,
|
||||
cud=\E[%p1%dB,
|
||||
cuf1=\E[C,
|
||||
cuf=\E[%p1%dC,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
ind=\n,csr=\E[%i%p1%d;%p2%dr,
|
||||
il1=\E[L,il=\E[%p1%dL,
|
||||
clear=\E[H\E[J,ed=\E[J,el=\E[K,el1=\E[1K,
|
||||
dl1=\E[M,dl=\E[%p1%dM,dch1=\E[P,dch=\E[%p1%dP,
|
||||
smir=\E[4h,rmir=\E[4l,ich=\E[%p1%d@,mir,
|
||||
smcup=\E7\E[?47h,rmcup=\E[2J\E[?47l\E8,
|
||||
ht=\t,khome=\E[1~,kend=\E[4~,knp=\E[6~,kpp=\E[5~,
|
||||
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
|
||||
smso=\E[7m,rmso=\E[27m,
|
||||
smul=\E[4m,rmul=\E[24m,
|
||||
rev=\E[7m,bold=\E[1m,sgr0=\E[m,
|
||||
invis=\E[8m,op=\E[39;49m,
|
||||
setab=\E[%p1%{40}%+%dm, setaf=\E[%p1%{30}%+%dm,
|
||||
bel=^G,xenl,am,
|
||||
|
||||
cuu1=\E[A,
|
||||
cuu=\E[%p1%dA,
|
||||
dch1=\E[P,
|
||||
dch=\E[%p1%dP,
|
||||
dl1=\E[M,
|
||||
dl=\E[%p1%dM,
|
||||
ed=\E[J,
|
||||
el1=\E[1K,
|
||||
el=\E[K,
|
||||
home=\E[H,
|
||||
ht=\t,
|
||||
ich=\E[%p1%d@,
|
||||
il1=\E[L,
|
||||
il=\E[%p1%dL,
|
||||
ind=\n,
|
||||
invis=\E[8m,
|
||||
kbs=^?,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kdch1=\E[3~,
|
||||
kend=\E[4~,
|
||||
khome=\E[1~,
|
||||
knp=\E[6~,
|
||||
kpp=\E[5~,
|
||||
op=\E[39;49m,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
rmir=\E[4l,
|
||||
rmso=\E[27m,
|
||||
rmul=\E[24m,
|
||||
sc=\E7,
|
||||
setab=\E[%p1%{40}%+%dm,
|
||||
setaf=\E[%p1%{30}%+%dm,
|
||||
sgr0=\E[m,
|
||||
smir=\E[4h,
|
||||
smul=\E[4m,
|
||||
smso=\E[7m,
|
||||
# smcup=\E[?47h,
|
||||
# rmcup=\E[?47l,
|
||||
|
@ -196,11 +196,11 @@ FTP or email may be obtained by sending an email message to
|
||||
enriched-verbose.
|
||||
|
||||
</fixed></indent>-<indent> You can add annotations for your own text properties by making
|
||||
additions to <fixed>enriched-annotation-alist</fixed>. Note that the
|
||||
standard requires you to name your annotation starting<italic> "x-"
|
||||
</italic>(as in <italic>"x-read-only"</italic>). Please send me any such additions that
|
||||
you think might be of general interest so that I can include
|
||||
them in the distribution.</indent>
|
||||
additions to <fixed>enriched-translations</fixed>. Note that the standard
|
||||
requires you to name your annotation starting<italic> "x-" </italic>(as in
|
||||
<italic>"x-read-only"</italic>). Please send me any such additions that you
|
||||
think might be of general interest so that I can include them
|
||||
in the distribution.</indent>
|
||||
|
||||
</indent>
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-09-25 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* quail/uni-input.el (ucs-input-method): Add error clause to
|
||||
condition-case.
|
||||
|
||||
2004-09-21 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* quail/uni-input.el: Move the call of register-input-method to
|
||||
|
@ -1,6 +1,79 @@
|
||||
2004-09-28 Stefan <monnier@iro.umontreal.ca>
|
||||
|
||||
* dired.el (dired-view-command-alist): Use more efficient regexps.
|
||||
Remove dubious arguments.
|
||||
(dired-align-file): New function.
|
||||
(dired-insert-directory): Use it.
|
||||
(dired-move-to-end-of-filename): Make the " -> " search more specific.
|
||||
(dired-buffers-for-dir): Remove unused var `pattern'.
|
||||
|
||||
2004-09-29 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* progmodes/gdb-ui.el (breakpoint): Define as fringe bitmap.
|
||||
(gdb-mouse-toggle-breakpoint): Fix fringe-bitmaps-at-pos usage.
|
||||
(gdb-put-breakpoint-icon): Use breakpoint bitmap.
|
||||
|
||||
* fringe.el (fringe-bitmap-p): New macro.
|
||||
(fringe-bitmaps): Add standard fringe bitmaps on load.
|
||||
|
||||
2004-09-28 Matthew Mundell <matt@mundell.ukfsn.org> (tiny change)
|
||||
|
||||
* calendar/diary-lib.el (list-diary-entries): Save diary buffer
|
||||
from diary display excursion. Store diary buffer's point for
|
||||
`simple-diary-display'.
|
||||
(simple-diary-display): Set window point and start when
|
||||
displaying buffer, to preserve point.
|
||||
|
||||
2004-09-27 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* textmodes/enriched.el (enriched-translations): Replace defconst
|
||||
with defvar.
|
||||
|
||||
2004-09-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
|
||||
* printing.el: Doc fix.
|
||||
(pr-version): New version number (6.8.1).
|
||||
(pr-ps-file-using-ghostscript): Use make-temp-file instead of
|
||||
make-temp-name.
|
||||
(pr-delete-file): Check if file exists before deleting it. Reported by
|
||||
Lennart Borgman <lennart.borgman.073@student.lu.se>.
|
||||
|
||||
2004-09-26 Stefan <monnier@iro.umontreal.ca>
|
||||
|
||||
* term.el (term-display-table): New variable.
|
||||
(term-mode): Use it.
|
||||
(term-exec-1): Set the coding system to binary.
|
||||
(term-emulate-terminal): Decode the string before inserting it.
|
||||
|
||||
2004-09-26 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* term.el (term-ansi-at-eval-string, term-ansi-default-fg)
|
||||
(term-ansi-default-bg, term-ansi-current-temp): Delete unused
|
||||
vars.
|
||||
(map): Bind S-prior, S-next and S-insert.
|
||||
(term-mode): Set `indent-tabs-mode' to nil.
|
||||
(term-paste): New function to be bound to S-insert.
|
||||
(term-send-del, term-send-backspace): Change the strings sent.
|
||||
(term-termcap-format): Synchronyze with etc/e/eterm.ti.
|
||||
(term-handle-colors-array): Fix handling of underline and reverse.
|
||||
(term-handle-ansi-escape): Do not handle smcup/rmcup. Add
|
||||
comments.
|
||||
(term-erase-in-line): Fix comparison.
|
||||
(term-emulate-terminal): Fix line wrap handling.
|
||||
(term-start-output-log): Renamed from `term-set-output-log'.
|
||||
(term-stop-output-log): Renamed from `term-stop-photo'.
|
||||
(term-switch-to-alternate-sub-buffer): Comment out, unused.
|
||||
|
||||
2004-09-25 Stefan <monnier@iro.umontreal.ca>
|
||||
|
||||
* dired.el (dired-move-to-filename): Don't output a message if
|
||||
raise-error is non-nil. Fix return position and value.
|
||||
|
||||
* files.el (insert-directory): Obey --dired even with symlinks.
|
||||
|
||||
2004-09-25 Lars Hansen <larsh@math.ku.dk>
|
||||
|
||||
* ls-lisp.el (ls-lisp-format): Mark file names with poperty
|
||||
* ls-lisp.el (ls-lisp-format): Mark file names with property
|
||||
dired-filename.
|
||||
|
||||
2004-09-25 Kim F. Storm <storm@cua.dk>
|
||||
@ -21,8 +94,8 @@
|
||||
it, and show completions.
|
||||
(ido-all-completions): Let bind ido-directory-too-big to nil.
|
||||
(ido-exhibit): Handle ido-directory-too-big.
|
||||
(ido-read-buffer): Handle fallback to read-buffer. Init
|
||||
ido-directory-too-big.
|
||||
(ido-read-buffer): Handle fallback to read-buffer.
|
||||
Init ido-directory-too-big.
|
||||
(ido-read-file-name, ido-read-directory-name, ido-completing-read):
|
||||
Init ido-directory-too-big.
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
;; Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
|
||||
;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
|
||||
;; Keywords: calendar
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
@ -296,6 +297,8 @@ Only used if `diary-header-line-flag' is non-nil."
|
||||
:type 'sexp
|
||||
:version "21.4")
|
||||
|
||||
(defvar diary-saved-point) ; internal
|
||||
|
||||
(defun list-diary-entries (date number)
|
||||
"Create and display a buffer containing the relevant lines in diary-file.
|
||||
The arguments are DATE and NUMBER; the entries selected are those
|
||||
@ -345,112 +348,116 @@ These hooks have the following distinct roles:
|
||||
(set-buffer diary-buffer)
|
||||
(or (verify-visited-file-modtime diary-buffer)
|
||||
(revert-buffer t t))))
|
||||
(setq file-glob-attrs (nth 1 (diary-pull-attrs nil "")))
|
||||
(setq selective-display t)
|
||||
(setq selective-display-ellipses nil)
|
||||
(if diary-header-line-flag
|
||||
(setq header-line-format diary-header-line-format))
|
||||
(setq old-diary-syntax-table (syntax-table))
|
||||
(set-syntax-table diary-syntax-table)
|
||||
(unwind-protect
|
||||
(let ((buffer-read-only nil)
|
||||
(diary-modified (buffer-modified-p))
|
||||
(mark (regexp-quote diary-nonmarking-symbol)))
|
||||
;; First and last characters must be ^M or \n for
|
||||
;; selective display to work properly
|
||||
(goto-char (1- (point-max)))
|
||||
(if (not (looking-at "\^M\\|\n"))
|
||||
(progn
|
||||
(goto-char (point-max))
|
||||
(insert "\^M")))
|
||||
(goto-char (point-min))
|
||||
(if (not (looking-at "\^M\\|\n"))
|
||||
(insert "\^M"))
|
||||
(subst-char-in-region (point-min) (point-max) ?\n ?\^M t)
|
||||
(calendar-for-loop i from 1 to number do
|
||||
(let ((d diary-date-forms)
|
||||
(month (extract-calendar-month date))
|
||||
(day (extract-calendar-day date))
|
||||
(year (extract-calendar-year date))
|
||||
(entry-found (list-sexp-diary-entries date)))
|
||||
(while d
|
||||
(let*
|
||||
((date-form (if (equal (car (car d)) 'backup)
|
||||
(cdr (car d))
|
||||
(car d)))
|
||||
(backup (equal (car (car d)) 'backup))
|
||||
(dayname
|
||||
(format "%s\\|%s\\.?"
|
||||
(calendar-day-name date)
|
||||
(calendar-day-name date 'abbrev)))
|
||||
(monthname
|
||||
(format "\\*\\|%s\\|%s\\.?"
|
||||
(calendar-month-name month)
|
||||
(calendar-month-name month 'abbrev)))
|
||||
(month (concat "\\*\\|0*" (int-to-string month)))
|
||||
(day (concat "\\*\\|0*" (int-to-string day)))
|
||||
(year
|
||||
(concat
|
||||
"\\*\\|0*" (int-to-string year)
|
||||
(if abbreviated-calendar-year
|
||||
(concat "\\|" (format "%02d" (% year 100)))
|
||||
"")))
|
||||
(regexp
|
||||
(concat
|
||||
"\\(\\`\\|\^M\\|\n\\)" mark "?\\("
|
||||
(mapconcat 'eval date-form "\\)\\(")
|
||||
"\\)"))
|
||||
(case-fold-search t))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(if backup (re-search-backward "\\<" nil t))
|
||||
(if (and (or (char-equal (preceding-char) ?\^M)
|
||||
(char-equal (preceding-char) ?\n))
|
||||
(not (looking-at " \\|\^I")))
|
||||
;; Diary entry that consists only of date.
|
||||
(backward-char 1)
|
||||
;; Found a nonempty diary entry--make it visible and
|
||||
;; add it to the list.
|
||||
(setq entry-found t)
|
||||
(let ((entry-start (point))
|
||||
date-start temp)
|
||||
(re-search-backward "\^M\\|\n\\|\\`")
|
||||
(setq date-start (point))
|
||||
(re-search-forward "\^M\\|\n" nil t 2)
|
||||
(while (looking-at " \\|\^I")
|
||||
(re-search-forward "\^M\\|\n" nil t))
|
||||
(backward-char 1)
|
||||
(subst-char-in-region date-start
|
||||
(point) ?\^M ?\n t)
|
||||
(setq entry (buffer-substring entry-start (point))
|
||||
temp (diary-pull-attrs entry file-glob-attrs)
|
||||
entry (nth 0 temp))
|
||||
(add-to-diary-list
|
||||
date
|
||||
entry
|
||||
(buffer-substring
|
||||
(1+ date-start) (1- entry-start))
|
||||
(copy-marker entry-start) (nth 1 temp))))))
|
||||
(setq d (cdr d)))
|
||||
(or entry-found
|
||||
(not diary-list-include-blanks)
|
||||
(setq diary-entries-list
|
||||
(append diary-entries-list
|
||||
(list (list date "" "" "" "")))))
|
||||
(setq date
|
||||
(calendar-gregorian-from-absolute
|
||||
(1+ (calendar-absolute-from-gregorian date))))
|
||||
(setq entry-found nil)))
|
||||
(set-buffer-modified-p diary-modified))
|
||||
(set-syntax-table old-diary-syntax-table))
|
||||
(goto-char (point-min))
|
||||
(run-hooks 'nongregorian-diary-listing-hook
|
||||
'list-diary-entries-hook)
|
||||
(if diary-display-hook
|
||||
(run-hooks 'diary-display-hook)
|
||||
(simple-diary-display))
|
||||
(run-hooks 'diary-hook)
|
||||
diary-entries-list))))
|
||||
;; d-s-p is passed to the diary display function.
|
||||
(let ((diary-saved-point (point)))
|
||||
(save-excursion
|
||||
(setq file-glob-attrs (nth 1 (diary-pull-attrs nil "")))
|
||||
(setq selective-display t)
|
||||
(setq selective-display-ellipses nil)
|
||||
(if diary-header-line-flag
|
||||
(setq header-line-format diary-header-line-format))
|
||||
(setq old-diary-syntax-table (syntax-table))
|
||||
(set-syntax-table diary-syntax-table)
|
||||
(unwind-protect
|
||||
(let ((buffer-read-only nil)
|
||||
(diary-modified (buffer-modified-p))
|
||||
(mark (regexp-quote diary-nonmarking-symbol)))
|
||||
;; First and last characters must be ^M or \n for
|
||||
;; selective display to work properly
|
||||
(goto-char (1- (point-max)))
|
||||
(if (not (looking-at "\^M\\|\n"))
|
||||
(progn
|
||||
(goto-char (point-max))
|
||||
(insert "\^M")))
|
||||
(goto-char (point-min))
|
||||
(if (not (looking-at "\^M\\|\n"))
|
||||
(insert "\^M"))
|
||||
(subst-char-in-region (point-min) (point-max) ?\n ?\^M t)
|
||||
(calendar-for-loop
|
||||
i from 1 to number do
|
||||
(let ((d diary-date-forms)
|
||||
(month (extract-calendar-month date))
|
||||
(day (extract-calendar-day date))
|
||||
(year (extract-calendar-year date))
|
||||
(entry-found (list-sexp-diary-entries date)))
|
||||
(while d
|
||||
(let*
|
||||
((date-form (if (equal (car (car d)) 'backup)
|
||||
(cdr (car d))
|
||||
(car d)))
|
||||
(backup (equal (car (car d)) 'backup))
|
||||
(dayname
|
||||
(format "%s\\|%s\\.?"
|
||||
(calendar-day-name date)
|
||||
(calendar-day-name date 'abbrev)))
|
||||
(monthname
|
||||
(format "\\*\\|%s\\|%s\\.?"
|
||||
(calendar-month-name month)
|
||||
(calendar-month-name month 'abbrev)))
|
||||
(month (concat "\\*\\|0*" (int-to-string month)))
|
||||
(day (concat "\\*\\|0*" (int-to-string day)))
|
||||
(year
|
||||
(concat
|
||||
"\\*\\|0*" (int-to-string year)
|
||||
(if abbreviated-calendar-year
|
||||
(concat "\\|" (format "%02d" (% year 100)))
|
||||
"")))
|
||||
(regexp
|
||||
(concat
|
||||
"\\(\\`\\|\^M\\|\n\\)" mark "?\\("
|
||||
(mapconcat 'eval date-form "\\)\\(")
|
||||
"\\)"))
|
||||
(case-fold-search t))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(if backup (re-search-backward "\\<" nil t))
|
||||
(if (and (or (char-equal (preceding-char) ?\^M)
|
||||
(char-equal (preceding-char) ?\n))
|
||||
(not (looking-at " \\|\^I")))
|
||||
;; Diary entry that consists only of date.
|
||||
(backward-char 1)
|
||||
;; Found a nonempty diary entry--make it
|
||||
;; visible and add it to the list.
|
||||
(setq entry-found t)
|
||||
(let ((entry-start (point))
|
||||
date-start temp)
|
||||
(re-search-backward "\^M\\|\n\\|\\`")
|
||||
(setq date-start (point))
|
||||
(re-search-forward "\^M\\|\n" nil t 2)
|
||||
(while (looking-at " \\|\^I")
|
||||
(re-search-forward "\^M\\|\n" nil t))
|
||||
(backward-char 1)
|
||||
(subst-char-in-region date-start
|
||||
(point) ?\^M ?\n t)
|
||||
(setq entry (buffer-substring entry-start (point))
|
||||
temp (diary-pull-attrs entry file-glob-attrs)
|
||||
entry (nth 0 temp))
|
||||
(add-to-diary-list
|
||||
date
|
||||
entry
|
||||
(buffer-substring
|
||||
(1+ date-start) (1- entry-start))
|
||||
(copy-marker entry-start) (nth 1 temp))))))
|
||||
(setq d (cdr d)))
|
||||
(or entry-found
|
||||
(not diary-list-include-blanks)
|
||||
(setq diary-entries-list
|
||||
(append diary-entries-list
|
||||
(list (list date "" "" "" "")))))
|
||||
(setq date
|
||||
(calendar-gregorian-from-absolute
|
||||
(1+ (calendar-absolute-from-gregorian date))))
|
||||
(setq entry-found nil)))
|
||||
(set-buffer-modified-p diary-modified))
|
||||
(set-syntax-table old-diary-syntax-table))
|
||||
(goto-char (point-min))
|
||||
(run-hooks 'nongregorian-diary-listing-hook
|
||||
'list-diary-entries-hook)
|
||||
(if diary-display-hook
|
||||
(run-hooks 'diary-display-hook)
|
||||
(simple-diary-display))
|
||||
(run-hooks 'diary-hook)
|
||||
diary-entries-list))))))
|
||||
|
||||
(defun include-other-diary-files ()
|
||||
"Include the diary entries from other diary files with those of diary-file.
|
||||
@ -528,8 +535,12 @@ changing the variable `diary-include-string'."
|
||||
(setq buffer-read-only t)
|
||||
(display-buffer holiday-buffer)
|
||||
(message "No diary entries for %s" date-string))
|
||||
(display-buffer (find-buffer-visiting
|
||||
(substitute-in-file-name diary-file)))
|
||||
(with-current-buffer
|
||||
(find-buffer-visiting (substitute-in-file-name diary-file))
|
||||
(let ((window (display-buffer (current-buffer))))
|
||||
;; d-s-p is passed from list-diary-entries.
|
||||
(set-window-point window diary-saved-point)
|
||||
(set-window-start window (point-min))))
|
||||
(message "Preparing diary...done"))))
|
||||
|
||||
(defface diary-button-face '((((type pc) (class color))
|
||||
|
134
lisp/dired.el
134
lisp/dired.el
@ -202,10 +202,11 @@ with the buffer narrowed to the listing."
|
||||
|
||||
;; Fixme: This should use mailcap.
|
||||
(defcustom dired-view-command-alist
|
||||
'(("[.]\\(ps\\|ps_pages\\|eps\\)\\'" . "gv -spartan -color -watch %s")
|
||||
("[.]pdf\\'" . "xpdf %s")
|
||||
("[.]\\(jpe?g\\|gif\\|png\\)\\'" . "eog %s")
|
||||
("[.]dvi\\'" . "xdvi -sidemargin 0.5 -topmargin 1 %s"))
|
||||
'(("\\.\\(ps\\|ps_pages\\|eps\\)\\'" . "gv %s")
|
||||
("\\.pdf\\'" . "xpdf %s")
|
||||
;; ("\\.pod\\'" . "perldoc %s")
|
||||
("\\.\\(jpe?g\\|gif\\|png\\)\\'" . "eog %s")
|
||||
("\\.dvi\\'" . "xdvi %s"))
|
||||
"Alist specifying how to view special types of files.
|
||||
Each element has the form (REGEXP . SHELL-COMMAND).
|
||||
When the file name matches REGEXP, `dired-view-file'
|
||||
@ -797,6 +798,112 @@ wildcards, erases the buffer, and builds the subdir-alist anew
|
||||
(dired-insert-directory dir dired-actual-switches
|
||||
file-list (not file-list) t)))))
|
||||
|
||||
(defun dired-align-file (beg end)
|
||||
"Align the fields of a file to the ones of surrounding lines.
|
||||
BEG..END is the line where the file info is located."
|
||||
;; Some versions of ls try to adjust the size of each field so as to just
|
||||
;; hold the largest element ("largest" in the current invocation, of
|
||||
;; course). So when a single line is output, the size of each field is
|
||||
;; just big enough for that one output. Thus when dired refreshes one
|
||||
;; line, the alignment if this line w.r.t the rest is messed up because
|
||||
;; the fields of that one line will generally be smaller.
|
||||
;;
|
||||
;; To work around this problem, we here add spaces to try and re-align the
|
||||
;; fields as needed. Since this is purely aesthetic, it is of utmost
|
||||
;; importance that it doesn't mess up anything like
|
||||
;; `dired-move-to-filename'. To this end, we limit ourselves to adding
|
||||
;; spaces only, and to only add them at places where there was already at
|
||||
;; least one space. This way, as long as `dired-move-to-filename-regexp'
|
||||
;; always matches spaces with "*" or "+", we know we haven't made anything
|
||||
;; worse. There is one spot where the exact number of spaces is
|
||||
;; important, which is just before the actual filename, so we refrain from
|
||||
;; adding spaces there (and within the filename as well, of course).
|
||||
(save-excursion
|
||||
(let (file file-col other other-col)
|
||||
;; Check the there is indeed a file, and that there is anoter adjacent
|
||||
;; file with which to align, and that additional spaces are needed to
|
||||
;; align the filenames.
|
||||
(when (and (setq file (progn (goto-char beg)
|
||||
(dired-move-to-filename nil end)))
|
||||
(setq file-col (current-column))
|
||||
(setq other
|
||||
(or (and (goto-char beg)
|
||||
(zerop (forward-line -1))
|
||||
(dired-move-to-filename))
|
||||
(and (goto-char beg)
|
||||
(zerop (forward-line 1))
|
||||
(dired-move-to-filename))))
|
||||
(setq other-col (current-column))
|
||||
(/= file other)
|
||||
;; Make sure there is some work left to do.
|
||||
(> other-col file-col))
|
||||
;; If we've only looked at the line above, check to see if the line
|
||||
;; below exists as well and if so, align with the shorter one.
|
||||
(when (and (< other file)
|
||||
(goto-char beg)
|
||||
(zerop (forward-line 1))
|
||||
(dired-move-to-filename))
|
||||
(let ((alt-col (current-column)))
|
||||
(when (< alt-col other-col)
|
||||
(setq other-col alt-col)
|
||||
(setq other (point)))))
|
||||
;; Keep positions uptodate when we insert stuff.
|
||||
(if (> other file) (setq other (copy-marker other)))
|
||||
(setq file (copy-marker file))
|
||||
;; Main loop.
|
||||
(goto-char beg)
|
||||
(while (and (> other-col file-col)
|
||||
(skip-chars-forward "^ ")
|
||||
;; Skip the spaces, and make sure there's at least one.
|
||||
(> (skip-chars-forward " ") 0)
|
||||
;; Don't touch anything just before (and after) the
|
||||
;; beginning of the filename.
|
||||
(> file (point)))
|
||||
;; We're now just in front of a field, with a space behind us.
|
||||
(let* ((curcol (current-column))
|
||||
;; Nums are right-aligned.
|
||||
(num-align (looking-at "[0-9]"))
|
||||
;; Let's look at the other line, in the same column: we
|
||||
;; should be either near the end of the previous field, or
|
||||
;; in the space between that field and the next.
|
||||
;; [ Of course, it's also possible that we're already within
|
||||
;; the next field or even past it, but that's unlikely since
|
||||
;; other-col > file-col. ]
|
||||
;; Let's find the distance to the alignment-point (either
|
||||
;; the beginning or the end of the next field, depending on
|
||||
;; whether this field is left or right aligned).
|
||||
(align-pt-offset
|
||||
(save-excursion
|
||||
(goto-char other)
|
||||
(move-to-column curcol)
|
||||
(when (looking-at
|
||||
(concat
|
||||
(if (eq (char-before) ?\ ) " *" "[^ ]* *")
|
||||
(if num-align "[0-9][^ ]*")))
|
||||
(- (match-end 0) (match-beginning 0)))))
|
||||
;; Now, the number of spaces to insert is align-pt-offset
|
||||
;; minus the distance to the equivalent point on the
|
||||
;; current line.
|
||||
(spaces
|
||||
(if (not num-align)
|
||||
align-pt-offset
|
||||
(and align-pt-offset
|
||||
(save-excursion
|
||||
(skip-chars-forward "^ ")
|
||||
(- align-pt-offset (- (current-column) curcol)))))))
|
||||
(when (and spaces (> spaces 0))
|
||||
(setq file-col (+ spaces file-col))
|
||||
(if (> file-col other-col)
|
||||
(setq spaces (- spaces (- file-col other-col))))
|
||||
(insert-char ?\s spaces)
|
||||
;; Let's just make really sure we did not mess up.
|
||||
(unless (save-excursion
|
||||
(equal (dired-move-to-filename) (marker-position file)))
|
||||
;; Damn! We messed up: let's revert the change.
|
||||
(delete-char (- spaces))))))
|
||||
(set-marker file nil)))))
|
||||
|
||||
|
||||
(defun dired-insert-directory (dir switches &optional file-list wildcard hdr)
|
||||
"Insert a directory listing of DIR, Dired style.
|
||||
Use SWITCHES to make the listings.
|
||||
@ -815,7 +922,10 @@ If HDR is non-nil, insert a header line with the directory name."
|
||||
;; with the new value of dired-move-to-filename-regexp.
|
||||
(if file-list
|
||||
(dolist (f file-list)
|
||||
(insert-directory f switches nil nil))
|
||||
(let ((beg (point)))
|
||||
(insert-directory f switches nil nil)
|
||||
;; Re-align fields, if necessary.
|
||||
(dired-align-file beg (point))))
|
||||
(insert-directory dir switches wildcard (not wildcard)))
|
||||
;; Quote certain characters, unless ls quoted them for us.
|
||||
(if (not (string-match "b" dired-actual-switches))
|
||||
@ -1762,6 +1872,8 @@ regardless of the language.")
|
||||
;; Move to first char of filename on this line.
|
||||
;; Returns position (point) or nil if no filename on this line."
|
||||
(defun dired-move-to-filename (&optional raise-error eol)
|
||||
"Move to the beginning of the filename on the current line.
|
||||
Return the position of the beginning of the filename, or nil if none found."
|
||||
;; This is the UNIX version.
|
||||
(or eol (setq eol (line-end-position)))
|
||||
(beginning-of-line)
|
||||
@ -1774,8 +1886,10 @@ regardless of the language.")
|
||||
(goto-char (match-end 0)))
|
||||
((re-search-forward dired-permission-flags-regexp eol t)
|
||||
;; Ha! There *is* a file. Our regexp-from-hell just failed to find it.
|
||||
(funcall (if raise-error 'error 'message)
|
||||
"Unrecognized line! Check dired-move-to-filename-regexp"))
|
||||
(if raise-error
|
||||
(error "Unrecognized line! Check dired-move-to-filename-regexp"))
|
||||
(beginning-of-line)
|
||||
nil)
|
||||
(raise-error
|
||||
(error "No file on this line")))))
|
||||
|
||||
@ -1818,9 +1932,9 @@ regardless of the language.")
|
||||
(or no-error (error "No file on this line"))))
|
||||
;; Move point to end of name:
|
||||
(if symlink
|
||||
(if (search-forward " ->" eol t)
|
||||
(if (search-forward " -> " eol t)
|
||||
(progn
|
||||
(forward-char -3)
|
||||
(forward-char -4)
|
||||
(and used-F
|
||||
dired-ls-F-marks-symlinks
|
||||
(eq (preceding-char) ?@) ;; did ls really mark the link?
|
||||
@ -1885,7 +1999,7 @@ You can then feed the file name(s) to other commands with \\[yank]."
|
||||
;; As a side effect, killed dired buffers for DIR are removed from
|
||||
;; dired-buffers.
|
||||
(setq dir (file-name-as-directory dir))
|
||||
(let ((alist dired-buffers) result elt buf pattern)
|
||||
(let ((alist dired-buffers) result elt buf)
|
||||
(while alist
|
||||
(setq elt (car alist)
|
||||
buf (cdr elt))
|
||||
|
@ -4376,7 +4376,8 @@ normally equivalent short `-D' option is just passed on to
|
||||
(while (< (point) end)
|
||||
(let ((start (+ beg (read (current-buffer))))
|
||||
(end (+ beg (read (current-buffer)))))
|
||||
(if (= (char-after end) ?\n)
|
||||
(if (memq (char-after end) '(?\n ?\ ))
|
||||
;; End is followed by \n or by " -> ".
|
||||
(put-text-property start end 'dired-filename t)
|
||||
;; It seems that we can't trust ls's output as to
|
||||
;; byte positions of filenames.
|
||||
|
@ -37,27 +37,29 @@
|
||||
|
||||
;; Standard fringe bitmaps
|
||||
|
||||
(defconst no-fringe-bitmap 0)
|
||||
(defconst undef-fringe-bitmap 1)
|
||||
(defconst left-truncation-fringe-bitmap 2)
|
||||
(defconst right-truncation-fringe-bitmap 3)
|
||||
(defconst up-arrow-fringe-bitmap 4)
|
||||
(defconst down-arrow-fringe-bitmap 5)
|
||||
(defconst continued-line-fringe-bitmap 6)
|
||||
(defconst continuation-line-fringe-bitmap 7)
|
||||
(defconst overlay-arrow-fringe-bitmap 8)
|
||||
(defconst top-left-angle-fringe-bitmap 9)
|
||||
(defconst top-right-angle-fringe-bitmap 10)
|
||||
(defconst bottom-left-angle-fringe-bitmap 11)
|
||||
(defconst bottom-right-angle-fringe-bitmap 12)
|
||||
(defconst left-bracket-fringe-bitmap 13)
|
||||
(defconst right-bracket-fringe-bitmap 14)
|
||||
(defconst filled-box-cursor-fringe-bitmap 15)
|
||||
(defconst hollow-box-cursor-fringe-bitmap 16)
|
||||
(defconst hollow-square-fringe-bitmap 17)
|
||||
(defconst bar-cursor-fringe-bitmap 18)
|
||||
(defconst hbar-cursor-fringe-bitmap 19)
|
||||
(defconst empty-line-fringe-bitmap 20)
|
||||
(defmacro fringe-bitmap-p (symbol)
|
||||
"Return non-nil if SYMBOL is a fringe bitmap."
|
||||
`(get ,symbol 'fringe))
|
||||
|
||||
(defvar fringe-bitmaps)
|
||||
|
||||
(unless (get 'left-truncation 'fringe)
|
||||
(let ((bitmaps '(left-truncation right-truncation
|
||||
up-arrow down-arrow
|
||||
continued-line continuation-line
|
||||
overlay-arrow
|
||||
top-left-angle top-right-angle
|
||||
bottom-left-angle bottom-right-angle
|
||||
left-bracket right-bracket
|
||||
filled-box-cursor hollow-box-cursor hollow-square
|
||||
bar-cursor hbar-cursor
|
||||
empty-line))
|
||||
(bn 2))
|
||||
(while bitmaps
|
||||
(push (car bitmaps) fringe-bitmaps)
|
||||
(put (car bitmaps) 'fringe bn)
|
||||
(setq bitmaps (cdr bitmaps)
|
||||
bn (1+ bn)))))
|
||||
|
||||
|
||||
;; Control presence of fringes
|
||||
@ -228,7 +230,7 @@ SIDE must be the symbol `left' or `right'."
|
||||
(window-fringes))
|
||||
0)
|
||||
(float (frame-char-width))))
|
||||
|
||||
|
||||
(provide 'fringe)
|
||||
|
||||
;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d
|
||||
|
@ -1,3 +1,77 @@
|
||||
2004-09-28 Jesper Harder <harder@ifa.au.dk>
|
||||
|
||||
* gnus-picon.el: Require cl.
|
||||
|
||||
* mml-sec.el (mml-signencrypt-style): Don't depend on Gnus.
|
||||
|
||||
* mml-smime.el: Require cl. Autoload message-fetch-field.
|
||||
|
||||
* gnus-fun.el: Require gnus-ems and gnus-util.
|
||||
|
||||
* gnus-diary.el (gnus-diary-header-schedule): caddr -> car (cddr
|
||||
|
||||
* gnus-art.el (gnus-article-edit-mode): Define before first
|
||||
reference.
|
||||
|
||||
* gnus.el (gnus-method-to-server): Move defsubst before first use.
|
||||
|
||||
* spam.el (spam-check-spamoracle, spam-spamoracle-learn): Fix
|
||||
format string mismatch.
|
||||
* nnml.el (nnml-request-set-mark, nnml-save-marks): do.
|
||||
* nnfolder.el (nnfolder-request-set-mark, nnfolder-save-marks): do.
|
||||
|
||||
2004-09-27 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* gnus.el (gnus-version-number): Set to 5.11.
|
||||
|
||||
2004-09-27 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* mm-decode.el (mm-copy-to-buffer): Don't use set-buffer-multibyte.
|
||||
|
||||
2004-09-26 Jesper Harder <harder@ifa.au.dk>
|
||||
|
||||
* gnus-msg.el (gnus-post-news): Use blank Newsgroups line if
|
||||
GROUP is a virtual group.
|
||||
|
||||
* mm-util.el (mm-charset-synonym-alist): Remove obsolete entries
|
||||
for big5 and gb2312.
|
||||
|
||||
* rfc2047.el (rfc2047-pad-base64): Deal with more cases of invalid
|
||||
padding.
|
||||
|
||||
* mm-bodies.el (mm-7bit-chars): Don't include \r.
|
||||
|
||||
* mml.el (mml-compute-boundary-1): Don't uncompress files.
|
||||
|
||||
* rfc2047.el (rfc2047-qp-or-base64): New function to reduce
|
||||
dependencies.
|
||||
(rfc2047-encode): Use it.
|
||||
|
||||
* flow-fill.el: Typo.
|
||||
|
||||
* mml.el (mml-generate-mime-1): Don't use format=flowed with
|
||||
inline PGP.
|
||||
|
||||
* gnus.el (gnus-getenv-nntpserver): Strip whitespace.
|
||||
|
||||
* gnus-cache.el (gnus-cache-save-buffers): Check if buffer is
|
||||
alive. Reported by Laurent Martelli <laurent@aopsys.com>.
|
||||
|
||||
* mm-util.el (mm-image-load-path): Handle nil in load-path.
|
||||
From Christian Neukirchen <chneukirchen@yahoo.de>.
|
||||
|
||||
* html2text.el (html2text-replace-list): Add & and '.
|
||||
|
||||
* nnheader.el (nnheader-max-head-length): Increase to 8192.
|
||||
|
||||
* message.el (message-clone-locals): Clone sendmail and smtp
|
||||
variables.
|
||||
|
||||
2004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* gnus-msg.el (gnus-configure-posting-styles): Narrow to headers
|
||||
in `header' match. Reported by Svend Tollak Munkejord.
|
||||
|
||||
2004-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness.
|
||||
|
@ -1,4 +1,4 @@
|
||||
;;; flow-fill.el --- interprete RFC2646 "flowed" text
|
||||
;;; flow-fill.el --- interpret RFC2646 "flowed" text
|
||||
|
||||
;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -1464,6 +1464,8 @@ Initialized from `text-mode-syntax-table.")
|
||||
|
||||
(defvar gnus-inhibit-hiding nil)
|
||||
|
||||
(defvar gnus-article-edit-mode nil)
|
||||
|
||||
;;; Macros for dealing with the article buffer.
|
||||
|
||||
(defmacro gnus-with-article-headers (&rest forms)
|
||||
|
@ -125,9 +125,8 @@ it's not cached."
|
||||
(overview-file (gnus-cache-file-name
|
||||
(car gnus-cache-buffer) ".overview")))
|
||||
;; write the overview only if it was modified
|
||||
(when (buffer-modified-p buffer)
|
||||
(save-excursion
|
||||
(set-buffer buffer)
|
||||
(when (and (buffer-live-p buffer) (buffer-modified-p buffer))
|
||||
(with-current-buffer buffer
|
||||
(if (> (buffer-size) 0)
|
||||
;; Non-empty overview, write it to a file.
|
||||
(let ((coding-system-for-write
|
||||
|
@ -204,7 +204,7 @@ There are currently two built-in format functions:
|
||||
(let ((head (cdr (assoc (intern (format "X-Diary-%s" (car elt)))
|
||||
headers))))
|
||||
(when head
|
||||
(nndiary-parse-schedule-value head (cadr elt) (caddr elt)))))
|
||||
(nndiary-parse-schedule-value head (cadr elt) (car (cddr elt))))))
|
||||
nndiary-headers))
|
||||
|
||||
;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any
|
||||
|
@ -26,8 +26,11 @@
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile
|
||||
(require 'cl)
|
||||
(require 'mm-util))
|
||||
(require 'cl))
|
||||
|
||||
(require 'mm-util)
|
||||
(require 'gnus-ems)
|
||||
(require 'gnus-util)
|
||||
|
||||
(defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
|
||||
"*Directory where X-Face PBM files are stored."
|
||||
|
@ -915,7 +915,9 @@ header line with the old Message-ID."
|
||||
(not to-address)))
|
||||
;; This is news.
|
||||
(if post
|
||||
(message-news (or to-group group))
|
||||
(message-news
|
||||
(or to-group
|
||||
(and (not (gnus-virtual-group-p pgroup)) group)))
|
||||
(set-buffer gnus-article-copy)
|
||||
(gnus-msg-treat-broken-reply-to)
|
||||
(message-followup (if (or newsgroup-p force-news)
|
||||
@ -1801,9 +1803,11 @@ this is a reply."
|
||||
;; Obsolete format of header match.
|
||||
(and (gnus-buffer-live-p gnus-article-copy)
|
||||
(with-current-buffer gnus-article-copy
|
||||
(let ((header (message-fetch-field (pop style))))
|
||||
(and header
|
||||
(string-match (pop style) header))))))
|
||||
(save-restriction
|
||||
(nnheader-narrow-to-headers)
|
||||
(let ((header (message-fetch-field (pop style))))
|
||||
(and header
|
||||
(string-match (pop style) header)))))))
|
||||
((or (symbolp match)
|
||||
(functionp match))
|
||||
(cond
|
||||
@ -1819,9 +1823,11 @@ this is a reply."
|
||||
;; New format of header match.
|
||||
(and (gnus-buffer-live-p gnus-article-copy)
|
||||
(with-current-buffer gnus-article-copy
|
||||
(let ((header (message-fetch-field (nth 1 match))))
|
||||
(and header
|
||||
(string-match (nth 2 match) header))))))
|
||||
(save-restriction
|
||||
(nnheader-narrow-to-headers)
|
||||
(let ((header (message-fetch-field (nth 1 match))))
|
||||
(and header
|
||||
(string-match (nth 2 match) header)))))))
|
||||
(t
|
||||
;; This is a form to be evaled.
|
||||
(eval match)))))
|
||||
|
@ -40,8 +40,9 @@
|
||||
;;
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(require 'gnus)
|
||||
(require 'custom)
|
||||
(require 'gnus-art)
|
||||
|
||||
;;; User variables:
|
||||
|
@ -282,7 +282,7 @@ is restarted, and sometimes reloaded."
|
||||
:link '(custom-manual "(gnus)Exiting Gnus")
|
||||
:group 'gnus)
|
||||
|
||||
(defconst gnus-version-number "5.10.6"
|
||||
(defconst gnus-version-number "5.11"
|
||||
"Version number for this version of Gnus.")
|
||||
|
||||
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
|
||||
@ -1104,9 +1104,8 @@ Check the NNTPSERVER environment variable and the
|
||||
(and (file-readable-p gnus-nntpserver-file)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents gnus-nntpserver-file)
|
||||
(let ((name (buffer-string)))
|
||||
(unless (string-match "\\`[ \t\n]*$" name)
|
||||
name))))))
|
||||
(when (re-search-forward "[^ \t\n\r]+" nil t)
|
||||
(match-string 0))))))
|
||||
|
||||
(defcustom gnus-select-method
|
||||
(condition-case nil
|
||||
@ -3309,38 +3308,6 @@ that that variable is buffer-local to the summary buffers."
|
||||
(push (cons server result) gnus-server-method-cache))
|
||||
result)))
|
||||
|
||||
(defsubst gnus-method-to-server (method)
|
||||
(catch 'server-name
|
||||
(setq method (or method gnus-select-method))
|
||||
|
||||
;; Perhaps it is already in the cache.
|
||||
(mapc (lambda (name-method)
|
||||
(if (equal (cdr name-method) method)
|
||||
(throw 'server-name (car name-method))))
|
||||
gnus-server-method-cache)
|
||||
|
||||
(mapc
|
||||
(lambda (server-alist)
|
||||
(mapc (lambda (name-method)
|
||||
(when (gnus-methods-equal-p (cdr name-method) method)
|
||||
(unless (member name-method gnus-server-method-cache)
|
||||
(push name-method gnus-server-method-cache))
|
||||
(throw 'server-name (car name-method))))
|
||||
server-alist))
|
||||
(let ((alists (list gnus-server-alist
|
||||
gnus-predefined-server-alist)))
|
||||
(if gnus-select-method
|
||||
(push (list (cons "native" gnus-select-method)) alists))
|
||||
alists))
|
||||
|
||||
(let* ((name (if (member (cadr method) '(nil ""))
|
||||
(format "%s" (car method))
|
||||
(format "%s:%s" (car method) (cadr method))))
|
||||
(name-method (cons name method)))
|
||||
(unless (member name-method gnus-server-method-cache)
|
||||
(push name-method gnus-server-method-cache))
|
||||
name)))
|
||||
|
||||
(defsubst gnus-server-get-method (group method)
|
||||
;; Input either a server name, and extended server name, or a
|
||||
;; select method, and return a select method.
|
||||
|
@ -1,5 +1,5 @@
|
||||
;;; html2text.el --- a simple html to plain text converter
|
||||
;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Joakim Hove <hove@phys.ntnu.no>
|
||||
|
||||
@ -42,7 +42,8 @@
|
||||
(defvar html2text-format-single-element-list '(("hr" . html2text-clean-hr)))
|
||||
|
||||
(defvar html2text-replace-list
|
||||
'((" " . " ") (">" . ">") ("<" . "<") (""" . "\""))
|
||||
'((" " . " ") (">" . ">") ("<" . "<") (""" . "\"")
|
||||
("&" . "&") ("'" . "'"))
|
||||
"The map of entity to text.
|
||||
|
||||
This is an alist were each element is a dotted pair consisting of an
|
||||
|
@ -6685,7 +6685,7 @@ regexp VARSTR."
|
||||
(let ((locals (save-excursion
|
||||
(set-buffer buffer)
|
||||
(buffer-local-variables)))
|
||||
(regexp "^gnus\\|^nn\\|^message\\|^user-mail-address"))
|
||||
(regexp "^gnus\\|^nn\\|^message\\|^sendmail\\|^smtp\\|^user-mail-address"))
|
||||
(mapcar
|
||||
(lambda (local)
|
||||
(when (and (consp local)
|
||||
|
@ -38,9 +38,16 @@
|
||||
(require 'rfc2047)
|
||||
(require 'mm-encode)
|
||||
|
||||
;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
|
||||
;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
|
||||
;; BS, vertical TAB, form feed, and ^_
|
||||
(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f")
|
||||
;;
|
||||
;; Note that CR is *not* included, as that would allow a non-paired CR
|
||||
;; in the body contrary to RFC 2822:
|
||||
;;
|
||||
;; - CR and LF MUST only occur together as CRLF; they MUST NOT
|
||||
;; appear independently in the body.
|
||||
|
||||
(defvar mm-7bit-chars "\x20-\x7f\n\t\x7\x8\xb\xc\x1f")
|
||||
|
||||
(defcustom mm-body-charset-encoding-alist
|
||||
'((iso-2022-jp . 7bit)
|
||||
|
@ -623,14 +623,14 @@ Postpone undisplaying of viewers for types in
|
||||
"Copy the contents of the current buffer to a fresh buffer."
|
||||
(save-excursion
|
||||
(let ((obuf (current-buffer))
|
||||
(multibyte enable-multibyte-characters)
|
||||
beg)
|
||||
(goto-char (point-min))
|
||||
(search-forward-regexp "^\n" nil t)
|
||||
(setq beg (point))
|
||||
(set-buffer (generate-new-buffer " *mm*"))
|
||||
;; Preserve the data's unibyteness (for url-insert-file-contents).
|
||||
(set-buffer-multibyte multibyte)
|
||||
(set-buffer
|
||||
;; Preserve the data's unibyteness (for url-insert-file-contents).
|
||||
(let ((default-enable-multibyte-characters (mm-multibyte-p)))
|
||||
(generate-new-buffer " *mm*")))
|
||||
(insert-buffer-substring obuf beg)
|
||||
(current-buffer))))
|
||||
|
||||
|
@ -133,15 +133,9 @@ In XEmacs, also return non-nil if CS is a coding system object."
|
||||
|
||||
(defvar mm-charset-synonym-alist
|
||||
`(
|
||||
;; Perfectly fine? A valid MIME name, anyhow.
|
||||
,@(unless (mm-coding-system-p 'big5)
|
||||
'((big5 . cn-big5)))
|
||||
;; Not in XEmacs, but it's not a proper MIME charset anyhow.
|
||||
,@(unless (mm-coding-system-p 'x-ctext)
|
||||
'((x-ctext . ctext)))
|
||||
;; Apparently not defined in Emacs 20, but is a valid MIME name.
|
||||
,@(unless (mm-coding-system-p 'gb2312)
|
||||
'((gb2312 . cn-gb-2312)))
|
||||
;; ISO-8859-15 is very similar to ISO-8859-1. But it's _different_!
|
||||
,@(unless (mm-coding-system-p 'iso-8859-15)
|
||||
'((iso-8859-15 . iso-8859-1)))
|
||||
@ -727,11 +721,12 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
|
||||
(defun mm-image-load-path (&optional package)
|
||||
(let (dir result)
|
||||
(dolist (path load-path (nreverse result))
|
||||
(if (file-directory-p
|
||||
(setq dir (concat (file-name-directory
|
||||
(directory-file-name path))
|
||||
"etc/" (or package "gnus/"))))
|
||||
(push dir result))
|
||||
(when (and path
|
||||
(file-directory-p
|
||||
(setq dir (concat (file-name-directory
|
||||
(directory-file-name path))
|
||||
"etc/" (or package "gnus/")))))
|
||||
(push dir result))
|
||||
(push path result))))
|
||||
|
||||
;; Fixme: This doesn't look useful where it's used.
|
||||
|
@ -113,7 +113,7 @@ You can also customize or set `mml-signencrypt-style-alist' instead."
|
||||
(setf (second style-item) style)
|
||||
;; otherwise, just return the current value
|
||||
(second style-item))
|
||||
(gnus-message 3 "Warning, attempt to set invalid signencrypt-style"))))
|
||||
(message "Warning, attempt to set invalid signencrypt style"))))
|
||||
|
||||
;;; Security functions
|
||||
|
||||
|
@ -25,9 +25,12 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(require 'smime)
|
||||
(require 'mm-decode)
|
||||
(autoload 'message-narrow-to-headers "message")
|
||||
(autoload 'message-fetch-field "message")
|
||||
|
||||
(defun mml-smime-sign (cont)
|
||||
(when (null smime-keys)
|
||||
|
@ -449,6 +449,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
|
||||
;; actually are hard newlines in the text.
|
||||
(let (use-hard-newlines)
|
||||
(when (and (string= type "text/plain")
|
||||
(not (string= (cdr (assq 'sign cont)) "pgp"))
|
||||
(or (null (assq 'format cont))
|
||||
(string= (cdr (assq 'format cont))
|
||||
"flowed"))
|
||||
@ -590,7 +591,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
|
||||
(insert-buffer-substring (cdr (assq 'buffer cont))))
|
||||
((and (setq filename (cdr (assq 'filename cont)))
|
||||
(not (equal (cdr (assq 'nofile cont)) "yes")))
|
||||
(mm-insert-file-contents filename))
|
||||
(mm-insert-file-contents filename nil nil nil nil t))
|
||||
(t
|
||||
(insert (cdr (assq 'contents cont)))))
|
||||
(goto-char (point-min))
|
||||
|
@ -1174,7 +1174,7 @@ This command does not work if you use short group names."
|
||||
(let ((range (nth 0 action))
|
||||
(what (nth 1 action))
|
||||
(marks (nth 2 action)))
|
||||
(assert (or (eq what 'add) (eq what 'del)) t
|
||||
(assert (or (eq what 'add) (eq what 'del)) nil
|
||||
"Unknown request-set-mark action: %s" what)
|
||||
(dolist (mark marks)
|
||||
(setq nnfolder-marks (gnus-update-alist-soft
|
||||
|
@ -1,7 +1,7 @@
|
||||
;;; nnheader.el --- header access macros for Gnus and its backends
|
||||
|
||||
;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
|
||||
;; 1997, 1998, 2000, 2001, 2002, 2003
|
||||
;; 1997, 1998, 2000, 2001, 2002, 2003, 2004
|
||||
;; Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
|
||||
@ -58,7 +58,7 @@ they will keep on jabbering all the time."
|
||||
:group 'gnus-server
|
||||
:type 'boolean)
|
||||
|
||||
(defvar nnheader-max-head-length 4096
|
||||
(defvar nnheader-max-head-length 8192
|
||||
"*Max length of the head of articles.
|
||||
|
||||
Value is an integer, nil, or t. nil means read in chunks of a file
|
||||
|
@ -923,7 +923,7 @@ Use the nov database for the current group if available."
|
||||
(let ((range (nth 0 action))
|
||||
(what (nth 1 action))
|
||||
(marks (nth 2 action)))
|
||||
(assert (or (eq what 'add) (eq what 'del)) t
|
||||
(assert (or (eq what 'add) (eq what 'del)) nil
|
||||
"Unknown request-set-mark action: %s" what)
|
||||
(dolist (mark marks)
|
||||
(setq nnml-marks (gnus-update-alist-soft
|
||||
|
@ -126,6 +126,25 @@ quoted-printable and base64 respectively.")
|
||||
;;; Functions for encoding RFC2047 messages
|
||||
;;;
|
||||
|
||||
(defun rfc2047-qp-or-base64 ()
|
||||
"Return the type with which to encode the buffer.
|
||||
This is either `base64' or `quoted-printable'."
|
||||
(save-excursion
|
||||
(let ((limit (min (point-max) (+ 2000 (point-min))))
|
||||
(n8bit 0))
|
||||
(goto-char (point-min))
|
||||
(skip-chars-forward "\x20-\x7f\r\n\t" limit)
|
||||
(while (< (point) limit)
|
||||
(incf n8bit)
|
||||
(forward-char 1)
|
||||
(skip-chars-forward "\x20-\x7f\r\n\t" limit))
|
||||
(if (or (< (* 6 n8bit) (- limit (point-min)))
|
||||
;; Don't base64, say, a short line with a single
|
||||
;; non-ASCII char when splitting parts by charset.
|
||||
(= n8bit 1))
|
||||
'quoted-printable
|
||||
'base64))))
|
||||
|
||||
(defun rfc2047-narrow-to-field ()
|
||||
"Narrow the buffer to the header on the current line."
|
||||
(beginning-of-line)
|
||||
@ -411,7 +430,7 @@ By default, the region is treated as containing addresses (see
|
||||
;; encoding, choose the one that's shorter.
|
||||
(save-restriction
|
||||
(narrow-to-region b e)
|
||||
(if (eq (mm-qp-or-base64) 'base64)
|
||||
(if (eq (rfc2047-qp-or-base64) 'base64)
|
||||
'B
|
||||
'Q))))
|
||||
(start (concat
|
||||
@ -720,11 +739,15 @@ decodable."
|
||||
;; Be more liberal to accept buggy base64 strings. If
|
||||
;; base64-decode-string accepts buggy strings, this function could
|
||||
;; be aliased to identity.
|
||||
(case (mod (length string) 4)
|
||||
(0 string)
|
||||
(1 string) ;; Error, don't pad it.
|
||||
(2 (concat string "=="))
|
||||
(3 (concat string "="))))
|
||||
(if (= 0 (mod (length string) 4))
|
||||
string
|
||||
(when (string-match "=+$" string)
|
||||
(setq string (substring string 0 (match-beginning 0))))
|
||||
(case (mod (length string) 4)
|
||||
(0 string)
|
||||
(1 string) ;; Error, don't pad it.
|
||||
(2 (concat string "=="))
|
||||
(3 (concat string "=")))))
|
||||
|
||||
(defun rfc2047-decode (charset encoding string)
|
||||
"Decode STRING from the given MIME CHARSET in the given ENCODING.
|
||||
|
@ -1746,7 +1746,7 @@ REMOVE not nil, remove the ADDRESSES."
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward "^X-Spam: yes;" nil t)
|
||||
spam-split-group))
|
||||
(error "Error running spamoracle" status))))))))
|
||||
(error "Error running spamoracle: %s" status))))))))
|
||||
|
||||
(defun spam-spamoracle-learn (articles article-is-spam-p &optional unregister)
|
||||
"Run spamoracle in training mode."
|
||||
@ -1768,8 +1768,8 @@ REMOVE not nil, remove the ADDRESSES."
|
||||
`("-f" ,spam-spamoracle-database
|
||||
"add" ,arg)
|
||||
`("add" ,arg)))))
|
||||
(when (not (eq 0 status))
|
||||
(error "Error running spamoracle" status)))))))
|
||||
(unless (eq 0 status)
|
||||
(error "Error running spamoracle: %s" status)))))))
|
||||
|
||||
(defun spam-spamoracle-learn-ham (articles &optional unregister)
|
||||
(spam-spamoracle-learn articles nil unregister))
|
||||
|
@ -5,13 +5,13 @@
|
||||
|
||||
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
;; Time-stamp: <2004/09/21 22:51:58 vinicius>
|
||||
;; Time-stamp: <2004/09/26 22:11:24 vinicius>
|
||||
;; Keywords: wp, print, PostScript
|
||||
;; Version: 6.8
|
||||
;; Version: 6.8.1
|
||||
;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
|
||||
|
||||
(defconst pr-version "6.8"
|
||||
"printing.el, v 6.8 <2004/09/21 vinicius>
|
||||
(defconst pr-version "6.8.1"
|
||||
"printing.el, v 6.8.1 <2004/09/26 vinicius>
|
||||
|
||||
Please send all bug fixes and enhancements to
|
||||
Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
@ -125,16 +125,16 @@ Please send all bug fixes and enhancements to
|
||||
;; Novices (First Users)
|
||||
;; ---------------------
|
||||
;;
|
||||
;; First of all, take a glance of printing documentation only to have an idea
|
||||
;; of what `printing' is capable.
|
||||
;; First of all, see printing documentation only to get an idea of what
|
||||
;; `printing' is capable.
|
||||
;;
|
||||
;; Then try to set the variables: `pr-ps-name', `pr-ps-printer-alist',
|
||||
;; `pr-txt-name', `pr-txt-printer-alist' and `pr-path-alist'. These variables
|
||||
;; are the main variables for printing processing.
|
||||
;;
|
||||
;; Now, please, see these variables documentation more in deep. You can do
|
||||
;; this by typing C-h v pr-ps-name RET (for example) if you already loaded
|
||||
;; printing package, or by browsing printing.el source file.
|
||||
;; Now, please, see these variables documentation deeper. You can do this by
|
||||
;; typing C-h v pr-ps-name RET (for example) if you already loaded printing
|
||||
;; package, or by browsing printing.el source file.
|
||||
;;
|
||||
;; If the documentation isn't clear or if you find a way to improve the
|
||||
;; documentation, please, send an email to maintainer. All printing users
|
||||
@ -263,7 +263,8 @@ Please send all bug fixes and enhancements to
|
||||
;; in Windows. The gsprint utility is faster than ghostscript to print
|
||||
;; monochrome PostScript.
|
||||
;;
|
||||
;; The efficiency is similar to print non-monochrome PostScript file.
|
||||
;; To print non-monochrome PostScript file, the efficiency of ghostscript
|
||||
;; is similar to gsprint.
|
||||
;;
|
||||
;; Also the gsprint utility comes together with gsview distribution.
|
||||
;;
|
||||
@ -3887,7 +3888,7 @@ image in a file with that name."
|
||||
(interactive (list (pr-ps-infile-preprint "Print preview ")))
|
||||
(and (stringp filename) (file-exists-p filename)
|
||||
(let* ((file (pr-expand-file-name filename))
|
||||
(tempfile (pr-dosify-file-name (make-temp-name file))))
|
||||
(tempfile (pr-dosify-file-name (make-temp-file file))))
|
||||
;; gs use
|
||||
(pr-call-process pr-gs-command
|
||||
(format "-sDEVICE=%s" pr-gs-device)
|
||||
@ -5221,7 +5222,8 @@ non-nil."
|
||||
|
||||
|
||||
(defun pr-delete-file (file)
|
||||
(and pr-delete-temp-file (delete-file file)))
|
||||
(and pr-delete-temp-file (file-exists-p file)
|
||||
(delete-file file)))
|
||||
|
||||
|
||||
(defun pr-expand-file-name (filename)
|
||||
|
@ -1069,8 +1069,9 @@ static char *magick[] = {
|
||||
(defvar breakpoint-disabled-icon nil
|
||||
"Icon for disabled breakpoint in display margin")
|
||||
|
||||
(defvar breakpoint-bitmap nil
|
||||
"Bitmap for breakpoint in fringe")
|
||||
;; Bitmap for breakpoint in fringe
|
||||
(define-fringe-bitmap 'breakpoint
|
||||
"\x3c\x7e\xff\xff\xff\xff\x7e\x3c")
|
||||
|
||||
(defface breakpoint-enabled-bitmap-face
|
||||
'((t
|
||||
@ -1140,9 +1141,8 @@ static char *magick[] = {
|
||||
(save-excursion
|
||||
(goto-char (posn-point posn))
|
||||
(if (or (posn-object posn)
|
||||
(and breakpoint-bitmap
|
||||
(eq (car (fringe-bitmaps-at-pos (posn-point posn)))
|
||||
breakpoint-bitmap)))
|
||||
(eq (car (fringe-bitmaps-at-pos (posn-point posn)))
|
||||
'breakpoint))
|
||||
(gud-remove nil)
|
||||
(gud-break nil)))))))
|
||||
|
||||
@ -1831,11 +1831,7 @@ BUFFER nil or omitted means use the current buffer."
|
||||
(if (>= (car (window-fringes)) 8)
|
||||
(gdb-put-string
|
||||
nil (1+ start)
|
||||
`(left-fringe
|
||||
,(or breakpoint-bitmap
|
||||
(setq breakpoint-bitmap
|
||||
(define-fringe-bitmap
|
||||
"\x3c\x7e\xff\xff\xff\xff\x7e\x3c")))
|
||||
`(left-fringe breakpoint
|
||||
,(if enabled
|
||||
'breakpoint-enabled-bitmap-face
|
||||
'breakpoint-disabled-bitmap-face)))
|
||||
|
169
lisp/term.el
169
lisp/term.el
@ -1,6 +1,6 @@
|
||||
;;; term.el --- general command interpreter in a window stuff
|
||||
|
||||
;;; Copyright (C) 1988, 1990, 1992, 1994, 1995 Free Software Foundation, Inc.
|
||||
;;; Copyright (C) 1988, 1990, 1992, 1994, 1995, 2004 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Per Bothner <bothner@cygnus.com>
|
||||
;; Based on comint mode written by: Olin Shivers <shivers@cs.cmu.edu>
|
||||
@ -676,7 +676,6 @@ Buffer local variable.")
|
||||
(defvar term-terminal-menu)
|
||||
|
||||
;;; Let's silence the byte-compiler -mm
|
||||
(defvar term-ansi-at-eval-string nil)
|
||||
(defvar term-ansi-at-host nil)
|
||||
(defvar term-ansi-at-dir nil)
|
||||
(defvar term-ansi-at-user nil)
|
||||
@ -692,9 +691,6 @@ Buffer local variable.")
|
||||
(defvar term-ansi-current-highlight 0)
|
||||
(defvar term-ansi-current-reverse 0)
|
||||
(defvar term-ansi-current-invisible 0)
|
||||
(defvar term-ansi-default-fg 0)
|
||||
(defvar term-ansi-default-bg 0)
|
||||
(defvar term-ansi-current-temp 0)
|
||||
|
||||
;;; Four should be enough, if you want more, just add. -mm
|
||||
(defvar term-terminal-more-parameters 0)
|
||||
@ -915,6 +911,9 @@ is buffer-local.")
|
||||
(define-key term-raw-map [backspace] 'term-send-backspace)
|
||||
(define-key term-raw-map [home] 'term-send-home)
|
||||
(define-key term-raw-map [end] 'term-send-end)
|
||||
(define-key term-raw-map [S-prior] 'scroll-down)
|
||||
(define-key term-raw-map [S-next] 'scroll-up)
|
||||
(define-key term-raw-map [S-insert] 'term-paste)
|
||||
(define-key term-raw-map [prior] 'term-send-prior)
|
||||
(define-key term-raw-map [next] 'term-send-next)))
|
||||
|
||||
@ -930,6 +929,27 @@ is buffer-local.")
|
||||
|
||||
(put 'term-mode 'mode-class 'special)
|
||||
|
||||
|
||||
;;; Use this variable as a display table for `term-mode'.
|
||||
(defvar term-display-table
|
||||
(let ((dt (or (copy-sequence standard-display-table)
|
||||
(make-display-table)))
|
||||
i)
|
||||
;; avoid changing the display table for ^J
|
||||
(setq i 0)
|
||||
(while (< i 10)
|
||||
(aset dt i (vector i))
|
||||
(setq i (1+ i)))
|
||||
(setq i 11)
|
||||
(while (< i 32)
|
||||
(aset dt i (vector i))
|
||||
(setq i (1+ i)))
|
||||
(setq i 128)
|
||||
(while (< i 256)
|
||||
(aset dt i (vector i))
|
||||
(setq i (1+ i)))
|
||||
dt))
|
||||
|
||||
(defun term-mode ()
|
||||
"Major mode for interacting with an inferior interpreter.
|
||||
The interpreter name is same as buffer name, sans the asterisks.
|
||||
@ -979,6 +999,9 @@ Entry to this mode runs the hooks on `term-mode-hook'."
|
||||
(setq major-mode 'term-mode)
|
||||
(setq mode-name "Term")
|
||||
(use-local-map term-mode-map)
|
||||
;; we do not want indent to sneak in any tabs
|
||||
(setq indent-tabs-mode nil)
|
||||
(setq buffer-display-table term-display-table)
|
||||
(make-local-variable 'term-home-marker)
|
||||
(setq term-home-marker (copy-marker 0))
|
||||
(make-local-variable 'term-saved-home-marker)
|
||||
@ -1182,6 +1205,11 @@ without any interpretation."
|
||||
((eq arg '-) -1)
|
||||
(t (1- arg)))))))
|
||||
|
||||
(defun term-paste ()
|
||||
"Insert the last stretch of killed text at point."
|
||||
(interactive)
|
||||
(term-send-raw-string (current-kill 0)))
|
||||
|
||||
;; Which would be better: "\e[A" or "\eOA"? readline accepts either.
|
||||
;; For my configuration it's definitely better \eOA but YMMV. -mm
|
||||
;; For example: vi works with \eOA while elm wants \e[A ...
|
||||
@ -1193,8 +1221,8 @@ without any interpretation."
|
||||
(defun term-send-end () (interactive) (term-send-raw-string "\e[4~"))
|
||||
(defun term-send-prior () (interactive) (term-send-raw-string "\e[5~"))
|
||||
(defun term-send-next () (interactive) (term-send-raw-string "\e[6~"))
|
||||
(defun term-send-del () (interactive) (term-send-raw-string "\C-?"))
|
||||
(defun term-send-backspace () (interactive) (term-send-raw-string "\C-H"))
|
||||
(defun term-send-del () (interactive) (term-send-raw-string "\e[3~"))
|
||||
(defun term-send-backspace () (interactive) (term-send-raw-string "\C-?"))
|
||||
|
||||
(defun term-char-mode ()
|
||||
"Switch to char (\"raw\") sub-mode of term mode.
|
||||
@ -1364,14 +1392,15 @@ The main purpose is to get rid of the local keymap."
|
||||
"%s%s:li#%d:co#%d:cl=\\E[H\\E[J:cd=\\E[J:bs:am:xn:cm=\\E[%%i%%d;%%dH\
|
||||
:nd=\\E[C:up=\\E[A:ce=\\E[K:ho=\\E[H:pt\
|
||||
:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=^J\
|
||||
:te=\\E[2J\\E[?47l\\E8:ti=\\E7\\E[?47h\
|
||||
:dc=\\E[P:DC=\\E[%%dP:IC=\\E[%%d@:im=\\E[4h:ei=\\E[4l:mi:\
|
||||
:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:md=\\E[1m:mr=\\E[7m:me=\\E[m\
|
||||
:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC\
|
||||
:kl=\\EOD:kd=\\EOB:kr=\\EOC:ku=\\EOA:kN=\\E[6~:kP=\\E[5~:@7=\\E[4~:kh=\\E[1~\
|
||||
:mk=\\E[8m:cb=\\E[1K:op=\\E[39;49m:Co#8:pa#64:AB=\\E[4%%dm:AF=\\E[3%%dm:cr=^M\
|
||||
:bl=^G:do=^J:le=^H:ta=^I:se=\E[27m:ue=\E24m:"
|
||||
:bl=^G:do=^J:le=^H:ta=^I:se=\E[27m:ue=\E24m\
|
||||
:kb=^?:kD=^[[3~:sc=\E7:rc=\E8:"
|
||||
;;; : -undefine ic
|
||||
;;; don't define :te=\\E[2J\\E[?47l\\E8:ti=\\E7\\E[?47h\
|
||||
"termcap capabilities supported")
|
||||
|
||||
;;; This auxiliary function cranks up the process for term-exec in
|
||||
@ -1398,9 +1427,10 @@ The main purpose is to get rid of the local keymap."
|
||||
(process-connection-type t)
|
||||
;; We should suppress conversion of end-of-line format.
|
||||
(inhibit-eol-conversion t)
|
||||
;; inhibit-eol-conversion doesn't seem to do the job, but this does.
|
||||
(coding-system-for-read 'unknown-unix)
|
||||
)
|
||||
;; The process's output contains not just chars but also binary
|
||||
;; escape codes, so we need to see the raw output. We will have to
|
||||
;; do the decoding by hand on the parts that are made of chars.
|
||||
(coding-system-for-read 'binary))
|
||||
(apply 'start-process name buffer
|
||||
"/bin/sh" "-c"
|
||||
(format "stty -nl echo rows %d columns %d sane 2>/dev/null;\
|
||||
@ -2691,7 +2721,12 @@ See `term-prompt-regexp'."
|
||||
(if (not funny) (setq funny str-length))
|
||||
(cond ((> funny i)
|
||||
(cond ((eq term-terminal-state 1)
|
||||
(term-move-columns 1)
|
||||
;; We are in state 1, we need to wrap
|
||||
;; around. Go to the beginning of
|
||||
;; the next line and switch to state
|
||||
;; 0.
|
||||
(term-down 1)
|
||||
(term-move-columns (- (term-current-column)))
|
||||
(setq term-terminal-state 0)))
|
||||
(setq count (- funny i))
|
||||
(setq temp (- (+ (term-horizontal-column) count)
|
||||
@ -2700,6 +2735,7 @@ See `term-prompt-regexp'."
|
||||
((> count temp) ;; Some chars fit.
|
||||
;; This iteration, handle only what fits.
|
||||
(setq count (- count temp))
|
||||
(setq temp 0)
|
||||
(setq funny (+ count i)))
|
||||
((or (not (or term-pager-count
|
||||
term-scroll-with-delete))
|
||||
@ -2720,7 +2756,7 @@ See `term-prompt-regexp'."
|
||||
;; following point if not eob nor insert-mode.
|
||||
(let ((old-column (current-column))
|
||||
columns pos)
|
||||
(insert (substring str i funny))
|
||||
(insert (decode-coding-string (substring str i funny) locale-coding-system))
|
||||
(setq term-current-column (current-column)
|
||||
columns (- term-current-column old-column))
|
||||
(when (not (or (eobp) term-insert-mode))
|
||||
@ -2739,7 +2775,7 @@ See `term-prompt-regexp'."
|
||||
(setq term-terminal-state 1)))
|
||||
(setq i (1- funny)))
|
||||
((and (setq term-terminal-state 0)
|
||||
(eq char ?\^I)) ; TAB
|
||||
(eq char ?\^I)) ; TAB (terminfo: ht)
|
||||
;; FIXME: Does not handle line wrap!
|
||||
(setq count (term-current-column))
|
||||
(setq count (+ count 8 (- (mod count 8))))
|
||||
@ -2766,7 +2802,7 @@ See `term-prompt-regexp'."
|
||||
(if (not (and term-kill-echo-list
|
||||
(term-check-kill-echo-list)))
|
||||
(term-down 1 t)))
|
||||
((eq char ?\b)
|
||||
((eq char ?\b) ;; (terminfo: cub1)
|
||||
(term-move-columns -1))
|
||||
((eq char ?\033) ; Escape
|
||||
(setq term-terminal-state 2))
|
||||
@ -2816,13 +2852,13 @@ See `term-prompt-regexp'."
|
||||
((eq char ?M) ;; scroll reversed
|
||||
(term-insert-lines 1)
|
||||
(setq term-terminal-state 0))
|
||||
((eq char ?7) ;; Save cursor
|
||||
((eq char ?7) ;; Save cursor (terminfo: sc)
|
||||
(term-handle-deferred-scroll)
|
||||
(setq term-saved-cursor
|
||||
(cons (term-current-row)
|
||||
(term-horizontal-column)))
|
||||
(setq term-terminal-state 0))
|
||||
((eq char ?8) ;; Restore cursor
|
||||
((eq char ?8) ;; Restore cursor (terminfo: rc)
|
||||
(if term-saved-cursor
|
||||
(term-goto (car term-saved-cursor)
|
||||
(cdr term-saved-cursor)))
|
||||
@ -2974,14 +3010,14 @@ See `term-prompt-regexp'."
|
||||
((eq parameter 8)
|
||||
(setq term-ansi-current-invisible 1))
|
||||
|
||||
;;; Reset reverse (i.e. terminfo rmso)
|
||||
((eq parameter 24)
|
||||
(setq term-ansi-current-reverse 0))
|
||||
|
||||
;;; Reset underline (i.e. terminfo rmul)
|
||||
((eq parameter 27)
|
||||
((eq parameter 24)
|
||||
(setq term-ansi-current-underline 0))
|
||||
|
||||
;;; Reset reverse (i.e. terminfo rmso)
|
||||
((eq parameter 27)
|
||||
(setq term-ansi-current-reverse 0))
|
||||
|
||||
;;; Foreground
|
||||
((and (>= parameter 30) (<= parameter 37))
|
||||
(setq term-ansi-current-color (- parameter 29)))
|
||||
@ -3095,7 +3131,7 @@ See `term-prompt-regexp'."
|
||||
(term-goto
|
||||
(1- term-terminal-previous-parameter)
|
||||
(1- term-terminal-parameter)))
|
||||
;; \E[A - cursor up
|
||||
;; \E[A - cursor up (terminfo: cuu1)
|
||||
((eq char ?A)
|
||||
(term-handle-deferred-scroll)
|
||||
(term-down (- (max 1 term-terminal-parameter)) t))
|
||||
@ -3108,13 +3144,13 @@ See `term-prompt-regexp'."
|
||||
;; \E[D - cursor left
|
||||
((eq char ?D)
|
||||
(term-move-columns (- (max 1 term-terminal-parameter))))
|
||||
;; \E[J - clear to end of screen
|
||||
;; \E[J - clear to end of screen (terminfo: ed, clear)
|
||||
((eq char ?J)
|
||||
(term-erase-in-display term-terminal-parameter))
|
||||
;; \E[K - clear to end of line
|
||||
;; \E[K - clear to end of line (terminfo: el, el1)
|
||||
((eq char ?K)
|
||||
(term-erase-in-line term-terminal-parameter))
|
||||
;; \E[L - insert lines
|
||||
;; \E[L - insert lines (terminfo: il, il1)
|
||||
((eq char ?L)
|
||||
(term-insert-lines (max 1 term-terminal-parameter)))
|
||||
;; \E[M - delete lines
|
||||
@ -3128,19 +3164,22 @@ See `term-prompt-regexp'."
|
||||
(term-insert-spaces (max 1 term-terminal-parameter)))
|
||||
;; \E[?h - DEC Private Mode Set
|
||||
((eq char ?h)
|
||||
(cond ((eq term-terminal-parameter 4)
|
||||
(cond ((eq term-terminal-parameter 4) ;; (terminfo: smir)
|
||||
(setq term-insert-mode t))
|
||||
((eq term-terminal-parameter 47)
|
||||
(term-switch-to-alternate-sub-buffer t))))
|
||||
;; ((eq term-terminal-parameter 47) ;; (terminfo: smcup)
|
||||
;; (term-switch-to-alternate-sub-buffer t))
|
||||
))
|
||||
;; \E[?l - DEC Private Mode Reset
|
||||
((eq char ?l)
|
||||
(cond ((eq term-terminal-parameter 4)
|
||||
(cond ((eq term-terminal-parameter 4) ;; (terminfo: rmir)
|
||||
(setq term-insert-mode nil))
|
||||
((eq term-terminal-parameter 47)
|
||||
(term-switch-to-alternate-sub-buffer nil))))
|
||||
;; ((eq term-terminal-parameter 47) ;; (terminfo: rmcup)
|
||||
;; (term-switch-to-alternate-sub-buffer nil))
|
||||
))
|
||||
|
||||
;;; Modified to allow ansi coloring -mm
|
||||
;; \E[m - Set/reset standard mode
|
||||
;; \E[m - Set/reset modes, set bg/fg
|
||||
;;(terminfo: smso,rmso,smul,rmul,rev,bold,sgr0,invis,op,setab,setaf)
|
||||
((eq char ?m)
|
||||
(when (= term-terminal-more-parameters 1)
|
||||
(if (>= term-terminal-previous-parameter-4 0)
|
||||
@ -3184,32 +3223,32 @@ The top-most line is line 0."
|
||||
(not (and (= term-scroll-start 0)
|
||||
(= term-scroll-end term-height))))))
|
||||
|
||||
(defun term-switch-to-alternate-sub-buffer (set)
|
||||
;; If asked to switch to (from) the alternate sub-buffer, and already (not)
|
||||
;; using it, do nothing. This test is needed for some programs (including
|
||||
;; Emacs) that emit the ti termcap string twice, for unknown reason.
|
||||
(term-handle-deferred-scroll)
|
||||
(if (eq set (not (term-using-alternate-sub-buffer)))
|
||||
(let ((row (term-current-row))
|
||||
(col (term-horizontal-column)))
|
||||
(cond (set
|
||||
(goto-char (point-max))
|
||||
(if (not (eq (preceding-char) ?\n))
|
||||
(term-insert-char ?\n 1))
|
||||
(setq term-scroll-with-delete t)
|
||||
(setq term-saved-home-marker (copy-marker term-home-marker))
|
||||
(set-marker term-home-marker (point)))
|
||||
(t
|
||||
(setq term-scroll-with-delete
|
||||
(not (and (= term-scroll-start 0)
|
||||
(= term-scroll-end term-height))))
|
||||
(set-marker term-home-marker term-saved-home-marker)
|
||||
(set-marker term-saved-home-marker nil)
|
||||
(setq term-saved-home-marker nil)
|
||||
(goto-char term-home-marker)))
|
||||
(setq term-current-column nil)
|
||||
(setq term-current-row 0)
|
||||
(term-goto row col))))
|
||||
;; (defun term-switch-to-alternate-sub-buffer (set)
|
||||
;; ;; If asked to switch to (from) the alternate sub-buffer, and already (not)
|
||||
;; ;; using it, do nothing. This test is needed for some programs (including
|
||||
;; ;; Emacs) that emit the ti termcap string twice, for unknown reason.
|
||||
;; (term-handle-deferred-scroll)
|
||||
;; (if (eq set (not (term-using-alternate-sub-buffer)))
|
||||
;; (let ((row (term-current-row))
|
||||
;; (col (term-horizontal-column)))
|
||||
;; (cond (set
|
||||
;; (goto-char (point-max))
|
||||
;; (if (not (eq (preceding-char) ?\n))
|
||||
;; (term-insert-char ?\n 1))
|
||||
;; (setq term-scroll-with-delete t)
|
||||
;; (setq term-saved-home-marker (copy-marker term-home-marker))
|
||||
;; (set-marker term-home-marker (point)))
|
||||
;; (t
|
||||
;; (setq term-scroll-with-delete
|
||||
;; (not (and (= term-scroll-start 0)
|
||||
;; (= term-scroll-end term-height))))
|
||||
;; (set-marker term-home-marker term-saved-home-marker)
|
||||
;; (set-marker term-saved-home-marker nil)
|
||||
;; (setq term-saved-home-marker nil)
|
||||
;; (goto-char term-home-marker)))
|
||||
;; (setq term-current-column nil)
|
||||
;; (setq term-current-row 0)
|
||||
;; (term-goto row col))))
|
||||
|
||||
;; Default value for the symbol term-command-hook.
|
||||
|
||||
@ -3519,11 +3558,11 @@ all pending output has been dealt with."))
|
||||
(if (not (bolp)) (insert-before-markers ?\n)))
|
||||
|
||||
(defun term-erase-in-line (kind)
|
||||
(if (> kind 1) ;; erase left of point
|
||||
(if (= kind 1) ;; erase left of point
|
||||
(let ((cols (term-horizontal-column)) (saved-point (point)))
|
||||
(term-vertical-motion 0)
|
||||
(delete-region (point) saved-point)
|
||||
(term-insert-char ?\n cols)))
|
||||
(term-insert-char ? cols)))
|
||||
(if (not (eq kind 1)) ;; erase right of point
|
||||
(let ((saved-point (point))
|
||||
(wrapped (and (zerop (term-horizontal-column))
|
||||
@ -3622,7 +3661,7 @@ Should only be called when point is at the start of a screen line."
|
||||
(term-insert-char ?\n lines)
|
||||
(goto-char start)))
|
||||
|
||||
(defun term-set-output-log (name)
|
||||
(defun term-start-output-log (name)
|
||||
"Record raw inferior process output in a buffer."
|
||||
(interactive (list (if term-log-buffer
|
||||
nil
|
||||
@ -3644,10 +3683,10 @@ Should only be called when point is at the start of a screen line."
|
||||
(message "Recording terminal emulator output into buffer \"%s\""
|
||||
(buffer-name term-log-buffer))))
|
||||
|
||||
(defun term-stop-photo ()
|
||||
(defun term-stop-output-log ()
|
||||
"Discontinue raw inferior process logging."
|
||||
(interactive)
|
||||
(term-set-output-log nil))
|
||||
(term-start-output-log nil))
|
||||
|
||||
(defun term-show-maximum-output ()
|
||||
"Put the end of the buffer at the bottom of the window."
|
||||
|
@ -102,7 +102,7 @@ expression, which is evaluated to get the string to insert.")
|
||||
(defconst enriched-annotation-regexp "<\\(/\\)?\\([-A-Za-z0-9]+\\)>"
|
||||
"Regular expression matching enriched-text annotations.")
|
||||
|
||||
(defconst enriched-translations
|
||||
(defvar enriched-translations
|
||||
'((face (bold-italic "bold" "italic")
|
||||
(bold "bold")
|
||||
(italic "italic")
|
||||
|
@ -1,3 +1,14 @@
|
||||
2004-09-28 Richard M. Stallman <rms@gnu.org>
|
||||
|
||||
* text.texi (Special Properties): Clarify line-spacing and line-height.
|
||||
|
||||
* searching.texi (Regexp Search): Add looking-back.
|
||||
|
||||
2004-09-25 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* display.texi: Correct typos.
|
||||
(Image Descriptors): Correct xref's.
|
||||
|
||||
2004-09-25 Richard M. Stallman <rms@gnu.org>
|
||||
|
||||
* text.texi (Special Properties): Cleanups in `cursor'.
|
||||
|
@ -2716,7 +2716,7 @@ center the bitmap. The allowed values are @code{top}, @code{center},
|
||||
or @code{bottom}.
|
||||
|
||||
The @var{align} argument may also be a list @code{(@var{align}
|
||||
@var{periodic})} where @var{align} is intepreted as described above.
|
||||
@var{periodic})} where @var{align} is interpreted as described above.
|
||||
If @var{periodic} is non-@code{nil}, it specifies that the rows in
|
||||
@code{bits} should be repeated enough times to reach the specified
|
||||
height.
|
||||
@ -2988,7 +2988,7 @@ edge, center, or right edge of the text area.
|
||||
used with @code{:align-to} to specify that the position is relative to
|
||||
the left edge of the given area. Once the base offset for a relative
|
||||
position has been set (by the first occurrence of one of these
|
||||
symbols), further occurences of these symbols are interpreted as the
|
||||
symbols), further occurrences of these symbols are interpreted as the
|
||||
width of the specified area. For example, to align to the center of
|
||||
the left-margin, use
|
||||
|
||||
@ -3181,7 +3181,7 @@ are supported only if particular support libraries are installed on
|
||||
your machine. In some environments, Emacs allows loading image
|
||||
libraries on demand; if so, the variable @code{image-library-alist}
|
||||
can be used to modify the set of known names for these dynamic
|
||||
libraries (though it is not posible to add new image formats).
|
||||
libraries (though it is not possible to add new image formats).
|
||||
|
||||
The supported image formats include XBM, XPM (needing the
|
||||
libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
|
||||
@ -3409,7 +3409,7 @@ specifying @code{:mask nil}.
|
||||
|
||||
@item :pointer @var{shape}
|
||||
This specifies the pointer shape when the mouse pointer is over this
|
||||
image. @xref{Pointer Shapes}, for available pointer shapes.
|
||||
image. @xref{Pointer Shape}, for available pointer shapes.
|
||||
|
||||
@item :map @var{map}
|
||||
This associates an image map of @dfn{hot spots} with this image.
|
||||
@ -3437,7 +3437,7 @@ When the mouse pointer is above a hot-spot area of an image, the
|
||||
property it defines a tool-tip for the hot-spot, and if it contains
|
||||
a @code{pointer} property, it defines the shape of the mouse cursor when
|
||||
it is over the hot-spot.
|
||||
@xref{Pointer Shapes}, for available pointer shapes.
|
||||
@xref{Pointer Shape}, for available pointer shapes.
|
||||
|
||||
When you click the mouse when the mouse pointer is over a hot-spot, an
|
||||
event is composed by combining the @var{id} of the hot-spot with the
|
||||
|
@ -975,6 +975,32 @@ comes back" twice.
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
@defun looking-back regexp &optional limit
|
||||
This function returns @code{t} if @var{regexp} matches text before
|
||||
point, ending at point, and @code{nil} otherwise.
|
||||
|
||||
Because regular expression matching works only going forward, this is
|
||||
implemented by searching backwards from point for a match that ends at
|
||||
point. That can be quite slow if it has to search a long distance.
|
||||
You can bound the time required by specifying @var{limit}, which says
|
||||
not to search before @var{limit}. In this case, the match that is
|
||||
found must begin at or after @var{limit}.
|
||||
|
||||
@example
|
||||
@group
|
||||
---------- Buffer: foo ----------
|
||||
I read "@point{}The cat in the hat
|
||||
comes back" twice.
|
||||
---------- Buffer: foo ----------
|
||||
|
||||
(looking-back "read \"" 3)
|
||||
@result{} t
|
||||
(looking-back "read \"" 4)
|
||||
@result{} nil
|
||||
@end group
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
@node POSIX Regexps
|
||||
@section POSIX Regular Expression Searching
|
||||
|
||||
|
@ -2989,12 +2989,11 @@ for possible pointer shapes.
|
||||
|
||||
@item line-spacing
|
||||
@kindex line-spacing @r{(text property)}
|
||||
A newline can have a @code{line-spacing} text or overlay property
|
||||
that controls the height of the corresponding display line.
|
||||
@c ??? Which display line is "corresponding"?
|
||||
The @code{line-spacing} property overrides the default frame line
|
||||
spacing and the buffer local @code{line-spacing} variable. We will
|
||||
call the property value @var{line-spacing}.
|
||||
A newline can have a @code{line-spacing} text or overlay property that
|
||||
controls the height of the display line ending with that newline. The
|
||||
property value overrides the default frame line spacing and the buffer
|
||||
local @code{line-spacing} variable. We will call the property value
|
||||
@var{line-spacing}.
|
||||
|
||||
If @var{line-spacing} is a positive integer, the value specifies
|
||||
additional vertical space, below the display line, in pixels.
|
||||
@ -3012,18 +3011,13 @@ is equivalent to using the @code{line-height} property.
|
||||
@item line-height
|
||||
@kindex line-height @r{(text property)}
|
||||
A newline can have a @code{line-height} text or overlay property that
|
||||
controls the total height of the corresponding display line.
|
||||
@c ??? Which display line is "corresponding"?
|
||||
controls the total height of the display line ending in that newline.
|
||||
We will call the property value @var{line-height}.
|
||||
|
||||
If @var{line-height} is 0, the newline does not contribute to the
|
||||
height of the display row; instead the height of the newline glyph is
|
||||
reduced.
|
||||
@c ??? That is not clear. Reduced how much?
|
||||
In that case, any @code{line-spacing} property on
|
||||
this newline is ignored. This can be used to tile small images or
|
||||
image slices without adding blank areas between the images.
|
||||
@c ??? Precisely which of these features does ``this'' mean?
|
||||
If @var{line-height} is 0, the height of the line is determined solely
|
||||
from its contents; nothing is added. Any @code{line-spacing} property
|
||||
on this newline is ignored. This case is useful for tiling small
|
||||
images or image slices without adding blank areas between the images.
|
||||
|
||||
If @var{line-height} is a positive integer, the value specifies the
|
||||
minimum line height in pixels. The line's ascent height is
|
||||
|
@ -1,3 +1,63 @@
|
||||
2004-09-28 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* display.texi (Display Custom) <indicate-buffer-boundaries>:
|
||||
Align with new functionality.
|
||||
|
||||
2004-09-26 Jesper Harder <harder@ifa.au.dk>
|
||||
|
||||
* sieve.texi (Manage Sieve API): nil -> @code{nil}.
|
||||
* pgg.texi (User Commands, Backend methods): do.
|
||||
* gnus.texi: Markup fixes.
|
||||
(Setting Process Marks): Fix `M P a' entry.
|
||||
* emacs-mime: Fixes.
|
||||
|
||||
2004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* gnus-faq.texi ([5.12]): Fix code example for FQDN in Message-Ids
|
||||
again.
|
||||
Use 5.10 instead of 5.10.0.
|
||||
|
||||
2004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* gnus.texi (Summary Mail Commands): S D e.
|
||||
|
||||
2004-09-20 Raymond Scholz <ray-2004@zonix.de> (tiny change)
|
||||
|
||||
* gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in
|
||||
the gnus-article-mode-line-format section.
|
||||
|
||||
2004-09-20 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
|
||||
|
||||
* gnus.texi (Various Summary Stuff): Fix the documentation for
|
||||
gnus-newsgroup-variables.
|
||||
|
||||
2004-09-20 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* gnus.texi (MIME Commands): Added
|
||||
gnus-mime-display-multipart-as-mixed,
|
||||
gnus-mime-display-multipart-alternative-as-mixed,
|
||||
gnus-mime-display-multipart-related-as-mixed.
|
||||
(Mail Source Customization): Clarify `mail-source-directory'.
|
||||
(Splitting Mail): Mention gnus-group-find-new-groups.
|
||||
(SpamOracle): Fixed typo.
|
||||
|
||||
* gnus-faq.texi: Untabify.
|
||||
([6.3]): nnir.el is in contrib directory.
|
||||
|
||||
* message.texi (News Headers): Clarify how a unique ID is created.
|
||||
|
||||
* gnus.texi (Batching Agents): Fixed typo in example. Reported
|
||||
by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
|
||||
|
||||
2004-09-20 Andre Srinivasan <andre@e2open.com>
|
||||
|
||||
* gnus.texi (Group Parameters): Added more on hooks. (Small
|
||||
change.)
|
||||
|
||||
2004-09-20 Florian Weimer <fw@deneb.enyo.de>
|
||||
|
||||
* gnus.texi (Charsets): Point to relevant section in emacs-mime.
|
||||
|
||||
2004-09-22 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* display.texi (Display Custom): Remove stray `@end defvar'.
|
||||
|
@ -1007,22 +1007,26 @@ This can be combined with up and down arrow bitmaps shown at the top
|
||||
and bottom of the left or right fringe if the window can be scrolled
|
||||
in either direction.
|
||||
|
||||
The buffer-local variable @code{indicate-buffer-boundaries} controls
|
||||
The buffer-local variable @code{indicate-buffer-boundaries} controls
|
||||
how the buffer boundaries and window scrolling is indicated in the
|
||||
fringes.
|
||||
|
||||
If the value is @code{left} or @code{right}, both angle and arrow
|
||||
If the value is @code{left} or @code{right}, both angle and arrow
|
||||
bitmaps are displayed in the left or right fringe, respectively.
|
||||
Any other non-@code{nil} value causes the bitmap on the top line to be
|
||||
displayed in the left fringe, and the bitmap on the bottom line in the
|
||||
right fringe.
|
||||
|
||||
If value is a cons @code{(angles . arrows)}, the car specifies the
|
||||
position of the angle bitmaps, and the cdr specifies the position of
|
||||
the arrow bitmaps. For example, @code{(t . right)} places the top
|
||||
angle bitmap in left fringe, the bottom angle bitmap in right fringe,
|
||||
and both arrow bitmaps in right fringe. To show just the angle
|
||||
bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}.
|
||||
If value is an alist, each element @code{(@var{indicator} .
|
||||
@var{position})} specifies the position of one of the indicators.
|
||||
The @var{indicator} must be one of @code{top}, @code{bottom},
|
||||
@code{up}, @code{down}, or @code{t} which specifies the default
|
||||
position for the indicators not present in the alist.
|
||||
The @var{position} is one of @code{left}, @code{right}, or @code{ni}
|
||||
which specifies not to show this indicator.
|
||||
|
||||
For example, @code{((top . left) (t . right))} places the top angle
|
||||
bitmap in left fringe, the bottom angle bitmap in right fringe, and
|
||||
both arrow bitmaps in right fringe. To show just the angle bitmaps in
|
||||
the left fringe, but no arrow bitmaps, use @code{((top . left)
|
||||
(bottom . left))}.
|
||||
|
||||
@vindex default-indicate-buffer-boundaries
|
||||
The value of the variable @code{default-indicate-buffer-boundaries}
|
||||
|
@ -328,7 +328,7 @@ you could say something like:
|
||||
|
||||
@item mm-inline-large-images
|
||||
@vindex mm-inline-large-images
|
||||
When displaying inline images that are larger than the window, XEmacs
|
||||
When displaying inline images that are larger than the window, Emacs
|
||||
does not enable scrolling, which means that you cannot see the whole
|
||||
image. To prevent this, the library tries to determine the image size
|
||||
before displaying it inline, and if it doesn't fit the window, the
|
||||
|
@ -102,7 +102,7 @@ Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
|
||||
|
||||
@menu
|
||||
* [1.1]:: What is the latest version of Gnus?
|
||||
* [1.2]:: What's new in 5.10.0?
|
||||
* [1.2]:: What's new in 5.10?
|
||||
* [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?
|
||||
@ -119,7 +119,7 @@ What is the latest version of Gnus?
|
||||
|
||||
Answer:
|
||||
|
||||
Jingle please: Gnus 5.10.0 is released, get it while it's
|
||||
Jingle please: Gnus 5.10 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
|
||||
@ -131,7 +131,7 @@ Answer:
|
||||
@end ifnottex
|
||||
@subsubheading Question 1.2:
|
||||
|
||||
What's new in 5.10.0?
|
||||
What's new in 5.10?
|
||||
|
||||
Answer:
|
||||
|
||||
@ -227,7 +227,7 @@ Which version of Emacs do I need?
|
||||
|
||||
Answer:
|
||||
|
||||
Gnus 5.10.0 requires an Emacs version that is greater
|
||||
Gnus 5.10 requires an Emacs version that is greater
|
||||
than or equal to Emacs 20.7 or XEmacs 21.1.
|
||||
|
||||
@ifnottex
|
||||
@ -440,7 +440,7 @@ the line
|
||||
@example
|
||||
|
||||
SET HOME=C:\myhome
|
||||
|
||||
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@ -548,9 +548,9 @@ Answer:
|
||||
|
||||
@example
|
||||
(add-to-list 'gnus-secondary-select-methods
|
||||
'(nntp "news.yourSecondProvider.net"))
|
||||
'(nntp "news.yourSecondProvider.net"))
|
||||
(add-to-list 'gnus-secondary-select-methods
|
||||
'(nntp "news.yourThirdProvider.net"))
|
||||
'(nntp "news.yourThirdProvider.net"))
|
||||
@end example
|
||||
|
||||
@ifnottex
|
||||
@ -745,9 +745,9 @@ Answer:
|
||||
(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.*")))
|
||||
(nnimap-address "imap.yourProvider.net")
|
||||
(nnimap-port 143)
|
||||
(nnimap-list-pattern "archive.*")))
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@ -877,7 +877,7 @@ Answer:
|
||||
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
|
||||
If you already use Gnus 5.10, you can say
|
||||
@samp{/o N}
|
||||
In summary buffer to load the last N messages, this feature is not available in 5.8.8
|
||||
|
||||
@ -1000,7 +1000,7 @@ Answer:
|
||||
|
||||
Answer:
|
||||
|
||||
Only if you use Gnus 5.10.0 or younger. In this case you've got the
|
||||
Only if you use Gnus 5.10 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
|
||||
@ -1033,7 +1033,7 @@ Answer:
|
||||
@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.
|
||||
Outlook deuglify is only available since Gnus 5.10.
|
||||
|
||||
@ifnottex
|
||||
@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages
|
||||
@ -1204,8 +1204,8 @@ Answer:
|
||||
@example
|
||||
(gnus-add-configuration
|
||||
'(article (vertical 1.0
|
||||
(summary .35 point)
|
||||
(article 1.0))))
|
||||
(summary .35 point)
|
||||
(article 1.0))))
|
||||
@end example
|
||||
|
||||
|
||||
@ -1252,7 +1252,7 @@ Answer:
|
||||
sadly hard tabulators are broken in 5.8.8.
|
||||
|
||||
|
||||
Since 5.10.0, Gnus offers you some very nice new specifiers,
|
||||
Since 5.10, 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:
|
||||
@ -1771,7 +1771,7 @@ Answer:
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
if you already use Gnus 5.10.0, if you still use 5.8.8 or
|
||||
if you already use Gnus 5.10, if you still use 5.8.8 or
|
||||
5.9 try this instead:
|
||||
|
||||
|
||||
@ -1793,7 +1793,7 @@ Answer:
|
||||
|
||||
Answer:
|
||||
|
||||
Since 5.10.0 Gnus doesn't generate a sender header by
|
||||
Since 5.10 Gnus doesn't generate a sender header by
|
||||
default. For older Gnus' try this in ~/.gnus:
|
||||
|
||||
|
||||
@ -1851,10 +1851,10 @@ Answer:
|
||||
@end example
|
||||
@noindent
|
||||
in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this
|
||||
instead:
|
||||
instead (works for newer versions a well):
|
||||
@example
|
||||
(eval-after-load "message"
|
||||
'(let (myfqdn "yourmachine.yourdomain.tld");; <-- Edit this!
|
||||
'(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
|
||||
(if (boundp 'message-user-fqdn)
|
||||
(setq message-user-fqdn fqdn)
|
||||
(gnus-message 1 "Redefining `message-make-fqdn'.")
|
||||
@ -2021,7 +2021,7 @@ Answer:
|
||||
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
|
||||
Since Gnus 5.10 there's also a Gnus interface for
|
||||
groups.google.com which you can call with
|
||||
@samp{G W}) in group buffer.
|
||||
|
||||
@ -2046,9 +2046,9 @@ Answer:
|
||||
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/}.
|
||||
cool to you get nnir.el from the contrib directory of the Gnus
|
||||
distribution or
|
||||
@uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain}
|
||||
Instructions on how to use it are at the top of the file.
|
||||
|
||||
@ifnottex
|
||||
@ -2231,7 +2231,7 @@ Answer:
|
||||
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):
|
||||
still using 5.8.8 or 5.9 (it's the default since 5.10):
|
||||
|
||||
|
||||
@example
|
||||
@ -2524,7 +2524,7 @@ Answer:
|
||||
|
||||
@noindent
|
||||
in ~/.emacs. If you don't care about width of CJK
|
||||
characters or use Gnus 5.10.0 or younger together with a
|
||||
characters or use Gnus 5.10 or younger together with a
|
||||
recent GNU Emacs, you should say
|
||||
|
||||
|
||||
@ -2538,7 +2538,7 @@ Answer:
|
||||
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
|
||||
5.10 since there quite some work on improving it has
|
||||
been done.
|
||||
|
||||
@ifnottex
|
||||
|
106
man/gnus.texi
106
man/gnus.texi
@ -3013,11 +3013,23 @@ tag can be 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
|
||||
group. @code{dummy-variable} will be set to the result of the
|
||||
@code{(ding)} form, but who cares?
|
||||
This can also be used as a group-specific hook function. 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 group.
|
||||
@code{dummy-variable} will be set to the (meaningless) result of the
|
||||
@code{(ding)} form.
|
||||
|
||||
Alternatively, since the VARIABLE becomes local to the group, this
|
||||
pattern can be used to temporarily change a hook. For example, if the
|
||||
following is added to a group parameter
|
||||
|
||||
@lisp
|
||||
(gnus-summary-prepared-hook
|
||||
'(lambda nil (local-set-key "d" (local-key-binding "n"))))
|
||||
@end lisp
|
||||
|
||||
when the group is entered, the 'd' key will not mark the article as
|
||||
expired.
|
||||
|
||||
@end table
|
||||
|
||||
@ -5368,6 +5380,13 @@ to the @code{root} account, you may want to resend it to
|
||||
This command understands the process/prefix convention
|
||||
(@pxref{Process/Prefix}).
|
||||
|
||||
@item S D e
|
||||
@kindex S D e (Summary)
|
||||
@findex gnus-summary-resend-message-edit
|
||||
|
||||
Like the previous command, but will allow you to edit the message as
|
||||
if it were a new message before resending.
|
||||
|
||||
@item S O m
|
||||
@kindex S O m (Summary)
|
||||
@findex gnus-uu-digest-mail-forward
|
||||
@ -6187,7 +6206,7 @@ Mark all series that have already had some articles marked
|
||||
@item M P a
|
||||
@kindex M P a (Summary)
|
||||
@findex gnus-uu-mark-all
|
||||
Mark all articles in series order (@code{gnus-uu-mark-series}).
|
||||
Mark all articles in series order (@code{gnus-uu-mark-all}).
|
||||
|
||||
@item M P b
|
||||
@kindex M P b (Summary)
|
||||
@ -9328,6 +9347,26 @@ Here's an example function the does the latter:
|
||||
@item gnus-mime-multipart-functions
|
||||
Alist of @acronym{MIME} multipart types and functions to handle them.
|
||||
|
||||
@vindex gnus-mime-display-multipart-alternative-as-mixed
|
||||
@item gnus-mime-display-multipart-alternative-as-mixed
|
||||
Display "multipart/alternative" parts as "multipart/mixed".
|
||||
|
||||
@vindex gnus-mime-display-multipart-related-as-mixed
|
||||
@item gnus-mime-display-multipart-related-as-mixed
|
||||
Display "multipart/related" parts as "multipart/mixed".
|
||||
|
||||
If displaying "text/html" is discouraged, see
|
||||
@code{mm-discouraged-alternatives} in @ref{Display Customization,
|
||||
Display Customization, , emacs-mime, Emacs-Mime Manual}. Images or
|
||||
other material inside a "multipart/related" part might be overlooked
|
||||
when this variable is nil.
|
||||
|
||||
@vindex gnus-mime-display-multipart-as-mixed
|
||||
@item gnus-mime-display-multipart-as-mixed
|
||||
Display "multipart" parts as "multipart/mixed". If t, it overrides nil
|
||||
values of @code{gnus-mime-display-multipart-alternative-as-mixed} and
|
||||
@code{gnus-mime-display-multipart-related-as-mixed}.
|
||||
|
||||
@vindex mm-file-name-rewrite-functions
|
||||
@item mm-file-name-rewrite-functions
|
||||
List of functions used for rewriting file names of @acronym{MIME} parts.
|
||||
@ -9424,6 +9463,10 @@ encode using quoted-printable) or @code{t} (always use 8bit).
|
||||
@cindex coding system aliases
|
||||
@cindex preferred charset
|
||||
|
||||
@xref{Encoding Customization, , Encoding Customization, emacs-mime,
|
||||
The Emacs MIME Manual}, for additional variables that control which
|
||||
MIME charsets are used when sending messages.
|
||||
|
||||
Other charset tricks that may be useful, although not Gnus-specific:
|
||||
|
||||
If there are several @acronym{MIME} charsets that encode the same Emacs
|
||||
@ -10136,11 +10179,19 @@ the list in one particular group:
|
||||
@vindex gnus-newsgroup-variables
|
||||
@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
|
||||
@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:
|
||||
variables and their default expressions to be evalled (when the default
|
||||
values are not @code{nil}), that should be made global while the summary
|
||||
buffer is active.
|
||||
|
||||
Note: The default expressions will be evaluated (using function
|
||||
@code{eval}) before assignment to the local variable rather than just
|
||||
assigned to it. If the default expression is the symbol @code{global},
|
||||
that symbol will not be evaluated but the global value of the local
|
||||
variable will be used instead.
|
||||
|
||||
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
|
||||
@ -10149,6 +10200,7 @@ other buffers. For example:
|
||||
"^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
|
||||
@end lisp
|
||||
|
||||
Also @pxref{Group Parameters}.
|
||||
@end table
|
||||
|
||||
|
||||
@ -11269,9 +11321,9 @@ no more new text to scroll in. The default is @code{nil}.
|
||||
@vindex gnus-article-mode-line-format
|
||||
@item gnus-article-mode-line-format
|
||||
This variable is a format string along the same lines as
|
||||
@code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}). It
|
||||
accepts the same format specifications as that variable, with two
|
||||
extensions:
|
||||
@code{gnus-summary-mode-line-format} (@pxref{Summary Buffer Mode
|
||||
Line}). It accepts the same format specifications as that variable,
|
||||
with two extensions:
|
||||
|
||||
@table @samp
|
||||
|
||||
@ -13203,7 +13255,9 @@ expression should @emph{always} be @samp{*} so that it matches any mails
|
||||
that haven't been matched by any of the other regexps. (These rules are
|
||||
processed from the beginning of the alist toward the end. The first
|
||||
rule to make a match will ``win'', unless you have crossposting enabled.
|
||||
In that case, all matching rules will ``win''.)
|
||||
In that case, all matching rules will ``win''.) When new groups are
|
||||
created by splitting mail, you may want to run
|
||||
@code{gnus-group-find-new-groups} to see the new groups.
|
||||
|
||||
If you like to tinker with this yourself, you can set this variable to a
|
||||
function of your choice. This function will be called without any
|
||||
@ -13771,10 +13825,10 @@ If non-@code{nil}, ignore errors when reading mail from a mail source.
|
||||
|
||||
@item mail-source-directory
|
||||
@vindex mail-source-directory
|
||||
Directory where files (if any) will be stored. The default is
|
||||
@file{~/Mail/}. At present, the only thing this is used for is to say
|
||||
where the incoming files will be stored if the previous variable is
|
||||
@code{nil}.
|
||||
Directory where incoming mail source files (if any) will be stored. The
|
||||
default is @file{~/Mail/}. At present, the only thing this is used for
|
||||
is to say where the incoming files will be stored if the variable
|
||||
@code{mail-source-delete-incoming} is @code{nil} or a number.
|
||||
|
||||
@item mail-source-incoming-file-prefix
|
||||
@vindex mail-source-incoming-file-prefix
|
||||
@ -16571,7 +16625,7 @@ follows:
|
||||
This instructs the @code{imap.el} package to log any exchanges with
|
||||
the server. The log is stored in the buffer @samp{*imap-log*}. Look
|
||||
for error messages, which sometimes are tagged with the keyword
|
||||
@code{BAD} - but when submitting a bug, make sure to include all the
|
||||
@code{BAD}---but when submitting a bug, make sure to include all the
|
||||
data.
|
||||
|
||||
@node Other Sources
|
||||
@ -18246,8 +18300,8 @@ placeholders if you care (See @code{gnus-auto-goto-ignores}).
|
||||
While it may be obvious to all, the only headers and articles
|
||||
available while unplugged are those headers and articles that were
|
||||
fetched into the Agent while previously plugged. To put it another
|
||||
way, "If you forget to fetch something while plugged, you might have a
|
||||
less than satisfying unplugged session". For this reason, the Agent
|
||||
way, ``If you forget to fetch something while plugged, you might have a
|
||||
less than satisfying unplugged session''. For this reason, the Agent
|
||||
adds two visual effects to your summary buffer. These effects display
|
||||
the download status of each article so that you always know which
|
||||
articles will be available when unplugged.
|
||||
@ -18624,7 +18678,7 @@ following incantation:
|
||||
|
||||
@example
|
||||
#!/bin/sh
|
||||
emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
|
||||
emacs -batch -l ~/.emacs -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
|
||||
@end example
|
||||
|
||||
|
||||
@ -20436,8 +20490,8 @@ something like:
|
||||
...
|
||||
@end example
|
||||
|
||||
Then that means "score on the from header of the grandparent of the
|
||||
current article". An indirection is quite fast, but it's better to say:
|
||||
Then that means ``score on the from header of the grandparent of the
|
||||
current article''. An indirection is quite fast, but it's better to say:
|
||||
|
||||
@example
|
||||
(1-
|
||||
@ -22656,7 +22710,7 @@ entering a group. Thus, entering a group with unseen or unread
|
||||
articles becomes the substitute for checking incoming mail. Whether
|
||||
only unseen articles or all unread articles will be processed is
|
||||
determined by the @code{spam-autodetect-recheck-messages}. When set
|
||||
to t, unread messages will be rechecked.
|
||||
to @code{t}, unread messages will be rechecked.
|
||||
|
||||
@code{spam-autodetect} grants the user at once more and less control
|
||||
of spam filtering. The user will have more control over each group's
|
||||
|
@ -1551,8 +1551,8 @@ This optional header will be computed by Message.
|
||||
@cindex Sun
|
||||
@cindex i-did-not-set--mail-host-address--so-tickle-me
|
||||
This required header will be generated by Message. A unique ID will be
|
||||
created based on the date, time, user name and system name. For the
|
||||
domain part, message will look (in this order) at
|
||||
created based on the date, time, user name (for the local part) and the
|
||||
domain part. For the domain part, message will look (in this order) at
|
||||
@code{message-user-fqdn}, @code{system-name}, @code{mail-host-address}
|
||||
and @code{message-user-mail-address} (i.e. @code{user-mail-address})
|
||||
until a probably valid fully qualified domain name (FQDN) was found.
|
||||
|
11
man/pgg.texi
11
man/pgg.texi
@ -135,8 +135,9 @@ would be asked about the recipients.
|
||||
If encryption is successful, it replaces the current region contents (in
|
||||
the accessible portion) with the resulting data.
|
||||
|
||||
If optional argument @var{sign} is non-nil, the function is request to
|
||||
do a combined sign and encrypt. This currently only work with GnuPG.
|
||||
If optional argument @var{sign} is non-@code{nil}, the function is
|
||||
request to do a combined sign and encrypt. This currently only work
|
||||
with GnuPG.
|
||||
@end deffn
|
||||
|
||||
@deffn Command pgg-decrypt-region start end
|
||||
@ -301,9 +302,9 @@ keyrings.
|
||||
|
||||
@deffn Method pgg-scheme-encrypt-region scheme start end recipients &optional sign
|
||||
Encrypt the current region between @var{start} and @var{end} for
|
||||
@var{recipients}. If @var{sign} is non-nil, do a combined sign and
|
||||
encrypt. If encryption is successful, it returns @code{t}, otherwise
|
||||
@code{nil}.
|
||||
@var{recipients}. If @var{sign} is non-@code{nil}, do a combined sign
|
||||
and encrypt. If encryption is successful, it returns @code{t},
|
||||
otherwise @code{nil}.
|
||||
@end deffn
|
||||
|
||||
@deffn Method pgg-scheme-decrypt-region scheme start end
|
||||
|
@ -277,7 +277,7 @@ Sets the default port to use, the suggested port number is @code{2000}.
|
||||
|
||||
@item sieve-manage-log
|
||||
@vindex sieve-manage-log
|
||||
If non-nil, should be a string naming a buffer where a protocol trace
|
||||
If non-@code{nil}, should be a string naming a buffer where a protocol trace
|
||||
is dumped (for debugging purposes).
|
||||
|
||||
@end table
|
||||
@ -313,7 +313,8 @@ List scripts on the server.
|
||||
|
||||
@item sieve-manage-havespace
|
||||
@findex sieve-manage-havespace
|
||||
Returns non-nil iff server have roam for a script of given size.
|
||||
Returns non-@code{nil} iff server have roam for a script of given
|
||||
size.
|
||||
|
||||
@item sieve-manage-getscript
|
||||
@findex sieve-manage-getscript
|
||||
|
@ -1,3 +1,41 @@
|
||||
2004-09-29 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* dispextern.h (valid_fringe_bitmap_p): Fix prototype.
|
||||
|
||||
* fringe.c (Vfringe_bitmaps): New variable.
|
||||
(syms_of_fringe): DEFVAR_LISP it.
|
||||
(valid_fringe_bitmap_p): Rename from valid_fringe_bitmap_id_p.
|
||||
Change arg to Lisp_Object and fail if not an integer.
|
||||
(get_fringe_bitmap_name, resolve_fringe_bitmap)
|
||||
(destroy_fringe_bitmap): New functions.
|
||||
(Fdestroy_fringe_bitmap): Change arg to bitmap symbol. Use
|
||||
destroy_fringe_bitmap. Remove symbol from Vfringe_bitmaps and
|
||||
clear its fringe property.
|
||||
(init_fringe_bitmap): Use destroy_fringe_bitmap instead of
|
||||
Fdestroy_fringe_bitmap.
|
||||
(Fdefine_fringe_bitmap): Add BITMAP arg specifying new or existing
|
||||
bitmap symbol; remove WHICH arg. Add symbol to Vfringe_bitmaps
|
||||
and set fringe property. Signal error if no free slots.
|
||||
(Fset_fringe_bitmap_face): Change arg to bitmap symbol.
|
||||
(Ffringe_bitmaps_at_pos): Return bitmap symbols instead of numbers.
|
||||
|
||||
* xdisp.c (handle_single_display_prop): Fringe bitmaps are now
|
||||
symbols with a fringe property.
|
||||
|
||||
2004-09-27 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* buffer.c (syms_of_buffer) <indicate-buffer-boundaries>:
|
||||
Doc fix. Format may now be a symbol or alist, not a cons.
|
||||
|
||||
* fringe.c (update_window_fringes): Handle new formats of
|
||||
indicate-buffer-boundaries (symbol or alist). No longer
|
||||
allow a simple cons.
|
||||
(Ffringe_bitmaps_at_pos): Use nil value for no bitmap.
|
||||
|
||||
2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* config.in: Rebuild
|
||||
|
||||
2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* config.in: Rebuild.
|
||||
|
22
src/buffer.c
22
src/buffer.c
@ -5698,16 +5698,20 @@ If non-nil, the first and last line of the buffer are marked in the fringe
|
||||
of a window on window-systems with angle bitmaps, or if the window can be
|
||||
scrolled, the top and bottom line of the window are marked with up and down
|
||||
arrow bitmaps.
|
||||
If value is `left' or `right', both angle and arrow bitmaps are displayed in
|
||||
the left or right fringe, resp. Any other non-nil value causes the
|
||||
bitmap on the top line to be displayed in the left fringe, and the
|
||||
bitmap on the bottom line in the right fringe.
|
||||
If value is a cons (ANGLES . ARROWS), the car specifies the position
|
||||
of the angle bitmaps, and the cdr specifies the position of the arrow
|
||||
bitmaps. For example, (t . right) places the top angle bitmap in left
|
||||
fringe, the bottom angle bitmap in right fringe, and both arrow
|
||||
|
||||
If value is a symbol `left' or `right', both angle and arrow bitmaps
|
||||
are displayed in the left or right fringe, resp.
|
||||
|
||||
If value is an alist, each element (INDICATOR . POSITION) specifies
|
||||
the position of one of the indicators. INDICATOR is one of `top',
|
||||
`bottom', `up', `down', or t, which specifies the default position,
|
||||
and POSITION is one of `left', `right', or nil, meaning do not show
|
||||
this indicator.
|
||||
|
||||
For example, ((top . left) (t . right)) places the top angle bitmap in
|
||||
left fringe, the bottom angle bitmap in right fringe, and both arrow
|
||||
bitmaps in right fringe. To show just the angle bitmaps in the left
|
||||
fringe, but no arrow bitmaps, use (left . nil). */);
|
||||
fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). */);
|
||||
|
||||
DEFVAR_PER_BUFFER ("scroll-up-aggressively",
|
||||
¤t_buffer->scroll_up_aggressively, Qnil,
|
||||
|
@ -136,7 +136,7 @@ Boston, MA 02111-1307, USA. */
|
||||
/* Define to 1 if you have the `euidaccess' function. */
|
||||
#undef HAVE_EUIDACCESS
|
||||
|
||||
/* Define to 1 if this OS has exec shield. */
|
||||
/* Define to 1 if this OS has exec shield and we can handle it. */
|
||||
#undef HAVE_EXECSHIELD
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
|
@ -2634,7 +2634,7 @@ extern int x_intersect_rectangles P_ ((XRectangle *, XRectangle *,
|
||||
|
||||
/* Defined in fringe.c */
|
||||
|
||||
int valid_fringe_bitmap_id_p (int);
|
||||
int valid_fringe_bitmap_p (Lisp_Object);
|
||||
void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int));
|
||||
void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *));
|
||||
void draw_window_fringes P_ ((struct window *));
|
||||
|
288
src/fringe.c
288
src/fringe.c
@ -31,12 +31,22 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
|
||||
extern Lisp_Object Qfringe;
|
||||
extern Lisp_Object Qtop, Qbottom, Qcenter;
|
||||
extern Lisp_Object Qup, Qdown, Qleft, Qright;
|
||||
|
||||
/* Non-nil means that newline may flow into the right fringe. */
|
||||
|
||||
Lisp_Object Voverflow_newline_into_fringe;
|
||||
|
||||
/* List of known fringe bitmap symbols.
|
||||
|
||||
The fringe bitmap number is stored in the `fringe' property on
|
||||
those symbols. Names for the built-in bitmaps are installed by
|
||||
loading fringe.el.
|
||||
*/
|
||||
|
||||
Lisp_Object Vfringe_bitmaps;
|
||||
|
||||
enum fringe_bitmap_type
|
||||
{
|
||||
@ -443,15 +453,90 @@ static int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS;
|
||||
/* Return 1 if FRINGE_ID is a valid fringe bitmap id. */
|
||||
|
||||
int
|
||||
valid_fringe_bitmap_id_p (fringe_id)
|
||||
int fringe_id;
|
||||
valid_fringe_bitmap_p (bitmap)
|
||||
Lisp_Object bitmap;
|
||||
{
|
||||
return (fringe_id >= NO_FRINGE_BITMAP
|
||||
&& fringe_id < max_used_fringe_bitmap
|
||||
&& (fringe_id < MAX_STANDARD_FRINGE_BITMAPS
|
||||
|| fringe_bitmaps[fringe_id] != NULL));
|
||||
int bn;
|
||||
|
||||
if (!INTEGERP (bitmap))
|
||||
return 0;
|
||||
|
||||
bn = XINT (bitmap);
|
||||
return (bn >= NO_FRINGE_BITMAP
|
||||
&& bn < max_used_fringe_bitmap
|
||||
&& (bn < MAX_STANDARD_FRINGE_BITMAPS
|
||||
|| fringe_bitmaps[bn] != NULL));
|
||||
}
|
||||
|
||||
/* Get fringe bitmap name for bitmap number BN.
|
||||
|
||||
Found by traversing Vfringe_bitmaps comparing BN to the
|
||||
fringe property for each symbol.
|
||||
|
||||
Return BN if not found in Vfringe_bitmaps. */
|
||||
|
||||
static Lisp_Object
|
||||
get_fringe_bitmap_name (bn)
|
||||
int bn;
|
||||
{
|
||||
Lisp_Object bitmaps;
|
||||
Lisp_Object num;
|
||||
|
||||
/* Zero means no bitmap -- return nil. */
|
||||
if (bn <= 0)
|
||||
return Qnil;
|
||||
|
||||
bitmaps = Vfringe_bitmaps;
|
||||
num = make_number (bn);
|
||||
|
||||
while (CONSP (bitmaps))
|
||||
{
|
||||
Lisp_Object bitmap = XCAR (bitmaps);
|
||||
if (EQ (num, Fget (bitmap, Qfringe)))
|
||||
return bitmap;
|
||||
bitmaps = XCDR (bitmaps);
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
/* Resolve a BITMAP parameter.
|
||||
|
||||
An INTEGER, corresponding to a bitmap number.
|
||||
A STRING which is interned to a symbol.
|
||||
A SYMBOL which has a fringe property which is a bitmap number.
|
||||
*/
|
||||
|
||||
static int
|
||||
resolve_fringe_bitmap (bitmap, namep)
|
||||
Lisp_Object bitmap;
|
||||
Lisp_Object *namep;
|
||||
{
|
||||
if (namep)
|
||||
*namep = Qnil;
|
||||
|
||||
if (STRINGP (bitmap))
|
||||
bitmap = intern (SDATA (bitmap));
|
||||
|
||||
if (SYMBOLP (bitmap))
|
||||
{
|
||||
if (namep)
|
||||
*namep = bitmap;
|
||||
bitmap = Fget (bitmap, Qfringe);
|
||||
}
|
||||
|
||||
if (valid_fringe_bitmap_p (bitmap))
|
||||
{
|
||||
if (namep && NILP (*namep))
|
||||
*namep = get_fringe_bitmap_name (XINT (bitmap));
|
||||
return XINT (bitmap);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* Draw the bitmap WHICH in one of the left or right fringes of
|
||||
window W. ROW is the glyph row for which to display the bitmap; it
|
||||
determines the vertical position at which the bitmap has to be
|
||||
@ -706,9 +791,10 @@ update_window_fringes (w, force_p)
|
||||
int rn, nrows = w->current_matrix->nrows;
|
||||
int y;
|
||||
int redraw_p = 0;
|
||||
Lisp_Object ind;
|
||||
int boundary_pos = 0, arrow_pos = 0;
|
||||
int empty_pos = 0;
|
||||
Lisp_Object boundary_top = Qnil, boundary_bot = Qnil;
|
||||
Lisp_Object arrow_top = Qnil, arrow_bot = Qnil;
|
||||
Lisp_Object empty_pos;
|
||||
Lisp_Object ind = Qnil;
|
||||
|
||||
if (w->pseudo_window_p)
|
||||
return 0;
|
||||
@ -716,23 +802,29 @@ update_window_fringes (w, force_p)
|
||||
if (!MINI_WINDOW_P (w)
|
||||
&& (ind = XBUFFER (w->buffer)->indicate_buffer_boundaries, !NILP (ind)))
|
||||
{
|
||||
int do_eob = 1, do_bob = 1;
|
||||
Lisp_Object arrows;
|
||||
|
||||
if (CONSP (ind))
|
||||
arrows = XCDR (ind), ind = XCAR (ind);
|
||||
if (EQ (ind, Qleft) || EQ (ind, Qright))
|
||||
boundary_top = boundary_bot = arrow_top = arrow_bot = ind;
|
||||
else if (CONSP (ind) && CONSP (XCAR (ind)))
|
||||
{
|
||||
Lisp_Object pos;
|
||||
if (pos = Fassq (Qt, ind), !NILP (pos))
|
||||
boundary_top = boundary_bot = arrow_top = arrow_bot = XCDR (pos);
|
||||
if (pos = Fassq (Qtop, ind), !NILP (pos))
|
||||
boundary_top = XCDR (pos);
|
||||
if (pos = Fassq (Qbottom, ind), !NILP (pos))
|
||||
boundary_bot = XCDR (pos);
|
||||
if (pos = Fassq (Qup, ind), !NILP (pos))
|
||||
arrow_top = XCDR (pos);
|
||||
if (pos = Fassq (Qdown, ind), !NILP (pos))
|
||||
arrow_bot = XCDR (pos);
|
||||
}
|
||||
else
|
||||
arrows = ind;
|
||||
ind = Qnil;
|
||||
}
|
||||
|
||||
if (EQ (ind, Qleft))
|
||||
boundary_pos = -1;
|
||||
else if (EQ (ind, Qright))
|
||||
boundary_pos = 1;
|
||||
|
||||
if (EQ (arrows, Qleft))
|
||||
arrow_pos = -1;
|
||||
else if (EQ (arrows, Qright))
|
||||
arrow_pos = 1;
|
||||
if (!NILP (ind))
|
||||
{
|
||||
int do_eob = 1, do_bob = 1;
|
||||
|
||||
for (y = 0, rn = 0;
|
||||
y < yb && rn < nrows;
|
||||
@ -753,17 +845,17 @@ update_window_fringes (w, force_p)
|
||||
row->indicate_bob_p = row->indicate_top_line_p = 0;
|
||||
row->indicate_eob_p = row->indicate_bottom_line_p = 0;
|
||||
|
||||
if (!NILP (ind)
|
||||
if (!NILP (boundary_top)
|
||||
&& MATRIX_ROW_START_CHARPOS (row) <= BUF_BEGV (XBUFFER (w->buffer)))
|
||||
row->indicate_bob_p = do_bob, do_bob = 0;
|
||||
else if (!NILP (arrows)
|
||||
else if (!NILP (arrow_top)
|
||||
&& (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0) == rn)
|
||||
row->indicate_top_line_p = 1;
|
||||
|
||||
if (!NILP (ind)
|
||||
if (!NILP (boundary_bot)
|
||||
&& MATRIX_ROW_END_CHARPOS (row) >= BUF_ZV (XBUFFER (w->buffer)))
|
||||
row->indicate_eob_p = do_eob, do_eob = 0;
|
||||
else if (!NILP (arrows)
|
||||
else if (!NILP (arrow_bot)
|
||||
&& y + row->height >= yb)
|
||||
row->indicate_bottom_line_p = 1;
|
||||
|
||||
@ -775,10 +867,9 @@ update_window_fringes (w, force_p)
|
||||
}
|
||||
}
|
||||
|
||||
if (EQ (XBUFFER (w->buffer)->indicate_empty_lines, Qright))
|
||||
empty_pos = 1;
|
||||
else if (EQ (XBUFFER (w->buffer)->indicate_empty_lines, Qleft))
|
||||
empty_pos = -1;
|
||||
empty_pos = XBUFFER (w->buffer)->indicate_empty_lines;
|
||||
if (!NILP (empty_pos) && !EQ (empty_pos, Qright))
|
||||
empty_pos = WINDOW_LEFT_FRINGE_WIDTH (w) == 0 ? Qright : Qleft;
|
||||
|
||||
for (y = 0, rn = 0;
|
||||
y < yb && rn < nrows;
|
||||
@ -802,20 +893,20 @@ update_window_fringes (w, force_p)
|
||||
left = row->left_user_fringe_bitmap;
|
||||
left_face_id = row->left_user_fringe_face_id;
|
||||
}
|
||||
else if (row->indicate_bob_p && boundary_pos <= 0)
|
||||
left = ((row->indicate_eob_p && boundary_pos < 0)
|
||||
else if (row->indicate_bob_p && EQ (boundary_top, Qleft))
|
||||
left = ((row->indicate_eob_p && EQ (boundary_bot, Qleft))
|
||||
? LEFT_BRACKET_BITMAP : TOP_LEFT_ANGLE_BITMAP);
|
||||
else if (row->indicate_eob_p && boundary_pos < 0)
|
||||
else if (row->indicate_eob_p && EQ (boundary_bot, Qleft))
|
||||
left = BOTTOM_LEFT_ANGLE_BITMAP;
|
||||
else if (row->truncated_on_left_p)
|
||||
left = LEFT_TRUNCATION_BITMAP;
|
||||
else if (MATRIX_ROW_CONTINUATION_LINE_P (row))
|
||||
left = CONTINUATION_LINE_BITMAP;
|
||||
else if (row->indicate_empty_line_p && empty_pos <= 0)
|
||||
else if (row->indicate_empty_line_p && EQ (empty_pos, Qleft))
|
||||
left = ZV_LINE_BITMAP;
|
||||
else if (row->indicate_top_line_p && arrow_pos <= 0)
|
||||
else if (row->indicate_top_line_p && EQ (arrow_top, Qleft))
|
||||
left = UP_ARROW_BITMAP;
|
||||
else if (row->indicate_bottom_line_p && arrow_pos < 0)
|
||||
else if (row->indicate_bottom_line_p && EQ (arrow_bot, Qleft))
|
||||
left = DOWN_ARROW_BITMAP;
|
||||
else
|
||||
left = NO_FRINGE_BITMAP;
|
||||
@ -828,22 +919,20 @@ update_window_fringes (w, force_p)
|
||||
right = row->right_user_fringe_bitmap;
|
||||
right_face_id = row->right_user_fringe_face_id;
|
||||
}
|
||||
else if (row->indicate_bob_p && boundary_pos > 0)
|
||||
right = ((row->indicate_eob_p && boundary_pos >= 0)
|
||||
else if (row->indicate_bob_p && EQ (boundary_top, Qright))
|
||||
right = ((row->indicate_eob_p && EQ (boundary_bot, Qright))
|
||||
? RIGHT_BRACKET_BITMAP : TOP_RIGHT_ANGLE_BITMAP);
|
||||
else if (row->indicate_eob_p && boundary_pos >= 0)
|
||||
else if (row->indicate_eob_p && EQ (boundary_bot, Qright))
|
||||
right = BOTTOM_RIGHT_ANGLE_BITMAP;
|
||||
else if (row->truncated_on_right_p)
|
||||
right = RIGHT_TRUNCATION_BITMAP;
|
||||
else if (row->continued_p)
|
||||
right = CONTINUED_LINE_BITMAP;
|
||||
else if (row->indicate_top_line_p && arrow_pos > 0)
|
||||
else if (row->indicate_top_line_p && EQ (arrow_top, Qright))
|
||||
right = UP_ARROW_BITMAP;
|
||||
else if (row->indicate_bottom_line_p && arrow_pos >= 0)
|
||||
else if (row->indicate_bottom_line_p && EQ (arrow_bot, Qright))
|
||||
right = DOWN_ARROW_BITMAP;
|
||||
else if (row->indicate_empty_line_p
|
||||
&& (empty_pos > 0
|
||||
|| (WINDOW_LEFT_FRINGE_WIDTH (w) == 0 && empty_pos == 0)))
|
||||
else if (row->indicate_empty_line_p && EQ (empty_pos, Qright))
|
||||
right = ZV_LINE_BITMAP;
|
||||
else
|
||||
right = NO_FRINGE_BITMAP;
|
||||
@ -978,19 +1067,12 @@ compute_fringe_widths (f, redraw)
|
||||
redraw_frame (f);
|
||||
}
|
||||
|
||||
DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap,
|
||||
1, 1, 0,
|
||||
doc: /* Destroy fringe bitmap WHICH.
|
||||
If WHICH overrides a standard fringe bitmap, the original bitmap is restored. */)
|
||||
(which)
|
||||
Lisp_Object which;
|
||||
{
|
||||
int n;
|
||||
struct fringe_bitmap **fbp;
|
||||
|
||||
CHECK_NUMBER (which);
|
||||
if (n = XINT (which), n >= max_used_fringe_bitmap)
|
||||
return Qnil;
|
||||
void
|
||||
destroy_fringe_bitmap (n)
|
||||
int n;
|
||||
{
|
||||
struct fringe_bitmap **fbp;
|
||||
|
||||
fringe_faces[n] = FRINGE_FACE_ID;
|
||||
|
||||
@ -1006,7 +1088,31 @@ If WHICH overrides a standard fringe bitmap, the original bitmap is restored. *
|
||||
while (max_used_fringe_bitmap > MAX_STANDARD_FRINGE_BITMAPS
|
||||
&& fringe_bitmaps[max_used_fringe_bitmap - 1] == NULL)
|
||||
max_used_fringe_bitmap--;
|
||||
}
|
||||
|
||||
|
||||
DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap,
|
||||
1, 1, 0,
|
||||
doc: /* Destroy fringe bitmap BITMAP.
|
||||
If BITMAP overrides a standard fringe bitmap, the original bitmap is restored. */)
|
||||
(bitmap)
|
||||
Lisp_Object bitmap;
|
||||
{
|
||||
int n;
|
||||
Lisp_Object sym;
|
||||
|
||||
n = resolve_fringe_bitmap (bitmap, &sym);
|
||||
if (n < 0)
|
||||
return Qnil;
|
||||
|
||||
destroy_fringe_bitmap (n);
|
||||
|
||||
if (SYMBOLP (sym))
|
||||
{
|
||||
Vfringe_bitmaps = Fdelq (sym, Vfringe_bitmaps);
|
||||
/* It would be better to remove the fringe property. */
|
||||
Fput (sym, Qfringe, Qnil);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
@ -1077,7 +1183,7 @@ init_fringe_bitmap (which, fb, once_p)
|
||||
|
||||
if (!once_p)
|
||||
{
|
||||
Fdestroy_fringe_bitmap (make_number (which));
|
||||
destroy_fringe_bitmap (which);
|
||||
|
||||
if (rif->define_fringe_bitmap)
|
||||
rif->define_fringe_bitmap (which, fb->bits, fb->height, fb->width);
|
||||
@ -1090,26 +1196,32 @@ init_fringe_bitmap (which, fb, once_p)
|
||||
|
||||
|
||||
DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap,
|
||||
1, 5, 0,
|
||||
doc: /* Define a fringe bitmap from BITS of height HEIGHT and width WIDTH.
|
||||
2, 5, 0,
|
||||
doc: /* Define fringe bitmap BITMAP from BITS of size HEIGHT x WIDTH.
|
||||
BITMAP is a symbol or string naming the new fringe bitmap.
|
||||
BITS is either a string or a vector of integers.
|
||||
HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS.
|
||||
WIDTH must be an integer between 1 and 16, or nil which defaults to 8.
|
||||
Optional fourth arg ALIGN may be one of `top', `center', or `bottom',
|
||||
Optional fifth arg ALIGN may be one of `top', `center', or `bottom',
|
||||
indicating the positioning of the bitmap relative to the rows where it
|
||||
is used; the default is to center the bitmap. Fourth arg may also be a
|
||||
list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap
|
||||
should be repeated.
|
||||
Optional fifth argument WHICH is bitmap number to redefine.
|
||||
Return new bitmap number, or nil of no more free bitmap slots. */)
|
||||
(bits, height, width, align, which)
|
||||
Lisp_Object bits, height, width, align, which;
|
||||
If BITMAP already exists, the existing definition is replaced. */)
|
||||
(bitmap, bits, height, width, align)
|
||||
Lisp_Object bitmap, bits, height, width, align;
|
||||
{
|
||||
Lisp_Object len;
|
||||
int n, h, i, j;
|
||||
unsigned short *b;
|
||||
struct fringe_bitmap fb, *xfb;
|
||||
int fill1 = 0, fill2 = 0;
|
||||
Lisp_Object sym;
|
||||
|
||||
n = resolve_fringe_bitmap (bitmap, &sym);
|
||||
|
||||
if (NILP (sym) || INTEGERP (sym))
|
||||
sym = wrong_type_argument (Qsymbolp, bitmap);
|
||||
|
||||
if (!STRINGP (bits) && !VECTORP (bits))
|
||||
bits = wrong_type_argument (Qstringp, bits);
|
||||
@ -1162,7 +1274,7 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
|
||||
else if (!NILP (align) && !EQ (align, Qcenter))
|
||||
error ("Bad align argument");
|
||||
|
||||
if (NILP (which))
|
||||
if (n < 0)
|
||||
{
|
||||
if (max_used_fringe_bitmap < MAX_FRINGE_BITMAPS)
|
||||
n = max_used_fringe_bitmap++;
|
||||
@ -1174,16 +1286,11 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
|
||||
if (fringe_bitmaps[n] == NULL)
|
||||
break;
|
||||
if (n == MAX_FRINGE_BITMAPS)
|
||||
return Qnil;
|
||||
error ("Cannot define more fringe bitmaps");
|
||||
}
|
||||
which = make_number (n);
|
||||
}
|
||||
else
|
||||
{
|
||||
CHECK_NUMBER (which);
|
||||
n = XINT (which);
|
||||
if (n <= NO_FRINGE_BITMAP || n >= MAX_FRINGE_BITMAPS)
|
||||
error ("Invalid fringe bitmap number");
|
||||
|
||||
Vfringe_bitmaps = Fcons (sym, Vfringe_bitmaps);
|
||||
Fput (sym, Qfringe, make_number (n));
|
||||
}
|
||||
|
||||
fb.dynamic = 1;
|
||||
@ -1211,21 +1318,22 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
|
||||
|
||||
init_fringe_bitmap (n, xfb, 0);
|
||||
|
||||
return which;
|
||||
return sym;
|
||||
}
|
||||
|
||||
DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face,
|
||||
1, 2, 0,
|
||||
doc: /* Set face for fringe bitmap FRINGE-ID to FACE.
|
||||
doc: /* Set face for fringe bitmap BITMAP to FACE.
|
||||
If FACE is nil, reset face to default fringe face. */)
|
||||
(fringe_id, face)
|
||||
Lisp_Object fringe_id, face;
|
||||
(bitmap, face)
|
||||
Lisp_Object bitmap, face;
|
||||
{
|
||||
int bn;
|
||||
int face_id;
|
||||
|
||||
CHECK_NUMBER (fringe_id);
|
||||
if (!valid_fringe_bitmap_id_p (XINT (fringe_id)))
|
||||
error ("Invalid fringe id");
|
||||
bn = resolve_fringe_bitmap (bitmap, 0);
|
||||
if (bn < 0)
|
||||
error ("Undefined fringe bitmap");
|
||||
|
||||
if (!NILP (face))
|
||||
{
|
||||
@ -1236,7 +1344,7 @@ If FACE is nil, reset face to default fringe face. */)
|
||||
else
|
||||
face_id = FRINGE_FACE_ID;
|
||||
|
||||
fringe_faces [XINT (fringe_id)] = face_id;
|
||||
fringe_faces [bn] = face_id;
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
@ -1247,7 +1355,8 @@ DEFUN ("fringe-bitmaps-at-pos", Ffringe_bitmaps_at_pos, Sfringe_bitmaps_at_pos,
|
||||
If WINDOW is nil, use selected window. If POS is nil, use value of point
|
||||
in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT
|
||||
are the fringe bitmap numbers for the bitmaps in the left and right fringe,
|
||||
resp. Return nil if POS is not visible in WINDOW. */)
|
||||
resp. If left or right fringe is empty, the corresponding element is nil.
|
||||
Return nil if POS is not visible in WINDOW. */)
|
||||
(pos, window)
|
||||
Lisp_Object pos, window;
|
||||
{
|
||||
@ -1274,8 +1383,8 @@ resp. Return nil if POS is not visible in WINDOW. */)
|
||||
row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
|
||||
row = row_containing_pos (w, textpos, row, NULL, 0);
|
||||
if (row)
|
||||
return Fcons (make_number (row->left_fringe_bitmap),
|
||||
make_number (row->right_fringe_bitmap));
|
||||
return Fcons (get_fringe_bitmap_name (row->left_fringe_bitmap),
|
||||
get_fringe_bitmap_name (row->right_fringe_bitmap));
|
||||
else
|
||||
return Qnil;
|
||||
}
|
||||
@ -1288,7 +1397,6 @@ resp. Return nil if POS is not visible in WINDOW. */)
|
||||
void
|
||||
syms_of_fringe ()
|
||||
{
|
||||
|
||||
defsubr (&Sdestroy_fringe_bitmap);
|
||||
defsubr (&Sdefine_fringe_bitmap);
|
||||
defsubr (&Sfringe_bitmaps_at_pos);
|
||||
@ -1303,6 +1411,10 @@ is at the final newline, the cursor is shown in the right fringe.
|
||||
If nil, also continue lines which are exactly as wide as the window. */);
|
||||
Voverflow_newline_into_fringe = Qt;
|
||||
|
||||
DEFVAR_LISP ("fringe-bitmaps", &Vfringe_bitmaps,
|
||||
doc: /* List of fringe bitmap symbols.
|
||||
You must (require 'fringe) to use fringe bitmap symbols in your programs." */);
|
||||
Vfringe_bitmaps = Qnil;
|
||||
}
|
||||
|
||||
/* Initialize this module when Emacs starts. */
|
||||
|
@ -308,6 +308,7 @@ extern Lisp_Object Qheight;
|
||||
extern Lisp_Object QCwidth, QCheight, QCascent;
|
||||
extern Lisp_Object Qscroll_bar;
|
||||
extern Lisp_Object Qcursor;
|
||||
extern Lisp_Object Qfringe;
|
||||
|
||||
/* Non-nil means highlight trailing whitespace. */
|
||||
|
||||
@ -3581,8 +3582,9 @@ handle_single_display_prop (it, prop, object, position,
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
value = XCAR (XCDR (prop));
|
||||
if (!NUMBERP (value)
|
||||
|| !valid_fringe_bitmap_id_p (XINT (value)))
|
||||
if (!SYMBOLP (value)
|
||||
|| (value = Fget (value, Qfringe),
|
||||
!valid_fringe_bitmap_p (value)))
|
||||
return 0;
|
||||
|
||||
if (CONSP (XCDR (XCDR (prop))))
|
||||
|
Loading…
Reference in New Issue
Block a user