summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Rumney <jasonr@gnu.org>2010-01-27 21:15:40 +0800
committerJason Rumney <jasonr@gnu.org>2010-01-27 21:15:40 +0800
commit0cb9f021d19fe76db98ff2e9229e9f8570905c44 (patch)
treee374f05e0dedfeae4a984da0ae1dc1f2fac74a1a
parent98a06c6e3f184bbdfbc17aad4143a91fb0c6441a (diff)
parentc74aa70b45dfcc7733c5bb64b14186b72c6e63ae (diff)
downloademacs-0cb9f021d19fe76db98ff2e9229e9f8570905c44.tar.gz
Merged from trunk
-rw-r--r--.bzrignore1
-rw-r--r--ChangeLog5
-rw-r--r--admin/notes/bugtracker150
-rwxr-xr-xconfigure3
-rw-r--r--configure.in2
-rw-r--r--doc/emacs/ChangeLog5
-rw-r--r--doc/emacs/programs.texi6
-rw-r--r--doc/misc/ChangeLog6
-rw-r--r--doc/misc/cc-mode.texi13
-rw-r--r--etc/NEWS5
-rw-r--r--lisp/ChangeLog96
-rw-r--r--lisp/calendar/diary-lib.el4
-rw-r--r--lisp/emacs-lisp/advice.el2
-rw-r--r--lisp/emacs-lisp/assoc.el22
-rw-r--r--lisp/erc/ChangeLog9
-rw-r--r--lisp/erc/erc-backend.el10
-rw-r--r--lisp/erc/erc.el4
-rw-r--r--lisp/files.el42
-rw-r--r--lisp/isearch.el5
-rw-r--r--lisp/jka-compr.el9
-rw-r--r--lisp/mail/mail-utils.el2
-rw-r--r--lisp/mail/rmail.el5
-rw-r--r--lisp/mail/rmailmm.el5
-rw-r--r--lisp/net/tramp-imap.el21
-rw-r--r--lisp/net/tramp-smb.el10
-rw-r--r--lisp/progmodes/ada-mode.el6
-rw-r--r--lisp/progmodes/cc-engine.el11
-rw-r--r--lisp/progmodes/python.el2
-rw-r--r--lisp/term/xterm.el29
-rw-r--r--lisp/url/ChangeLog4
-rw-r--r--lisp/url/url-util.el1
-rw-r--r--lisp/vc-annotate.el3
-rw-r--r--lisp/vc-bzr.el17
-rw-r--r--lisp/vc-git.el19
-rw-r--r--lisp/vc-hooks.el2
-rw-r--r--src/ChangeLog55
-rw-r--r--src/alloc.c10
-rw-r--r--src/fileio.c28
-rw-r--r--src/filelock.c2
-rw-r--r--src/image.c14
-rw-r--r--src/keymap.c43
-rw-r--r--src/lisp.h2
-rw-r--r--src/lread.c2
-rw-r--r--src/regex.c3
-rw-r--r--src/xdisp.c3
-rw-r--r--src/xfns.c26
46 files changed, 546 insertions, 178 deletions
diff --git a/.bzrignore b/.bzrignore
index c83e3c2c6da..f7f28c7df51 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -61,3 +61,4 @@ src/prefix-args*
src/stamp-oldxmenu
src/temacs
src/deps
+configure.lineno
diff --git a/ChangeLog b/ChangeLog
index db1d28dd620..6792ba4f3e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-23 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * configure.in: Check for utmp.h availability (FreeBSD 9.x lacks
+ this header file).
+
2010-01-12 Juanma Barranquero <lekktu@gmail.com>
* .bzrignore: Ignore all .exe, instead of individual files.
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index e253cb6d1b4..964cc869b8f 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -2,6 +2,36 @@ NOTES ON THE EMACS BUG TRACKER -*- outline -*-
The Emacs Bug Tracker can be found at http://debbugs.gnu.org/
+* Quick-start guide
+
+This is 95% of all you will ever need.
+
+** How do I report a bug?
+Use M-x report-emacs-bug, or send mail to bug-gnu-emacs@gnu.org.
+If you want to Cc someone, use an "X-Debbugs-CC" header instead.
+
+** How do I comment on a bug?
+Reply to a mail on the bug-gnu-emacs list in the normal way.
+Or send a mail to 123@debbugs.gnu.org.
+
+If the bug is old and closed, you may have to unarchive it first.
+Send a mail to control@debbugs.gnu.org with
+unarchive 123
+on the first line of the body.
+
+** How do I close a bug?
+Send a mail to 123-done@debbugs.gnu.org. In the body, explain
+why the bug is being closed.
+
+** How do I set bug meta-data?
+By mailing commands to control@debbugs.gnu.org. Place commands at the
+start of the message body, one per line.
+
+severity 123 serious|important|normal|minor|wishlist
+tags 123 moreinfo|unreproducible|wontfix|patch
+
+* More detailed information
+
For a list of all bugs, see http://debbugs.gnu.org/db/pa/lemacs.html
This is a static page, updated once a day. There is also a dynamic
list, generated on request, but since there are many bug reports this
@@ -35,15 +65,16 @@ So you need to explicitly CC him/her (and anyone else you like).
(Many people think the submitter SHOULD be automatically subscribed
to subsequent discussion, but this does not seem to be implemented.
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=37078)
+See also http://debbugs.gnu.org/5439
-Do NOT send a separate copy to the bug list, since this may generate a
-new report. The only time to send mail to the bug list is to create a
-new report.
+Do NOT send a separate copy to the bug list address, since this may
+generate a new report. The only time to send mail to the bug list
+address is to create a new report.
Gnus users can add the following to message-dont-reply-to-names;
similarly with Rmail and rmail-dont-reply-to-names:
-"\\(emacs-pretest-bug\\|bug-gnu-emacs\\)@gnu\\.org\\|\
+"\\(emacs-pretest-bug\\|bug-gnu-emacs\\|bug-\\(e\\|gnu\\)macs\\)@gnu\\.org\\|\
\\(submit\\|control\\|owner\\)@debbugs\\.gnu\\.org"
The "owner@debbugs.gnu.org" entry is there because it appears in the
@@ -58,27 +89,23 @@ reporting.)
(e.g. bug-cc-mode@gnu.org), do NOT just use a Cc: header.
Instead, use "X-Debbugs-CC:". This ensures the Cc address will get a
mail with the bug report number in. If you do not do this, each reply
-in the subsequent discussion will end up creating a new bug. This is
-annoying.
-
-Note that the way this feature works is perhaps not ideal (Bug#1720).
-If X-Debbugs-CC: was specifed by a real header, that header is removed
-in the mail sent out to the bug list, and the addresses merged into
-the Resent-CC header (see below). They don't appear as an explicit CC:
-header, nor do they appear in the Reply-To: header. So people you
-X-Debbugs-CC are not included in any following discussion unless they are
-manually cc'd. So this feature really only serves to notify them that
-a bug has been filed. It's then up to them to follow any subsequent
-discussion.
-
-If X-Debbugs-CC were merged into the Reply-To header, this might work
-more the way people expect.
+in the subsequent discussion will end up creating a new bug.
+This is annoying.
+
+If a new report contains X-Debbugs-CC in the input, this is
+converted to a real Cc header in the output. (See Bug#1720).
+It is also merged into the Resent-CC header (see below).
** How does Debbugs send out mails?
-The mails are sent out to the bug list with From: and To: unchanged.
-Eg if you file a bug with "submit@debbugs.gnu.org", that
-remains in the To: address. They reach the bug list by being resent.
+The mails are sent out to the bug list by being resent. The From:
+header is unchanged. In new reports only (at present), the To:
+address is altered as follows. Any "bug-gnu-emacs",
+"emacs-pretest-bug", or "submit@debbugs" address is replaced by
+123@debbugs in the mail that gets sent out. (This also applies to any
+Cc: header, though you should be using X-Debbugs-CC instead in new
+reports). The original header is stored as X-Debbugs-Original-To, if
+it was changed. Any X-Debbugs-CC is merged into the Cc.
Mails arriving at the bug list have the following Resent-* headers:
@@ -88,10 +115,6 @@ Resent-CC: maintainer email address, plus any X-Debbugs-CC: entries
The "maintainer email address" is "bug-gnu-emacs@gnu.org" in most cases.
-A new report also has:
-
-Mail-Followup-To: bug submitter, 123@debbugs.gnu.org
-
** To not get acknowledgement mail from the tracker,
add an "X-Debbugs-No-Ack:" header (with any value). If you use Gnus,
you can add an element to gnus-posting-styles to do this automatically, eg:
@@ -117,17 +140,13 @@ Remember to fix FOO, as discussed on emacs-devel at http://... .
** Not interested in tracker control messages (tags being set, etc)?
Discard mails matching:
-^X-Emacs-PR-Message: transcript
-
-When you close a bug, you get a message matching:
-
-^X-Emacs-PR-Message: closed
+^X-Emacs-PR-Message: (transcript|closed)
** How to avoid multiple copies of mails.
-When you reply to a bug, respect the Reply-To address, ie send mail
-only to the submitter address and the numbered bug address. Do not
-send mail direct to bug-gnu-emacs or emacs-pretest-bug unless you are
-reporting a new bug.
+If you reply to reports in the normal way, this should work fine.
+Basically, reply only to the numbered bug address (and any individual
+people's addresses). Do not send mail direct to bug-gnu-emacs or
+emacs-pretest-bug unless you are reporting a new bug.
** To close bug #123 (for example), send mail
@@ -138,6 +157,31 @@ There is no need to cc the address without the "-done" part or the
submitter; they get copies anyway so this will just result in more
duplicate mail.
+** Details of closing a bug.
+(For information only)
+Sending a mail to 123-done does the following:
+
+1) Mark the bug as closed in the database.
+
+2) Send a mail to the original submitter telling them that their bug
+has been closed. This mail has a header:
+
+X-Emacs-PR-Message: they-closed 123
+
+3) Send a mail to you and to the emacs-bug-tracker list confirming
+that the bug has been closed. This mail has a header:
+
+X-Emacs-PR-Message: closed 123
+
+4) Send a copy of your mail to the bug-gnu-emacs list in exactly the
+same way as if you had sent mail to "123" (sans -done). This mail has
+headers:
+
+X-Emacs-PR-Message: cc-closed 123
+Mail-Followup-To: 123@debbugs.gnu.org, ...
+
+(This is Emacs-specific. Normally the bug list gets the same mail as in 3).
+
** Setting bug parameters.
There are two ways to set the parameters of bugs in the database
(tags, severity level, etc). When you report a new bug, you can
@@ -195,8 +239,7 @@ tag:tag # all bugs with given tag
See <http://wiki.debian.org/bugs.debian.org/usertags>
"Usertags" are very similar to tags: a set of labels that can be added
-to a bug. There are two differences between normal tags and user
-tags:
+to a bug. There are two differences between normal tags and user tags:
1) Anyone can define any valid usertag they like. In contrast, only a
limited, predefined set of normal tags are available (see above).
@@ -362,7 +405,7 @@ bug number.
Similarly, when you close a bug, it can be helpful to include the
relevant ChangeLog entry in the message to the bug tracker, so people
-can see eaxctly what the fix was.
+can see exactly what the fix was.
*** bug-reference-mode
@@ -373,6 +416,17 @@ the bug web-pages.
http://lists.gnu.org/archive/html/emacs-devel/2009-11/msg00440.html
+** Bazaar stuff
+
+*** You can use `bzr commit --fixes emacs:123' to mark that a commit fixes
+Emacs bug 123. You will first need to add a line to your bazaar.conf
+(untested):
+
+bugtracker_emacs_url = http://debbugs.gnu.org/{id}
+
+Note that all this does is add some metadata to the commit, it doesn't
+actually mark the bug as closed in the tracker.
+
** Gnus-specific voodoo
*** Put point on a bug-number and try: M-x gnus-read-ephemeral-emacs-bug-group
@@ -448,7 +502,10 @@ needlessly held for moderation:
*** debbugs-submit
(quiet|control|submit)@(debbugs\.gnu\.org|emacsbugs\.donarmstrong\.com)
[0-9]+(-done|-quiet|-subscribe)?@(debbugs\.gnu\.org|emacsbugs\.donarmstrong\.com)
-(bug-gnu-emacs|emacs-pretest-bug)@gnu\.org
+(bug-gnu-emacs|emacs-pretest-bug|bug-(e|gnu)macs)@gnu\.org
+
+bug-emacs and bug-gnumacs are lesser-used aliases from fencepost's
+/etc/aliases file.
*** emacs-bug-tracker
sender: bug-gnu-emacs AT gnu.org
@@ -456,3 +513,18 @@ recipient: emacs-bug-tracker AT debbugs\.gnu\.org
The latter is because that is the address that debbugs actually sends to.
An /etc/aliases entry redirects it to the real emacs-bug-tracker address.
+
+** Administrivia
+
+The debbugs-submit list should have the administrivia option off,
+else it can by mistake filter out requests to subscribe to bugs.
+But, this feature doesn't work anyway (see bug#5439).
+
+** How to test changes
+
+Add an entry to /etc/debbugs/Maintainers like:
+
+mytest my.email.address
+
+Then if you do all your testing with 'Package: mytest', the resulting
+mails should only go to your email address.
diff --git a/configure b/configure
index 947b8ae9c3e..1ba9d361e6a 100755
--- a/configure
+++ b/configure
@@ -6665,11 +6665,12 @@ fi
+
for ac_header in sys/select.h sys/timeb.h sys/time.h unistd.h utime.h \
linux/version.h sys/systeminfo.h termios.h limits.h string.h stdlib.h \
termcap.h stdio_ext.h fcntl.h strings.h coff.h pty.h sys/mman.h \
sys/param.h sys/vlimit.h sys/resource.h locale.h sys/_mbstate_t.h \
- sys/utsname.h pwd.h
+ sys/utsname.h pwd.h utmp.h
do
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
diff --git a/configure.in b/configure.in
index 33671e530ee..82d3dfe4ede 100644
--- a/configure.in
+++ b/configure.in
@@ -1106,7 +1106,7 @@ AC_CHECK_HEADERS(sys/select.h sys/timeb.h sys/time.h unistd.h utime.h \
linux/version.h sys/systeminfo.h termios.h limits.h string.h stdlib.h \
termcap.h stdio_ext.h fcntl.h strings.h coff.h pty.h sys/mman.h \
sys/param.h sys/vlimit.h sys/resource.h locale.h sys/_mbstate_t.h \
- sys/utsname.h pwd.h)
+ sys/utsname.h pwd.h utmp.h)
AC_MSG_CHECKING(if personality LINUX32 can be set)
AC_TRY_COMPILE([#include <sys/personality.h>], [personality (PER_LINUX32)],
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index 7d7002a6469..39ffa2c2acc 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-24 Mark A. Hershberger <mah@everybody.org>
+
+ * programs.texi (Other C Commands): Replace reference to obsolete
+ c-subword-mode.
+
2010-01-21 Glenn Morris <rgm@gnu.org>
* trouble.texi (Bugs): Fix PROBLEMS keybinding.
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index ac955956b91..8ebbcf58ed4 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1609,13 +1609,13 @@ hungry-delete feature is enabled.
@table @kbd
@item C-c C-w
-@itemx M-x c-subword-mode
-@findex c-subword-mode
+@itemx M-x subword-mode
+@findex subword-mode
Enable (or disable) @dfn{subword mode}. In subword mode, Emacs's word
commands recognize upper case letters in
@samp{StudlyCapsIdentifiers} as word boundaries. This is indicated by
the flag @samp{/w} on the mode line after the mode name
-(e.g. @samp{C/law}). You can even use @kbd{M-x c-subword-mode} in
+(e.g. @samp{C/law}). You can even use @kbd{M-x subword-mode} in
non-CC Mode buffers.
In the GNU project, we recommend using underscores to separate words
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 3d39b108049..fe34433c391 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,7 +1,11 @@
-2010-01-21 Katsumi Yamaoka <yamaoka@jpl.org>
+2010-01-24 Mark A. Hershberger <mah@everybody.org>
* gnus.texi (Score File Format): Fix typo.
+2010-01-21 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * cc-mode.texi: Replace references to obsolete c-subword-mode.
+
2010-01-18 Juanma Barranquero <lekktu@gmail.com>
* ada-mode.texi (Project File Overview): Fix typo.
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 6b72c69e05b..bfe09b64244 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -1012,7 +1012,7 @@ capitalized word. With prefix argument @var{n}, move @var{n} times.
If @var{n} is negative, move in the opposite direction.
Note that these two commands have been superseded by
-@code{c-subword-mode}, which you should use instead. @xref{Subword
+@code{subword-mode}, which you should use instead. @xref{Subword
Movement}. They might be removed from a future release of @ccmode{}.
@end table
@@ -1194,10 +1194,9 @@ Toggle hungry-delete minor mode.
@findex toggle-auto-hungry-state (c-)
Toggle both auto-newline and hungry delete minor modes.
-@item @kbd{C-c C-w} (@code{M-x c-subword-mode})
+@item @kbd{C-c C-w} (@code{M-x subword-mode})
@kindex C-c C-w
-@findex c-subword-mode
-@findex subword-mode (c-)
+@findex subword-mode
Toggle subword mode.
@item @kbd{M-x c-toggle-syntactic-indentation}
@@ -1694,11 +1693,11 @@ mode turn on automatically, put the following code in your
@example
(add-hook 'c-mode-common-hook
- (lambda () (c-subword-mode 1)))
+ (lambda () (subword-mode 1)))
@end example
-As a bonus, you can also use @code{c-subword-mode} in non-@ccmode{}
-buffers by typing @kbd{M-x c-subword-mode}.
+As a bonus, you can also use @code{subword-mode} in non-@ccmode{}
+buffers by typing @kbd{M-x subword-mode}.
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Other Commands, , Subword Movement, Commands
diff --git a/etc/NEWS b/etc/NEWS
index 5d1ffac8904..7d864d15fd5 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -322,15 +322,14 @@ backends do not support this.
**** The short log format for git makes use of the graph display, so
it's not supported on git versions earlier than 1.5.
-**** The new variable vc-git-add-signoff can be used to add a
-Signed-off-by line when committing.
-
**** Support for operating with stashes has been added to vc-dir: the stash list is
displayed in the *vc-dir* header, stashes can be created, removed, applied and
their content displayed.
**** vc-dir displays the stash status
+**** vc-dir requires at least git-1.5.5.
+
*** vc-bzr supports operating with shelves: the shelve list is
displayed in the *vc-dir* header, shelves can be created, removed and applied.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 15188b4b531..0248453d49d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,99 @@
+2010-01-27 Stephen Berman <stephen.berman@gmx.net>
+
+ * calendar/diary-lib.el (diary-unhide-everything): Handle narrowed
+ buffers. (Bug#5477)
+
+2010-01-27 David De La Harpe Golden <david@harpegolden.net>
+
+ * files.el (delete-directory): Handle moving to trash without
+ first doing recursion (Bug#5436).
+
+2010-01-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc-hooks.el (vc-path): Mark as obsolete.
+
+2010-01-25 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc-annotate.el (vc-annotate-revision-at-line): Compare file
+ names too.
+
+ * vc-bzr.el (vc-bzr-print-log): Use the more compact --line option
+ for the short log.
+ (vc-bzr-log-view-mode): Adjust regexp for the above change.
+
+2010-01-25 Mark A. Hershberger <mah@everybody.org>
+
+ * progmodes/python.el: Replace reference to obsolete
+ c-subward-mode.
+
+ * vc-bzr.el: (vc-bzr-revision-table) New function.
+
+2010-01-25 Eric Hanchrow <eric.hanchrow@gmail.com> (tiny change)
+
+ * vc-git.el (vc-git-dir-status-goto-stage): Pass --relative to the
+ diff-index command. This requires at least git-1.5.5. (Bug#1589).
+
+2010-01-24 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Remove support for adding --signoff on commit.
+ Future support will use an incompatible generic mechanism.
+ * vc-git.el (vc-git-add-signoff): Remove variable.
+ (vc-git-toggle-signoff): Remove function.
+ (vc-git-extra-menu-map): Do not bind vc-git-toggle-signoff.
+
+ * term/xterm.el (xterm-maybe-set-dark-background-mode): Rename
+ from xterm-set-background-mode. Return t if the background mode
+ was set.
+ (terminal-init-xterm): Move tty-set-up-initial-frame-faces
+ earlier, call it again in case the background mode has changed.
+
+2010-01-23 Dmitri Paduchikh <dpaduch@k66.ru> (tiny change)
+
+ * emacs-lisp/advice.el (ad-set-orig-definition): Fix typo
+ (Bug#3541).
+
+2010-01-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/assoc.el (aelement): Doc fix.
+ (aput, adelete, amake): Use lexical-let (Bug#5450).
+
+2010-01-23 Stephen Leake <stephen_leake@member.fsf.org>
+
+ * progmodes/ada-mode.el (ada-in-paramlist-p): Pragma syntax
+ is the same as subprogram call, not declaration. (Bug#5435).
+
+2010-01-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-smb.el (tramp-smb-conf): New defcustom.
+ (tramp-smb-maybe-open-connection): Use it.
+
+2010-01-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-imap.el (top): Autoload needed packages. (Bug#5448)
+
+2010-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mail/rmailmm.el (rmail-mime-handle): Don't set the buffer to unibyte
+ just because we see "encoding: 8bit".
+ * mail/rmail.el (rmail-show-message-1): Decode the body's QP into bytes.
+
+2010-01-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * isearch.el (isearch-allow-scroll): Doc fix (Bug#5446).
+
+2010-01-22 Eli Zaretskii <eliz@gnu.org>
+
+ * jka-compr.el (jka-compr-load): If load-file is not in
+ load-history, try its file-truename version. (bug#5447)
+
+2010-01-21 Alan Mackenzie <acm@muc.de>
+
+ Fix a situation where deletion of a cpp construct throws an error.
+ * progmodes/cc-engine.el (c-invalidate-state-cache): Before
+ invoking c-with-all-but-one-cpps-commented-out, check that the
+ special cpp construct is still in the buffer.
+ (c-parse-state): Record the special cpp with markers, not numbers.
+
2010-01-21 Kenichi Handa <handa@m17n.org>
* textmodes/sgml-mode.el (sgml-maybe-name-self): No need to
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index e1400cc2fa6..8fb464aa7e6 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -804,7 +804,9 @@ LIST-ONLY is non-nil, in which case it just returns the list."
(defun diary-unhide-everything ()
"Show all invisible text in the diary."
(kill-local-variable 'diary-selective-display)
- (remove-overlays (point-min) (point-max) 'invisible 'diary)
+ (save-restriction ; bug#5477
+ (widen)
+ (remove-overlays (point-min) (point-max) 'invisible 'diary))
(kill-local-variable 'mode-line-format))
(defvar original-date) ; bound in diary-list-entries
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index bac24b63021..003f70ea4a5 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -2191,7 +2191,7 @@ Redefining advices affect the construction of an advised definition."
(defmacro ad-set-orig-definition (function definition)
`(ad-safe-fset
- (ad-get-advice-info-field function 'origname) ,definition))
+ (ad-get-advice-info-field ,function 'origname) ,definition))
(defmacro ad-clear-orig-definition (function)
`(fmakunbound (ad-get-advice-info-field ,function 'origname)))
diff --git a/lisp/emacs-lisp/assoc.el b/lisp/emacs-lisp/assoc.el
index 8082069a34b..ccab5d90c09 100644
--- a/lisp/emacs-lisp/assoc.el
+++ b/lisp/emacs-lisp/assoc.el
@@ -1,7 +1,7 @@
;;; assoc.el --- insert/delete/sort functions on association lists
-;; Copyright (C) 1996, 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+;; 2009, 2010 Free Software Foundation, Inc.
;; Author: Barry A. Warsaw <bwarsaw@cen.com>
;; Keywords: extensions
@@ -27,6 +27,7 @@
;; fetching off key-value pairs in association lists.
;;; Code:
+(eval-when-compile (require 'cl))
(defun asort (alist-symbol key)
"Move a specified key-value pair to the head of an alist.
@@ -41,7 +42,8 @@ sorted list."
(defun aelement (key value)
"Make a list of a cons cell containing car of KEY and cdr of VALUE.
-The returned list is suitable as an element of an alist."
+The returned list is suitable for concatenating with an existing
+alist, via `nconc'."
(list (cons key value)))
@@ -71,8 +73,8 @@ If VALUE is not supplied, or is nil, the key-value pair will not be
modified, but will be moved to the head of the alist. If the key-value
pair cannot be found in the alist, it will be inserted into the head
of the alist (with value nil if VALUE is nil or not supplied)."
- (let ((elem (aelement key value))
- alist)
+ (lexical-let ((elem (aelement key value))
+ alist)
(asort alist-symbol key)
(setq alist (eval alist-symbol))
(cond ((null alist) (set alist-symbol elem))
@@ -86,7 +88,7 @@ of the alist (with value nil if VALUE is nil or not supplied)."
Alist is referenced by ALIST-SYMBOL and the key-value pair to remove
is pair matching KEY. Returns the altered alist."
(asort alist-symbol key)
- (let ((alist (eval alist-symbol)))
+ (lexical-let ((alist (eval alist-symbol)))
(cond ((null alist) nil)
((anot-head-p alist key) alist)
(t (set alist-symbol (cdr alist))))))
@@ -123,10 +125,10 @@ KEYLIST and VALUELIST should have the same number of elements, but
this isn't enforced. If VALUELIST is smaller than KEYLIST, remaining
keys are associated with nil. If VALUELIST is larger than KEYLIST,
extra values are ignored. Returns the created alist."
- (let ((keycar (car keylist))
- (keycdr (cdr keylist))
- (valcar (car valuelist))
- (valcdr (cdr valuelist)))
+ (lexical-let ((keycar (car keylist))
+ (keycdr (cdr keylist))
+ (valcar (car valuelist))
+ (valcdr (cdr valuelist)))
(cond ((null keycdr)
(aput alist-symbol keycar valcar))
(t
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 0ba18b68cfb..8daf590ee89 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,12 @@
+2010-01-25 Vivek Dasmohapatra <vivek@etla.org>
+
+ * erc-backend.el (erc-session-connector): New var.
+ (erc-server-reconnect): Use it to reconnect via old
+ connector (Bug#4958).
+
+ * erc.el (erc-determine-parameters): Save
+ erc-server-connect-function to erc-session-connector.
+
2009-11-03 Stefan Monnier <monnier@iro.umontreal.ca>
* erc.el (erc-display-line-1, erc-process-away):
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 1ab9467ab3a..8b533b4c255 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -130,6 +130,10 @@ Use `erc-current-nick' to access this.")
"The server name used to connect to for this session.")
(make-variable-buffer-local 'erc-session-server)
+(defvar erc-session-connector nil
+ "The function used to connect to this session (nil for the default).")
+(make-variable-buffer-local 'erc-session-connector)
+
(defvar erc-session-port nil
"The port used to connect to.")
(make-variable-buffer-local 'erc-session-port)
@@ -538,8 +542,10 @@ Make sure you are in an ERC buffer when running this."
(erc-set-active-buffer (current-buffer))
(setq erc-server-last-sent-time 0)
(setq erc-server-lines-sent 0)
- (erc-open erc-session-server erc-session-port erc-server-current-nick
- erc-session-user-full-name t erc-session-password))))
+ (let ((erc-server-connect-function (or erc-session-connector
+ 'open-network-stream)))
+ (erc-open erc-session-server erc-session-port erc-server-current-nick
+ erc-session-user-full-name t erc-session-password)))))
(defun erc-server-filter-function (process string)
"The process filter for the ERC server."
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index d2445414c83..b76f486f155 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -5654,11 +5654,13 @@ user input."
"Determine the connection and authentication parameters.
Sets the buffer local variables:
+- `erc-session-connector'
- `erc-session-server'
- `erc-session-port'
- `erc-session-full-name'
- `erc-server-current-nick'"
- (setq erc-session-server (erc-compute-server server)
+ (setq erc-session-connector erc-server-connect-function
+ erc-session-server (erc-compute-server server)
erc-session-port (or port erc-default-port)
erc-session-user-full-name (erc-compute-full-name name))
(erc-set-current-nick (erc-compute-nick nick)))
diff --git a/lisp/files.el b/lisp/files.el
index 99e818643d0..d372ff3420a 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4665,21 +4665,35 @@ If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well."
;; delete-directory handler.
(setq directory (directory-file-name (expand-file-name directory)))
(let ((handler (find-file-name-handler directory 'delete-directory)))
- (if handler
- (funcall handler 'delete-directory directory recursive)
+ (cond
+ (handler
+ (funcall handler 'delete-directory directory recursive))
+ (delete-by-moving-to-trash
+ ;; Only move non-empty dir to trash if recursive deletion was
+ ;; requested. This mimics the non-`delete-by-moving-to-trash'
+ ;; case, where the operation fails in delete-directory-internal.
+ ;; As `move-file-to-trash' trashes directories (empty or
+ ;; otherwise) as a unit, we do not need to recurse here.
+ (if (and (not recursive)
+ ;; Check if directory is empty apart from "." and "..".
+ (directory-files
+ directory 'full directory-files-no-dot-files-regexp))
+ (error "Directory is not empty, not moving to trash")
+ (move-file-to-trash directory)))
+ ;; Otherwise, call outselves recursively if needed.
+ (t
(if (and recursive (not (file-symlink-p directory)))
- (mapc
- (lambda (file)
- ;; This test is equivalent to
- ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
- ;; but more efficient
- (if (eq t (car (file-attributes file)))
- (delete-directory file recursive)
- (delete-file file)))
- ;; We do not want to delete "." and "..".
- (directory-files
- directory 'full directory-files-no-dot-files-regexp)))
- (delete-directory-internal directory))))
+ (mapc (lambda (file)
+ ;; This test is equivalent to
+ ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
+ ;; but more efficient
+ (if (eq t (car (file-attributes file)))
+ (delete-directory file recursive)
+ (delete-file file)))
+ ;; We do not want to delete "." and "..".
+ (directory-files
+ directory 'full directory-files-no-dot-files-regexp)))
+ (delete-directory-internal directory)))))
(defun copy-directory (directory newname &optional keep-time parents)
"Copy DIRECTORY to NEWNAME. Both args must be strings.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index ab40678e69c..d0ad330c5c0 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1754,7 +1754,10 @@ Scroll-bar or mode-line events are processed appropriately."
(put 'digit-argument 'isearch-scroll t)
(defcustom isearch-allow-scroll nil
- "If non-nil, scrolling commands are allowed during incremental search."
+ "Whether scrolling is allowed during incremental search.
+If non-nil, scrolling commands can be used in Isearch mode.
+However, the current match will never scroll offscreen.
+If nil, scolling commands will first cancel Isearch mode."
:type 'boolean
:group 'isearch)
diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el
index 12f48bd96b1..34ffcc90a76 100644
--- a/lisp/jka-compr.el
+++ b/lisp/jka-compr.el
@@ -590,7 +590,14 @@ There should be no more than seven characters after the final `/'."
(or nomessage
(message "Loading %s...done." file))
;; Fix up the load history to point at the right library.
- (let ((l (assoc load-file load-history)))
+ (let ((l (or (assoc load-file load-history)
+ ;; On MS-Windows, if load-file is in
+ ;; temporary-file-directory, it will look like
+ ;; "c:/DOCUME~1/USER/LOCALS~1/foo", whereas
+ ;; readevalloop will record its truename in
+ ;; load-history. Therefore try truename if the
+ ;; original name is not in load-history.
+ (assoc (file-truename load-file) load-history))))
;; Remove .gz and .elc?.
(while (file-name-extension file)
(setq file (file-name-sans-extension file)))
diff --git a/lisp/mail/mail-utils.el b/lisp/mail/mail-utils.el
index 3bca0b23a8c..5fad3554ae5 100644
--- a/lisp/mail/mail-utils.el
+++ b/lisp/mail/mail-utils.el
@@ -133,6 +133,8 @@ If NOERROR is non-nil, return t if successful.
If UNIBYTE is non-nil, insert converted characters as unibyte.
That is useful if you are going to character code decoding afterward,
as Rmail does."
+ ;; FIXME: `unibyte' should always be non-nil, and the iso-latin-1
+ ;; specific handling should be removed (or moved elsewhere and generalized).
(interactive "r\nP")
(let (failed)
(save-match-data
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 67ea3fdc158..1dbfceb315b 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -2727,7 +2727,8 @@ The current mail message becomes the message displayed."
(insert-buffer-substring mbox-buf body-start end)
(cond
((string= character-coding "quoted-printable")
- (mail-unquote-printable-region (point-min) (point-max)))
+ (mail-unquote-printable-region (point-min) (point-max)
+ nil nil 'unibyte))
((and (string= character-coding "base64") is-text-message)
(base64-decode-region (point-min) (point-max)))
((eq character-coding 'uuencode)
@@ -4269,7 +4270,7 @@ With prefix argument N moves forward N messages with these labels.
;;;***
-;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "d196de6dfb74fe87a3d02189096b795f")
+;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "93033f2136fcd111e2b52a116ff4cf29")
;;; Generated autoloads from rmailmm.el
(autoload 'rmail-mime "rmailmm" "\
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index e87f72a2e47..415bc20cf50 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -361,7 +361,10 @@ The parsed header value:
(setq content-transfer-encoding nil))
((string= content-transfer-encoding "8bit")
;; FIXME: Is this the correct way?
- (set-buffer-multibyte nil)))
+ ;; No, of course not, it just means there's no decoding to do.
+ ;; (set-buffer-multibyte nil)
+ (setq content-transfer-encoding nil)
+ ))
;; Inline stuff requires work. Attachments are handled by the bulk
;; handler.
(if (string= "inline" (car content-disposition))
diff --git a/lisp/net/tramp-imap.el b/lisp/net/tramp-imap.el
index da75e2307ca..6f20d527713 100644
--- a/lisp/net/tramp-imap.el
+++ b/lisp/net/tramp-imap.el
@@ -55,13 +55,23 @@
(require 'assoc)
(require 'tramp)
(require 'tramp-compat)
-(require 'message)
-(require 'imap-hash)
-(require 'epa)
+
(autoload 'auth-source-user-or-password "auth-source")
+(autoload 'epg-context-operation "epg")
+(autoload 'epg-context-set-armor "epg")
+(autoload 'epg-context-set-passphrase-callback "epg")
+(autoload 'epg-context-set-progress-callback "epg")
+(autoload 'epg-decrypt-string "epg")
+(autoload 'epg-encrypt-string "epg")
+(autoload 'imap-hash-get "imap-hash")
+(autoload 'imap-hash-make "imap-hash")
+(autoload 'imap-hash-map "imap-hash")
+(autoload 'imap-hash-put "imap-hash")
+(autoload 'imap-hash-rem "imap-hash")
;; We use the additional header "X-Size" for encoding the size of a file.
-(add-to-list 'imap-hash-headers 'X-Size 'append)
+(eval-after-load "imap-hash"
+ '(add-to-list 'imap-hash-headers 'X-Size 'append))
;; Define Tramp IMAP method ...
(defconst tramp-imap-method "imap"
@@ -662,7 +672,8 @@ KEY-ID can be 'SYM or 'PIN among others."
(read-passwd
(if (eq key-id 'PIN)
"Tramp-IMAP passphrase for PIN: "
- (let ((entry (assoc key-id epg-user-id-alist)))
+ (let ((entry (assoc key-id
+ (symbol-value 'epg-user-id-alist))))
(if entry
(format "Tramp-IMAP passphrase for %s %s: "
key-id (cdr entry))
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 9d176a1fd3c..e9051f0a435 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -61,6 +61,13 @@
:group 'tramp
:type 'string)
+(defcustom tramp-smb-conf "/dev/null"
+ "*Path of the smb.conf file.
+If it is nil, no smb.conf will be added to the `tramp-smb-program'
+call, letting the SMB client use the default one."
+ :group 'tramp
+ :type '(choice (const nil) (file :must-match t)))
+
(defvar tramp-smb-version nil
"*Version string of the SMB client.")
@@ -1281,7 +1288,8 @@ connection if a previous connection has died for some reason."
(when domain (setq args (append args (list "-W" domain))))
(when port (setq args (append args (list "-p" port))))
- (setq args (append args (list "-s" "/dev/null")))
+ (when tramp-smb-conf
+ (setq args (append args (list "-s" tramp-smb-conf))))
;; OK, let's go.
(tramp-message
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 3694de23f88..a08e31e2016 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -257,7 +257,7 @@ Note that indentation is calculated only if `ada-indent-comment-as-code' is t.
For instance:
A := 1; -- A multi-line comment
- -- aligned if ada-indent-align-comments is t"
+ -- aligned if `ada-indent-align-comments' is t"
:type 'boolean :group 'ada)
(defcustom ada-indent-comment-as-code t
@@ -4163,7 +4163,7 @@ Return nil if the private is part of the package name, as in
(defun ada-in-paramlist-p ()
- "Return t if point is inside a parameter-list."
+ "Return t if point is inside the parameter-list of a declaration, but not a subprogram call or aggregate."
(save-excursion
(and
(ada-search-ignore-string-comment "(\\|)" t nil t)
@@ -4194,13 +4194,13 @@ Return nil if the private is part of the package name, as in
;; right keyword two words before parenthesis ?
;; Type is in this list because of discriminants
+ ;; pragma is not, because the syntax is that of a subprogram call.
(looking-at (eval-when-compile
(concat "\\<\\("
"procedure\\|function\\|body\\|"
"task\\|entry\\|accept\\|"
"access[ \t]+procedure\\|"
"access[ \t]+function\\|"
- "pragma\\|"
"type\\)\\>"))))))
(defun ada-search-ignore-complex-boolean (regexp backwardp)
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 0e6358aeee1..9d0af1d53ce 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -2996,9 +2996,11 @@ comment at the start of cc-engine.el for more info."
;; containing point. We can then call `c-invalidate-state-cache-1' without
;; worrying further about macros and template delimiters.
(c-with-<->-as-parens-suppressed
- (if c-state-old-cpp-beg
+ (if (and c-state-old-cpp-beg
+ (< c-state-old-cpp-beg here))
(c-with-all-but-one-cpps-commented-out
- c-state-old-cpp-beg c-state-old-cpp-end
+ c-state-old-cpp-beg
+ (min c-state-old-cpp-end here)
(c-invalidate-state-cache-1 here))
(c-with-cpps-commented-out
(c-invalidate-state-cache-1 here)))))
@@ -3029,8 +3031,9 @@ comment at the start of cc-engine.el for more info."
(c-parse-state-1))
(c-with-cpps-commented-out
(c-parse-state-1))))
- (setq c-state-old-cpp-beg here-cpp-beg
- c-state-old-cpp-end here-cpp-end))))
+ (setq c-state-old-cpp-beg (and here-cpp-beg (copy-marker here-cpp-beg t))
+ c-state-old-cpp-end (and here-cpp-end (copy-marker here-cpp-end t)))
+ )))
;; Debug tool to catch cache inconsistencies. This is called from
;; 000tests.el.
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 94124ad54f0..a6354eff998 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -45,7 +45,7 @@
;; `forward-into-nomenclature' should be done separately, since it's
;; not specific to Python, and I've installed a minor mode to do the
;; job properly in Emacs 23. [CC mode 5.31 contains an incompatible
-;; feature, `c-subword-mode' which is intended to have a similar
+;; feature, `subword-mode' which is intended to have a similar
;; effect, but actually only affects word-oriented keybindings.]
;; Other things seem more natural or canonical here, e.g. the
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 203c538609f..d881e6fcc7d 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -462,6 +462,7 @@
(set-keymap-parent input-decode-map map)))
(xterm-register-default-colors)
+ (tty-set-up-initial-frame-faces)
;; Try to turn on the modifyOtherKeys feature on modern xterms.
;; When it is turned on many more key bindings work: things like
@@ -471,6 +472,7 @@
(let ((coding-system-for-read 'binary)
(chr nil)
(str nil)
+ (recompute-faces nil)
version)
;; Pending input can be mistakenly returned by the calls to
;; read-event below. Discard it.
@@ -502,10 +504,11 @@
(while (not (equal (setq chr (read-event nil nil 2)) ?\\))
(setq str (concat str (string chr))))
(when (string-match "11;rgb:\\([a-f0-9]+\\)/\\([a-f0-9]+\\)/\\([a-f0-9]+\\)" str)
- (xterm-set-background-mode
- (string-to-number (match-string 1 str) 16)
- (string-to-number (match-string 2 str) 16)
- (string-to-number (match-string 3 str) 16))))))
+ (setq recompute-faces
+ (xterm-maybe-set-dark-background-mode
+ (string-to-number (match-string 1 str) 16)
+ (string-to-number (match-string 2 str) 16)
+ (string-to-number (match-string 3 str) 16)))))))
;; NUMBER2 is the xterm version number, look for something
;; greater than 216, the version when modifyOtherKeys was
;; introduced.
@@ -520,10 +523,16 @@
;; need to deal with modify-other-keys.
(push (frame-terminal (selected-frame))
xterm-modify-other-keys-terminal-list)
- (xterm-turn-on-modify-other-keys))))))
+ (xterm-turn-on-modify-other-keys))
- ;; This recomputes all the default faces given the colors we've just set up.
- (tty-set-up-initial-frame-faces)
+ ;; Recompute faces here in case the background mode was
+ ;; set to dark. We used to call
+ ;; `tty-set-up-initial-frame-faces' only once, but that
+ ;; caused the light background faces to be computed
+ ;; incorrectly. See:
+ ;; http://permalink.gmane.org/gmane.emacs.devel/119627
+ (when recompute-faces
+ (tty-set-up-initial-frame-faces))))))
(run-hooks 'terminal-init-xterm-hook))
@@ -666,11 +675,13 @@ versions of xterm."
(delq terminal xterm-modify-other-keys-terminal-list))
(send-string-to-terminal "\e[>4m" terminal)))
-(defun xterm-set-background-mode (redc greenc bluec)
+(defun xterm-maybe-set-dark-background-mode (redc greenc bluec)
;; Use the heuristic in `frame-set-background-mode' to decide if a
;; frame is dark.
(when (< (+ redc greenc bluec) (* .6 (+ 65535 65535 65535)))
- (set-terminal-parameter nil 'background-mode 'dark)))
+ (setq xterm-background-mode-changed t)
+ (set-terminal-parameter nil 'background-mode 'dark)
+ t))
;; arch-tag: 12e7ebdd-1e6c-4b25-b0f9-35ace25e855a
;;; xterm.el ends here
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 8d32f7242b7..2a8c6ebe25b 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,7 @@
+2010-01-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * url-util.el: Require url-vars (Bug#5459).
+
2009-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
* url-parse.el (url-generic-parse-url): Bind deactivate-mark.
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index 8a9cc01e1f3..c0b2595a6e0 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -26,6 +26,7 @@
;;; Code:
(require 'url-parse)
+(require 'url-vars)
(eval-when-compile (require 'cl))
(autoload 'timezone-parse-date "timezone")
(autoload 'timezone-make-date-arpa-standard "timezone")
diff --git a/lisp/vc-annotate.el b/lisp/vc-annotate.el
index 9f8daad0fde..71839443553 100644
--- a/lisp/vc-annotate.el
+++ b/lisp/vc-annotate.el
@@ -447,7 +447,8 @@ Return a cons (REV . FILENAME)."
(let ((rev-at-line (vc-annotate-extract-revision-at-line)))
(if (not rev-at-line)
(message "Cannot extract revision number from the current line")
- (if (equal (car rev-at-line) vc-annotate-parent-rev)
+ (if (and (equal (car rev-at-line) vc-annotate-parent-rev)
+ (string= (cdr rev-at-line) vc-annotate-parent-file))
(message "Already at revision %s" rev-at-line)
(vc-annotate-warp-revision (car rev-at-line) (cdr rev-at-line)))))))
diff --git a/lisp/vc-bzr.el b/lisp/vc-bzr.el
index d04c783ca32..8861fef0388 100644
--- a/lisp/vc-bzr.el
+++ b/lisp/vc-bzr.el
@@ -487,7 +487,7 @@ REV non-nil gets an error."
(set (make-local-variable 'log-view-file-re) "\\`a\\`")
(set (make-local-variable 'log-view-message-re)
(if vc-short-log
- "^ *\\([0-9.]+\\) \\(.*?\\)[ \t]+\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\)\\( \\[merge\\]\\)?"
+ "^ *\\([0-9.]+\\): \\(.*?\\)[ \t]+\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\)\\( \\[merge\\]\\)?"
"^ *\\(?:revno: \\([0-9.]+\\)\\|merged: .+\\)"))
(set (make-local-variable 'log-view-font-lock-keywords)
;; log-view-font-lock-keywords is careful to use the buffer-local
@@ -519,7 +519,7 @@ REV non-nil gets an error."
(with-current-buffer buffer
(apply 'vc-bzr-command "log" buffer 'async files
(append
- (when shortlog '("--short"))
+ (when shortlog '("--line"))
(when start-revision (list (format "-r..%s" start-revision)))
(when limit (list "-l" (format "%s" limit)))
(if (stringp vc-bzr-log-switches)
@@ -898,6 +898,19 @@ stream. Standard error output is discarded."
(interactive "e")
(vc-dir-at-event e (popup-menu vc-bzr-shelve-menu-map e)))
+(defun vc-bzr-revision-table (files)
+ (let ((vc-bzr-revisions '())
+ (default-directory (file-name-directory (car files))))
+ (with-temp-buffer
+ (vc-bzr-command "log" t 0 files "--line")
+ (let ((start (point-min))
+ (loglines (buffer-substring-no-properties (point-min) (point-max))))
+ (while (string-match "^\\([0-9]+\\):" loglines)
+ (push (match-string 1 loglines) vc-bzr-revisions)
+ (setq start (+ start (match-end 0)))
+ (setq loglines (buffer-substring-no-properties start (point-max))))))
+ vc-bzr-revisions))
+
;;; Revision completion
(eval-and-compile
diff --git a/lisp/vc-git.el b/lisp/vc-git.el
index 52482d9ff4b..0d8e6307d6e 100644
--- a/lisp/vc-git.el
+++ b/lisp/vc-git.el
@@ -118,13 +118,6 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
:version "23.1"
:group 'vc)
-(defcustom vc-git-add-signoff nil
- "Add a Signed-off-by line when committing."
- :type 'boolean
- :version "23.2"
- :group 'vc)
-
-
(defvar git-commits-coding-system 'utf-8
"Default coding system for git commits.")
@@ -388,7 +381,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
(vc-git-command (current-buffer) 'async files "ls-files" "-z" "-o" "-i"
"--directory" "--no-empty-directory" "--exclude-standard" "--"))
('diff-index
- (vc-git-command (current-buffer) 'async files "diff-index" "-z" "-M" "HEAD" "--")))
+ (vc-git-command (current-buffer) 'async files "diff-index" "--relative" "-z" "-M" "HEAD" "--")))
(vc-exec-after
`(vc-git-after-dir-status-stage (quote ,stage) (quote ,files) (quote ,update-function))))
@@ -515,7 +508,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
(defun vc-git-checkin (files rev comment)
(let ((coding-system-for-write git-commits-coding-system))
(vc-git-command nil 0 files "commit"
- (if vc-git-add-signoff "-s") "-m" comment "--only" "--")))
+ "-m" comment "--only" "--")))
(defun vc-git-find-revision (file rev buffer)
(let* (process-file-side-effects
@@ -766,10 +759,6 @@ or BRANCH^ (where \"^\" can be repeated)."
(define-key map [git-ss]
'(menu-item "Show Stash..." vc-git-stash-show
:help "Show stash contents"))
- (define-key map [git-sig]
- '(menu-item "Add Signed-off-by on commit" vc-git-toggle-signoff
- :help "Add Add Signed-off-by when commiting (i.e. add the -s flag)"
- :button (:toggle . vc-git-add-signoff)))
map))
(defun vc-git-extra-menu () vc-git-extra-menu-map)
@@ -779,10 +768,6 @@ or BRANCH^ (where \"^\" can be repeated)."
(defun vc-git-root (file)
(vc-find-root file ".git"))
-(defun vc-git-toggle-signoff ()
- (interactive)
- (setq vc-git-add-signoff (not vc-git-add-signoff)))
-
;; Derived from `lgrep'.
(defun vc-git-grep (regexp &optional files dir)
"Run git grep, searching for REGEXP in FILES in directory DIR.
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 60e3619c4b8..b46561428ee 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -89,6 +89,8 @@ An empty list disables VC altogether."
:type '(repeat directory)
:group 'vc)
+(make-obsolete 'vc-path "should not be necessary anymore." "23.2")
+
(defcustom vc-make-backup-files nil
"If non-nil, backups of registered files are made as with other files.
If nil (the default), files covered by version control don't get backups."
diff --git a/src/ChangeLog b/src/ChangeLog
index e2dbd939b6f..19254f7186e 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,56 @@
+2010-01-27 Kenichi Handa <handa@m17n.org>
+
+ * regex.c (analyse_first): Fix setting of fastmap for unibyte
+ pattern string (Bug#4209).
+
+2010-01-27 David De La Harpe Golden <david@harpegolden.net>
+
+ * fileio.c (Frename_file): Call copy-directory and
+ delete-directory for directories, in order to handle cross-device
+ renaming (Bug#3353).
+
+2010-01-25 Jan Djärv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_create_frame): If frame height is too big, try
+ sizes 24 and 10. Bug #3643.
+
+2010-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Try and fix bug#788, hopefully for real this time.
+ * keymap.c (shadow_lookup): Add `remap' arg.
+ (describe_map, describe_vector): Update calls to shadow_lookup.
+ (Fwhere_is_internal): Fix up handling of `remapped_sequences' and
+ `remapped' so this flag is applicable to `sequence'. Be careful to
+ perform remapping during shadow_lookup check of remapped_sequences.
+
+2010-01-24 Eric Bélanger <snowmaniscool@gmail.com> (tiny change)
+
+ * image.c (png_load): Use png_sig_cmp instead of the obsolete
+ png_check_sig, which has been removed in libpng 1.4.
+
+2010-01-23 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * filelock.c: Include utmp.h only when HAVE_UTMP_H (FreeBSD 9.x
+ lacks this header file).
+
+2010-01-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (draw_glyphs): Update `start' for left_overwritten case
+ as in Emacs 22.
+
+2010-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * lisp.h (make_pure_string): String pointer arg now points to const.
+
+ * alloc.c (find_string_data_in_pure, make_pure_string): String pointer
+ args now point to const.
+
+2010-01-22 Eli Zaretskii <eliz@gnu.org>
+
+ * lread.c (Fload): Don't treat files without .elc extension as
+ byte-compiled if they are ``magic'', i.e. `openp' returned -2 for
+ them. (bug#5303)
+
2010-01-20 Kenichi Handa <handa@m17n.org>
* coding.c (consume_chars): If ! multibyte and the encoder is ccl,
@@ -9281,7 +9334,7 @@
(syms_of_xterm): Don't declare it any more.
(x_draw_glyph_string): Adjust to the new name.
-2008-06-10 David De La Harpe Golden <david@harpegolden.net> (tiny change)
+2008-06-10 David De La Harpe Golden <david@harpegolden.net>
* xterm.c (x_underline_minimum_display_offset): New var.
(x_draw_glyph_string): Use it.
diff --git a/src/alloc.c b/src/alloc.c
index 3c48f8762f8..9a935cc8952 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4725,11 +4725,11 @@ check_pure_size ()
static char *
find_string_data_in_pure (data, nbytes)
- char *data;
+ const char *data;
int nbytes;
{
int i, skip, bm_skip[256], last_char_skip, infinity, start, start_max;
- unsigned char *p;
+ const unsigned char *p;
char *non_lisp_beg;
if (pure_bytes_used_non_lisp < nbytes + 1)
@@ -4740,7 +4740,7 @@ find_string_data_in_pure (data, nbytes)
for (i = 0; i < 256; i++)
bm_skip[i] = skip;
- p = (unsigned char *) data;
+ p = (const unsigned char *) data;
while (--skip > 0)
bm_skip[*p++] = skip;
@@ -4754,7 +4754,7 @@ find_string_data_in_pure (data, nbytes)
infinity = pure_bytes_used_non_lisp + 1;
bm_skip['\0'] = infinity;
- p = (unsigned char *) non_lisp_beg + nbytes;
+ p = (const unsigned char *) non_lisp_beg + nbytes;
start = 0;
do
{
@@ -4796,7 +4796,7 @@ find_string_data_in_pure (data, nbytes)
Lisp_Object
make_pure_string (data, nchars, nbytes, multibyte)
- char *data;
+ const char *data;
int nchars, nbytes;
int multibyte;
{
diff --git a/src/fileio.c b/src/fileio.c
index d6cb814641b..36eaf7db533 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -215,6 +215,12 @@ Lisp_Object Qdelete_by_moving_to_trash;
/* Lisp function for moving files to trash. */
Lisp_Object Qmove_file_to_trash;
+/* Lisp function for recursively copying directories. */
+Lisp_Object Qcopy_directory;
+
+/* Lisp function for recursively deleting directories. */
+Lisp_Object Qdelete_directory;
+
extern Lisp_Object Vuser_login_name;
#ifdef WINDOWSNT
@@ -2241,7 +2247,11 @@ This is what happens in interactive use with M-x. */)
&& (NILP (Fstring_equal (Fdowncase (file), Fdowncase (newname))))
#endif
)
- newname = Fexpand_file_name (Ffile_name_nondirectory (file), newname);
+ {
+ Lisp_Object fname = NILP (Ffile_directory_p (file))
+ ? file : Fdirectory_file_name (file);
+ newname = Fexpand_file_name (Ffile_name_nondirectory (fname), newname);
+ }
else
newname = Fexpand_file_name (newname, Qnil);
@@ -2279,15 +2289,21 @@ This is what happens in interactive use with M-x. */)
NILP (ok_if_already_exists) ? Qnil : Qt);
else
#endif
+ if (Ffile_directory_p (file))
+ call4 (Qcopy_directory, file, newname, Qt, Qnil);
+ else
+ /* We have already prompted if it was an integer, so don't
+ have copy-file prompt again. */
Fcopy_file (file, newname,
- /* We have already prompted if it was an integer,
- so don't have copy-file prompt again. */
NILP (ok_if_already_exists) ? Qnil : Qt,
Qt, Qt);
count = SPECPDL_INDEX ();
specbind (Qdelete_by_moving_to_trash, Qnil);
- Fdelete_file (file);
+ if (Ffile_directory_p (file))
+ call2 (Qdelete_directory, file, Qt);
+ else
+ Fdelete_file (file);
unbind_to (count, Qnil);
}
else
@@ -5727,6 +5743,10 @@ When non-nil, the function `move-file-to-trash' will be used by
Qdelete_by_moving_to_trash = intern_c_string ("delete-by-moving-to-trash");
Qmove_file_to_trash = intern_c_string ("move-file-to-trash");
staticpro (&Qmove_file_to_trash);
+ Qcopy_directory = intern_c_string ("copy-directory");
+ staticpro (&Qcopy_directory);
+ Qdelete_directory = intern_c_string ("delete-directory");
+ staticpro (&Qdelete_directory);
defsubr (&Sfind_file_name_handler);
defsubr (&Sfile_name_directory);
diff --git a/src/filelock.c b/src/filelock.c
index 3c92d495060..7c69ea954fc 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -63,7 +63,9 @@ Lisp_Object Vtemporary_file_directory;
#ifdef CLASH_DETECTION
+#ifdef HAVE_UTMP_H
#include <utmp.h>
+#endif
#if !defined (S_ISLNK) && defined (S_IFLNK)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
diff --git a/src/image.c b/src/image.c
index 9c11f466807..1265b900c6c 100644
--- a/src/image.c
+++ b/src/image.c
@@ -33,7 +33,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#else
# include <png.h>
#endif
-#endif
+#endif
#include <setjmp.h>
@@ -3051,7 +3051,7 @@ xbm_load (f, img)
int nbytes, i;
/* Windows mono bitmaps are reversed compared with X. */
invertedBits = bits;
- nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR
+ nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR
* img->height;
bits = (char *) alloca(nbytes);
for (i = 0; i < nbytes; i++)
@@ -5559,7 +5559,7 @@ png_image_p (object)
/* PNG library details. */
DEF_IMGLIB_FN (png_get_io_ptr);
-DEF_IMGLIB_FN (png_check_sig);
+DEF_IMGLIB_FN (png_sig_cmp);
DEF_IMGLIB_FN (png_create_read_struct);
DEF_IMGLIB_FN (png_create_info_struct);
DEF_IMGLIB_FN (png_destroy_read_struct);
@@ -5590,7 +5590,7 @@ init_png_functions (Lisp_Object libraries)
return 0;
LOAD_IMGLIB_FN (library, png_get_io_ptr);
- LOAD_IMGLIB_FN (library, png_check_sig);
+ LOAD_IMGLIB_FN (library, png_sig_cmp);
LOAD_IMGLIB_FN (library, png_create_read_struct);
LOAD_IMGLIB_FN (library, png_create_info_struct);
LOAD_IMGLIB_FN (library, png_destroy_read_struct);
@@ -5615,7 +5615,7 @@ init_png_functions (Lisp_Object libraries)
#else
#define fn_png_get_io_ptr png_get_io_ptr
-#define fn_png_check_sig png_check_sig
+#define fn_png_sig_cmp png_sig_cmp
#define fn_png_create_read_struct png_create_read_struct
#define fn_png_create_info_struct png_create_info_struct
#define fn_png_destroy_read_struct png_destroy_read_struct
@@ -5762,7 +5762,7 @@ png_load (f, img)
/* Check PNG signature. */
if (fread (sig, 1, sizeof sig, fp) != sizeof sig
- || !fn_png_check_sig (sig, sizeof sig))
+ || fn_png_sig_cmp (sig, 0, sizeof sig))
{
image_error ("Not a PNG file: `%s'", file, Qnil);
UNGCPRO;
@@ -5779,7 +5779,7 @@ png_load (f, img)
/* Check PNG signature. */
if (tbr.len < sizeof sig
- || !fn_png_check_sig (tbr.bytes, sizeof sig))
+ || fn_png_sig_cmp (tbr.bytes, 0, sizeof sig))
{
image_error ("Not a PNG image: `%s'", img->spec, Qnil);
UNGCPRO;
diff --git a/src/keymap.c b/src/keymap.c
index 17666c7efcc..98774d5d685 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -2650,11 +2650,13 @@ static void where_is_internal_1 P_ ((Lisp_Object key, Lisp_Object binding,
Lisp_Object args, void *data));
/* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map.
- Returns the first non-nil binding found in any of those maps. */
+ Returns the first non-nil binding found in any of those maps.
+ If REMAP is true, pass the result of the lookup through command
+ remapping before returning it. */
static Lisp_Object
-shadow_lookup (shadow, key, flag)
- Lisp_Object shadow, key, flag;
+shadow_lookup (Lisp_Object shadow, Lisp_Object key, Lisp_Object flag,
+ int remap)
{
Lisp_Object tail, value;
@@ -2669,7 +2671,15 @@ shadow_lookup (shadow, key, flag)
return Qnil;
}
else if (!NILP (value))
- return value;
+ {
+ Lisp_Object remapping;
+ if (remap && SYMBOLP (value)
+ && (remapping = Fcommand_remapping (value, Qnil, shadow),
+ !NILP (remapping)))
+ return remapping;
+ else
+ return value;
+ }
}
return Qnil;
}
@@ -2860,30 +2870,30 @@ remapped command in the returned list. */)
{
/* We have a list of advertized bindings. */
while (CONSP (tem))
- if (EQ (shadow_lookup (keymaps, XCAR (tem), Qnil), definition))
+ if (EQ (shadow_lookup (keymaps, XCAR (tem), Qnil, 0), definition))
return XCAR (tem);
else
tem = XCDR (tem);
- if (EQ (shadow_lookup (keymaps, tem, Qnil), definition))
+ if (EQ (shadow_lookup (keymaps, tem, Qnil, 0), definition))
return tem;
}
sequences = Freverse (where_is_internal (definition, keymaps,
!NILP (noindirect), nomenus));
- while (CONSP (sequences))
+ while (CONSP (sequences)
+ /* If we're at the end of the `sequences' list and we haven't
+ considered remapped sequences yet, copy them over and
+ process them. */
+ || (!remapped && (sequences = remapped_sequences,
+ remapped = 1),
+ CONSP (sequences)))
{
Lisp_Object sequence, function;
sequence = XCAR (sequences);
sequences = XCDR (sequences);
- if (NILP (sequences) && !remapped)
- {
- sequences = remapped_sequences;
- remapped = 1;
- }
-
/* Verify that this key binding is not shadowed by another
binding for the same key, before we say it exists.
@@ -2893,7 +2903,8 @@ remapped command in the returned list. */)
Either nil or number as value from Flookup_key
means undefined. */
- if (!EQ (shadow_lookup (keymaps, sequence, Qnil), definition))
+ if (!EQ (shadow_lookup (keymaps, sequence, Qnil, remapped),
+ definition))
continue;
/* If the current sequence is a command remapping with
@@ -3506,7 +3517,7 @@ describe_map (map, prefix, elt_describer, partial, shadow,
ASET (kludge, 0, event);
if (!NILP (shadow))
{
- tem = shadow_lookup (shadow, kludge, Qt);
+ tem = shadow_lookup (shadow, kludge, Qt, 0);
if (!NILP (tem))
{
/* If both bindings are keymaps, this key is a prefix key,
@@ -3776,7 +3787,7 @@ describe_vector (vector, prefix, args, elt_describer,
{
Lisp_Object tem;
- tem = shadow_lookup (shadow, kludge, Qt);
+ tem = shadow_lookup (shadow, kludge, Qt, 0);
if (!NILP (tem))
{
diff --git a/src/lisp.h b/src/lisp.h
index 5ea0303976d..7032a3f48f4 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2686,7 +2686,7 @@ extern Lisp_Object make_uninit_multibyte_string P_ ((int, int));
extern Lisp_Object make_string_from_bytes P_ ((const char *, int, int));
extern Lisp_Object make_specified_string P_ ((const char *, int, int, int));
EXFUN (Fpurecopy, 1);
-extern Lisp_Object make_pure_string P_ ((char *, int, int, int));
+extern Lisp_Object make_pure_string P_ ((const char *, int, int, int));
extern Lisp_Object make_pure_c_string (const char *data);
extern Lisp_Object pure_cons P_ ((Lisp_Object, Lisp_Object));
extern Lisp_Object make_pure_vector P_ ((EMACS_INT));
diff --git a/src/lread.c b/src/lread.c
index db425b82299..ba9d5378104 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1155,7 +1155,7 @@ Return t if the file exists and loads successfully. */)
if (!bcmp (SDATA (found) + SBYTES (found) - 4,
".elc", 4)
- || (version = safe_to_load_p (fd)) > 0)
+ || (fd >= 0 && (version = safe_to_load_p (fd)) > 0))
/* Load .elc files directly, but not when they are
remote and have no handler! */
{
diff --git a/src/regex.c b/src/regex.c
index 0dbfa5971b3..bb921a5b519 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -4083,8 +4083,7 @@ analyse_first (p, pend, fastmap, multibyte)
the corresponding multibyte character. */
int c = RE_CHAR_TO_MULTIBYTE (p[1]);
- if (! CHAR_BYTE8_P (c))
- fastmap[CHAR_LEADING_CODE (c)] = 1;
+ fastmap[CHAR_LEADING_CODE (c)] = 1;
}
}
break;
diff --git a/src/xdisp.c b/src/xdisp.c
index 7d43f2d8bef..8e356224c8a 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20401,6 +20401,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps)
j = i;
BUILD_GLYPH_STRINGS (j, start, h, t,
overlap_hl, dummy_x, last_x);
+ start = i;
compute_overhangs_and_x (t, head->x, 1);
prepend_glyph_string_lists (&head, &tail, h, t);
clip_head = head;
@@ -20450,6 +20451,8 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps)
BUILD_GLYPH_STRINGS (end, i, h, t,
overlap_hl, x, last_x);
+ /* Because BUILD_GLYPH_STRINGS updates the first argument,
+ we don't have `end = i;' here. */
compute_overhangs_and_x (h, tail->x + tail->width, 0);
append_glyph_string_lists (&head, &tail, h, t);
clip_tail = tail;
diff --git a/src/xfns.c b/src/xfns.c
index 6f18e4e813a..905ed9c576a 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3518,27 +3518,35 @@ This function is an internal primitive--use `make-frame' instead. */)
window_prompting = x_figure_window_size (f, parms, 1);
/* Don't make height higher than display height unless the user asked
- for it. */
+ for it. Try sizes 24 and 10 if current is too large. */
height = FRAME_LINES (f);
tem = x_get_arg (dpyinfo, parms, Qheight, 0, 0, RES_TYPE_NUMBER);
if (EQ (tem, Qunbound))
{
- int ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f));
+ int h = FRAME_LINES (f) + FRAME_TOOL_BAR_LINES (f)
+ + FRAME_MENU_BAR_LINES (f) + 2;
+ int ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, h);
int dph = DisplayHeight (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f));
+ static int tryheight[] = { 24, 10, 0 } ;
+ int i;
+
+ ph += (FRAME_EXTERNAL_TOOL_BAR (f) ? 32 : 0) /* Gtk toolbar size */
+ + (FRAME_EXTERNAL_MENU_BAR (f) ? 24 : 0); /* Arbitrary */
+
/* Some desktops have fixed menus above and/or panels below. Try to
figure out the usable size we have for emacs. */
current_desktop = x_get_current_desktop (f);
x_get_desktop_workarea (f, current_desktop, &deskw, &deskh);
if (deskh > 0 && deskh < dph) dph = deskh;
- if (ph > dph)
+ /* Allow 40 pixels for manager decorations. */
+ for (i = 0; ph+40 > dph && tryheight[i] != 0; ++i)
{
- height = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, dph) -
- FRAME_TOOL_BAR_LINES (f) - FRAME_MENU_BAR_LINES (f);
- if (FRAME_EXTERNAL_TOOL_BAR (f))
- height -= 2; /* We can't know how big it will be. */
- if (FRAME_EXTERNAL_MENU_BAR (f))
- height -= 2; /* We can't know how big it will be. */
+ height = tryheight[i];
+ h = height + FRAME_TOOL_BAR_LINES (f) + FRAME_MENU_BAR_LINES (f) + 2;
+ ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, h)
+ + (FRAME_EXTERNAL_TOOL_BAR (f) ? 32 : 0)
+ + (FRAME_EXTERNAL_MENU_BAR (f) ? 24 : 0);
}
}