Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-57

Merge from emacs--devo--0

Patches applied:

 * emacs--devo--0  (patch 226-238)

   - Update from CVS
   - Merge from gnus--rel--5.10
   - Update from CVS: lisp/progmodes/python.el (python-mode): Fix typo.

 * gnus--rel--5.10  (patch 86-90)

   - Update from CVS
   - Merge from emacs--devo--0
This commit is contained in:
Miles Bader 2006-04-21 05:39:14 +00:00
commit 7e635d0ed3
122 changed files with 3130 additions and 1419 deletions

View file

@ -1,3 +1,7 @@
2006-04-20 Ramprasad B <ramprasad_i82@yahoo.com>
* Copyright (sources/emacs): updated copyright year(s)
2006-04-01 Eli Zaretskii <eliz@gnu.org>
* configure: Regenerated.
@ -6225,7 +6229,7 @@
;; coding: iso-2022-7bit
;; End:
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2006
Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted provided the copyright notice and this notice are preserved.

View file

@ -1,5 +1,6 @@
GNU Emacs Installation Guide
Copyright (c) 1992, 94, 96, 97, 2000, 01, 02 Free software Foundation, Inc.
Copyright (c) 1992, 1994, 1996, 1997, 2000, 2001, 2002, 2006
Free software Foundation, Inc.
See the end of the file for copying permissions.

View file

@ -2,7 +2,7 @@
# DIST: make most of the changes to this file you might want, so try
# DIST: that first.
# Copyright (C) 1992,93,94,95,96,97,98,1999,2000,01,02,03,04,2005
# Copyright (C) 1992,93,94,95,96,97,98,1999,2000,01,02,03,04,2005,2006
# Free Software Foundation, Inc.
# This file is part of GNU Emacs.

View file

@ -1,3 +1,7 @@
2006-04-17 Ramprasad B <ramprasad_i82@yahoo.com>
* ./* (Copyright): Updated Copyright year(s)
2006-02-24 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE (BUGS): Add URLs/MIDs.

View file

@ -37,6 +37,9 @@ Assigned to Bill Wohler <wohler@newt.com>.
** Is there a basic problem with cl-byte-compile-compiler-macro?
** Recalculate the tool bar height after changing the default font.
(Bug report by Yamamoto Mistuharu, 31 Mar 2006)
** Markus Gritsch's report about Emacs looping on Windoze with the following
.emacs file, and then reduce Emacs frame width to "something quite narrow":
(setq-default truncate-lines t)

View file

@ -1,5 +1,5 @@
/* Allocate X colors. Used for testing with dense colormaps.
Copyright (C) 2001 Free Software Foundation, Inc.
Copyright (C) 2001, 2006 Free Software Foundation, Inc.
This file is part of GNU Emacs.

View file

@ -1,6 +1,6 @@
#! /usr/bin/perl
# Copyright (C) 2001 Free Software Foundation, Inc.
# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#

View file

@ -1,6 +1,6 @@
;;; cus-test.el --- tests for custom types and load problems
;; Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1998, 2000, 2002, 2006 Free Software Foundation, Inc.
;; Author: Markus Rost <markus.rost@mathematik.uni-regensburg.de>
;; Maintainer: Markus Rost <rost@math.ohio-state.edu>

View file

@ -1,6 +1,6 @@
#! /bin/sh
# Copyright (C) 2001 Free Software Foundation, Inc.
# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#

View file

@ -1,6 +1,6 @@
#! /usr/bin/perl
# Copyright (C) 2001 Free Software Foundation, Inc.
# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#

View file

@ -1,6 +1,6 @@
#! /usr/bin/perl
# Copyright (C) 2001 Free Software Foundation, Inc.
# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#

View file

@ -1,7 +1,7 @@
@echo off
rem ----------------------------------------------------------------------
rem Configuration script for MSDOS
rem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004
rem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004, 2006
rem Free Software Foundation, Inc.
rem This file is part of GNU Emacs.

4
config.guess vendored
View file

@ -1,9 +1,9 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
timestamp='2005-12-23'
timestamp='2006-04-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by

4
config.sub vendored
View file

@ -1,9 +1,9 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
timestamp='2005-12-23'
timestamp='2006-04-20'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software

2
configure vendored
View file

@ -2,7 +2,7 @@
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59.
#
# Copyright (C) 2003 Free Software Foundation, Inc.
# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##

View file

@ -1,3 +1,24 @@
2006-04-21 Nick Roberts <nickrob@snap.net.nz>
* NEWS: Mention t-mouse.el. Touch up description of gdb-ui.el.
2006-04-20 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: Version number change only.
2006-04-18 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-refcard.tex: Bump version to 5.11. Remove duplicate
\def's. Update date.
2006-04-18 Bill Wohler <wohler@newt.com>
* MORE.STUFF: Add MH-E.
2006-04-18 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: Version number change only.
2006-04-12 Kenichi Handa <handa@m17n.org>
* PROBLEMS (C-SPC fails ...): Explicitly say fcitx in the header.
@ -23,7 +44,7 @@
2006-03-28 Bill Wohler <wohler@newt.com>
* images/README: Update with following information.
* images/data-save.xpm, images/mail/flag-for-followup.xpm:
* images/zoom-in.xpm, images/zoom-out.xpm: New images from GNOME
2.12.
@ -32,27 +53,27 @@
* images/mail/flag-for-followup.pbm, images/mail/inbox.pbm:
* images/mail/move.pbm, images/next-page.pbm, images/zoom-out.pbm:
New bitmaps for new images.
* images/refresh.xpm, images/sort-ascending.xpm,
* images/refresh.xpm, images/sort-ascending.xpm,
* images/sort-descending.xpm: Update with GTK 2.x images. Note
that the default GTK icons are not overridden by the GNOME theme
due to a bug which was fixed in GNOME 2.15. Once GNOME 2.16 is in
wide circulation, then the GTK icons should be replaced with the
equivalent GNOME icons. Until then, we should be consistent with
GTK first, then GNOME.
* images/mail/repack.xpm, images/mail/reply-from.xpm:
* images/mail/repack.xpm, images/mail/reply-from.xpm:
* images/mail/reply-to.xpm, images/search-replace.xpm:
* images/separator.xpm, images/show.xpm: Update custom icons to be
closer to their GNOME counterparts.
* images/attach.pbm, images/exit.pbm, images/mail/compose.pbm:
* images/attach.pbm, images/exit.pbm, images/mail/compose.pbm:
* images/mail/repack.pbm, images/mail/reply-all.pbm:
* images/mail/reply-from.pbm, images/mail/reply-to.pbm:
* images/mail/reply.pbm, images/mail/send.pbm, images/show.pbm:
* images/search-replace.pbm: Update bitmaps.
* images/execute.pbm, images/execute.xpm, images/fld-open.pbm:
* images/execute.pbm, images/execute.xpm, images/fld-open.pbm:
* images/fld-open.xpm, images/highlight.pbm, images/highlight.xpm:
* images/mail.pbm, images/mail.xpm, images/mail/alias.pbm:
* images/mail/alias.xpm, images/mail/refile.pbm:

View file

@ -71,6 +71,8 @@ You might find bug-fixes or enhancements in these places.
* Ispell: <URL:http://www.eng.utah.edu/~kstevens/ispell-page.html>
* MH-E: <URL:http://mh-e.sourceforge.net/>
* PC Selection: <URL:ftp://ftp.thp.uni-duisburg.de/pub/source/elisp/>
* PS mode: <URL:http://odur.let.rug.nl/%7Ekleiweg/postscript/>

View file

@ -1924,6 +1924,10 @@ for pager-like scrolling. Keys which normally move point by line or
paragraph will scroll the buffer by the respective amount of lines
instead and point will be kept vertically fixed relative to window
boundaries during scrolling.
** The file t-mouse.el is now part of Emacs and provides access to mouse
events from the console. It still requires gpm to work but has been updated
for Emacs 22. In particular, the mode-line is now position sensitive.
* Changes in Specialized Modes and Packages in Emacs 22.1:
@ -2702,14 +2706,15 @@ and other common debugger commands.
+++
*** The new package gdb-ui.el provides an enhanced graphical interface to
GDB. You can interact with GDB through the GUD buffer in the usual way, but
GDB. You can interact with GDB through the GUD buffer in the usual way, but
there are also further buffers which control the execution and describe the
state of your program. It can separate the input/output of your program from
that of GDB and watches expressions in the speedbar. It also uses features of
Emacs 21/22 such as the toolbar, and bitmaps in the fringe to indicate
breakpoints.
Use M-x gdb to start GDB-UI.
To use this package just type M-x gdb. See the Emacs manual if you want the
old behaviour.
*** The variable tooltip-gud-tips-p has been removed. GUD tooltips can now be
toggled independently of normal tooltips with the minor mode

View file

@ -9,15 +9,14 @@ to the FSF.
* Small but important fixes needed in existing features:
** whitespace-cleanup should work only on the region if the region is active.
** Distribute a bar cursor of width > 1 evenly between the two glyphs
on each side of the bar (what to do at the edges?).
** Make vc-checkin avoid reverting the buffer if has not changed after
the checkin. Comparing (md5 BUFFER) to (md5 FILE) should be enough.
** Make vc-annotate show place the cursor in the annotate buffer at the
same line as the current buffer.
** buffer-offer-save should be a permanent local.
** revert-buffer should eliminate overlays and the mark.

View file

@ -76,8 +76,9 @@
% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %
%% include file for the Gnus refcard and booklet
\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions
\def\date{Mar, 2005}
\def\progver{5.11} % program version
% \def\refver{5.10-2} % refcard version (not used)
\def\date{April, 2006}
\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
%%
@ -1267,10 +1268,6 @@
\begin{document}
\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
\def\date{Jan 10th, 2004}
\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\raggedbottom\raggedright
\twocolumn

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{4.23}
\def\orgversionnumber{4.25}
\def\year{2006}
%
%**start of header

View file

@ -1,6 +1,6 @@
;; leim-ext.el -- extra leim configulation -*- coding:iso-2022-7bit; -*-
;; Copyright (C) 2004
;; Copyright (C) 2004, 2006
;; Free Software Foundation, Inc.
;; Copyright (C) 2004, 2005
;; National Institute of Advanced Industrial Science and Technology (AIST)

View file

@ -1,5 +1,5 @@
# -*- Makefile -*- for leim subdirectory in GNU Emacs on the Microsoft W32 API.
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
# National Institute of Advanced Industrial Science and Technology (AIST)

View file

@ -1,6 +1,6 @@
;;; quail/croatian.el -- Quail package for inputing Croatian -*-coding: iso-8859-2;-*-
;; Copyright (C) 2003 Free Software Foundation, Inc.
;; Copyright (C) 2003, 2006 Free Software Foundation, Inc.
;; Author: Hrvoje Nik¹iæ <hniksic@xemacs.org>,
;; modeled after czech.el by Milan Zamazal.

View file

@ -1,6 +1,6 @@
;;; cyril-jis.el --- Quail package for inputting JISX0208 Cyrillic letters
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; cyrillic.el --- Quail package for inputting Cyrillic characters
;; Copyright (C) 1997, 1998, 2001, 2002, 2003, 2004, 2005
;; Copyright (C) 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006
;; Free Software Foundation, Inc.
;; Copyright (C) 1997, 2003
;; National Institute of Advanced Industrial Science and Technology (AIST)

View file

@ -1,6 +1,6 @@
;;; czech.el --- Quail package for inputting Czech -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1998, 2001 Free Software Foundation, Inc.
;; Copyright (C) 1998, 2001, 2006 Free Software Foundation, Inc.
;; Author: Milan Zamazal <pdm@zamazal.org>
;; Maintainer: Pavel Jan,Bm(Bk <Pavel@Janik.cz>

View file

@ -1,6 +1,6 @@
;;; ethiopic.el --- Quail package for inputting Ethiopic characters -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997, 1998, 1999, 2001
;; Copyright (C) 1997, 1998, 1999, 2001, 2006
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; georgian.el --- Quail package for inputting Georgian characters -*-coding: utf-8;-*-
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Author: Dave Love <fx@gnu.org>
;; Keywords: i18n

View file

@ -1,6 +1,6 @@
;;; greek.el --- Quail package for inputting Greek -*-coding: iso-2022-7bit-*-
;; Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2001
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; hangul.el --- Quail package for inputting Korean Hangul characters -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 2002 Free Software Foundation, Inc.
;; Copyright (C) 2002, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; hangul3.el --- Quail package for inputting Korean Hangul characters -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997, 1998, 2001, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 2001, 2002, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2002
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; hanja.el --- Quail-package for Korean Hanja (KSC5601) -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; hanja3.el --- Quail-package for Korean Hanja (KSC5601) -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997, 1999, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1999, 2002, 2006 Free Software Foundation, Inc.
;; Author: Koaunghi Un <koanughi.un@zdv.uni-tuebingen.de>
;; Keywords: mule, quail, multilingual, input method, Korean, Hanja

View file

@ -1,6 +1,6 @@
;;; indian.el --- Quail packages for inputting Indian
;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
;; Copyright (C) 2000, 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
;; Author: KAWABATA, Taichi <kawabata@m17n.org>

View file

@ -1,6 +1,6 @@
;;; japanese.el --- Quail package for inputting Japanese -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2005
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; latin-alt.el --- Quail package for inputting various European characters -*-coding: utf-8;-*-
;; Copyright (C) 1997, 1998, 2001, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 2001, 2002, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1999
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; latin-ltx.el --- Quail package for TeX-style input -*-coding: utf-8;-*-
;; Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2005
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; latin-post.el --- Quail packages for inputting various European characters -*-coding: utf-8;-*-
;; Copyright (C) 1997, 1998, 2001, 2002 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 2001, 2002, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1999
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; latin-pre.el --- Quail packages for inputting various European characters -*-coding: utf-8;-*-
;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006
;; Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 1999, 2000, 2005
;; National Institute of Advanced Industrial Science and Technology (AIST)

View file

@ -1,6 +1,6 @@
;;; lrt.el --- Quail package for inputting Lao characters by LRT method -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1998 Free Software Foundation, Inc.
;; Copyright (C) 1998, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1999
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; py-punct.el --- Quail packages for Chinese (pinyin + extra symbols) -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2000
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

Binary file not shown.

View file

@ -1,6 +1,6 @@
;;; sgml-input.el --- Quail method for Unicode entered as SGML entities -*- coding: utf-8 -*-
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Author: Dave Love <fx@gnu.org>
;; Keywords: i18n

View file

@ -1,6 +1,6 @@
;;; sisheng.el --- sisheng input method for Chinese pinyin transliteration
;; Copyright (C) 2004 Free Software Foundation, Inc.
;; Copyright (C) 2004, 2006 Free Software Foundation, Inc.
;; Author: Werner LEMBERG <wl@gnu.org>

View file

@ -1,6 +1,6 @@
;;; slovak.el --- Quail package for inputting Slovak -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1998, 2001 Free Software Foundation, Inc.
;; Copyright (C) 1998, 2001, 2006 Free Software Foundation, Inc.
;; Authors: Tibor ,B)(Bimko <tibor.simko@fmph.uniba.sk>
;; Milan Zamazal <pdm@zamazal.org>

View file

@ -1,6 +1,6 @@
;;; symbol-ksc.el --- Quail-package for Korean Symbol (KSC5601) -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997, 2005 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2005, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; tibetan.el --- Quail package for inputting Tibetan characters -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2006 Free Software Foundation, Inc.
;; Copyright (C) 1997, 1998, 1999, 2000
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; uni-input.el --- Hex Unicode input method
;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
;; Copyright (C) 2004
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021

View file

@ -1,6 +1,6 @@
;;; vntelex.el --- Quail package for Vietnamese by Telex method
;; Copyright (C) 2001, 2002 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc.
;; Author: Werner Lemberg <wl@gnu.org>
;; Keywords: multilingual, input method, Vietnamese

View file

@ -1,6 +1,6 @@
;;; welsh.el --- Quail package for inputting Welsh characters -*-coding: iso-2022-7bit;-*-
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
;; Author: Dave Love <fx@gnu.org>
;; Keywords: i18n

View file

@ -1,3 +1,173 @@
2006-04-21 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gdb-ui.el (gdb-data-list-register-values-handler):
Use font-lock-warning-face for any errors e.g. no stack.
(gdb-stack-list-locals-handler): Display any errors e.g. no stack.
2006-04-20 Dan Nicolaescu <dann@ics.uci.edu>
* progmodes/sh-script.el (sh-shell): Mark as safe.
* newcomment.el (comment-start, comment-start-skip)
(comment-end-skip, comment-end): Mark as safe.
2006-04-20 Carsten Dominik <dominik@science.uva.nl>
* textmodes/org.el: (org-deadline-announce): Face removed.
(org-level-faces, org-n-levels): Converted to constant.
(org-compatible-face): New function.
(org-hide, org-level-1, org-level-2, org-level-3, org-level-4)
(org-level-5, org-level-6, org-level-7, org-level-8)
(org-special-keyword, org-warning, org-headline-done, org-link)
(org-date, org-tag, org-todo, org-done, org-table, org-formula)
(org-scheduled-today, org-scheduled-previously, org-time-grid):
Face definition revised for better color tty support.
(org-bold-re, org-italic-re, org-underline-re): New constants.
(org-set-font-lock-defaults): Use the new constants.
(org-agenda-highlight-todo): New function.
(org-agenda-todo): Fixed bug with point at end of line.
(org-agenda-change-all-lines, org-finalize-agenda-entries):
Fontify TODO keywords.
(org-insert-link): Preserve relative path in ../ links.
(org-export-as-html): Convert links pointing to .org files into
links that will work beteen the exported HTML files.
(org-todo-list): Fix bug when arg=0.
(org-insert-heading): More fine-tuning.
2006-04-19 Romain Francoise <romain@orebokech.com>
* mail/rmail.el (rmail-convert-to-babyl-format): Use second group
from `rmail-mime-charset-pattern'.
2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
* progmodes/python.el (python-mode): Fix typo.
2006-04-18 J.D. Smith <jdsmith@as.arizona.edu>
* comint.el (comint-previous-input): Don't clobber input line
when moving off either end of the input history ring.
(comint-delete-input): New function, used by
`comint-previous-input' and others.
(comint-previous-matching-input): Use
`coming-delete-input'. Save the partial input if leaving the
edit line. Goto point-max before deleting input to avoid
partial input fragments hanging around.
(comint-restore-input): New function, used by
`comint-previous-input', and bound to "C-c C-j".
2006-04-18 Luc Teirlinck <teirllm@auburn.edu>
* imenu.el (imenu--index-alist): Balance parentheses.
2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
* progmodes/python.el (python-mode): Add support for
hs-minor-mode.
2006-04-19 Reiner Steib <Reiner.Steib@gmx.de>
* abbrev.el (read-abbrev-file): Use abbrev-file-name if optional
file is nil.
2006-04-18 Richard Stallman <rms@gnu.org>
* tooltip.el (tooltip-mode, tooltip-use-echo-area): Doc fixes.
* imenu.el (imenu-create-index-function, imenu--index-alist)
(imenu--last-menubar-index-alist, imenu--make-index-alist)
(imenu-default-create-index-function, imenu--generic-function):
Doc fixes.
* image-mode.el (image-toggle-display): Handle tar and arc subfiles.
* help-mode.el (help-mode): Set view-exit-action to delete window.
* env.el (setenv): Get rid of arg UNSET. Interactive unsetting
now works by passing nil as arg.
* apropos.el (apropos-print): Don't do where-is on self-insert-command.
* abbrev.el (edit-abbrevs-redefine): Temporarily widen.
(read-abbrev-file): Provide default when reading filename.
* files.el (enable-local-variables): Allow :all as value.
(hack-local-variables): Implement that value.
(safe-local-variable-values, safe-local-eval-forms)
(enable-local-variables): Mark as risky.
(find-file-visit-truename, kept-old-versions): Mark safe.
* time-stamp.el (time-stamp-format, time-stamp-line-limit)
(time-stamp-start, time-stamp-end, time-stamp-inserts-lines)
(time-stamp-count, time-stamp-pattern): Add safe-local-variable prop.
2006-04-18 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/tcl.el (tcl-send-string, tcl-send-region):
Use forward-line so as to get to BOL even in the presence of fields.
(tcl-eval-region): Strip surrounding space to avoid multiple prompts
in return.
(inferior-tcl): Tell tclsh to work in interactive mode.
* complete.el (partial-completion-mode):
Use 'choose-completion-string-functions to make sure that
choose-completion fills the minibuffer properly.
* complete.el (PC-old-read-file-name-internal): Remove.
(PC-read-include-file-name-internal): Remove. Turn it into an advice
of read-file-name-internal.
(partial-completion-mode): Enable/disable this advice.
2006-04-18 Juanma Barranquero <lekktu@gmail.com>
* net/tramp.el (tramp-completion-file-name-handler): Revert change
of 2006-04-17.
2006-04-18 Carsten Dominik <dominik@science.uva.nl>
* textmodes/org.el (org-insert-heading): Insert heading before
current if at beginning of line.
(org-todo, org-date): New faces.
(org-table-align): Make sure tooltip window contains full text.
(org-no-properties): New defsubst.
(org-set-font-lock-defaults): Use new faces.
2006-04-18 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gud.el (gud-speedbar-item-info): Display frame address
for root variables.
* progmodes/gdb-ui.el (gdb-pc-address): Rename from gdb-frame-address.
(gdb-frame-address): Re-use to identify frame for watch expression.
(gdb-var-list, gdb-var-create-handler): Add frame address for root
variables.
(gdb-init-1, gdb-source, gdb-post-prompt, )
(gdb-assembler-custom, gdb-invalidate-assembler): Use gdb-pc-address.
(gdb-frame-handler): Get gdb-frame-address.
2006-04-17 Michael Albinus <michael.albinus@gmx.de>
Sync with Tramp 2.0.53.
* net/tramp.el (tramp-completion-mode): ?\t has event-modifier
'control. Reported by Matthias F,bv(Brste <slashdevslashnull@gmx.net>.
(tramp-completion-file-name-handler): Add autoload cookie for
adding to `file-name-handler-alist'.
* net/tramp-smb.el (tramp-smb-wait-for-output): Wait always for
the prompt. If it returns earlier (when detecting an error
message), the rest of the output will merge accidently with the
output of the next command. Reported by M Jared Finder
<jared@hpalace.com>.
* net/tramp-vc.el (vc-user-login-name): Wrap defadvice with a test
for `process-file', in order to let it work for older Emacsen too.
2006-04-17 Ralf Angeli <angeli@iwi.uni-sb.de>
* textmodes/tex-mode.el (tex-font-lock-match-suscript): New function.
(tex-font-lock-keywords-3): Use it.
2006-04-16 Stefan Monnier <monnier@iro.umontreal.ca>
* newcomment.el (comment-add): New function.
@ -2928,7 +3098,7 @@
(vc-default-update-changelog): Don't use vc-user-login-name, we
don't need it here.
* tramp-vc.el (vc-user-login-name): Comment out defadvice, it is
* net/tramp-vc.el (vc-user-login-name): Comment out defadvice, it is
no longer necessary.
2006-01-25 Kenichi Handa <handa@m17n.org>

View file

@ -160,8 +160,10 @@ or may be omitted (it is usually omitted)."
(defun edit-abbrevs-redefine ()
"Redefine abbrevs according to current buffer contents."
(interactive)
(define-abbrevs t)
(set-buffer-modified-p nil))
(save-restriction
(widen)
(define-abbrevs t)
(set-buffer-modified-p nil)))
(defun define-abbrevs (&optional arg)
"Define abbrevs according to current visible buffer contents.
@ -195,9 +197,12 @@ the ones defined from the buffer now."
Optional argument FILE is the name of the file to read;
it defaults to the value of `abbrev-file-name'.
Optional second argument QUIETLY non-nil means don't display a message."
(interactive "fRead abbrev file: ")
(load (if (and file (> (length file) 0)) file abbrev-file-name)
nil quietly)
(interactive
(list
(read-file-name (format "Read abbrev file (default %s): "
abbrev-file-name)
nil abbrev-file-name t)))
(load (or file abbrev-file-name) nil quietly)
(setq abbrevs-changed nil))
(defun quietly-read-abbrev-file (&optional file)

View file

@ -908,6 +908,7 @@ If non-nil TEXT is a string that will be printed as a heading."
;; Calculate key-bindings if we want them.
(and do-keys
(commandp symbol)
(not (eq symbol 'self-insert-command))
(indent-to 30 1)
(if (let ((keys
(save-excursion

View file

@ -558,6 +558,9 @@ This is to support the command \\[comint-get-next-from-history].")
"Non-nil if you are accumulating input lines to send as input together.
The command \\[comint-accumulate] sets this.")
(defvar comint-stored-incomplete-input nil
"Stored input for history cycling.")
(put 'comint-replace-by-expanded-history 'menu-enable 'comint-input-autoexpand)
(put 'comint-input-ring 'permanent-local t)
(put 'comint-input-ring-index 'permanent-local t)
@ -638,6 +641,7 @@ Entry to this mode runs the hooks on `comint-mode-hook'."
(make-local-variable 'comint-scroll-to-bottom-on-input)
(make-local-variable 'comint-move-point-for-output)
(make-local-variable 'comint-scroll-show-maximum-output)
(make-local-variable 'comint-stored-incomplete-input)
;; This makes it really work to keep point at the bottom.
(make-local-variable 'scroll-conservatively)
(setq scroll-conservatively 10000)
@ -1015,6 +1019,16 @@ See also `comint-read-input-ring'."
(t
arg)))
(defun comint-restore-input ()
"Restore unfinished input."
(interactive)
(when comint-input-ring-index
(comint-delete-input)
(when (> (length comint-stored-incomplete-input) 0)
(insert comint-stored-incomplete-input)
(message "Input restored"))
(setq comint-input-ring-index nil)))
(defun comint-search-start (arg)
"Index to start a directional search, starting at `comint-input-ring-index'."
(if comint-input-ring-index
@ -1035,9 +1049,18 @@ Moves relative to `comint-input-ring-index'."
arg)))
(defun comint-previous-input (arg)
"Cycle backwards through input history."
"Cycle backwards through input history, saving input."
(interactive "*p")
(comint-previous-matching-input "." arg))
(if (and comint-input-ring-index
(or ;; leaving the "end" of the ring
(and (< arg 0) ; going down
(eq comint-input-ring-index 0))
(and (> arg 0) ; going up
(eq comint-input-ring-index
(1- (ring-length comint-input-ring)))))
comint-stored-incomplete-input)
(comint-restore-input)
(comint-previous-matching-input "." arg)))
(defun comint-next-input (arg)
"Cycle forwards through input history."
@ -1077,6 +1100,14 @@ Moves relative to START, or `comint-input-ring-index'."
(if (string-match regexp (ring-ref comint-input-ring n))
n)))
(defun comint-delete-input ()
"Delete all input between accumulation or process mark and point."
(delete-region
;; Can't use kill-region as it sets this-command
(or (marker-position comint-accum-marker)
(process-mark (get-buffer-process (current-buffer))))
(point-max)))
(defun comint-previous-matching-input (regexp n)
"Search backwards through input history for match for REGEXP.
\(Previous history elements are earlier commands.)
@ -1088,13 +1119,13 @@ If N is negative, find the next or Nth next match."
;; Has a match been found?
(if (null pos)
(error "Not found")
;; If leaving the edit line, save partial input
(if (null comint-input-ring-index) ;not yet on ring
(setq comint-stored-incomplete-input
(funcall comint-get-old-input)))
(setq comint-input-ring-index pos)
(message "History item: %d" (1+ pos))
(delete-region
;; Can't use kill-region as it sets this-command
(or (marker-position comint-accum-marker)
(process-mark (get-buffer-process (current-buffer))))
(point))
(comint-delete-input)
(insert (ring-ref comint-input-ring pos)))))
(defun comint-next-matching-input (regexp n)

View file

@ -141,8 +141,6 @@ If nil, means use the colon-separated path in the variable $INCPATH instead."
"A list of the environment variable names and values.")
(defvar PC-old-read-file-name-internal nil)
(defun PC-bindings (bind)
(let ((completion-map minibuffer-local-completion-map)
(must-match-map minibuffer-local-must-match-map))
@ -219,21 +217,32 @@ second TAB brings up the `*Completions*' buffer."
((not PC-disable-includes)
(add-hook 'find-file-not-found-functions 'PC-look-for-include-file)))
;; ... with some underhand redefining.
(cond ((and (not partial-completion-mode)
(functionp PC-old-read-file-name-internal))
(fset 'read-file-name-internal PC-old-read-file-name-internal))
((and (not PC-disable-includes) (not PC-old-read-file-name-internal))
(setq PC-old-read-file-name-internal
(symbol-function 'read-file-name-internal))
(fset 'read-file-name-internal
'PC-read-include-file-name-internal)))
(when (and partial-completion-mode (null PC-env-vars-alist))
(setq PC-env-vars-alist
(mapcar (lambda (string)
(let ((d (string-match "=" string)))
(cons (concat "$" (substring string 0 d))
(and d (substring string (1+ d))))))
process-environment))))
(cond ((not partial-completion-mode)
(ad-disable-advice 'read-file-name-internal 'around 'PC-include-file)
(ad-activate 'read-file-name-internal))
((not PC-disable-includes)
(ad-enable-advice 'read-file-name-internal 'around 'PC-include-file)
(ad-activate 'read-file-name-internal)))
;; Adjust the completion selection in *Completion* buffers to the way
;; we work. The default minibuffer completion code only completes the
;; text before point and leaves the text after point alone (new in
;; Emacs-22). In contrast we use the whole text and we even sometimes
;; move point to a place before EOB, to indicate the first position where
;; there's a difference, so when the user uses choose-completion, we have
;; to trick choose-completion into replacing the whole minibuffer text
;; rather than only the text before point. --Stef
(funcall
(if partial-completion-mode 'add-hook 'remove-hook)
'choose-completion-string-functions
(lambda (&rest x) (goto-char (point-max)) nil))
;; Build the env-completion and mapping table.
(when (and partial-completion-mode (null PC-env-vars-alist))
(setq PC-env-vars-alist
(mapcar (lambda (string)
(let ((d (string-match "=" string)))
(cons (concat "$" (substring string 0 d))
(and d (substring string (1+ d))))))
process-environment))))
(defun PC-complete ()
@ -930,20 +939,23 @@ absolute rather than relative to some directory on the SEARCH-PATH."
(setq sorted (cdr sorted)))
compressed))))
(defun PC-read-include-file-name-internal (string dir action)
(if (string-match "<\\([^\"<>]*\\)>?$" string)
(let* ((name (substring string (match-beginning 1) (match-end 1)))
(defadvice read-file-name-internal (around PC-include-file disable)
(if (string-match "<\\([^\"<>]*\\)>?\\'" (ad-get-arg 0))
(let* ((string (ad-get-arg 0))
(action (ad-get-arg 2))
(name (substring string (match-beginning 1) (match-end 1)))
(str2 (substring string (match-beginning 0)))
(completion-table
(mapcar (function (lambda (x) (list (format "<%s>" x))))
(mapcar (lambda (x) (format "<%s>" x))
(PC-include-file-all-completions
name (PC-include-file-path)))))
(cond
((not completion-table) nil)
((eq action nil) (try-completion str2 completion-table nil))
((eq action t) (all-completions str2 completion-table nil))
((eq action 'lambda) (test-completion str2 completion-table nil))))
(funcall PC-old-read-file-name-internal string dir action)))
(setq ad-return-value
(cond
((not completion-table) nil)
((eq action 'lambda) (test-completion str2 completion-table nil))
((eq action nil) (try-completion str2 completion-table nil))
((eq action t) (all-completions str2 completion-table nil)))))
ad-do-it))
(provide 'complete)

View file

@ -90,28 +90,30 @@ Use `$$' to insert a single dollar sign."
;; Fixme: Should `process-environment' be recoded if LC_CTYPE &c is set?
(defun setenv (variable &optional value unset substitute-env-vars)
(defun setenv (variable &optional value substitute-env-vars)
"Set the value of the environment variable named VARIABLE to VALUE.
VARIABLE should be a string. VALUE is optional; if not provided or
nil, the environment variable VARIABLE will be removed. UNSET
if non-nil means to remove VARIABLE from the environment.
SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
variables in VALUE with `substitute-env-vars', where see.
Value is the new value if VARIABLE, or nil if removed from the
environment.
nil, the environment variable VARIABLE will be removed.
Interactively, a prefix argument means to unset the variable.
Interactively, the current value (if any) of the variable
appears at the front of the history list when you type in the new value.
Interactively, always replace environment variables in the new value.
SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
variables in VALUE with `substitute-env-vars', which see.
This is normally used only for interactive calls.
The return value is the new value of VARIABLE, or nil if
it was removed from the environment.
This function works by modifying `process-environment'.
As a special case, setting variable `TZ' calls `set-time-zone-rule' as
a side-effect."
(interactive
(if current-prefix-arg
(list (read-envvar-name "Clear environment variable: " 'exact) nil t)
(list (read-envvar-name "Clear environment variable: " 'exact) nil)
(let* ((var (read-envvar-name "Set environment variable: " nil))
(value (getenv var)))
(when value
@ -121,7 +123,6 @@ a side-effect."
(read-from-minibuffer (format "Set %s to value: " var)
nil nil nil 'setenv-history
value)
nil
t))))
(if (and (multibyte-string-p variable) locale-coding-system)
(let ((codings (find-coding-systems-string (concat variable value))))
@ -129,10 +130,9 @@ a side-effect."
(memq (coding-system-base locale-coding-system) codings))
(error "Can't encode `%s=%s' with `locale-coding-system'"
variable (or value "")))))
(if unset
(setq value nil)
(if substitute-env-vars
(setq value (substitute-env-vars value))))
(and value
substitute-env-vars
(setq value (substitute-env-vars value)))
(if (multibyte-string-p variable)
(setq variable (encode-coding-string variable locale-coding-system)))
(if (and value (multibyte-string-p value))

View file

@ -452,6 +452,8 @@ not safe, Emacs queries you, once, whether to set them all.
\(When you say yes to certain values, they are remembered as safe.)
:safe means set the safe variables, and ignore the rest.
:all means set all variables, whether safe or not.
(Don't set it permanently to :all.)
nil means always ignore the file local variables.
Any other value means always query you once whether to set them all.
@ -464,8 +466,9 @@ a -*- line.
The command \\[normal-mode], when used interactively,
always obeys file local variable specifications and the -*- line,
and ignores this variable."
:type '(choice (const :tag "Obey" t)
:type '(choice (const :tag "Query Unsafe" t)
(const :tag "Safe Only" :safe)
(const :tag "Do all" :all)
(const :tag "Ignore" nil)
(other :tag "Query" other))
:group 'find-file)
@ -2283,6 +2286,7 @@ asking you for confirmation."
default-text-properties
display-time-string
enable-local-eval
enable-local-variables
eval
exec-directory
exec-path
@ -2318,6 +2322,8 @@ asking you for confirmation."
parse-time-rules
process-environment
rmail-output-file-alist
safe-local-variable-values
safe-local-eval-forms
save-some-buffers-action-alist
special-display-buffer-names
standard-input
@ -2355,9 +2361,11 @@ asking you for confirmation."
(c-indent-level . integerp)
(comment-column . integerp)
(compile-command . string-or-null-p)
(find-file-visit-truename . t)
(fill-column . integerp)
(fill-prefix . string-or-null-p)
(indent-tabs-mode . t)
(kept-old-versions . integerp)
(kept-new-versions . integerp)
(left-margin . t)
(no-byte-compile . t)
@ -2630,6 +2638,7 @@ is specified, returning t if it is specified."
(if (or (and (eq enable-local-variables t)
(null unsafe-vars)
(null risky-vars))
(eq enable-local-variables :all)
(hack-local-variables-confirm
result unsafe-vars risky-vars))
(dolist (elt result)

View file

@ -1,3 +1,57 @@
2006-04-20 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-util.el (gnus-replace-in-string): Prefer
replace-regexp-in-string over of replace-in-string.
2006-04-20 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-group.el: Bind tool-bar-mode instead of tool-bar-map.
* gnus-sum.el: Ditto.
* gnus-util.el (gnus-select-frame-set-input-focus): Use
select-frame-set-input-focus if it is available in XEmacs; use
definition defined in Emacs 22 for old Emacsen.
2006-04-17 Reiner Steib <Reiner.Steib@gmx.de>
[ Merge from Gnus trunk. ]
* mm-util.el (mm-charset-synonym-alist): Improve doc string.
(mm-charset-override-alist): New variable.
(mm-charset-to-coding-system): Use it.
(mm-codepage-setup): New helper function.
(mm-charset-eval-alist): New variable.
(mm-charset-to-coding-system): Use mm-charset-eval-alist. Warn
about unknown charsets. Add allow-override. Use
`mm-charset-override-alist' only when decoding.
(mm-detect-mime-charset-region): Use :mime-charset.
* mm-bodies.el (mm-decode-body, mm-decode-string): Call
`mm-charset-to-coding-system' with allow-override argument.
* message.el (message-tool-bar-zap-list, message-tool-bar)
(message-tool-bar-gnome, message-tool-bar-retro): New variables.
(message-tool-bar-local-item-from-menu): Remove.
(message-tool-bar-map): Replace by `message-make-tool-bar'.
(message-make-tool-bar): New function.
(message-mode): Use `message-make-tool-bar'.
* gnus-sum.el (gnus-summary-tool-bar)
(gnus-summary-tool-bar-gnome, gnus-summary-tool-bar-retro)
(gnus-summary-tool-bar-zap-list): New variables.
(gnus-summary-make-tool-bar): Complete rewrite using
`gmm-tool-bar-from-list'.
* gnus-group.el (gnus-group-tool-bar, gnus-group-tool-bar-gnome)
(gnus-group-tool-bar-retro, gnus-group-tool-bar-zap-list): New
variables.
(gnus-group-make-tool-bar): Complete rewrite using
`gmm-tool-bar-from-list'.
(gnus-group-tool-bar-update): New function.
* gmm-utils.el: New file.
2006-04-12 Ralf Angeli <angeli@iwi.uni-sb.de>
* flow-fill.el (fill-flowed): Remove trailing space from blank

413
lisp/gnus/gmm-utils.el Normal file
View file

@ -0,0 +1,413 @@
;;; gmm-utils.el --- Utility functions for Gnus, Message and MML
;; Copyright (C) 2006 Free Software Foundation, Inc.
;; Author: Reiner Steib <reiner.steib@gmx.de>
;; Keywords: news
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; This library provides self-contained utility functions. The functions are
;; used in Gnus, Message and MML, but within this library there are no
;; dependencies on Gnus, Message, or MML or Gnus.
;;; Code:
;; (require 'wid-edit)
(defgroup gmm nil
"Utility functions for Gnus, Message and MML"
:prefix "gmm-"
:version "23.0" ;; No Gnus
:group 'lisp)
;; Helper functions from `gnus-utils.el': gmm-verbose, gmm-message, gmm-error
(defcustom gmm-verbose 7
"Integer that says how verbose gmm should be.
The higher the number, the more messages will flash to say what
it done. At zero, it will be totally mute; at five, it will
display most important messages; and at ten, it will keep on
jabbering all the time."
:type 'integer
:group 'gmm)
;;;###autoload
(defun gmm-message (level &rest args)
"If LEVEL is lower than `gmm-verbose' print ARGS using `message'.
Guideline for numbers:
1 - error messages, 3 - non-serious error messages, 5 - messages for things
that take a long time, 7 - not very important messages on stuff, 9 - messages
inside loops."
(if (<= level gmm-verbose)
(apply 'message args)
;; We have to do this format thingy here even if the result isn't
;; shown - the return value has to be the same as the return value
;; from `message'.
(apply 'format args)))
;;;###autoload
(defun gmm-error (level &rest args)
"Beep an error if LEVEL is equal to or less than `gmm-verbose'.
ARGS are passed to `message'."
(when (<= (floor level) gmm-verbose)
(apply 'message args)
(ding)
(let (duration)
(when (and (floatp level)
(not (zerop (setq duration (* 10 (- level (floor level)))))))
(sit-for duration))))
nil)
;;;###autoload
(defun gmm-widget-p (symbol)
"Non-nil iff SYMBOL is a widget."
(get symbol 'widget-type))
;; Copy of the `nnmail-lazy' code from `nnmail.el':
(define-widget 'gmm-lazy 'default
"Base widget for recursive datastructures.
This is copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
:format "%{%t%}: %v"
:convert-widget 'widget-value-convert-widget
:value-create (lambda (widget)
(let ((value (widget-get widget :value))
(type (widget-get widget :type)))
(widget-put widget :children
(list (widget-create-child-value
widget (widget-convert type) value)))))
:value-delete 'widget-children-value-delete
:value-get (lambda (widget)
(widget-value (car (widget-get widget :children))))
:value-inline (lambda (widget)
(widget-apply (car (widget-get widget :children))
:value-inline))
:default-get (lambda (widget)
(widget-default-get
(widget-convert (widget-get widget :type))))
:match (lambda (widget value)
(widget-apply (widget-convert (widget-get widget :type))
:match value))
:validate (lambda (widget)
(widget-apply (car (widget-get widget :children)) :validate)))
;; Note: The format of `gmm-tool-bar-item' may change if some future Emacs
;; version will provide customizable tool bar buttons using a different
;; interface.
;; TODO: Extend API so that the "Command" entry can be a function or a plist.
;; In case of a list it should have the format...
;;
;; (:none command-without-modifier
;; :shift command-with-shift-pressed
;; :control command-with-ctrl-pressed
;; :control-shift command-with-control-and-shift-pressed
;; ;; mouse-2 and mouse-3 can't be used in Emacs yet.
;; :mouse-2 command-on-mouse-2-press
;; :mouse-3 command-on-mouse-3-press) ;; typically a menu of related commands
;;
;; Combinations of mouse-[23] plus shift and/or controll might be overkill.
;;
;; Then use (plist-get rs-command :none), (plist-get rs-command :shift)
(define-widget 'gmm-tool-bar-item (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
"Tool bar list item."
:tag "Tool bar item"
:type '(choice
(list :tag "Command and Icon"
(function :tag "Command")
(string :tag "Icon file")
(choice
(const :tag "Default map" nil)
;; Note: Usually we need non-nil attributes if map is t.
(const :tag "No menu" t)
(sexp :tag "Other map"))
(plist :inline t :tag "Properties"))
(list :tag "Separator"
(const :tag "No command" gmm-ignore)
(string :tag "Icon file")
(const :tag "No map")
(plist :inline t :tag "Properties"))))
(define-widget 'gmm-tool-bar-zap-list (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
"Tool bar zap list."
:tag "Tool bar zap list"
:type '(choice (const :tag "Zap all" t)
(const :tag "Keep all" nil)
(list
;; :value
;; Work around (bug in customize?), see
;; <news:v9is48jrj1.fsf@marauder.physik.uni-ulm.de>
;; (new-file open-file dired kill-buffer write-file
;; print-buffer customize help)
(set :inline t
(const new-file)
(const open-file)
(const dired)
(const kill-buffer)
(const save-buffer)
(const write-file)
(const undo)
(const cut)
(const copy)
(const paste)
(const search-forward)
(const print-buffer)
(const customize)
(const help))
(repeat :inline t
:tag "Other"
(symbol :tag "Icon item")))))
;; (defun gmm-color-cells (&optional display)
;; "Return the number of color cells supported by DISPLAY.
;; Compatibility function."
;; ;; `display-color-cells' doesn't return more than 256 even if color depth is
;; ;; > 8 in Emacs 21.
;; ;;
;; ;; Feel free to add proper XEmacs support.
;; (let* ((cells (and (fboundp 'display-color-cells)
;; (display-color-cells display)))
;; (plane (and (fboundp 'x-display-planes)
;; (ash 1 (x-display-planes))))
;; (none -1))
;; (max (if (integerp cells) cells none)
;; (if (integerp plane) plane none))))
(defcustom gmm-tool-bar-style
(if (and (boundp 'tool-bar-mode)
tool-bar-mode
(and (fboundp 'display-visual-class)
(not (memq (display-visual-class)
(list 'static-gray 'gray-scale
'static-color 'pseudo-color)))))
'gnome
'retro)
"Prefered tool bar style."
:type '(choice (const :tag "GNOME style" 'gnome)
(const :tag "Retro look" 'retro))
:group 'gmm)
(defvar tool-bar-map)
;;;###autoload
(defun gmm-tool-bar-from-list (icon-list zap-list default-map)
"Make a tool bar from ICON-LIST.
Within each entry of ICON-LIST, the first element is a menu
command, the second element is an icon file name and the third
element is a test function. You can use \\[describe-key]
<menu-entry> to find out the name of a menu command. The fourth
and all following elements are passed a the PROPS argument to the
function `tool-bar-local-item'.
If ZAP-LIST is a list, remove those item from the default
`tool-bar-map'. If it is t, start with a new sparse map. You
can use \\[describe-key] <icon> to find out the name of an icon
item. When \\[describe-key] <icon> shows \"<tool-bar> <new-file>
runs the command find-file\", then use `new-file' in ZAP-LIST.
DEFAULT-MAP specifies the default key map for ICON-LIST."
(let (;; For Emacs 21, we must let-bind `tool-bar-map'. In Emacs 22, we
;; could use some other local variable.
(tool-bar-map (if (eq zap-list t)
(make-sparse-keymap)
(copy-keymap tool-bar-map))))
(when (listp zap-list)
;; Zap some items which aren't relevant for this mode and take up space.
(dolist (key zap-list)
(define-key tool-bar-map (vector key) nil)))
(mapc (lambda (el)
(let ((command (car el))
(icon (nth 1 el))
(fmap (or (nth 2 el) default-map))
(props (cdr (cdr (cdr el)))) )
;; command may stem from different from-maps:
(cond ((eq command 'gmm-ignore)
;; The dummy `gmm-ignore', see `gmm-tool-bar-item'
;; widget. Suppress tooltip by adding `:enable nil'.
(if (fboundp 'tool-bar-local-item)
(apply 'tool-bar-local-item icon nil nil
tool-bar-map :enable nil props)
;; (tool-bar-local-item ICON DEF KEY MAP &rest PROPS)
;; (tool-bar-add-item ICON DEF KEY &rest PROPS)
(apply 'tool-bar-add-item icon nil nil :enable nil props)))
((equal fmap t) ;; Not a menu command
(if (fboundp 'tool-bar-local-item)
(apply 'tool-bar-local-item
icon command
(intern icon) ;; reuse icon or fmap here?
tool-bar-map props)
;; Emacs 21 compatibility:
(apply 'tool-bar-add-item
icon command
(intern icon)
props)))
(t ;; A menu command
(if (fboundp 'tool-bar-local-item-from-menu)
(apply 'tool-bar-local-item-from-menu
;; (apply 'tool-bar-local-item icon def key
;; tool-bar-map props)
command icon tool-bar-map (symbol-value fmap)
props)
;; Emacs 21 compatibility:
(apply 'tool-bar-add-item-from-menu
command icon (symbol-value fmap)
props))))
t))
(if (symbolp icon-list)
(eval icon-list)
icon-list))
tool-bar-map))
;; WARNING: The following is subject to change. Don't rely on it yet.
;; From MH-E without modifications:
(defmacro gmm-defun-compat (name function arg-list &rest body)
"Create function NAME.
If FUNCTION exists, then NAME becomes an alias for FUNCTION.
Otherwise, create function NAME with ARG-LIST and BODY."
(let ((defined-p (fboundp function)))
(if defined-p
`(defalias ',name ',function)
`(defun ,name ,arg-list ,@body))))
(gmm-defun-compat gmm-image-search-load-path
image-search-load-path (file &optional path)
"Emacs 21 and XEmacs don't have `image-search-load-path'.
This function returns nil on those systems."
nil)
;; From MH-E with modifications:
;; Don't use `gmm-defun-compat' until API changes in
;; `image-load-path-for-library' in Emacs CVS are completed.
(defun gmm-image-load-path-for-library (library image &optional path no-error)
"Return a suitable search path for images relative to LIBRARY.
First it searches for IMAGE in `image-load-path' (excluding
\"`data-directory'/images\") and `load-path', followed by a path
suitable for LIBRARY, which includes \"../../etc/images\" and
\"../etc/images\" relative to the library file itself, and then
in \"`data-directory'/images\".
Then this function returns a list of directories which contains
first the directory in which IMAGE was found, followed by the
value of `load-path'. If PATH is given, it is used instead of
`load-path'.
If NO-ERROR is non-nil and a suitable path can't be found, don't
signal an error. Instead, return a list of directories as before,
except that nil appears in place of the image directory.
Here is an example that uses a common idiom to provide
compatibility with versions of Emacs that lack the variable
`image-load-path':
;; Shush compiler.
(defvar image-load-path)
(let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\"))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(mh-tool-bar-folder-buttons-init))"
(unless library (error "No library specified"))
(unless image (error "No image specified"))
(let (image-directory image-directory-load-path)
;; Check for images in image-load-path or load-path.
(let ((img image)
(dir (or
;; Images in image-load-path.
(gmm-image-search-load-path image) ;; "gmm-" prefix!
;; Images in load-path.
(locate-library image)))
parent)
;; Since the image might be in a nested directory (for
;; example, mail/attach.pbm), adjust `image-directory'
;; accordingly.
(when dir
(setq dir (file-name-directory dir))
(while (setq parent (file-name-directory img))
(setq img (directory-file-name parent)
dir (expand-file-name "../" dir))))
(setq image-directory-load-path dir))
;; If `image-directory-load-path' isn't Emacs' image directory,
;; it's probably a user preference, so use it. Then use a
;; relative setting if possible; otherwise, use
;; `image-directory-load-path'.
(cond
;; User-modified image-load-path?
((and image-directory-load-path
(not (equal image-directory-load-path
(file-name-as-directory
(expand-file-name "images" data-directory)))))
(setq image-directory image-directory-load-path))
;; Try relative setting.
((let (library-name d1ei d2ei)
;; First, find library in the load-path.
(setq library-name (locate-library library))
(if (not library-name)
(error "Cannot find library %s in load-path" library))
;; And then set image-directory relative to that.
(setq
;; Go down 2 levels.
d2ei (file-name-as-directory
(expand-file-name
(concat (file-name-directory library-name) "../../etc/images")))
;; Go down 1 level.
d1ei (file-name-as-directory
(expand-file-name
(concat (file-name-directory library-name) "../etc/images"))))
(setq image-directory
;; Set it to nil if image is not found.
(cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
((file-exists-p (expand-file-name image d1ei)) d1ei)))))
;; Use Emacs' image directory.
(image-directory-load-path
(setq image-directory image-directory-load-path))
(no-error
(message "Could not find image %s for library %s" image library))
(t
(error "Could not find image %s for library %s" image library)))
;; Return an augmented `path' or `load-path'.
(nconc (list image-directory)
(delete image-directory (copy-sequence (or path load-path))))))
(defun gmm-customize-mode (&optional mode)
"Customize customization group for MODE.
If mode is nil, use `major-mode' of the curent buffer."
(interactive)
(customize-group
(or mode
(intern (let ((mode (symbol-name major-mode)))
(string-match "^\\(.+\\)-mode$" mode)
(match-string 1 mode))))))
(provide 'gmm-utils)
;; arch-tag: e0b60920-2ce6-40c1-bfc0-cadbbe26b602
;;; gmm-utils.el ends here

View file

@ -29,7 +29,7 @@
(eval-when-compile
(require 'cl)
(defvar tool-bar-map))
(defvar tool-bar-mode))
(require 'gnus)
(require 'gnus-start)
@ -39,6 +39,7 @@
(require 'gnus-range)
(require 'gnus-win)
(require 'gnus-undo)
(require 'gmm-utils)
(require 'time-date)
(require 'gnus-ems)
@ -979,36 +980,135 @@ simple manner.")
(gnus-run-hooks 'gnus-group-menu-hook)))
(defvar gnus-group-toolbar-map nil)
;; Emacs 21 tool bar. Should be no-op otherwise.
(defun gnus-group-make-tool-bar ()
(if (and
(condition-case nil (require 'tool-bar) (error nil))
(fboundp 'tool-bar-add-item-from-menu)
(default-value 'tool-bar-mode)
(not gnus-group-toolbar-map))
(setq gnus-group-toolbar-map
(let ((tool-bar-map (make-sparse-keymap))
(load-path (mm-image-load-path)))
(tool-bar-add-item-from-menu
'gnus-group-get-new-news "get-news" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-get-new-news-this-group "gnntg" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-catchup-current "catchup" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-describe-group "describe-group" gnus-group-mode-map)
(tool-bar-add-item "subscribe" 'gnus-group-subscribe 'subscribe
:help "Subscribe to the current group")
(tool-bar-add-item "unsubscribe" 'gnus-group-unsubscribe
'unsubscribe
:help "Unsubscribe from the current group")
(tool-bar-add-item-from-menu
'gnus-group-exit "exit-gnus" gnus-group-mode-map)
tool-bar-map)))
(if gnus-group-toolbar-map
(set (make-local-variable 'tool-bar-map) gnus-group-toolbar-map)))
(defvar gnus-group-tool-bar-map nil)
(defun gnus-group-tool-bar-update (&optional symbol value)
"Update group buffer toolbar.
Setter function for custom variables."
(when symbol
(set-default symbol value))
;; (setq-default gnus-group-tool-bar-map nil)
;; (use-local-map gnus-group-mode-map)
(when (gnus-alive-p)
(with-current-buffer gnus-group-buffer
(gnus-group-make-tool-bar t))))
(defcustom gnus-group-tool-bar (if (eq gmm-tool-bar-style 'gnome)
'gnus-group-tool-bar-gnome
'gnus-group-tool-bar-retro)
"Specifies the Gnus group tool bar.
It can be either a list or a symbol refering to a list. See
`gmm-tool-bar-from-list' for the format of the list. The
default key map is `gnus-group-mode-map'.
Pre-defined symbols include `gnus-group-tool-bar-gnome' and
`gnus-group-tool-bar-retro'."
:type '(choice (const :tag "GNOME style" gnus-group-tool-bar-gnome)
(const :tag "Retro look" gnus-group-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-gnome
'((gnus-group-post-news "mail/compose")
;; Some useful agent icons? I don't use the agent so agent users should
;; suggest useful commands:
(gnus-agent-toggle-plugged "connect" t
:visible (and gnus-agent (not gnus-plugged)))
(gnus-agent-toggle-plugged "disconnect" t
:visible (and gnus-agent gnus-plugged))
;; FIXME: gnus-agent-toggle-plugged (in gnus-agent-group-make-menu-bar)
;; should have a better help text.
(gnus-group-send-queue "mail/outbox" t
:visible (and gnus-agent gnus-plugged)
:help "Send articles from the queue group")
(gnus-group-get-new-news "mail/inbox" nil
:visible (or (not gnus-agent)
gnus-plugged))
;; FIXME: gnus-*-read-group should have a better help text.
(gnus-topic-read-group "open" nil
:visible (and (boundp 'gnus-topic-mode)
gnus-topic-mode))
(gnus-group-read-group "open" nil
:visible (not (and (boundp 'gnus-topic-mode)
gnus-topic-mode)))
;; (gnus-group-find-new-groups "???" nil)
(gnus-group-save-newsrc "save")
(gnus-group-describe-group "describe")
(gnus-group-unsubscribe-current-group "gnus/toggle-subscription")
(gnus-group-prev-unread-group "left-arrow")
(gnus-group-next-unread-group "right-arrow")
(gnus-group-exit "exit")
(gmm-customize-mode "preferences" t :help "Edit mode preferences")
(gnus-info-find-node "help"))
"List of functions for the group tool bar (GNOME style).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-retro
'((gnus-group-get-new-news "gnus/get-news")
(gnus-group-get-new-news-this-group "gnus/gnntg")
(gnus-group-catchup-current "gnus/catchup")
(gnus-group-describe-group "gnus/describe-group")
(gnus-group-subscribe "gnus/subscribe" t
:help "Subscribe to the current group")
(gnus-group-unsubscribe "gnus/unsubscribe" t
:help "Unsubscribe from the current group")
(gnus-group-exit "gnus/exit-gnus" gnus-group-mode-map))
"List of functions for the group tool bar (retro look).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-zap-list t
"List of icon items from the global tool bar.
These items are not displayed in the Gnus group mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defvar image-load-path)
(defun gnus-group-make-tool-bar (&optional force)
"Make a group mode tool bar from `gnus-group-tool-bar'.
When FORCE, rebuild the tool bar."
(when (and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)
tool-bar-mode
;; The Gnus 5.10.6 code checked (default-value 'tool-bar-mode).
;; Why? --rsteib
(or (not gnus-group-tool-bar-map) force))
(let* ((load-path
(gmm-image-load-path-for-library "gnus"
"gnus/toggle-subscription.xpm"
nil t))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path)))
(map (gmm-tool-bar-from-list gnus-group-tool-bar
gnus-group-tool-bar-zap-list
'gnus-group-mode-map)))
(if map
(set (make-local-variable 'tool-bar-map) map))))
gnus-group-tool-bar-map)
(defun gnus-group-mode ()
"Major mode for reading news.
@ -1379,6 +1479,17 @@ if it is a string, only list groups matching REGEXP."
(gnus-range-difference (list active) (gnus-info-read info))
seen))))))
;; Moving through the Group buffer (in topic mode) e.g. with C-n doesn't
;; update the state (enabled/disabled) of the icon `gnus-group-describe-group'
;; automatically. After `C-l' the state is correct. See the following report
;; on emacs-devel
;; <http://thread.gmane.org/v9acdmrcse.fsf@marauder.physik.uni-ulm.de>:
;; From: Reiner Steib
;; Subject: tool bar icons not updated according to :active condition
;; Newsgroups: gmane.emacs.devel
;; Date: Mon, 23 Jan 2006 19:59:13 +0100
;; Message-ID: <v9acdmrcse.fsf@marauder.physik.uni-ulm.de>
(defcustom gnus-group-update-tool-bar
(and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)

View file

@ -29,7 +29,7 @@
(eval-when-compile
(require 'cl)
(defvar tool-bar-map))
(defvar tool-bar-mode))
(require 'gnus)
(require 'gnus-group)
@ -38,6 +38,7 @@
(require 'gnus-int)
(require 'gnus-undo)
(require 'gnus-util)
(require 'gmm-utils)
(require 'mm-decode)
(require 'nnoo)
@ -2546,47 +2547,161 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
(defvar gnus-summary-tool-bar-map nil)
;; Emacs 21 tool bar. Should be no-op otherwise.
(defun gnus-summary-make-tool-bar ()
(if (and (fboundp 'tool-bar-add-item-from-menu)
(default-value 'tool-bar-mode)
(not gnus-summary-tool-bar-map))
(setq gnus-summary-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap))
(load-path (mm-image-load-path)))
(tool-bar-add-item-from-menu
'gnus-summary-prev-unread "prev-ur" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-next-unread "next-ur" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-post-news "post" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-followup-with-original "fuwo" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-followup "followup" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-reply-with-original "reply-wo" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-reply "reply" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-caesar-message "rot13" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-uu-decode-uu "uu-decode" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-save-article-file "save-aif" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-save-article "save-art" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-uu-post-news "uu-post" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-catchup "catchup" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-catchup-and-exit "cu-exit" gnus-summary-mode-map)
(tool-bar-add-item-from-menu
'gnus-summary-exit "exit-summ" gnus-summary-mode-map)
tool-bar-map)))
(if gnus-summary-tool-bar-map
(set (make-local-variable 'tool-bar-map) gnus-summary-tool-bar-map)))
;; Note: The :set function in the `gnus-summary-tool-bar*' variables will only
;; affect _new_ message buffers. We might add a function that walks thru all
;; summary-mode buffers and force the update.
(defun gnus-summary-tool-bar-update (&optional symbol value)
"Update summary mode toolbar.
Setter function for custom variables."
(setq-default gnus-summary-tool-bar-map nil)
(when symbol
;; When used as ":set" function:
(set-default symbol value))
(when (gnus-buffer-live-p gnus-summary-buffer)
(with-current-buffer gnus-summary-buffer
(gnus-summary-make-tool-bar))))
(defcustom gnus-summary-tool-bar (if (eq gmm-tool-bar-style 'gnome)
'gnus-summary-tool-bar-gnome
'gnus-summary-tool-bar-retro)
"Specifies the Gnus summary tool bar.
It can be either a list or a symbol refering to a list. See
`gmm-tool-bar-from-list' for the format of the list. The
default key map is `gnus-summary-mode-map'.
Pre-defined symbols include `gnus-summary-tool-bar-gnome' and
`gnus-summary-tool-bar-retro'."
:type '(choice (const :tag "GNOME style" gnus-summary-tool-bar-gnome)
(const :tag "Retro look" gnus-summary-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
(defcustom gnus-summary-tool-bar-gnome
'((gnus-summary-post-news "mail/compose" nil)
(gnus-summary-insert-new-articles "mail/inbox" nil
:visible (or (not gnus-agent)
gnus-plugged))
(gnus-summary-reply-with-original "mail/reply")
(gnus-summary-reply "mail/reply" nil :visible nil)
(gnus-summary-followup-with-original "mail/reply-all")
(gnus-summary-followup "mail/reply-all" nil :visible nil)
(gnus-summary-mail-forward "mail/forward")
(gnus-summary-save-article "mail/save")
(gnus-summary-search-article-forward "search" nil :visible nil)
(gnus-summary-print-article "print")
(gnus-summary-tick-article-forward "flag-followup" nil :visible nil)
;; Some new commands that may need more suitable icons:
(gnus-summary-save-newsrc "save" nil :visible nil)
;; (gnus-summary-show-article "stock_message-display" nil :visible nil)
(gnus-summary-prev-article "left-arrow")
(gnus-summary-next-article "right-arrow")
(gnus-summary-next-page "next-page")
;; (gnus-summary-enter-digest-group "right_arrow" nil :visible nil)
;;
;; Maybe some sort-by-... could be added:
;; (gnus-summary-sort-by-author "sort-a-z" nil :visible nil)
;; (gnus-summary-sort-by-date "sort-1-9" nil :visible nil)
(gnus-summary-mark-as-expirable
"delete" nil
:visible (gnus-check-backend-function 'request-expire-articles
gnus-newsgroup-name))
(gnus-summary-mark-as-spam
"mail/spam" t
:visible (and (fboundp 'spam-group-ham-contents-p)
(spam-group-ham-contents-p gnus-newsgroup-name))
:help "Mark as spam")
(gnus-summary-mark-as-read-forward
"mail/not-spam" nil
:visible (and (fboundp 'spam-group-spam-contents-p)
(spam-group-spam-contents-p gnus-newsgroup-name)))
;;
(gnus-summary-exit "exit")
(gmm-customize-mode "preferences" t :help "Edit mode preferences")
(gnus-info-find-node "help"))
"List of functions for the summary tool bar (GNOME style).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
(defcustom gnus-summary-tool-bar-retro
'((gnus-summary-prev-unread-article "gnus/prev-ur")
(gnus-summary-next-unread-article "gnus/next-ur")
(gnus-summary-post-news "gnus/post")
(gnus-summary-followup-with-original "gnus/fuwo")
(gnus-summary-followup "gnus/followup")
(gnus-summary-reply-with-original "gnus/reply-wo")
(gnus-summary-reply "gnus/reply")
(gnus-summary-caesar-message "gnus/rot13")
(gnus-uu-decode-uu "gnus/uu-decode")
(gnus-summary-save-article-file "gnus/save-aif")
(gnus-summary-save-article "gnus/save-art")
(gnus-uu-post-news "gnus/uu-post")
(gnus-summary-catchup "gnus/catchup")
(gnus-summary-catchup-and-exit "gnus/cu-exit")
(gnus-summary-exit "gnus/exit-summ")
;; Some new command that may need more suitable icons:
(gnus-summary-print-article "gnus/print" nil :visible nil)
(gnus-summary-mark-as-expirable "gnus/close" nil :visible nil)
(gnus-summary-save-newsrc "gnus/save" nil :visible nil)
;; (gnus-summary-enter-digest-group "gnus/right_arrow" nil :visible nil)
(gnus-summary-search-article-forward "gnus/search" nil :visible nil)
;; (gnus-summary-insert-new-articles "gnus/paste" nil :visible nil)
;; (gnus-summary-toggle-threads "gnus/open" nil :visible nil)
;;
(gnus-info-find-node "gnus/help" nil :visible nil))
"List of functions for the summary tool bar (retro look).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
(defcustom gnus-summary-tool-bar-zap-list t
"List of icon items from the global tool bar.
These items are not displayed in the Gnus summary mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
(defvar image-load-path)
(defun gnus-summary-make-tool-bar (&optional force)
"Make a summary mode tool bar from `gnus-summary-tool-bar'.
When FORCE, rebuild the tool bar."
(when (and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)
tool-bar-mode
(or (not gnus-summary-tool-bar-map) force))
(let* ((load-path
(gmm-image-load-path-for-library "gnus"
"mail/save.xpm"
nil t))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path)))
(map (gmm-tool-bar-from-list gnus-summary-tool-bar
gnus-summary-tool-bar-zap-list
'gnus-summary-mode-map)))
(when map
;; Need to set `gnus-summary-tool-bar-map' because `gnus-article-mode'
;; uses it's value.
(setq gnus-summary-tool-bar-map map))))
(set (make-local-variable 'tool-bar-map) gnus-summary-tool-bar-map))
(defun gnus-score-set-default (var value)
"A version of set that updates the GNU Emacs menu-bar."

View file

@ -61,8 +61,11 @@
(eval-and-compile
(cond
((fboundp 'replace-in-string)
(defalias 'gnus-replace-in-string 'replace-in-string))
;; Prefer `replace-regexp-in-string' (present in Emacs, XEmacs 21.5,
;; SXEmacs 22.1.4) over `replace-in-string'. The later leads to inf-loops
;; on empty matches:
;; (replace-in-string "foo" "/*$" "/")
;; (replace-in-string "xe" "\\(x\\)?" "")
((fboundp 'replace-regexp-in-string)
(defun gnus-replace-in-string (string regexp newtext &optional literal)
"Replace all matches for REGEXP with NEWTEXT in STRING.
@ -71,6 +74,8 @@ string containing the replacements.
This is a compatibility function for different Emacsen."
(replace-regexp-in-string regexp newtext string nil literal)))
((fboundp 'replace-in-string)
(defalias 'gnus-replace-in-string 'replace-in-string))
(t
(defun gnus-replace-in-string (string regexp newtext &optional literal)
"Replace all matches for REGEXP with NEWTEXT in STRING.
@ -1424,20 +1429,19 @@ CHOICE is a list of the choice char and help message at IDX."
(defun gnus-select-frame-set-input-focus (frame)
"Select FRAME, raise it, and set input focus, if possible."
(cond ((featurep 'xemacs)
(raise-frame frame)
(select-frame frame)
(focus-frame frame))
;; The function `select-frame-set-input-focus' won't set
;; the input focus under Emacs 21.2 and X window system.
;;((fboundp 'select-frame-set-input-focus)
;; (defalias 'gnus-select-frame-set-input-focus
;; 'select-frame-set-input-focus)
;; (select-frame-set-input-focus frame))
(if (fboundp 'select-frame-set-input-focus)
(select-frame-set-input-focus frame)
(raise-frame frame)
(select-frame frame)
(focus-frame frame)))
;; `select-frame-set-input-focus' defined in Emacs 21 will not
;; set the input focus.
((>= emacs-major-version 22)
(select-frame-set-input-focus frame))
(t
(raise-frame frame)
(select-frame frame)
(cond ((and (eq window-system 'x)
(fboundp 'x-focus-frame))
(cond ((memq window-system '(x mac))
(x-focus-frame frame))
((eq window-system 'w32)
(w32-focus-frame frame)))

View file

@ -37,6 +37,7 @@
(defvar gnus-list-identifiers)) ; gnus-sum is required where necessary
(require 'canlock)
(require 'mailheader)
(require 'gmm-utils)
(require 'nnheader)
;; This is apparently necessary even though things are autoloaded.
;; Because we dynamically bind mail-abbrev-mode-regexp, we'd better
@ -2529,7 +2530,7 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
(set (make-local-variable 'font-lock-defaults)
'(message-font-lock-keywords t))
(if (boundp 'tool-bar-map)
(set (make-local-variable 'tool-bar-map) (message-tool-bar-map))))
(set (make-local-variable 'tool-bar-map) (message-make-tool-bar))))
(easy-menu-add message-mode-menu message-mode-map)
(easy-menu-add message-mode-field-menu message-mode-map)
(gnus-make-local-hook 'after-change-functions)
@ -6586,53 +6587,123 @@ which specify the range to operate on."
;; Support for toolbar
(eval-when-compile
(defvar tool-bar-map)
(defvar tool-bar-mode))
(defun message-tool-bar-local-item-from-menu (command icon in-map &optional from-map &rest props)
;; We need to make tool bar entries in local keymaps with
;; `tool-bar-local-item-from-menu' in Emacs >= 22
(if (fboundp 'tool-bar-local-item-from-menu)
(tool-bar-local-item-from-menu command icon in-map from-map props)
(tool-bar-add-item-from-menu command icon from-map props)))
;; Note: The :set function in the `message-tool-bar*' variables will only
;; affect _new_ message buffers. We might add a function that walks thru all
;; message-mode buffers and force the update.
(defun message-tool-bar-update (&optional symbol value)
"Update message mode toolbar.
Setter function for custom variables."
(setq-default message-tool-bar-map nil)
(when symbol
;; When used as ":set" function:
(set-default symbol value)))
(defun message-tool-bar-map ()
(or message-tool-bar-map
(setq message-tool-bar-map
(and
(condition-case nil (require 'tool-bar) (error nil))
(fboundp 'tool-bar-add-item-from-menu)
(defcustom message-tool-bar (if (eq gmm-tool-bar-style 'gnome)
'message-tool-bar-gnome
'message-tool-bar-retro)
"Specifies the message mode tool bar.
It can be either a list or a symbol refering to a list. See
`gmm-tool-bar-from-list' for the format of the list. The
default key map is `message-mode-map'.
Pre-defined symbols include `message-tool-bar-gnome' and
`message-tool-bar-retro'."
:type '(repeat gmm-tool-bar-list-item)
:type '(choice (const :tag "GNOME style" message-tool-bar-gnome)
(const :tag "Retro look" message-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
(defcustom message-tool-bar-gnome
'((ispell-message "spell" nil
:visible (or (not (boundp 'flyspell-mode))
(not flyspell-mode)))
(flyspell-buffer "spell" t
:visible (and (boundp 'flyspell-mode)
flyspell-mode)
:help "Flyspell whole buffer")
(gmm-ignore "separator")
(message-send-and-exit "mail/send")
(message-dont-send "mail/save-draft")
(message-kill-buffer "close") ;; stock_cancel
(mml-attach-file "attach" mml-mode-map)
(mml-preview "mail/preview" mml-mode-map)
;; (mml-secure-message-sign-encrypt "lock" mml-mode-map :visible nil)
(message-insert-importance-high "important" nil :visible nil)
(message-insert-importance-low "unimportant" nil :visible nil)
(message-insert-disposition-notification-to "receipt" nil :visible nil)
(gmm-customize-mode "preferences" t :help "Edit mode preferences")
(message-info "help" t :help "Message manual"))
"List of items for the message tool bar (GNOME style).
See `gmm-tool-bar-from-list' for details on the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
(defcustom message-tool-bar-retro
'(;; Old Emacs 21 icon for consistency.
(message-send-and-exit "gnus/mail_send")
(message-kill-buffer "close")
(message-dont-send "cancel")
(mml-attach-file "attach" mml-mode-map)
(ispell-message "spell")
(mml-preview "preview" mml-mode-map)
(message-insert-importance-high "gnus/important")
(message-insert-importance-low "gnus/unimportant")
(message-insert-disposition-notification-to "gnus/receipt"))
"List of items for the message tool bar (retro style).
See `gmm-tool-bar-from-list' for details on the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
(defcustom message-tool-bar-zap-list
'(new-file open-file dired kill-buffer write-file
print-buffer customize help)
"List of icon items from the global tool bar.
These items are not displayed on the message mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
:version "22.1" ;; Gnus 5.10.9
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
(defvar image-load-path)
(defun message-make-tool-bar (&optional force)
"Make a message mode tool bar from `message-tool-bar-list'.
When FORCE, rebuild the tool bar."
(when (and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)
tool-bar-mode
(let ((tool-bar-map (copy-keymap tool-bar-map))
(load-path (mm-image-load-path)))
;; Zap some items which aren't so relevant and take
;; up space.
(dolist (key '(print-buffer kill-buffer save-buffer
write-file dired open-file))
(define-key tool-bar-map (vector key) nil))
(message-tool-bar-local-item-from-menu
'message-send-and-exit "mail/send" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'message-kill-buffer "close" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'message-dont-send "cancel" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'mml-attach-file "attach" tool-bar-map mml-mode-map)
(message-tool-bar-local-item-from-menu
'ispell-message "spell" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'mml-preview "preview"
tool-bar-map mml-mode-map)
(message-tool-bar-local-item-from-menu
'message-insert-importance-high "important"
tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'message-insert-importance-low "unimportant"
tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'message-insert-disposition-notification-to "receipt"
tool-bar-map message-mode-map)
tool-bar-map)))))
(or (not message-tool-bar-map) force))
(setq message-tool-bar-map
(let* ((load-path
(gmm-image-load-path-for-library "message"
"mail/save-draft.xpm"
nil t))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(gmm-tool-bar-from-list message-tool-bar
message-tool-bar-zap-list
'message-mode-map))))
message-tool-bar-map)
;;; Group name completion.

View file

@ -56,6 +56,8 @@
;; known to break servers.
;; Note: UTF-16 variants are invalid for text parts [RFC 2781],
;; so this can't happen :-/.
;; PPS: Yes, it can happen if the user specifies UTF-16 in the MML
;; markup. - jh.
(utf-16 . base64)
(utf-16be . base64)
(utf-16le . base64))
@ -250,7 +252,10 @@ decoding. If it is nil, default to `mail-parse-charset'."
(mm-decode-content-transfer-encoding encoding type))
(when (and (featurep 'mule) ;; Fixme: Wrong test for unibyte session.
(not (eq charset 'gnus-decoded)))
(let ((coding-system (mm-charset-to-coding-system charset)))
(let ((coding-system (mm-charset-to-coding-system
;; Allow overwrite using
;; `mm-charset-override-alist'.
charset nil t)))
(if (and (not coding-system)
(listp mail-parse-ignored-charsets)
(memq 'gnus-unknown mail-parse-ignored-charsets))
@ -281,7 +286,11 @@ decoding. If it is nil, default to `mail-parse-charset'."
(setq charset mail-parse-charset))
(or
(when (featurep 'mule)
(let ((coding-system (mm-charset-to-coding-system charset)))
(let ((coding-system (mm-charset-to-coding-system
charset
;; Allow overwrite using
;; `mm-charset-override-alist'.
nil t)))
(if (and (not coding-system)
(listp mail-parse-ignored-charsets)
(memq 'gnus-unknown mail-parse-ignored-charsets))

View file

@ -177,6 +177,29 @@ system object in XEmacs."
;; no-MULE XEmacs:
(car (memq cs (mm-get-coding-system-list))))))
(defun mm-codepage-setup (number &optional alias)
"Create a coding system cpNUMBER.
The coding system is created using `codepage-setup'. If ALIAS is
non-nil, an alias is created and added to
`mm-charset-synonym-alist'. If ALIAS is a string, it's used as
the alias. Else windows-NUMBER is used."
(interactive
(let ((completion-ignore-case t)
(candidates (cp-supported-codepages)))
(list (completing-read "Setup DOS Codepage: (default 437) " candidates
nil t nil nil "437"))))
(when alias
(setq alias (if (stringp alias)
(intern alias)
(intern (format "windows-%s" number)))))
(let* ((cp (intern (format "cp%s" number))))
(unless (mm-coding-system-p cp)
(codepage-setup number))
(when (and alias
;; Don't add alias if setup of cp failed.
(mm-coding-system-p cp))
(add-to-list 'mm-charset-synonym-alist (cons alias cp)))))
(defvar mm-charset-synonym-alist
`(
;; Not in XEmacs, but it's not a proper MIME charset anyhow.
@ -200,8 +223,61 @@ system object in XEmacs."
,@(if (and (not (mm-coding-system-p 'windows-1250))
(mm-coding-system-p 'cp1250))
'((windows-1250 . cp1250)))
;; A Microsoft misunderstanding.
,@(if (and (not (mm-coding-system-p 'unicode))
(mm-coding-system-p 'utf-16-le))
'((unicode . utf-16-le)))
;; A Microsoft misunderstanding.
,@(unless (mm-coding-system-p 'ks_c_5601-1987)
(if (mm-coding-system-p 'cp949)
'((ks_c_5601-1987 . cp949))
'((ks_c_5601-1987 . euc-kr))))
)
"A mapping from invalid charset names to the real charset names.")
"A mapping from unknown or invalid charset names to the real charset names.")
(defcustom mm-charset-override-alist
`((iso-8859-1 . windows-1252))
"A mapping from undesired charset names to their replacement.
You may add pairs like (iso-8859-1 . windows-1252) here,
i.e. treat iso-8859-1 as windows-1252. windows-1252 is a
superset of iso-8859-1."
:type '(list (set :inline t
(const (iso-8859-1 . windows-1252))
(const (undecided . windows-1252)))
(repeat :inline t
:tag "Other options"
(cons (symbol :tag "From charset")
(symbol :tag "To charset"))))
:version "23.0" ;; No Gnus
:group 'mime)
(defcustom mm-charset-eval-alist
(if (featurep 'xemacs)
nil ;; I don't know what would be useful for XEmacs.
'(;; Emacs 21 offers 1250 1251 1253 1257. Emacs 22 provides autoloads for
;; 1250-1258 (i.e. `mm-codepage-setup' does nothing).
(windows-1250 . (mm-codepage-setup 1250 t))
(windows-1251 . (mm-codepage-setup 1251 t))
(windows-1253 . (mm-codepage-setup 1253 t))
(windows-1257 . (mm-codepage-setup 1257 t))))
"An alist of (CHARSET . FORM) pairs.
If an article is encoded in an unknown CHARSET, FORM is
evaluated. This allows to load additional libraries providing
charsets on demand. If supported by your Emacs version, you
could use `autoload-coding-system' here."
:version "23.0" ;; No Gnus
:type '(list (set :inline t
(const (windows-1250 . (mm-codepage-setup 1250 t)))
(const (windows-1251 . (mm-codepage-setup 1251 t)))
(const (windows-1253 . (mm-codepage-setup 1253 t)))
(const (windows-1257 . (mm-codepage-setup 1257 t)))
(const (cp850 . (mm-codepage-setup 850 nil))))
(repeat :inline t
:tag "Other options"
(cons (symbol :tag "charset")
(symbol :tag "form"))))
:group 'mime)
(defvar mm-binary-coding-system
(cond
@ -396,11 +472,17 @@ mail with multiple parts is preferred to sending a Unicode one.")
(pop alist))
out)))
(defun mm-charset-to-coding-system (charset &optional lbt)
(defun mm-charset-to-coding-system (charset &optional lbt
allow-override)
"Return coding-system corresponding to CHARSET.
CHARSET is a symbol naming a MIME charset.
If optional argument LBT (`unix', `dos' or `mac') is specified, it is
used as the line break code type of the coding system."
used as the line break code type of the coding system.
If ALLOW-OVERRIDE is given, use `mm-charset-override-alist' to
map undesired charset names to their replacement. This should
only be used for decoding, not for encoding."
;; OVERRIDE is used (only) in `mm-decode-body' and `mm-decode-string'.
(when (stringp charset)
(setq charset (intern (downcase charset))))
(when lbt
@ -412,6 +494,11 @@ used as the line break code type of the coding system."
((or (null (mm-get-coding-system-list))
(not (fboundp 'coding-system-get)))
charset)
;; Check override list quite early. Should only used for decoding, not for
;; encoding!
((and allow-override
(let ((cs (cdr (assq charset mm-charset-override-alist))))
(and cs (mm-coding-system-p cs) cs))))
;; ascii
((eq charset 'us-ascii)
'ascii)
@ -424,9 +511,27 @@ used as the line break code type of the coding system."
;;; (eq charset (coding-system-get charset 'mime-charset))
)
charset)
;; Eval expressions from `mm-charset-eval-alist'
((let* ((el (assq charset mm-charset-eval-alist))
(cs (car el))
(form (cdr el)))
(and cs
form
(prog2
;; Avoid errors...
(condition-case nil (eval form) (error nil))
;; (message "Failed to eval `%s'" form))
(mm-coding-system-p cs)
(message "Added charset `%s' via `mm-charset-eval-alist'" cs))
cs)))
;; Translate invalid charsets.
((let ((cs (cdr (assq charset mm-charset-synonym-alist))))
(and cs (mm-coding-system-p cs) cs)))
(and cs
(mm-coding-system-p cs)
;; (message
;; "Using synonym `%s' from `mm-charset-synonym-alist' for `%s'"
;; cs charset)
cs)))
;; Last resort: search the coding system list for entries which
;; have the right mime-charset in case the canonical name isn't
;; defined (though it should be).
@ -438,6 +543,11 @@ used as the line break code type of the coding system."
(eq charset (or (coding-system-get c :mime-charset)
(coding-system-get c 'mime-charset))))
(setq cs c)))
(unless cs
;; Warn the user about unknown charset:
(if (fboundp 'gnus-message)
(gnus-message 7 "Unknown charset: %s" charset)
(message "Unknown charset: %s" charset)))
cs))))
(defsubst mm-replace-chars-in-string (string from to)
@ -1001,7 +1111,8 @@ If SUFFIX is non-nil, add that at the end of the file name."
(defun mm-detect-mime-charset-region (start end)
"Detect MIME charset of the text in the region between START and END."
(let ((cs (mm-detect-coding-region start end)))
(coding-system-get cs 'mime-charset)))
(or (coding-system-get cs :mime-charset)
(coding-system-get cs 'mime-charset))))
(defun mm-detect-mime-charset-region (start end)
"Detect MIME charset of the text in the region between START and END."
(let ((cs (mm-detect-coding-region start end)))

View file

@ -197,6 +197,7 @@ Commands:
(view-mode)
(make-local-variable 'view-no-disable-on-exit)
(setq view-no-disable-on-exit t)
(setq view-exit-action (lambda (buffer) (delete-window)))
(run-mode-hooks 'help-mode-hook))
;;;###autoload

View file

@ -139,7 +139,11 @@ and showing the image as an image."
;; was inserted
(let* ((image
(if (and (buffer-file-name)
(not (buffer-modified-p)))
(not (buffer-modified-p))
(not (and (boundp 'archive-superior-buffer)
archive-superior-buffer))
(not (and (boundp 'tar-superior-buffer)
tar-superior-buffer)))
(progn (clear-image-cache)
(create-image (buffer-file-name)))
(create-image

View file

@ -208,18 +208,13 @@ during matching.")
;;;###autoload
(defvar imenu-create-index-function 'imenu-default-create-index-function
"The function to use for creating a buffer index.
"The function to use for creating an index alist of the current buffer.
It should be a function that takes no arguments and returns an index
of the current buffer as an alist.
It should be a function that takes no arguments and returns
an index alist of the current buffer. The function is
called within a `save-excursion'.
Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
Special elements look like (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...).
A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
The function `imenu--subalist-p' tests an element and returns t
if it is a sub-alist.
This function is called within a `save-excursion'.")
See `imenu--index-alist' for the format of the buffer index alist.")
;;;###autoload
(make-variable-buffer-local 'imenu-create-index-function)
@ -431,15 +426,27 @@ Don't move point."
;; The latest buffer index.
;; Buffer local.
(defvar imenu--index-alist nil
"The buffer index computed for this buffer in Imenu.
Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
Special elements look like (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...).
A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).")
"The buffer index alist computed for this buffer in Imenu.
Simple elements in the alist look like (INDEX-NAME . POSITION).
POSITION is the buffer position of the item; to go to the item
is simply to move point to that position.
Special elements look like (INDEX-NAME POSITION FUNCTION ARGUMENTS...).
To \"go to\" a special element means applying FUNCTION
to INDEX-NAME, POSITION, and the ARGUMENTS.
A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
The function `imenu--subalist-p' tests an element and returns t
if it is a sub-alist.
There is one simple element with negative POSITION; selecting that
element recalculates the buffer's index alist.")
(make-variable-buffer-local 'imenu--index-alist)
(defvar imenu--last-menubar-index-alist nil
"The latest buffer index used to update the menu bar menu.")
"The latest buffer index alist used to update the menu bar menu.")
(make-variable-buffer-local 'imenu--last-menubar-index-alist)
@ -547,19 +554,12 @@ A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).")
(defun imenu--make-index-alist (&optional noerror)
"Create an index-alist for the definitions in the current buffer.
"Create an index alist for the definitions in the current buffer.
This works by using the hook function `imenu-create-index-function'.
Report an error if the list is empty unless NOERROR is supplied and
non-nil.
Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
Special elements look like (INDEX-NAME FUNCTION ARGUMENTS...).
A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
The function `imenu--subalist-p' tests an element and returns t
if it is a sub-alist.
There is one simple element with negative POSITION; that's intended
as a way for the user to ask to recalculate the buffer's index alist."
See `imenu--index-alist' for the format of the index alist."
(or (and imenu--index-alist
(or (not imenu-auto-rescan)
(and imenu-auto-rescan
@ -657,11 +657,15 @@ and speed-up matching.")
(make-variable-buffer-local 'imenu-syntax-alist)
(defun imenu-default-create-index-function ()
"*Wrapper for index searching functions.
"*Default function to create an index alist of the current buffer.
Moves point to end of buffer and then repeatedly calls
The most general method is to move point to end of buffer, then repeatedly call
`imenu-prev-index-position-function' and `imenu-extract-index-name-function'.
Their results are gathered into an index alist."
All the results returned by the latter are gathered into an index alist.
This method is used if those two variables are non-nil.
The alternate method, which is the one most often used, is to call
`imenu--generic-function' with `imenu-generic-expression' as argument."
;; These should really be done by setting imenu-create-index-function
;; in these major modes. But save that change for later.
(cond ((and imenu-prev-index-position-function
@ -687,27 +691,6 @@ Their results are gathered into an index alist."
(t
(error "This buffer cannot use `imenu-default-create-index-function'"))))
;; Not used and would require cl at run time
;; (defun imenu--flatten-index-alist (index-alist &optional concat-names prefix)
;; ;; Takes a nested INDEX-ALIST and returns a flat index alist.
;; ;; If optional CONCAT-NAMES is non-nil, then a nested index has its
;; ;; name and a space concatenated to the names of the children.
;; ;; Third argument PREFIX is for internal use only.
;; (mapcan
;; (lambda (item)
;; (let* ((name (car item))
;; (pos (cdr item))
;; (new-prefix (and concat-names
;; (if prefix
;; (concat prefix imenu-level-separator name)
;; name))))
;; (cond
;; ((or (markerp pos) (numberp pos))
;; (list (cons new-prefix pos)))
;; (t
;; (imenu--flatten-index-alist pos new-prefix)))))
;; index-alist))
;;;
;;; Generic index gathering function.
;;;
@ -724,7 +707,7 @@ for modes which use `imenu--generic-function'. If it is not set, but
;; This function can be called with quitting disabled,
;; so it needs to be careful never to loop!
(defun imenu--generic-function (patterns)
"Return an index of the current buffer as an alist.
"Return an index alist of the current buffer based on PATTERNS.
PATTERNS is an alist with elements that look like this:
(MENU-TITLE REGEXP INDEX)
@ -732,9 +715,8 @@ or like this:
(MENU-TITLE REGEXP INDEX FUNCTION ARGUMENTS...)
with zero or more ARGUMENTS. The former format creates a simple
element in the index alist when it matches; the latter creates a
special element of the form (NAME POSITION-MARKER FUNCTION
ARGUMENTS...) with FUNCTION and ARGUMENTS copied from
`imenu-generic-expression'.
special element of the form (INDEX-NAME POSITION-MARKER FUNCTION
ARGUMENTS...) with FUNCTION and ARGUMENTS copied from PATTERNS.
MENU-TITLE is a string used as the title for the submenu or nil
if the entries are not nested.

View file

@ -1994,7 +1994,7 @@ is non-nil if the user has supplied the password interactively.
(re-search-backward
rmail-mime-charset-pattern
start t))))
(intern (downcase (match-string 1))))))
(intern (downcase (match-string 2))))))
(rmail-decode-region start (point) mime-charset)))))
;; Add an X-Coding-System: header if we don't have one.
(save-excursion
@ -2155,7 +2155,7 @@ is non-nil if the user has supplied the password interactively.
(re-search-backward
rmail-mime-charset-pattern
start t))))
(intern (downcase (match-string 1))))))
(intern (downcase (match-string 2))))))
(rmail-decode-region start (point) mime-charset)))
(save-excursion
(goto-char start)

View file

@ -1,3 +1,83 @@
2006-04-20 Bill Wohler <wohler@newt.com>
* mh-tool-bar.el (image-load-path): Define to shush compiler.
(mh-buffer-exists-p): Move inside mh-do-in-gnu-emacs since it
isn't used outside of it.
(mh-tool-bar-folder-buttons-init,
mh-tool-bar-letter-buttons-init): Update load-path/image-load-path
before setting buttons. This code used to be in
mh-folder-mode/mh-letter-mode but this was the wrong place since
mh-tool-bar-*-buttons-init can also be called when customizing the
buttons.
(mh-tool-bar-update): New function which updates tool-bar-map in
all of the MH-E buffers after customizing the buttons (closes SF
#1452718).
(mh-tool-bar-folder-buttons-set, mh-tool-bar-letter-buttons-set):
Call it (closes SF #1452718).
* mh-folder.el (mh-folder-buttons-init-flag): Delete. Use
mh-folder-tool-bar-map instead.
(image-load-path): Delete. No longer used.
(mh-folder-mode): Moved setting of image-load-path into
mh-tool-bar-folder-buttons-init.
* mh-letter.el (mh-letter-buttons-init-flag): Delete. Use
mh-letter-tool-bar-map instead.
(image-load-path): Delete. No longer used.
(mh-letter-mode): Moved setting of image-load-path into
mh-tool-bar-letter-buttons-init.
* mh-seq.el (mh-narrow-to-seq, mh-widen): Use with-current-buffer
instead of set-buffer.
2006-04-19 Bill Wohler <wohler@newt.com>
* mh-tool-bar.el (mh-tool-bar-define): Fix enable-expr so that one
can permanently disable a button (such as a separator) with nil.
2006-04-18 Bill Wohler <wohler@newt.com>
* mh-e.el (defcustom-mh, defface-mh, defgroup-mh, mh-face-data)
(mh-strip-package-version, mh-face-data, mh-inherit-face-flag)
(mh-min-colors-defined-flag): Do not unbind these macros and
variables. Nice idea, but too many nasty side-effects. These
macros are needed by [Cc]ustom-make-dependencies when creating the
MH-E customization groups in mh-cus-load.el. These disappeared
when the macros above were introduced. Besides, if a developer
were to try to show the help for a macro or variable they were
looking at and got [No match] when they did so, that would be bad.
2006-04-17 Bill Wohler <wohler@newt.com>
* mh-comp.el (mh-insert-x-mailer): Strip build number from
version in X-Mailer field (closes SF #1466481).
* mh-acros.el (mh-defun-compat): Rename to defun-mh in order that
variables and functions with the same name are found correctly by
find-func (invoked by clicking on the filename link in the *Help*
buffer).
(mh-defmacro-compat): Rename to defmacro-mh. Ditto.
* mh-e.el: (mh-defgroup): Rename to defgroup-mh. Ditto.
(mh-defcustom): Rename to defcustom-mh. Ditto.
(mh-defface): Rename to defface-mh. Ditto.
(mh-font-lock-add-keywords): Make changes according to these
renamings.
* mh-e.el, mh-compat.el, mh-gnus.el: Use the new names (closes SF
#1472029).
* mh-utils.el (mh-sub-folders-actual): Mention that folder must
have been processed by mh-normalize-folder-name.
(mh-folder-completion-function): Handle completion of folders with
absolute names. Also, when flag is t, display complete folder name
to provide proper highlighting in Emacs 22 now that
minibuffer-completing-file-name is nil (closes SF #1470518).
(mh-folder-completing-read): No longer set
minibuffer-completing-file-name to t. This was causing "Can't set
current directory errors" when browsing absolute file names.
Another benefit of this change is that SPC can be used for
completion again (closes SF #1470518).
2006-04-15 Bill Wohler <wohler@newt.com>
* mh-compat.el (mh-font-lock-add-keywords): Fix typo in docstring.
@ -147,7 +227,7 @@
(mh-scan-line-formats, mh-search, mh-sending-mail)
(mh-sequences, mh-show, mh-speedbar, mh-thread, mh-tool-bar)
(mh-hooks, mh-faces): Add :package-version keyword to these
groups.
groups (closes SF #1452724).
(mh-alias-completion-ignore-case-flag)
(mh-alias-expand-aliases-flag, mh-alias-flash-on-comma)
(mh-alias-insert-file, mh-alias-insertion-location)
@ -193,7 +273,7 @@
(mh-show-use-xface-flag, mh-store-default-directory)
(mh-summary-height, mh-speed-update-interval)
(mh-show-threads-flag, mh-tool-bar-search-function): Add
:package-version keyword to these options.
:package-version keyword to these options (closes SF #1452724).
(mh-after-commands-processed-hook)
(mh-alias-reloaded-hook, mh-before-commands-processed-hook)
(mh-before-quit-hook, mh-before-send-letter-hook)
@ -204,7 +284,7 @@
(mh-mh-to-mime-hook, mh-search-mode-hook, mh-quit-hook)
(mh-refile-msg-hook, mh-show-hook, mh-show-mode-hook)
(mh-unseen-updated-hook): Add :package-version keyword to these
hooks.
hooks (closes SF #1452724).
(mh-min-colors-defined-flag)
(mh-folder-address, mh-folder-body, mh-folder-cur-msg-number)
(mh-folder-date, mh-folder-deleted, mh-folder-followup)
@ -218,10 +298,10 @@
(mh-speedbar-folder, mh-speedbar-folder-with-unseen-messages)
(mh-speedbar-selected-folder)
(mh-speedbar-selected-folder-with-unseen-messages): : Add
:package-version keyword to these faces.
:package-version keyword to these faces (closes SF #1452724).
* mh-tool-bar.el (mh-tool-bar-define): Added commented-out
:package-version keywords.
:package-version keywords (closes SF #1452724).
2006-03-28 Bill Wohler <wohler@newt.com>

View file

@ -82,7 +82,7 @@ loads \"cl\" appropriately."
(funcall ',function ,@args))))
;;;###mh-autoload
(defmacro mh-defun-compat (name function arg-list &rest body)
(defmacro defun-mh (name function arg-list &rest body)
"Create function NAME.
If FUNCTION exists, then NAME becomes an alias for FUNCTION.
Otherwise, create function NAME with ARG-LIST and BODY."
@ -90,10 +90,10 @@ Otherwise, create function NAME with ARG-LIST and BODY."
(if defined-p
`(defalias ',name ',function)
`(defun ,name ,arg-list ,@body))))
(put 'mh-defun-compat 'lisp-indent-function 'defun)
(put 'defun-mh 'lisp-indent-function 'defun)
;;;###mh-autoload
(defmacro mh-defmacro-compat (name macro arg-list &rest body)
(defmacro defmacro-mh (name macro arg-list &rest body)
"Create macro NAME.
If MACRO exists, then NAME becomes an alias for MACRO.
Otherwise, create macro NAME with ARG-LIST and BODY."
@ -101,7 +101,7 @@ Otherwise, create macro NAME with ARG-LIST and BODY."
(if defined-p
`(defalias ',name ',macro)
`(defmacro ,name ,arg-list ,@body))))
(put 'mh-defmacro-compat 'lisp-indent-function 'defun)
(put 'defmacro-mh 'lisp-indent-function 'defun)

View file

@ -912,7 +912,10 @@ The versions of MH-E, Emacs, and MH are shown."
(format "MH-E %s; %s; %sEmacs %s"
mh-version mh-variant-in-use
(if mh-xemacs-flag "X" "GNU ")
(cond ((not mh-xemacs-flag) emacs-version)
(cond ((not mh-xemacs-flag)
(string-match "[0-9]+\\.[0-9]+\\(\\.[0-9]+\\)?"
emacs-version)
(match-string 0 emacs-version))
((string-match "[0-9.]*\\( +\([ a-z]+[0-9]+\)\\)?"
emacs-version)
(match-string 0 emacs-version))

View file

@ -62,7 +62,7 @@ Simulate NOERROR argument in XEmacs which lacks it."
(load filename noerror t)
(load (format "%s" feature) noerror t)))))
(mh-defun-compat mh-assoc-string assoc-string (key list case-fold)
(defun-mh mh-assoc-string assoc-string (key list case-fold)
"Like `assoc' but specifically for strings.
Case is ignored if CASE-FOLD is non-nil.
This function is used by Emacs versions that lack `assoc-string',
@ -77,7 +77,7 @@ introduced in Emacs 22."
'cancel-timer
'delete-itimer))
(mh-defun-compat mh-display-color-cells display-color-cells (&optional display)
(defun-mh mh-display-color-cells display-color-cells (&optional display)
"Return the number of color cells supported by DISPLAY.
This function is used by XEmacs to return 2 when
`device-color-cells' returns nil. This happens when compiling or
@ -115,12 +115,12 @@ introduced in Emacs 22."
`(face-background ,face ,frame)
`(face-background ,face ,frame ,inherit)))
(mh-defun-compat mh-font-lock-add-keywords font-lock-add-keywords
(defun-mh mh-font-lock-add-keywords font-lock-add-keywords
(mode keywords &optional how)
"XEmacs does not have `font-lock-add-keywords'.
This function returns nil on that system.")
(mh-defun-compat mh-image-load-path-for-library
(defun-mh mh-image-load-path-for-library
image-load-path-for-library (library image &optional path no-error)
"Return a suitable search path for images used by LIBRARY.
@ -215,7 +215,7 @@ compatibility with versions of Emacs that lack the variable
(nconc (list image-directory)
(delete image-directory (copy-sequence (or path load-path))))))
(mh-defun-compat mh-image-search-load-path
(defun-mh mh-image-search-load-path
image-search-load-path (file &optional path)
"Emacs 21 and XEmacs don't have `image-search-load-path'.
This function returns nil on those systems."
@ -234,13 +234,13 @@ This function returns nil on those systems."
'point-at-eol))
(mh-require 'mailabbrev nil t)
(mh-defun-compat mh-mail-abbrev-make-syntax-table
(defun-mh mh-mail-abbrev-make-syntax-table
mail-abbrev-make-syntax-table ()
"Emacs 21 and XEmacs don't have `mail-abbrev-make-syntax-table'.
This function returns nil on those systems."
nil)
(mh-defun-compat mh-match-string-no-properties
(defun-mh mh-match-string-no-properties
match-string-no-properties (num &optional string)
"Return string of text matched by last search, without text properties.
This function is used by XEmacs that lacks `match-string-no-properties'.
@ -249,7 +249,7 @@ The argument STRING is ignored."
(buffer-substring-no-properties
(match-beginning num) (match-end num)))
(mh-defun-compat mh-replace-regexp-in-string replace-regexp-in-string
(defun-mh mh-replace-regexp-in-string replace-regexp-in-string
(regexp rep string &optional fixedcase literal subexp start)
"Replace REGEXP with REP everywhere in STRING and return result.
This function is used by XEmacs that lacks `replace-regexp-in-string'.
@ -269,7 +269,7 @@ The arguments FIXEDCASE, SUBEXP, and START, used by
"A list of characters that are _NOT_ reserved in the URL spec.
This is taken from RFC 2396."))
(mh-defun-compat mh-url-hexify-string url-hexify-string (str)
(defun-mh mh-url-hexify-string url-hexify-string (str)
"Escape characters in a string.
This is a copy of `url-hexify-string' from url-util.el in Emacs
22; needed by Emacs 21."
@ -283,7 +283,7 @@ This is a copy of `url-hexify-string' from url-util.el in Emacs
(char-to-string char)))
str ""))
(mh-defun-compat mh-view-mode-enter
(defun-mh mh-view-mode-enter
view-mode-enter (&optional return-to exit-action)
"Enter View mode.
This function is used by XEmacs that lacks `view-mode-enter'.

File diff suppressed because it is too large Load diff

View file

@ -524,11 +524,8 @@ font-lock is done highlighting.")
;; Shush compiler.
(defvar desktop-save-buffer)
(defvar font-lock-auto-fontify)
(defvar image-load-path)
(defvar font-lock-defaults) ; XEmacs
(defvar mh-folder-buttons-init-flag nil)
;; Ensure new buffers won't get this mode if default-major-mode is nil.
(put 'mh-folder-mode 'mode-class 'special)
@ -590,13 +587,8 @@ perform the operation on all messages in that region.
\\{mh-folder-mode-map}"
(mh-do-in-gnu-emacs
(unless mh-folder-buttons-init-flag
(let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm"))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(mh-tool-bar-folder-buttons-init)
(setq mh-folder-buttons-init-flag t)))
(unless mh-folder-tool-bar-map
(mh-tool-bar-folder-buttons-init))
(set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map))
(mh-do-in-xemacs
(mh-tool-bar-init :folder))

View file

@ -39,19 +39,19 @@
(mh-require 'mml nil t)
;; Copy of function from gnus-util.el.
(mh-defun-compat mh-gnus-local-map-property gnus-local-map-property (map)
(defun-mh mh-gnus-local-map-property gnus-local-map-property (map)
"Return a list suitable for a text property list specifying keymap MAP."
(cond (mh-xemacs-flag (list 'keymap map))
((>= emacs-major-version 21) (list 'keymap map))
(t (list 'local-map map))))
;; Copy of function from mm-decode.el.
(mh-defun-compat mh-mm-merge-handles mm-merge-handles (handles1 handles2)
(defun-mh mh-mm-merge-handles mm-merge-handles (handles1 handles2)
(append (if (listp (car handles1)) handles1 (list handles1))
(if (listp (car handles2)) handles2 (list handles2))))
;; Copy of function from mm-decode.el.
(mh-defun-compat mh-mm-set-handle-multipart-parameter
(defun-mh mh-mm-set-handle-multipart-parameter
mm-set-handle-multipart-parameter (handle parameter value)
;; HANDLE could be a CTL.
(if handle
@ -59,7 +59,7 @@
(car handle))))
;; Copy of function from mm-view.el.
(mh-defun-compat mh-mm-inline-text-vcard mm-inline-text-vcard (handle)
(defun-mh mh-mm-inline-text-vcard mm-inline-text-vcard (handle)
(let (buffer-read-only)
(mm-insert-inline
handle
@ -73,17 +73,17 @@
;; Function from mm-decode.el used in PGP messages. Just define it with older
;; Gnus to avoid compiler warning.
(mh-defun-compat mh-mm-possibly-verify-or-decrypt
(defun-mh mh-mm-possibly-verify-or-decrypt
mm-possibly-verify-or-decrypt (parts ctl)
nil)
;; Copy of macro in mm-decode.el.
(mh-defmacro-compat mh-mm-handle-multipart-ctl-parameter
(defmacro-mh mh-mm-handle-multipart-ctl-parameter
mm-handle-multipart-ctl-parameter (handle parameter)
`(get-text-property 0 ,parameter (car ,handle)))
;; Copy of function in mm-decode.el.
(mh-defun-compat mh-mm-readable-p mm-readable-p (handle)
(defun-mh mh-mm-readable-p mm-readable-p (handle)
"Say whether the content of HANDLE is readable."
(and (< (with-current-buffer (mm-handle-buffer handle)
(buffer-size)) 10000)
@ -93,7 +93,7 @@
(not (mh-mm-long-lines-p 76))))))
;; Copy of function in mm-bodies.el.
(mh-defun-compat mh-mm-long-lines-p mm-long-lines-p (length)
(defun-mh mh-mm-long-lines-p mm-long-lines-p (length)
"Say whether any of the lines in the buffer is longer than LENGTH."
(save-excursion
(goto-char (point-min))
@ -105,21 +105,21 @@
(and (> (current-column) length)
(current-column))))
(mh-defun-compat mh-mm-keep-viewer-alive-p mm-keep-viewer-alive-p (handle)
(defun-mh mh-mm-keep-viewer-alive-p mm-keep-viewer-alive-p (handle)
;; Released Gnus doesn't keep handles associated with externally displayed
;; MIME parts. So this will always return nil.
nil)
(mh-defun-compat mh-mm-destroy-parts mm-destroy-parts (list)
(defun-mh mh-mm-destroy-parts mm-destroy-parts (list)
"Older versions of Emacs don't have this function."
nil)
(mh-defun-compat mh-mm-uu-dissect-text-parts mm-uu-dissect-text-parts (handles)
(defun-mh mh-mm-uu-dissect-text-parts mm-uu-dissect-text-parts (handles)
"Emacs 21 and XEmacs don't have this function."
nil)
;; Copy of function in mml.el.
(mh-defun-compat mh-mml-minibuffer-read-disposition
(defun-mh mh-mml-minibuffer-read-disposition
mml-minibuffer-read-disposition (type &optional default)
(unless default (setq default
(if (and (string-match "\\`text/" type)

View file

@ -275,10 +275,7 @@ searching for `mh-mail-header-separator' in the buffer."
;;; MH-Letter Mode
(defvar mh-letter-buttons-init-flag nil)
;; Shush compiler.
(defvar image-load-path)
(defvar font-lock-defaults) ; XEmacs
;; Ensure new buffers won't get this mode if default-major-mode is nil.
@ -313,13 +310,8 @@ order).
(make-local-variable 'mh-sent-from-folder)
(make-local-variable 'mh-sent-from-msg)
(mh-do-in-gnu-emacs
(unless mh-letter-buttons-init-flag
(let* ((load-path (mh-image-load-path-for-library "mh-e" "mh-logo.xpm"))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(mh-tool-bar-letter-buttons-init)
(setq mh-letter-buttons-init-flag t)))
(unless mh-letter-tool-bar-map
(mh-tool-bar-letter-buttons-init))
(set (make-local-variable 'tool-bar-map) mh-letter-tool-bar-map))
(mh-do-in-xemacs
(mh-tool-bar-init :letter))

View file

@ -238,8 +238,7 @@ When you want to widen the view to all your messages again, use
(set (make-local-variable 'tool-bar-map)
mh-folder-seq-tool-bar-map)
(when (buffer-live-p (get-buffer mh-show-buffer))
(save-excursion
(set-buffer (get-buffer mh-show-buffer))
(with-current-buffer mh-show-buffer
(set (make-local-variable 'tool-bar-map)
mh-show-seq-tool-bar-map))))
(push 'widen mh-view-ops)))
@ -371,8 +370,7 @@ remove all limits and sequence restrictions."
(when (and (null mh-folder-view-stack) (boundp 'tool-bar-mode) tool-bar-mode)
(set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map)
(when (buffer-live-p (get-buffer mh-show-buffer))
(save-excursion
(set-buffer (get-buffer mh-show-buffer))
(with-current-buffer mh-show-buffer
(set (make-local-variable 'tool-bar-map) mh-show-tool-bar-map)))))

View file

@ -83,6 +83,9 @@ When INCLUDE-FLAG is non-nil, include message body being replied to."
;;; Tool Bar Creation
;; Shush compiler.
(defvar image-load-path)
(defmacro mh-tool-bar-define (defaults &rest buttons)
"Define a tool bar for MH-E.
DEFAULTS is the list of buttons that are present by default. It
@ -151,7 +154,7 @@ where,
(doc (if (string-match "\\(.*\\)\n" full-doc)
(match-string 1 full-doc)
full-doc))
(enable-expr (or (nth 4 button) t))
(enable-expr (if (eql (length button) 4) t (nth 4 button)))
(modes (nth 1 button))
functions show-sym)
(when (memq 'letter modes) (setq functions `(:letter ,name)))
@ -178,7 +181,7 @@ where,
(t 'folder-vectors)))
(list (cond ((eq type :letter) 'mh-tool-bar-letter-buttons)
(t 'mh-tool-bar-folder-buttons)))
(key (intern (concat "mh-" type1 "tool-bar-" name-str)))
(key (intern (concat "mh-" type1 "-tool-bar-" name-str)))
(setter (intern (concat type1 "-button-setter")))
(mbuttons (cond ((eq type :letter) 'letter-buttons)
((eq type :show) 'show-buttons)
@ -209,50 +212,79 @@ where,
(unless (memq x letter-buttons)
(error "Letter defaults contains unknown button %s" x)))
`(eval-when (compile load eval)
(defun mh-buffer-exists-p (mode)
"Test whether a buffer with major mode MODE is present."
(loop for buf in (buffer-list)
when (save-excursion
(set-buffer buf)
(eq major-mode mode))
return t))
;; GNU Emacs tool bar specific code
(mh-do-in-gnu-emacs
(defun mh-buffer-exists-p (mode)
"Test whether a buffer with major mode MODE is present."
(loop for buf in (buffer-list)
when (with-current-buffer buf
(eq major-mode mode))
return t))
;; Tool bar initialization functions
(defun mh-tool-bar-folder-buttons-init ()
(when (mh-buffer-exists-p 'mh-folder-mode)
(setq mh-folder-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse folder-button-setter)
tool-bar-map))
(setq mh-show-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse show-button-setter)
tool-bar-map))
(setq mh-show-seq-tool-bar-map
(let ((tool-bar-map (copy-keymap mh-show-tool-bar-map)))
,@(nreverse show-seq-button-setter)
tool-bar-map))
(setq mh-folder-seq-tool-bar-map
(let ((tool-bar-map (copy-keymap mh-folder-tool-bar-map)))
,@(nreverse sequence-button-setter)
tool-bar-map))))
(let* ((load-path (mh-image-load-path-for-library "mh-e"
"mh-logo.xpm"))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(setq mh-folder-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse folder-button-setter)
tool-bar-map))
(setq mh-folder-seq-tool-bar-map
(let ((tool-bar-map (copy-keymap mh-folder-tool-bar-map)))
,@(nreverse sequence-button-setter)
tool-bar-map))
(setq mh-show-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse show-button-setter)
tool-bar-map))
(setq mh-show-seq-tool-bar-map
(let ((tool-bar-map (copy-keymap mh-show-tool-bar-map)))
,@(nreverse show-seq-button-setter)
tool-bar-map)))))
(defun mh-tool-bar-letter-buttons-init ()
(when (mh-buffer-exists-p 'mh-letter-mode)
(setq mh-letter-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse letter-button-setter)
tool-bar-map))))
(let* ((load-path (mh-image-load-path-for-library "mh-e"
"mh-logo.xpm"))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path))))
(setq mh-letter-tool-bar-map
(let ((tool-bar-map (make-sparse-keymap)))
,@(nreverse letter-button-setter)
tool-bar-map)))))
;; Custom setter functions
(defun mh-tool-bar-update (mode default-map sequence-map)
"Update `tool-bar-map' in all buffers of MODE.
Use SEQUENCE-MAP if display is limited; DEFAULT-MAP otherwise."
(loop for buf in (buffer-list)
do (with-current-buffer buf
(if (eq mode major-mode)
(let ((map (if mh-folder-view-stack
sequence-map
default-map)))
;; Yes, make-local-variable is necessary since we
;; get here during initialization when loading
;; mh-e.el, after the +inbox buffer has been
;; created, but before mh-folder-mode has run and
;; created the local map.
(set (make-local-variable 'tool-bar-map) map))))))
(defun mh-tool-bar-folder-buttons-set (symbol value)
"Construct tool bar for `mh-folder-mode' and `mh-show-mode'."
(set-default symbol value)
(mh-tool-bar-folder-buttons-init))
(mh-tool-bar-folder-buttons-init)
(mh-tool-bar-update 'mh-folder-mode mh-folder-tool-bar-map
mh-folder-seq-tool-bar-map)
(mh-tool-bar-update 'mh-show-mode mh-show-tool-bar-map
mh-show-seq-tool-bar-map))
(defun mh-tool-bar-letter-buttons-set (symbol value)
"Construct tool bar for `mh-letter-mode'."
(set-default symbol value)
(mh-tool-bar-letter-buttons-init)))
(mh-tool-bar-letter-buttons-init)
(mh-tool-bar-update 'mh-letter-mode mh-letter-tool-bar-map
mh-letter-tool-bar-map)))
;; XEmacs specific code
(mh-do-in-xemacs
(defvar mh-tool-bar-folder-vector-map
@ -318,7 +350,8 @@ where,
'mh-tool-bar-folder-buttons
'(list ,@(mapcar (lambda (x) `(quote ,x)) folder-defaults))
"List of buttons to include in MH-Folder tool bar."
:group 'mh-tool-bar :set 'mh-tool-bar-folder-buttons-set
:group 'mh-tool-bar
:set 'mh-tool-bar-folder-buttons-set
:type '(set ,@(loop for x in folder-buttons
for y in folder-docs
collect `(const :tag ,y ,x)))
@ -328,7 +361,8 @@ where,
'mh-tool-bar-letter-buttons
'(list ,@(mapcar (lambda (x) `(quote ,x)) letter-defaults))
"List of buttons to include in MH-Letter tool bar."
:group 'mh-tool-bar :set 'mh-tool-bar-letter-buttons-set
:group 'mh-tool-bar
:set 'mh-tool-bar-letter-buttons-set
:type '(set ,@(loop for x in letter-buttons
for y in letter-docs
collect `(const :tag ,y ,x)))

View file

@ -556,10 +556,18 @@ nested folders within them."
sub-folders)
sub-folders)))
;; FIXME: This function does not do well if FOLDER does not exist. It
;; then changes the context to that folder which causes problems down
;; the line. Since a folder in the cache could later be deleted, it
;; would be good for mh-sub-folders-actual to return nil in this case
;; so that mh-sub-folders could delete it from the cache. This
;; function could protect itself by using a temporary context.
(defun mh-sub-folders-actual (folder)
"Execute the command folders to return the sub-folders of FOLDER.
Filters out the folder names that start with \".\" so that
directories that aren't usually mail folders are hidden."
directories that aren't usually mail folders are hidden.
Expects FOLDER to have already been normalized with
(mh-normalize-folder-name folder nil nil t)"
(let ((arg-list `(,(expand-file-name "folders" mh-progs)
nil (t nil) nil "-noheader" "-norecurse" "-nototal"
,@(if (stringp folder) (list folder) ())))
@ -683,36 +691,44 @@ This variable should never be set.")
(defun mh-folder-completion-function (name predicate flag)
"Programmable completion for folder names.
NAME is the partial folder name that has been input. PREDICATE if
non-nil is a function that is used to filter the possible choices
and FLAG determines whether the completion is over."
non-nil is a function that is used to filter the possible
choices. FLAG is nil to indicate `try-completion', t for
`all-completions', or the symbol lambda for `test-completion'.
See Info node `(elisp) Programmed Completion' for details."
(let* ((orig-name name)
;; After normalization, name is nil, +, or +something. If a
;; trailing slash is present, it is preserved.
(name (mh-normalize-folder-name name nil t))
(last-slash (mh-search-from-end ?/ name))
(last-complete (if last-slash (substring name 0 last-slash) nil))
;; nil if + or +folder; +folder/ if slash present.
(last-complete (if last-slash (substring name 0 (1+ last-slash)) nil))
;; Either +folder/remainder, +remainder, or "".
(remainder (cond (last-complete (substring name (1+ last-slash)))
((and (> (length name) 0) (equal (aref name 0) ?+))
(substring name 1))
(name (substring name 1))
(t ""))))
(cond ((eq flag nil)
(let ((try-res (try-completion
name
(mapcar (lambda (x)
(cons (if (not last-complete)
(concat "+" (car x))
(concat last-complete "/" (car x)))
(cdr x)))
(mh-sub-folders last-complete t))
predicate)))
(let ((try-res
(try-completion
name
(mapcar (lambda (x)
(cons (concat (or last-complete "+") (car x))
(cdr x)))
(mh-sub-folders last-complete t))
predicate)))
(cond ((eq try-res nil) nil)
((and (eq try-res t) (equal name orig-name)) t)
((eq try-res t) name)
(t try-res))))
((eq flag t)
(all-completions
remainder (mh-sub-folders last-complete t) predicate))
(mapcar (lambda (x)
(concat (or last-complete "+") x))
(all-completions
remainder (mh-sub-folders last-complete t) predicate)))
((eq flag 'lambda)
(let ((path (concat mh-user-path
(substring (mh-normalize-folder-name name) 1))))
(let ((path (concat (unless (and (> (length name) 1)
(eq (aref name 1) ?/))
mh-user-path)
(substring name 1))))
(cond (mh-allow-root-folder-flag (file-exists-p path))
((equal path mh-user-path) nil)
(t (file-exists-p path))))))))
@ -726,8 +742,7 @@ and FLAG determines whether the completion is over."
If ALLOW-ROOT-FOLDER-FLAG is non-nil then \"+\" is allowed to be
a folder name corresponding to `mh-user-path'."
(mh-normalize-folder-name
(let ((minibuffer-completing-file-name t)
(completion-root-regexp "^[+/]")
(let ((completion-root-regexp "^[+/]")
(minibuffer-local-completion-map mh-folder-completion-map)
(mh-allow-root-folder-flag allow-root-folder-flag))
(completing-read prompt 'mh-folder-completion-function nil nil nil

View file

@ -979,7 +979,7 @@ Returns nil if an error message has appeared."
;; Algorithm: get waiting output. See if last line contains
;; tramp-smb-prompt sentinel or tramp-smb-errors strings.
;; If not, wait a bit and again get waiting output.
(while (and (not found) (not err))
(while (not found)
;; Accept pending output.
(tramp-accept-process-output proc)

View file

@ -4458,24 +4458,28 @@ necessary anymore."
file)
(member (match-string 1 file) (mapcar 'car tramp-methods)))
((or (equal last-input-event 'tab)
;; Emacs
(and (integerp last-input-event)
(not (event-modifiers last-input-event))
(or (char-equal last-input-event ?\?)
(char-equal last-input-event ?\t) ; handled by 'tab already?
(char-equal last-input-event ?\ )))
;; Emacs
(and (integerp last-input-event)
(or
;; ?\t has event-modifier 'control
(char-equal last-input-event ?\t)
(and (not (event-modifiers last-input-event))
(or (char-equal last-input-event ?\?)
(char-equal last-input-event ?\ )))))
;; XEmacs
(and (featurep 'xemacs)
(not (event-modifiers last-input-event))
(or (char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\?)
(char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\t)
(char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\ ))))
(or
;; ?\t has event-modifier 'control
(char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\t)
(and (not (event-modifiers last-input-event))
(or (char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\?)
(char-equal
(funcall (symbol-function 'event-to-character)
last-input-event) ?\ ))))))
t)))
(defun tramp-completion-handle-file-exists-p (filename)

View file

@ -30,7 +30,7 @@
;; are auto-frobbed from configure.ac, so you should edit that file and run
;; "autoconf && ./configure" to change them.
(defconst tramp-version "2.0.52"
(defconst tramp-version "2.0.53"
"This version of Tramp.")
(defconst tramp-bug-report-address "tramp-devel@gnu.org"

View file

@ -108,21 +108,25 @@ not to go beyond `comment-fill-column'."
;;;###autoload
(defvar comment-start nil
"*String to insert to start a new comment, or nil if no comment syntax.")
;;;###autoload(put 'comment-start 'safe-local-variable 'string-or-null-p)
;;;###autoload
(defvar comment-start-skip nil
"*Regexp to match the start of a comment plus everything up to its body.
If there are any \\(...\\) pairs, the comment delimiter text is held to begin
at the place matched by the close of the first pair.")
;;;###autoload(put 'comment-start-skip 'safe-local-variable 'string-or-null-p)
;;;###autoload
(defvar comment-end-skip nil
"Regexp to match the end of a comment plus everything up to its body.")
;;;###autoload(put 'comment-end-skip 'safe-local-variable 'string-or-null-p)
;;;###autoload
(defvar comment-end ""
"*String to insert to end a new comment.
Should be an empty string if comments are terminated by end-of-line.")
;;;###autoload(put 'comment-end 'safe-local-variable 'string-or-null-p)
;;;###autoload
(defvar comment-indent-function 'comment-indent-default

View file

@ -100,7 +100,9 @@
(defvar tool-bar-map)
(defvar speedbar-initial-expansion-list-name)
(defvar gdb-frame-address "main" "Initialization for Assembler buffer.")
(defvar gdb-pc-address nil "Initialization for Assembler buffer.
Set to \"main\" at start if gdb-show-main is t.")
(defvar gdb-frame-address nil "Identity of frame for watch expression.")
(defvar gdb-previous-frame-address nil)
(defvar gdb-memory-address "main")
(defvar gdb-previous-frame nil)
@ -109,8 +111,9 @@
(defvar gdb-current-language nil)
(defvar gdb-var-list nil
"List of variables in watch window.
Each element has the form (VARNUM EXPRESSION NUMCHILD TYPE VALUE STATUS) where
STATUS is nil (unchanged), `changed' or `out-of-scope'.")
Each element has the form (VARNUM EXPRESSION NUMCHILD TYPE VALUE STATUS FP)
where STATUS is nil (unchanged), `changed' or `out-of-scope', FP the frame
address for root variables.")
(defvar gdb-force-update t
"Non-nil means that view of watch expressions will be updated in the speedbar.")
(defvar gdb-main-file nil "Source file from which program execution begins.")
@ -516,7 +519,7 @@ With arg, use separate IO iff arg is positive."
(setq comint-input-sender 'gdb-send)
;; (re-)initialize
(setq gdb-frame-address (if gdb-show-main "main" nil))
(setq gdb-pc-address (if gdb-show-main "main" nil))
(setq gdb-previous-frame-address nil
gdb-memory-address "main"
gdb-previous-frame nil
@ -720,7 +723,7 @@ With arg, enter name of variable to be watched in the minibuffer."
expr)
(match-string 2)
(match-string 3)
nil nil)))
nil nil gdb-frame-address)))
(push var gdb-var-list)
(speedbar 1)
(unless (string-equal
@ -1206,7 +1209,7 @@ This filter may simply queue input for a later time."
(cons
(match-string 1 args)
(string-to-number (match-string 2 args))))
(setq gdb-frame-address (match-string 3 args))
(setq gdb-pc-address (match-string 3 args))
;; cover for auto-display output which comes *before*
;; stopped annotation
(if (eq gdb-output-sink 'inferior) (setq gdb-output-sink 'user)))
@ -1357,7 +1360,7 @@ happens to be appropriate."
(gdb-get-buffer-create 'gdb-breakpoints-buffer)
(gdb-invalidate-breakpoints)
;; Do this through gdb-get-selected-frame -> gdb-frame-handler
;; so gdb-frame-address is updated.
;; so gdb-pc-address is updated.
;; (gdb-invalidate-assembler)
(if (string-equal gdb-version "pre-6.4")
@ -3004,11 +3007,11 @@ BUFFER nil or omitted means use the current buffer."
(pos 1) (address) (flag) (bptno))
(with-current-buffer buffer
(save-excursion
(if (not (equal gdb-frame-address "main"))
(if (not (equal gdb-pc-address "main"))
(progn
(goto-char (point-min))
(if (and gdb-frame-address
(search-forward gdb-frame-address nil t))
(if (and gdb-pc-address
(search-forward gdb-pc-address nil t))
(progn
(setq pos (point))
(beginning-of-line)
@ -3038,7 +3041,7 @@ BUFFER nil or omitted means use the current buffer."
(goto-char (point-min))
(if (search-forward address nil t)
(gdb-put-breakpoint-icon (eq flag ?y) bptno))))))))
(if (not (equal gdb-frame-address "main"))
(if (not (equal gdb-pc-address "main"))
(with-current-buffer buffer
(set-window-point (get-buffer-window buffer 0) pos)))))
@ -3100,7 +3103,7 @@ BUFFER nil or omitted means use the current buffer."
(special-display-frame-alist gdb-frame-parameters))
(display-buffer (gdb-get-buffer-create 'gdb-assembler-buffer))))
;; modified because if gdb-frame-address has changed value a new command
;; modified because if gdb-pc-address has changed value a new command
;; must be enqueued to update the buffer with the new output
(defun gdb-invalidate-assembler (&optional ignored)
(if (gdb-get-buffer 'gdb-assembler-buffer)
@ -3109,7 +3112,7 @@ BUFFER nil or omitted means use the current buffer."
(string-equal gdb-selected-frame gdb-previous-frame))
(if (or (not (member 'gdb-invalidate-assembler
gdb-pending-triggers))
(not (string-equal gdb-frame-address
(not (string-equal gdb-pc-address
gdb-previous-frame-address)))
(progn
;; take previous disassemble command, if any, off the queue
@ -3122,11 +3125,11 @@ BUFFER nil or omitted means use the current buffer."
(gdb-enqueue-input
(list
(concat gdb-server-prefix "disassemble "
(if (member gdb-frame-address '(nil "main")) nil "0x")
gdb-frame-address "\n")
(if (member gdb-pc-address '(nil "main")) nil "0x")
gdb-pc-address "\n")
'gdb-assembler-handler))
(push 'gdb-invalidate-assembler gdb-pending-triggers)
(setq gdb-previous-frame-address gdb-frame-address)
(setq gdb-previous-frame-address gdb-pc-address)
(setq gdb-previous-frame gdb-selected-frame)))))))
(defun gdb-get-selected-frame ()
@ -3141,8 +3144,10 @@ BUFFER nil or omitted means use the current buffer."
(setq gdb-pending-triggers
(delq 'gdb-get-selected-frame gdb-pending-triggers))
(goto-char (point-min))
(if (re-search-forward "Stack level \\([0-9]+\\)" nil t)
(setq gdb-frame-number (match-string 1)))
(when (re-search-forward
"Stack level \\([0-9]+\\), frame at \\(0x[[:xdigit:]]+\\)" nil t)
(setq gdb-frame-number (match-string 1))
(setq gdb-frame-address (match-string 2)))
(goto-char (point-min))
(when (re-search-forward ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-+?\\)\
\\(?: (\\(\\S-+?\\):[0-9]+?)\\)*;? "
@ -3154,7 +3159,7 @@ BUFFER nil or omitted means use the current buffer."
(if (gdb-get-buffer 'gdb-assembler-buffer)
(with-current-buffer (gdb-get-buffer 'gdb-assembler-buffer)
(setq mode-name (concat "Machine:" gdb-selected-frame))))
(setq gdb-frame-address (match-string 1))
(setq gdb-pc-address (match-string 1))
(if (and (match-string 3) gud-overlay-arrow-position)
(let ((buffer (marker-buffer gud-overlay-arrow-position))
(position (marker-position gud-overlay-arrow-position)))
@ -3289,6 +3294,7 @@ in_scope=\"\\(.*?\\)\".*?}")
(with-current-buffer (gdb-get-buffer 'gdb-registers-buffer)
(let ((buffer-read-only nil))
(erase-buffer)
(put-text-property 0 (length err) 'face font-lock-warning-face err)
(insert err)
(goto-char (point-min)))))
(let ((register-list (reverse gdb-register-names))
@ -3385,36 +3391,44 @@ in_scope=\"\\(.*?\\)\".*?}")
(defun gdb-stack-list-locals-handler ()
(setq gdb-pending-triggers (delq 'gdb-invalidate-locals-1
gdb-pending-triggers))
(let (local locals-list)
(goto-char (point-min))
(while (re-search-forward gdb-stack-list-locals-regexp nil t)
(let ((local (list (match-string 1)
(match-string 2)
nil)))
(if (looking-at ",value=\\(\".*\"\\).*?}")
(setcar (nthcdr 2 local) (read (match-string 1))))
(push local locals-list)))
(let ((buf (gdb-get-buffer 'gdb-locals-buffer)))
(and buf (with-current-buffer buf
(let* ((window (get-buffer-window buf 0))
(start (window-start window))
(p (window-point window))
(buffer-read-only nil))
(erase-buffer)
(dolist (local locals-list)
(setq name (car local))
(if (or (not (nth 2 local))
(string-match "\\0x" (nth 2 local)))
(add-text-properties 0 (length name)
`(mouse-face highlight
help-echo "mouse-2: create watch expression"
local-map ,gdb-locals-watch-map-1)
name))
(goto-char (point-min))
(if (re-search-forward gdb-error-regexp nil t)
(let ((err (match-string 1)))
(with-current-buffer (gdb-get-buffer 'gdb-locals-buffer)
(let ((buffer-read-only nil))
(erase-buffer)
(insert err)
(goto-char (point-min)))))
(let (local locals-list)
(goto-char (point-min))
(while (re-search-forward gdb-stack-list-locals-regexp nil t)
(let ((local (list (match-string 1)
(match-string 2)
nil)))
(if (looking-at ",value=\\(\".*\"\\).*?}")
(setcar (nthcdr 2 local) (read (match-string 1))))
(push local locals-list)))
(let ((buf (gdb-get-buffer 'gdb-locals-buffer)))
(and buf (with-current-buffer buf
(let* ((window (get-buffer-window buf 0))
(start (window-start window))
(p (window-point window))
(buffer-read-only nil))
(erase-buffer)
(dolist (local locals-list)
(setq name (car local))
(if (or (not (nth 2 local))
(string-match "^\\0x" (nth 2 local)))
(add-text-properties 0 (length name)
`(mouse-face highlight
help-echo "mouse-2: create watch expression"
local-map ,gdb-locals-watch-map-1)
name))
(insert
(concat name "\t" (nth 1 local)
"\t" (nth 2 local) "\n")))
(set-window-start window start)
(set-window-point window p)))))))
(set-window-start window start)
(set-window-point window p))))))))
(defun gdb-get-register-names ()
"Create a list of register names."

View file

@ -374,8 +374,9 @@ t means that there is no stack, and we are in display-file mode.")
(defun gud-speedbar-item-info ()
"Display the data type of the watch expression element."
(let ((var (nth (- (line-number-at-pos (point)) 2) gdb-var-list)))
(if (nth 4 var)
(speedbar-message "%s" (nth 3 var)))))
(if (nth 6 var)
(speedbar-message "%s: %s" (nth 6 var) (nth 3 var))
(speedbar-message "%s" (nth 3 var)))))
(defun gud-install-speedbar-variables ()
"Install those variables used by speedbar to enhance gud/gdb."

View file

@ -864,6 +864,7 @@ This function can be used as `idlwave-extra-help-function'."
(erase-buffer)
(insert-file-contents file nil nil nil 'replace))
(idlwave-help-error name type class keyword)))
(goto-char (point-min))
(if (and idlwave-help-fontify-source-code (not in-buf))
(idlwave-help-fontify)))
(idlwave-help-error name type class keyword))

View file

@ -1744,6 +1744,14 @@ lines count as headers.
#'python-eldoc-function)
(add-hook 'eldoc-mode-hook
'(lambda () (run-python nil t)) nil t) ; need it running
(unless (assoc 'python-mode hs-special-modes-alist)
(setq
hs-special-modes-alist
(cons (list
'python-mode "^\\s-*def\\>" nil "#"
(lambda (arg)(python-end-of-defun)(skip-chars-backward " \t\n"))
nil)
hs-special-modes-alist)))
(if (featurep 'hippie-exp)
(set (make-local-variable 'hippie-expand-try-functions-list)
(cons 'python-try-complete hippie-expand-try-functions-list)))

View file

@ -356,6 +356,7 @@ the car and cdr are the same symbol.")
(defvar sh-shell (sh-canonicalize-shell (file-name-nondirectory sh-shell-file))
"The shell being programmed. This is set by \\[sh-set-shell].")
;;;###autoload(put 'sh-shell 'safe-local-variable 'symbolp)
(defvar sh-mode-abbrev-table nil)

View file

@ -1042,7 +1042,7 @@ Returns nil if line starts inside a string, t if in a comment."
(defun tcl-send-string (proc string)
(with-current-buffer (process-buffer proc)
(goto-char (process-mark proc))
(beginning-of-line)
(forward-line 0) ;Not (beginning-of-line) because of fields.
(if (looking-at comint-prompt-regexp)
(set-marker inferior-tcl-delete-prompt-marker (point))))
(comint-send-string proc string))
@ -1050,7 +1050,7 @@ Returns nil if line starts inside a string, t if in a comment."
(defun tcl-send-region (proc start end)
(with-current-buffer (process-buffer proc)
(goto-char (process-mark proc))
(beginning-of-line)
(forward-line 0) ;Not (beginning-of-line) because of fields.
(if (looking-at comint-prompt-regexp)
(set-marker inferior-tcl-delete-prompt-marker (point))))
(comint-send-region proc start end))
@ -1080,7 +1080,11 @@ See variable `inferior-tcl-buffer'."
Prefix argument means switch to the Tcl buffer afterwards."
(interactive "r\nP")
(let ((proc (inferior-tcl-proc)))
(tcl-send-region proc start end)
(tcl-send-region
proc
;; Strip leading and trailing whitespace.
(save-excursion (goto-char start) (skip-chars-forward " \t\n") (point))
(save-excursion (goto-char end) (skip-chars-backward " \t\n") (point)))
(tcl-send-string proc "\n")
(if and-go (switch-to-tcl t))))
@ -1149,7 +1153,12 @@ See documentation for function `inferior-tcl-mode' for more information."
(unless (comint-check-proc "*inferior-tcl*")
(set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
tcl-command-switches))
(inferior-tcl-mode))
(inferior-tcl-mode)
;; Make tclsh display a prompt on ms-windows (or under Unix, when a tty
;; wasn't used). Doesn't affect wish, unfortunately.
(unless (process-tty-name (inferior-tcl-proc))
(tcl-send-string (inferior-tcl-proc)
"set ::tcl_interactive 1; concat\n")))
(set (make-local-variable 'tcl-application) cmd)
(setq inferior-tcl-buffer "*inferior-tcl*")
(pop-to-buffer "*inferior-tcl*"))

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <dominik at science dot uva dot nl>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
;; Version: 4.23
;; Version: 4.25
;;
;; This file is part of GNU Emacs.
;;
@ -81,6 +81,15 @@
;;
;; Changes since version 4.00:
;; ---------------------------
;; Version 4.25
;; - Revision of the font-lock faces section, with better tty support.
;; - TODO keywords in Agenda buffer are fontified.
;; - Export converts links between .org files to links between .html files.
;; - Better support for bold/italic/underline emphasis.
;;
;; Version 4.24
;; - Bug fixes.
;;
;; Version 4.23
;; - Bug fixes.
;;
@ -179,7 +188,7 @@
;;; Customization variables
(defvar org-version "4.23"
(defvar org-version "4.25"
"The version number of the file org.el.")
(defun org-version ()
(interactive)
@ -189,7 +198,7 @@
;; of outline.el.
(defconst org-noutline-p (featurep 'noutline)
"Are we using the new outline mode?")
(defconst org-xemacs-p (featurep 'xemacs))
(defconst org-xemacs-p (featurep 'xemacs)) ;; FIXME: used by external code?
(defconst org-format-transports-properties-p
(let ((x "a"))
(add-text-properties 0 1 '(test t) x)
@ -232,7 +241,11 @@ uninteresting. Also tables look terrible when wrapped."
(defcustom org-startup-align-all-tables nil
"Non-nil means, align all tables when visiting a file.
This is useful when the column width in tables is forced with <N> cookies
in table fields. Such tables will look correct only after the first re-align."
in table fields. Such tables will look correct only after the first re-align.
This can also be configured on a per-file basis by adding one of
the following lines anywhere in the buffer:
#+STARTUP: align
#+STARTUP: noalign"
:group 'org-startup
:type 'boolean)
@ -242,7 +255,6 @@ This means, if you start editing an org file, you will get an
immediate reminder of any due deadlines.
This can also be configured on a per-file basis by adding one of
the following lines anywhere in the buffer:
#+STARTUP: dlcheck
#+STARTUP: nodlcheck"
:group 'org-startup
@ -396,7 +408,12 @@ This has the effect that two stars are being added/taken away in
promotion/demotion commands. It also influences how levels are
handled by the exporters.
Changing it requires restart of `font-lock-mode' to become effective
for fontification also in regions already fontified."
for fontification also in regions already fontified.
You may also set this on a per-file basis by adding one of the following
lines to the buffer:
#+STARTUP: odd
#+STARTUP: oddeven"
:group 'org-edit-structure
:group 'org-font-lock
:type 'boolean)
@ -1124,7 +1141,7 @@ closing date."
:type 'boolean)
(defgroup org-priorities nil
"Keywords in Org-mode."
"Priorities in Org-mode."
:tag "Org Priorities"
:group 'org-todo)
@ -1179,7 +1196,7 @@ moved to the new date."
:type 'boolean)
(defgroup org-tags nil
"Options concerning startup of Org-mode."
"Options concerning tags in Org-mode."
:tag "Org Tags"
:group 'org)
@ -1818,6 +1835,18 @@ you can \"misuse\" it to add arbitrary text to the header."
:group 'org-export-html
:type 'string)
(defcustom org-export-html-link-org-files-as-html t
"Non-nil means, make file links to `file.org' point to `file.html'.
When org-mode is exporting an org-mode file to HTML, links to
non-html files are directly put into a href tag in HTML.
However, links to other Org-mode files (recognized by the
extension `.org.) should become links to the corresponding html
file, assuming that the linked org-mode file will also be
converted to HTML.
When nil, the links still point to the plain `.org' file."
:group 'org-export-html
:type 'boolean)
(defcustom org-export-html-inline-images t
"Non-nil means, inline images into exported HTML pages.
The link will still be to the original location of the image file.
@ -1903,7 +1932,12 @@ face is white for a light background, and black for a dark
background. You may have to customize the face `org-hide' to
make this work.
Changing it requires restart of `font-lock-mode' to become effective
also in regions already fontified."
also in regions already fontified.
You may also set this on a per-file basis by adding one of the following
lines to the buffer:
#+STARTUP: hidestars
#+STARTUP: showstars"
:group 'org-font-lock
:type 'boolean)
@ -1926,188 +1960,246 @@ Changing this variable requires a restart of Emacs to take effect."
:tag "Org Faces"
:group 'org-font-lock)
(defun org-compatible-face (specs)
"Make a compatible face specification.
XEmacs and Emacs 21 do not know about the `min-colors' attribute.
For them we convert a (min-colors 8) entry to a `tty' entry and move it
to the top of the list. The `min-colors' attribute will be removed from
any other entries, and any resulting duplicates will be removed entirely."
(if (or (featurep 'xemacs) (< emacs-major-version 22))
(let (r e a)
(while (setq e (pop specs))
(cond
((memq (car e) '(t default)) (push e r))
((setq a (member '(min-colors 8) (car e)))
(nconc r (list (cons (cons '(type tty) (delq (car a) (car e)))
(cdr e)))))
((setq a (assq 'min-colors (car e)))
(setq e (cons (delq a (car e)) (cdr e)))
(or (assoc (car e) r) (push e r)))
(t (or (assoc (car e) r) (push e r)))))
(nreverse r))
specs))
(defface org-hide
'(
(((type tty) (class color)) (:foreground "white"))
(((class color) (background light)) (:foreground "white"))
(((class color) (background dark)) (:foreground "black"))
(t (:inverse-video nil)))
"Face used for level 1 headlines."
'((((background light)) (:foreground "white"))
(((background dark)) (:foreground "black")))
"Face used to hide leading stars in headlines.
The forground color of this face should be equal to the background
color of the frame."
:group 'org-faces)
(defface org-level-1 ;; font-lock-function-name-face
'((((type tty) (class color)) (:foreground "blue" :weight bold))
(((class color) (background light)) (:foreground "Blue"))
(((class color) (background dark)) (:foreground "LightSkyBlue"))
(t (:inverse-video t :bold t)))
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
(((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 16) (background light)) (:foreground "Blue"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 8)) (:foreground "blue" :bold t))
(t (:bold t))))
"Face used for level 1 headlines."
:group 'org-faces)
(defface org-level-2 ;; font-lock-variable-name-face
'((((type tty) (class color)) (:foreground "yellow" :weight light))
(((class color) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (background dark)) (:foreground "LightGoldenrod"))
(t (:bold t :italic t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightGoldenrod"))
(((class color) (min-colors 8) (background light)) (:foreground "yellow"))
(((class color) (min-colors 8) (background dark)) (:foreground "yellow" :bold t))
(t (:bold t))))
"Face used for level 2 headlines."
:group 'org-faces)
(defface org-level-3 ;; font-lock-keyword-face
'((((type tty) (class color)) (:foreground "cyan" :weight bold))
(((class color) (background light)) (:foreground "Purple"))
(((class color) (background dark)) (:foreground "Cyan"))
(t (:bold t)))
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Purple"))
(((class color) (min-colors 88) (background dark)) (:foreground "Cyan1"))
(((class color) (min-colors 16) (background light)) (:foreground "Purple"))
(((class color) (min-colors 16) (background dark)) (:foreground "Cyan"))
(((class color) (min-colors 8) (background light)) (:foreground "purple" :bold t))
(((class color) (min-colors 8) (background dark)) (:foreground "cyan" :bold t))
(t (:bold t))))
"Face used for level 3 headlines."
:group 'org-faces)
(defface org-level-4 ;; font-lock-comment-face
'((((type tty pc) (class color) (background light)) (:foreground "red"))
(((type tty pc) (class color) (background dark)) (:foreground "red1"))
(((class color) (background light)) (:foreground "Firebrick"))
(((class color) (background dark)) (:foreground "chocolate1"))
(t (:bold t :italic t)))
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 16) (background light)) (:foreground "red"))
(((class color) (min-colors 16) (background dark)) (:foreground "red1"))
(((class color) (min-colors 8) (background light)) (:foreground "red" :bold t))
(((class color) (min-colors 8) (background dark)) (:foreground "red" :bold t))
(t (:bold t))))
"Face used for level 4 headlines."
:group 'org-faces)
(defface org-level-5 ;; font-lock-type-face
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "ForestGreen"))
(((class color) (background dark)) (:foreground "PaleGreen"))
(t (:bold t :underline t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "ForestGreen"))
(((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen"))
(((class color) (min-colors 8)) (:foreground "green"))))
"Face used for level 5 headlines."
:group 'org-faces)
(defface org-level-6 ;; font-lock-constant-face
'((((type tty) (class color)) (:foreground "magenta"))
(((class color) (background light)) (:foreground "CadetBlue"))
(((class color) (background dark)) (:foreground "Aquamarine"))
(t (:bold t :underline t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "CadetBlue"))
(((class color) (min-colors 16) (background dark)) (:foreground "Aquamarine"))
(((class color) (min-colors 8)) (:foreground "magenta"))))
"Face used for level 6 headlines."
:group 'org-faces)
(defface org-level-7 ;; font-lock-builtin-face
'((((type tty) (class color)) (:foreground "blue" :weight light))
(((class color) (background light)) (:foreground "Orchid"))
(((class color) (background dark)) (:foreground "LightSteelBlue"))
(t (:bold t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "Orchid"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSteelBlue"))
(((class color) (min-colors 8)) (:foreground "blue")))) ;; FIXME: for dark bg?
"Face used for level 7 headlines."
:group 'org-faces)
(defface org-level-8 ;; font-lock-string-face
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "RosyBrown"))
(((class color) (background dark)) (:foreground "LightSalmon"))
(t (:italic t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
(((class color) (min-colors 8)) (:foreground "green"))))
"Face used for level 8 headlines."
:group 'org-faces)
(defface org-special-keyword ;; font-lock-string-face
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "RosyBrown"))
(((class color) (background dark)) (:foreground "LightSalmon"))
(t (:italic t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
(t (:italic t))))
"Face used for special keywords."
:group 'org-faces)
(defface org-warning ;; font-lock-warning-face
'((((type tty) (class color)) (:foreground "red"))
(((class color) (background light)) (:foreground "Red" :bold t))
(((class color) (background dark)) (:foreground "Red1" :bold t))
; (((class color) (background dark)) (:foreground "Pink" :bold t))
(t (:inverse-video t :bold t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "Red1" :bold t))
(((class color) (min-colors 16) (background dark)) (:foreground "Pink" :bold t))
(((class color) (min-colors 8) (background light)) (:foreground "red" :bold t))
(((class color) (min-colors 8) (background dark)) (:foreground "red" :bold t))
(t (:bold t))))
"Face for deadlines and TODO keywords."
:group 'org-faces)
(defface org-headline-done ;; font-lock-string-face
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "RosyBrown"))
(((class color) (background dark)) (:foreground "LightSalmon"))
(t (:italic t)))
"Face used to indicate that a headline is DONE. See also the variable
`org-fontify-done-headline'."
:group 'org-faces)
;; Inheritance does not work for xemacs. So we just copy...
(defface org-deadline-announce
'((((type tty) (class color)) (:foreground "blue" :weight bold))
(((class color) (background light)) (:foreground "Blue"))
(((class color) (background dark)) (:foreground "LightSkyBlue"))
(t (:inverse-video t :bold t)))
"Face for upcoming deadlines."
:group 'org-faces)
(defface org-scheduled-today
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "DarkGreen"))
(((class color) (background dark)) (:foreground "PaleGreen"))
(t (:bold t :underline t)))
"Face for items scheduled for a certain day."
:group 'org-faces)
(defface org-scheduled-previously
'((((type tty pc) (class color) (background light)) (:foreground "red"))
(((type tty pc) (class color) (background dark)) (:foreground "red1"))
(((class color) (background light)) (:foreground "Firebrick"))
(((class color) (background dark)) (:foreground "chocolate1"))
(t (:bold t :italic t)))
"Face for items scheduled previously, and not yet done."
:group 'org-faces)
(defface org-formula
'((((type tty pc) (class color) (background light)) (:foreground "red"))
(((type tty pc) (class color) (background dark)) (:foreground "red1"))
(((class color) (background light)) (:foreground "Firebrick"))
(((class color) (background dark)) (:foreground "chocolate1"))
(t (:bold t :italic t)))
"Face for formulas."
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
(((class color) (min-colors 8) (background light)) (:bold nil))))
"Face used to indicate that a headline is DONE.
This face is only used if `org-fontify-done-headline' is set."
:group 'org-faces)
(defface org-link
'((((type tty) (class color)) (:foreground "cyan" :weight bold))
(((class color) (background light)) (:foreground "Purple" :underline t))
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:bold t)))
(t (:underline t)))
"Face for links."
:group 'org-faces)
(defface org-date
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:underline t)))
"Face for links."
:group 'org-faces)
(defface org-tag
'((((type tty) (class color)) (:weight bold))
(((class color) (background light)) (:weight bold))
(((class color) (background dark)) (:weight bold))
(t (:bold t)))
'((t (:bold t)))
"Face for tags."
:group 'org-faces)
(defface org-todo ;; font-lock-warning-face
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "Red1" :bold t))
(((class color) (min-colors 16) (background dark)) (:foreground "Pink" :bold t))
(((class color) (min-colors 8) (background light)) (:foreground "red" :bold t))
(((class color) (min-colors 8) (background dark)) (:foreground "red" :bold t))
(t (:inverse-video t :bold t))))
"Face for TODO keywords."
:group 'org-faces)
(defface org-done ;; font-lock-type-face
'((((type tty) (class color)) (:foreground "green"))
(((class color) (background light)) (:foreground "ForestGreen" :bold t))
(((class color) (background dark)) (:foreground "PaleGreen" :bold t))
(t (:bold t :underline t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "ForestGreen"))
(((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen"))
(((class color) (min-colors 8)) (:foreground "green"))
(t (:bold t))))
"Face used for DONE."
:group 'org-faces)
(defface org-table ;; font-lock-function-name-face
'((((type tty) (class color)) (:foreground "blue" :weight bold))
(((class color) (background light)) (:foreground "Blue"))
(((class color) (background dark)) (:foreground "LightSkyBlue"))
(t (:inverse-video t :bold t)))
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
(((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 16) (background light)) (:foreground "Blue"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 8) (background light)) (:foreground "blue"))
(((class color) (min-colors 8) (background dark)))))
"Face used for tables."
:group 'org-faces)
(defface org-formula
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
(((class color) (min-colors 8) (background dark)) (:foreground "red"))
(t (:bold t :italic t))))
"Face for formulas."
:group 'org-faces)
(defface org-scheduled-today
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "DarkGreen"))
(((class color) (min-colors 88) (background dark)) (:foreground "PaleGreen"))
(((class color) (min-colors 8)) (:foreground "green"))
(t (:bold t :italic t))))
"Face for items scheduled for a certain day."
:group 'org-faces)
(defface org-scheduled-previously
(org-compatible-face
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
(((class color) (min-colors 8) (background dark)) (:foreground "red" :bold t))
(t (:bold t))))
"Face for items scheduled previously, and not yet done."
:group 'org-faces)
(defface org-time-grid ;; font-lock-variable-name-face
'((((type tty) (class color)) (:foreground "yellow" :weight light))
(((class color) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (background dark)) (:foreground "LightGoldenrod"))
(t (:bold t :italic t)))
(org-compatible-face
'((((class color) (min-colors 16) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightGoldenrod"))
(((class color) (min-colors 8)) (:foreground "yellow" :weight light)))) ; FIXME: turn off???
"Face used for time grids."
:group 'org-faces)
(defvar org-level-faces
(defconst org-level-faces
'(org-level-1 org-level-2 org-level-3 org-level-4
org-level-5 org-level-6 org-level-7 org-level-8
))
(defvar org-n-levels (length org-level-faces))
(defconst org-n-levels (length org-level-faces))
(defconst org-bold-re
(if (featurep 'xemacs)
"\\([ ]\\|^\\)\\(\\*\\(\\w[a-zA-Z0-9-_ ]*?\\w\\)\\*\\)\\([ ,.]\\|$\\)"
"\\([ ]\\|^\\)\\(\\*\\(\\w[[:word:] -_]*?\\w\\)\\*\\)\\([ ,.]\\|$\\)")
"Regular expression for bold emphasis.")
(defconst org-italic-re
(if (featurep 'xemacs)
"\\([ ]\\|^\\)\\(/\\(\\w[a-zA-Z0-9-_ ]*?\\w\\)/\\)\\([ ,.]\\|$\\)"
"\\([ ]\\|^\\)\\(/\\(\\w[[:word:] -_]*?\\w\\)/\\)\\([ ,.]\\|$\\)")
"Regular expression for italic emphasis.")
(defconst org-underline-re
(if (featurep 'xemacs)
"\\([ ]\\|^\\)\\(_\\(\\w[a-zA-Z0-9-_ ]*?\\w\\)_\\)\\([ ,.]\\|$\\)"
"\\([ ]\\|^\\)\\(_\\(\\w[[:word:] -_]*?\\w\\)_\\)\\([ ,.]\\|$\\)")
"Regular expression for underline emphasis.")
;; Variables for pre-computed regular expressions, all buffer local
(defvar org-done-string nil
@ -2400,6 +2492,10 @@ The following commands are available:
s)
(match-string-no-properties num string)))
(defsubst org-no-properties (s)
(remove-text-properties 0 (length s) org-rm-props s)
s)
(defun org-current-time ()
"Current time, possibly rounded to `org-time-stamp-rounding-minutes'."
(if (> org-time-stamp-rounding-minutes 0)
@ -2530,7 +2626,9 @@ that will be added to PLIST. Returns the string that was modified."
(defun org-activate-bracket-links (limit)
"Run through the buffer and add overlays to bracketed links."
(if (re-search-forward org-bracket-link-regexp limit t)
(let* ((help (concat "LINK: " (org-match-string-no-properties 1)))
(let* ((help (concat "LINK: "
(org-match-string-no-properties 1)))
;; FIXME: above we should remove the escapes.
(ip (list 'invisible 'org-link 'intangible t 'rear-nonsticky t
'keymap org-mouse-map 'mouse-face 'highlight
'help-echo help))
@ -2678,20 +2776,23 @@ between words."
(if (memq 'plain lk) '(org-activate-plain-links (0 'org-link t)))
(if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link t)))
(if (memq 'radio lk) '(org-activate-target-links (0 'org-link t)))
(if (memq 'date lk) '(org-activate-dates (0 'org-link t)))
(if (memq 'date lk) '(org-activate-dates (0 'org-date t)))
(if (memq 'camel lk) '(org-activate-camels (0 'org-link t)))
(if (memq 'tag lk) '(org-activate-tags (1 'org-tag prepend)))
(if org-table-limit-column-width
'(org-hide-wide-columns (0 nil append)))
(list (concat "^\\*+[ \t]*" org-not-done-regexp)
'(1 'org-warning t))
'(1 'org-todo t))
(list (concat "\\[#[A-Z]\\]") '(0 'org-special-keyword t))
(list (concat "\\<" org-deadline-string) '(0 'org-special-keyword t))
(list (concat "\\<" org-scheduled-string) '(0 'org-special-keyword t))
(list (concat "\\<" org-closed-string) '(0 'org-special-keyword t))
(if em '("\\(\\W\\|^\\)\\(\\*\\w+\\*\\)\\(\\W\\|$\\)" 2 'bold prepend))
(if em '("\\(\\W\\|^\\)\\(/\\w+/\\)\\(\\W\\|$\\)" 2 'italic prepend))
(if em '("\\(\\W\\|^\\)\\(_\\w+_\\)\\(\\W\\|$\\)" 2 'underline prepend))
; (if em '("\\(\\W\\|^\\)\\(\\*\\w+\\*\\)\\(\\W\\|$\\)" 2 'bold prepend))
; (if em '("\\(\\W\\|^\\)\\(/\\w+/\\)\\(\\W\\|$\\)" 2 'italic prepend))
; (if em '("\\(\\W\\|^\\)\\(_\\w+_\\)\\(\\W\\|$\\)" 2 'underline prepend))
(if em (list org-bold-re 2 ''bold 'prepend))
(if em (list org-italic-re 2 ''italic 'prepend))
(if em (list org-underline-re 2 ''underline 'prepend))
(list (concat "^\\*+[ \t]*\\<\\(" org-comment-string
"\\|" org-quote-string "\\)\\>")
'(1 'org-special-keyword t))
@ -2705,7 +2806,7 @@ between words."
'("| *\\(:?=[^|\n]*\\)" (1 'org-formula t))
'("^[ \t]*| *\\([#!$*_^]\\) *|" (1 'org-formula t))
(if org-format-transports-properties-p
'("| *\\(<[0-9]+>\\) *|" (1 'org-formula t)))
'("| *\\(<[0-9]+>\\) *" (1 'org-formula t)))
)))
(setq org-font-lock-extra-keywords (delq nil org-font-lock-extra-keywords))
;; Now set the full font-lock-keywords
@ -3070,10 +3171,14 @@ or nil."
(error (outline-next-heading)))
(prog1 (match-string 0)
(funcall outline-level)))))
(unless (bolp) (newline))
(cond
((and (org-on-heading-p) (bolp)
(save-excursion (backward-char 1) (not (org-invisible-p))))
(open-line 1))
((bolp) nil)
(t (newline)))
(insert head)
(if (looking-at "[ \t]*")
(replace-match " "))
(just-one-space)
(run-hooks 'org-insert-heading-hook))))
(defun org-insert-item ()
@ -3086,8 +3191,20 @@ Return t when things worked, nil when we are not in an item."
(org-at-item-p)
t)
(error nil)))
(unless (bolp) (newline))
(insert (match-string 0))
(let* ((bul (match-string 0))
(eow (save-excursion (beginning-of-line 1) (looking-at "[ \t]*")
(match-end 0)))
(eowcol (save-excursion (goto-char eow) (current-column))))
(cond
((and (org-at-item-p) (<= (point) eow))
;; before the bullet
(beginning-of-line 1)
(open-line 1))
((<= (point) eow)
(beginning-of-line 1))
(t (newline)))
(insert bul)
(just-one-space))
(org-maybe-renumber-ordered-list)
t))
@ -5293,7 +5410,8 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(completion-ignore-case t)
(org-select-this-todo-keyword
(if (stringp arg) arg
(and arg (integerp arg) (nth (1- arg) org-todo-keywords))))
(and arg (integerp arg) (> arg 0)
(nth (1- arg) org-todo-keywords))))
rtn rtnall files file pos)
(when (equal arg '(4))
(setq org-select-this-todo-keyword
@ -5893,6 +6011,7 @@ the documentation of `org-diary'."
"Return the TODO information for agenda display."
(let* ((props (list 'face nil
'done-face 'org-done
'org-not-done-regexp org-not-done-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
@ -5933,6 +6052,7 @@ the documentation of `org-diary'."
(defun org-agenda-get-timestamps ()
"Return the date stamp information for agenda display."
(let* ((props (list 'face nil
'org-not-done-regexp org-not-done-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
@ -5998,6 +6118,7 @@ the documentation of `org-diary'."
(defun org-agenda-get-closed ()
"Return the logged TODO entries for agenda display."
(let* ((props (list 'mouse-face 'highlight
'org-not-done-regexp org-not-done-regexp
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
@ -6049,6 +6170,7 @@ the documentation of `org-diary'."
"Return the deadline information for agenda display."
(let* ((wdays org-deadline-warning-days)
(props (list 'mouse-face 'highlight
'org-not-done-regexp org-not-done-regexp
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
@ -6104,6 +6226,7 @@ the documentation of `org-diary'."
(defun org-agenda-get-scheduled ()
"Return the scheduled information for agenda display."
(let* ((props (list 'face 'org-scheduled-previously
'org-not-done-regexp org-not-done-regexp
'undone-face 'org-scheduled-previously
'done-face 'org-done
'mouse-face 'highlight
@ -6153,6 +6276,7 @@ the documentation of `org-diary'."
(defun org-agenda-get-blocks ()
"Return the date-range information for agenda display."
(let* ((props (list 'face nil
'org-not-done-regexp org-not-done-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
@ -6251,7 +6375,6 @@ only the correctly processes TXT should be returned - this is used by
(file-name-nondirectory buffer-file-name))
"")))
(tag (if tags (nth (1- (length tags)) tags) ""))
;;(tag (or (nth (1- (or (length tags) 0)) tags) "")) FIXME: rm
time ;; needed for the eval of the prefix format
(ts (if dotime (concat (if (stringp dotime) dotime "") txt)))
(time-of-day (and dotime (org-get-time-of-day ts)))
@ -6389,8 +6512,25 @@ HH:MM."
(defun org-finalize-agenda-entries (list)
"Sort and concatenate the agenda items."
(setq list (mapcar 'org-agenda-highlight-todo list))
(mapconcat 'identity (sort list 'org-entries-lessp) "\n"))
(defun org-agenda-highlight-todo (x)
(let (re)
(if (eq x 'line)
(save-excursion
(beginning-of-line 1)
(setq re (get-text-property (point) 'org-not-done-regexp))
(goto-char (+ (point) (get-text-property (point) 'prefix-length)))
(and (looking-at (concat "[ \t]*" re))
(add-text-properties (match-beginning 0) (match-end 0)
'(face org-todo))))
(setq re (get-text-property 0 'org-not-done-regexp x))
(and re (string-match re x)
(add-text-properties (match-beginning 0) (match-end 0)
'(face org-todo) x))
x)))
(defsubst org-cmp-priority (a b)
"Compare the priorities of string A and B."
(let ((pa (or (get-text-property 1 'priority a) 0))
@ -6541,7 +6681,7 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(and (outline-next-heading)
(org-flag-heading nil))) ; show the next heading
(org-todo arg)
(forward-char 1)
(and (bolp) (forward-char 1))
(setq newhead (org-get-heading))
(save-excursion
(org-back-to-heading)
@ -6581,12 +6721,13 @@ the new TODO state."
(replace-match new t t)
(beginning-of-line 1)
(add-text-properties (point-at-bol) (point-at-eol) props)
(if fixface
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'face
(if org-last-todo-state-is-todo
undone-face done-face))))
(when fixface
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'face
(if org-last-todo-state-is-todo
undone-face done-face)))
(org-agenda-highlight-todo 'line))
(beginning-of-line 1))
(error "Line update did not work")))
(beginning-of-line 0)))))
@ -7306,7 +7447,10 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(format "Execute \"%s\" in shell? "
(org-add-props cmd nil
'face 'org-warning))))
(shell-command cmd)
(progn
(message "Executing %s..." cmd)
(shell-command cmd)
(message "Executing %s...done" cmd))
(error "Abort"))))
(t
@ -7760,7 +7904,11 @@ If the file does not exist, an error is thrown."
(setq cmd 'emacs))))
(cond
((and (stringp cmd) (not (string-match "^\\s-*$" cmd)))
(setq cmd (format cmd (concat "\"" file "\"")))
; (setq cmd (format cmd (concat "\"" file "\"")))
;; FIXME: normalize use of quotes
(if (string-match "['\"]%s['\"]" cmd)
(setq cmd (replace-match "'%s'" t t cmd)))
(setq cmd (format cmd file))
(save-window-excursion
(shell-command (concat cmd " &"))))
((or (stringp cmd)
@ -8154,12 +8302,16 @@ is in the current directory or below."
(complete-file
;; Completing read for file names.
(setq file (read-file-name "File: "))
(let ((pwd (file-name-as-directory (expand-file-name "."))))
(let ((pwd (file-name-as-directory (expand-file-name ".")))
(pwd1 (file-name-as-directory (abbreviate-file-name
(expand-file-name ".")))))
(cond
((equal complete-file '(16))
(setq link (org-make-link
"file:"
(abbreviate-file-name (expand-file-name file)))))
((string-match (concat "^" (regexp-quote pwd1) "\\(.+\\)") file)
(setq link (org-make-link "file:" (match-string 1 file))))
((string-match (concat "^" (regexp-quote pwd) "\\(.+\\)")
(expand-file-name file))
(setq link (org-make-link
@ -8665,7 +8817,7 @@ This is being used to correctly align a single field after TAB or RET.")
(> (org-string-width xx) fmax))
(org-add-props xx nil
'help-echo
(concat "Clipped table field, use C-c ` to edit. Full value is:\n" (copy-sequence xx)))
(concat "Clipped table field, use C-c ` to edit. Full value is:\n" (org-no-properties (copy-sequence xx))))
(setq f1 (min fmax (or (string-match org-bracket-link-regexp xx) fmax)))
(unless (> f1 1)
(error "Cannot narrow field starting with wide link \"%s\""
@ -11752,21 +11904,35 @@ headlines. The default is 3. Lower levels will become bulleted lists."
;; FILE link
(let* ((filename path)
(abs-p (file-name-absolute-p filename))
(thefile (if abs-p (expand-file-name filename) filename))
(thefile (save-match-data
(if (string-match ":[0-9]+$" thefile)
(replace-match "" t t thefile)
thefile)))
(file-is-image-p
(save-match-data
(string-match (org-image-file-name-regexp) thefile))))
thefile file-is-image-p search)
(save-match-data
(if (string-match "::\\(.*\\)" filename)
(setq search (match-string 1 filename)
filename (replace-match "" nil nil filename)))
(setq file-is-image-p
(string-match (org-image-file-name-regexp) filename))
(setq thefile (if abs-p (expand-file-name filename) filename))
(when (and org-export-html-link-org-files-as-html
(string-match "\\.org$" thefile))
(setq thefile (concat (substring thefile 0
(match-beginning 0))
".html"))
(if (and search
;; make sure this is can be used as target search
(not (string-match "^[0-9]*$" search))
(not (string-match "^\\*" search))
(not (string-match "^/.*/$" search)))
(setq thefile (concat thefile "#"
(org-solidify-link-text
(org-link-unescape search)))))))
(setq rpl (if (and org-export-html-inline-images
file-is-image-p)
(concat "<img src=\"" thefile "\"/>")
(concat "<a href=\"" thefile "\">" desc "</a>")))))
((member type '("bbdb" "vm" "wl" "mhe" "rmail" "gnus" "shell"))
(setq rpl (concat "<i>&lt;" type ":" path "&gt;</i>"))))
;; FIXME: We get to see the escaped links!!!!!
(setq rpl (concat "<i>&lt;" type ":"
(save-match-data (org-link-unescape path))
"&gt;</i>"))))
(setq line (replace-match rpl t t line)
start (+ start (length rpl))))
;; TODO items
@ -12111,15 +12277,24 @@ stacked delimiters is N. Escaping delimiters is not possible."
(setq string (replace-match (match-string 1 string) t t string))))
string)
;(defun org-export-html-convert-emphasize (string)
; (let (c (s 0))
; (while (string-match "\\(\\W\\|^\\)\\([*/_]\\)\\(\\w+\\)\\2\\(\\W\\|$\\)" string s)
; (setq c (cdr (assoc (match-string 2 string)
; '(("*" . "b") ("/" . "i") ("_" . "u"))))
; s (+ (match-end 0) 3)
; string (replace-match
; (concat "\\1<" c ">\\3</" c ">\\4") t nil string)))
; string))
(defun org-export-html-convert-emphasize (string)
(let (c (s 0))
(while (string-match "\\(\\W\\|^\\)\\([*/_]\\)\\(\\w+\\)\\2\\(\\W\\|$\\)" string s)
(setq c (cdr (assoc (match-string 2 string)
'(("*" . "b") ("/" . "i") ("_" . "u"))))
s (+ (match-end 0) 3)
string (replace-match
(concat "\\1<" c ">\\3</" c ">\\4") t nil string)))
string))
(while (string-match org-italic-re string)
(setq string (replace-match "\\1<i>\\3</i>\\4" t nil string)))
(while (string-match org-bold-re string)
(setq string (replace-match "\\1<b>\\3</b>\\4" t nil string)))
(while (string-match org-underline-re string)
(setq string (replace-match "\\1<u>\\3</u>\\4" t nil string)))
string)
(defun org-parse-key-lines ()
"Find the special key lines with the information for exporters."

View file

@ -594,20 +594,24 @@ An alternative value is \" . \", if you use a font with a narrow period."
'(face subscript display (raise -0.3))
'(face superscript display (raise +0.3)))))
(defun tex-font-lock-match-suscript (limit)
"Match subscript and superscript patterns up to LIMIT."
(when (re-search-forward "[_^] *\\([^\n\\{}]\\|\
\\\\\\([a-zA-Z@]+\\|[^ \t\n]\\)\\|{[^\\{]*}\\|\\({\\)\\)" limit t)
(when (match-end 3)
(let ((beg (match-beginning 3))
(end (save-restriction
(narrow-to-region (point-min) limit)
(condition-case nil (scan-lists (point) 1 1) (error nil)))))
(store-match-data (if end
(list (match-beginning 0) end beg end)
(list beg beg beg beg)))))
t))
(defconst tex-font-lock-keywords-3
(append tex-font-lock-keywords-2
(eval-when-compile
(let ((general "\\([a-zA-Z@]+\\|[^ \t\n]\\)")
(slash "\\\\")
;; This is not the same regexp as before: it has a `+' removed.
;; The + makes the matching faster in the above cases (where we can
;; exit as soon as the match fails) but would make this matching
;; degenerate to nasty complexity (because we try to match the
;; closing brace, which forces trying all matching combinations).
(arg "{\\(?:[^{}\\]\\|\\\\.\\|{[^}]*}\\)*"))
`((,(concat "[_^] *\\([^\n\\{}#]\\|" slash general "\\|#[0-9]\\|" arg "}\\)")
(1 (tex-font-lock-suscript (match-beginning 0))
append))))))
'((tex-font-lock-match-suscript
(1 (tex-font-lock-suscript (match-beginning 0)) append))))
"Experimental expressions to highlight in TeX modes.")
(defvar tex-font-lock-keywords tex-font-lock-keywords-1

View file

@ -47,11 +47,15 @@
;; would be accompanied by a full redisplay.
(define-minor-mode tooltip-mode
"Toggle Tooltip display.
With ARG, turn tooltip mode on if and only if ARG is positive.
"Toggle Tooltip mode.
With ARG, turn Tooltip mode on if and only if ARG is positive.
When this minor mode is enabled, Emacs displays help text
in a pop-up window on mouse-over. When it is disabled,
Emacs displays the help text in the echo area instead."
in a pop-up window for buttons and menu items that you put the mouse on.
\(However, if `tooltip-use-echo-area' is non-nil, this and
all pop-up help appears in the echo area.)
When Tooltip mode is disabled, Emacs displays one line of
the help text in the echo area, and does not make a pop-up window."
:global t
:init-value (not (or noninteractive
emacs-basic-display
@ -142,7 +146,9 @@ position to pop up the tooltip."
:group 'basic-faces)
(defcustom tooltip-use-echo-area nil
"Use the echo area instead of tooltip frames for help and GUD tooltips."
"Use the echo area instead of tooltip frames for help and GUD tooltips.
To display multi-line help text in the echo area, set this to t
and enable `tooltip-mode'."
:type 'boolean
:group 'tooltip)

View file

@ -1,3 +1,19 @@
2006-04-18 Richard Stallman <rms@gnu.org>
* tips.texi (Coding Conventions): Explain when the package's
prefix should appear later on (not at the start of the name).
* searching.texi (String Search): Clarify effect of NOERROR.
* modes.texi (Imenu): Clarify what special items do.
* hooks.texi (Standard Hooks): Delete text about old hook names.
2006-04-17 Romain Francoise <romain@orebokech.com>
* variables.texi (Local Variables): Update the default value of
`max-specpdl-size'.
2006-04-15 Michael Olson <mwolson@gnu.org>
* processes.texi (Transaction Queues): Mention the new optional
@ -59,8 +75,7 @@
2006-03-19 Alan Mackenzie <acm@muc.de>
* text.texi (Special Properties): Clarify the definition of
'fontified.
* text.texi (Special Properties): Clarify `fontified' property.
2006-03-16 Richard Stallman <rms@gnu.org>

View file

@ -31,11 +31,6 @@ these functions are called in a special way (they are passed arguments,
or their values are used). The variables whose names end in
@samp{-function} have single functions as their values.
(In older Emacs versions, some normal hooks had names ending in
@samp{-hooks} or @samp{-functions}, and some abnormal hooks had names
ending in @samp{-hook}. We have renamed all of these to conform to
the above conventions.)
@c We need to xref to where each hook is documented or else document
@c it here.

View file

@ -2174,10 +2174,9 @@ An element can also look like this:
(@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{})
@end example
Like in the previous case, each match for this element creates an
index item. However, if this index item is selected by the user, it
calls @var{function} with arguments consisting of the item name, the
buffer position, and @var{arguments}.
Each match for this element creates an index item, and when the index
item is selected by the user, it calls @var{function} with arguments
consisting of the item name, the buffer position, and @var{arguments}.
For Emacs Lisp mode, @code{imenu-generic-expression} could look like
this:

View file

@ -86,6 +86,10 @@ upper bound and returns @code{nil}. (It would be more consistent now to
return the new position of point in that case, but some existing
programs may depend on a value of @code{nil}.)
The argument @var{noerror} only affects valid searches which fail to
find a match. Invalid arguments cause errors regardless of
@var{noerror}.
If @var{repeat} is supplied (it must be a positive number), then the
search is repeated that many times (each time starting at the end of the
previous time's match). If these successive searches succeed, the

View file

@ -56,9 +56,13 @@ distinguish your program from other Lisp programs.@footnote{The
benefits of a Common Lisp-style package system are considered not to
outweigh the costs.} Then take care to begin the names of all global
variables, constants, and functions in your program with the chosen
prefix. This helps avoid name conflicts. (Occasionally, for a command
name intended for users to use, it is cleaner if some words come
before the package name prefix.)
prefix. This helps avoid name conflicts.
Occasionally, for a command name intended for users to use, it is more
convenient if some words come before the package's name prefix. And
constructs that define functions, variables, etc., work better if they
start with @samp{defun} or @samp{defvar}, so put the name prefix later
on in the name.
This recommendation applies even to names for traditional Lisp
primitives that are not primitives in Emacs Lisp---such as

View file

@ -276,7 +276,7 @@ that Lisp avoids infinite recursion on an ill-defined function.
@code{max-lisp-eval-depth} provides another limit on depth of nesting.
@xref{Definition of max-lisp-eval-depth,, Eval}.
The default value is 600. Entry to the Lisp debugger increases the
The default value is 1000. Entry to the Lisp debugger increases the
value, if there is little room left, to make sure the debugger itself
has room to execute.
@end defvar

Some files were not shown because too many files have changed in this diff Show more