Merge changes from emacs-23 branch.
This commit is contained in:
commit
6664fc59a8
24 changed files with 459 additions and 194 deletions
|
@ -1,3 +1,19 @@
|
|||
2010-09-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* cal-xtra.texi (Fancy Diary Display): Emphasize that sort should be
|
||||
the last hook item.
|
||||
|
||||
* calendar.texi (Appointments): Also updated when a diary include file
|
||||
is saved.
|
||||
|
||||
2010-09-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* trouble.texi (Bugs): Update the section intro.
|
||||
(Known Problems): New section.
|
||||
(Checklist): Misc updates. Prefer M-x report-emacs-bug.
|
||||
(Sending Patches): Bug fixes are best as responses to existing bugs.
|
||||
* emacs.texi (Known Problems): Add menu entry for new section.
|
||||
|
||||
2010-09-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* xresources.texi: Untabify.
|
||||
|
|
|
@ -613,7 +613,9 @@ each day's diary entries by their time of day. Here's how:
|
|||
@noindent
|
||||
For each day, this sorts diary entries that begin with a recognizable
|
||||
time of day according to their times. Diary entries without times come
|
||||
first within each day.
|
||||
first within each day. Note how the sort command is placed at the end
|
||||
of the hook list, in case earlier members of the list change the order
|
||||
of the diary entries, or add items.
|
||||
|
||||
@vindex diary-include-string
|
||||
Your main diary file can include other files. This permits a group of
|
||||
|
|
|
@ -1508,7 +1508,14 @@ automatically just after midnight. You can force an update at any
|
|||
time by re-enabling appointment notification. Both these actions also
|
||||
display the day's diary buffer, unless you set
|
||||
@code{appt-display-diary} to @code{nil}. The appointments list is
|
||||
also updated whenever the diary file is saved.
|
||||
also updated whenever the diary file (or a file it includes; see
|
||||
@iftex
|
||||
@inforef{Fancy Diary Display,, emacs-xtra})
|
||||
@end iftex
|
||||
@ifnottex
|
||||
@ref{Fancy Diary Display})
|
||||
@end ifnottex
|
||||
is saved.
|
||||
|
||||
@findex appt-add
|
||||
@findex appt-delete
|
||||
|
|
|
@ -1137,6 +1137,7 @@ Dealing with Emacs Trouble
|
|||
|
||||
Reporting Bugs
|
||||
|
||||
* Known Problems:: How to read about known problems and bugs.
|
||||
* Bug Criteria:: Have you really found a bug?
|
||||
* Understanding Bug Reporting:: How to report a bug effectively.
|
||||
* Checklist:: Steps to follow for a good bug report.
|
||||
|
|
|
@ -409,29 +409,76 @@ say something to the psychotherapist, you must end it by typing
|
|||
@section Reporting Bugs
|
||||
|
||||
@cindex bugs
|
||||
Sometimes you will encounter a bug in Emacs. Although we cannot
|
||||
promise we can or will fix the bug, and we might not even agree that it
|
||||
is a bug, we want to hear about problems you encounter. Often we agree
|
||||
they are bugs and want to fix them.
|
||||
|
||||
To make it possible for us to fix a bug, you must report it. In order
|
||||
to do so effectively, you must know when and how to do it.
|
||||
|
||||
Before reporting a bug, it is a good idea to see if it is already
|
||||
known. You can find the list of known problems in the file
|
||||
@file{etc/PROBLEMS} in the Emacs distribution; type @kbd{C-h C-p} to read
|
||||
it. Some additional user-level problems can be found in @ref{Bugs and
|
||||
problems, , Bugs and problems, efaq, GNU Emacs FAQ}. Looking up your
|
||||
problem in these two documents might provide you with a solution or a
|
||||
work-around, or give you additional information about related issues.
|
||||
If you think you have found a bug in Emacs, please report it. We
|
||||
cannot promise to fix it, or always to agree that it is a bug, but we
|
||||
certainly want to hear about it. The same applies for new features
|
||||
you would like to see added. The following sections will help you to
|
||||
construct an effective bug report.
|
||||
|
||||
@menu
|
||||
* Known Problems:: How to read about known problems and bugs.
|
||||
* Criteria: Bug Criteria. Have you really found a bug?
|
||||
* Understanding Bug Reporting:: How to report a bug effectively.
|
||||
* Checklist:: Steps to follow for a good bug report.
|
||||
* Sending Patches:: How to send a patch for GNU Emacs.
|
||||
@end menu
|
||||
|
||||
@node Known Problems
|
||||
@subsection Reading Existing Bug Reports and Known Problems
|
||||
|
||||
Before reporting a bug, if at all possible please check to see if it
|
||||
is already known about. Indeed, it may already have been fixed in a
|
||||
later release of Emacs, or in the development version. Here is a list
|
||||
of the main places you can read about known issues:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
The @file{etc/PROBLEMS} file in the Emacs distribution; type @kbd{C-h
|
||||
C-p} to read it. This file contains a list of particularly well-known
|
||||
issues that have been encountered in compiling, installing and running
|
||||
Emacs. Often, there are suggestions for workarounds and solutions.
|
||||
|
||||
@item
|
||||
Some additional user-level problems can be found in @ref{Bugs and
|
||||
problems, , Bugs and problems, efaq, GNU Emacs FAQ}.
|
||||
|
||||
@item
|
||||
The @samp{bug-gnu-emacs} mailing list (also available as the newsgroup
|
||||
@samp{gnu.emacs.bug}). This is where you will find most Emacs bug
|
||||
reports. You can read the list archives at
|
||||
@url{http://lists.gnu.org/mailman/listinfo/bug-gnu-emacs}. If you
|
||||
like, you can also subscribe to the list. Be aware that the sole
|
||||
purpose of this list is to provide the Emacs maintainers with
|
||||
information about bugs and feature requests. Reports may contain
|
||||
fairly large amounts of data; spectators should not complain about
|
||||
this.
|
||||
|
||||
@item
|
||||
The bug tracker at @url{http://debbugs.gnu.org}. From early 2008,
|
||||
reports from the @samp{bug-gnu-emacs} list have been sent here. The
|
||||
tracker contains the same information as the mailing list, just in a
|
||||
different format. You may prefer to browse and read reports using the
|
||||
tracker.
|
||||
|
||||
@item
|
||||
The @samp{emacs-pretest-bug} mailing list. This list is no longer
|
||||
used, and is mainly of historical interest. At one time, it was used
|
||||
for bug reports in development (i.e., not yet released) versions of
|
||||
Emacs. You can read the archives for 2003 to mid 2007 at
|
||||
@url{http://lists.gnu.org/archive/html/emacs-pretest-bug/}. From
|
||||
late 2007 to mid 2008, the address was an alias for the
|
||||
@samp{emacs-devel} mailing list. From mid 2008 onwards, it has been
|
||||
an alias for @samp{bug-gnu-emacs}.
|
||||
|
||||
@item
|
||||
The @samp{emacs-devel} mailing list. Sometimes people report bugs to
|
||||
this mailing list. This is not the main purpose of the list, however,
|
||||
and it is much better to send bug reports to the bug list. You should
|
||||
not feel obliged to read this list before reporting a bug.
|
||||
|
||||
@end itemize
|
||||
|
||||
|
||||
@node Bug Criteria
|
||||
@subsection When Is There a Bug
|
||||
|
||||
|
@ -540,56 +587,81 @@ well.
|
|||
@subsection Checklist for Bug Reports
|
||||
|
||||
@cindex reporting bugs
|
||||
The best way to send a bug report is to mail it electronically to the
|
||||
Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}. (If you want to
|
||||
suggest a change as an improvement, use the same address.)
|
||||
|
||||
If you'd like to read the bug reports, you can find them on the
|
||||
newsgroup @samp{gnu.emacs.bug}; keep in mind, however, that as a
|
||||
spectator you should not criticize anything about what you see there.
|
||||
The purpose of bug reports is to give information to the Emacs
|
||||
maintainers. Spectators are welcome only as long as they do not
|
||||
interfere with this. In particular, some bug reports contain fairly
|
||||
large amounts of data; spectators should not complain about this.
|
||||
Before reporting a bug, first try to see if the problem has already
|
||||
been reported (@pxref{Known Problems}).
|
||||
|
||||
Please do not post bug reports using netnews; mail is more reliable
|
||||
than netnews about reporting your correct address, which we may need
|
||||
in order to ask you for more information. If your data is more than
|
||||
500,000 bytes, please don't include it directly in the bug report;
|
||||
instead, offer to send it on request, or make it available by ftp and
|
||||
say where.
|
||||
If you are able to, try the latest release of Emacs to see if the
|
||||
problem has already been fixed. Even better is to try the latest
|
||||
development version. We recognize that this is not easy for some
|
||||
people, so do not feel that you absolutely must do this before making
|
||||
a report.
|
||||
|
||||
@findex report-emacs-bug
|
||||
A convenient way to send a bug report for Emacs is to use the command
|
||||
@kbd{M-x report-emacs-bug}. This sets up a mail buffer (@pxref{Sending
|
||||
Mail}) and automatically inserts @emph{some} of the essential
|
||||
information. However, it cannot supply all the necessary information;
|
||||
you should still read and follow the guidelines below, so you can enter
|
||||
the other crucial information by hand before you send the message.
|
||||
The best way to write a bug report for Emacs is to use the command
|
||||
@kbd{M-x report-emacs-bug}. This sets up a mail buffer
|
||||
(@pxref{Sending Mail}) and automatically inserts @emph{some} of the
|
||||
essential information. However, it cannot supply all the necessary
|
||||
information; you should still read and follow the guidelines below, so
|
||||
you can enter the other crucial information by hand before you send
|
||||
the message. You may feel that some of the information inserted by
|
||||
@kbd{M-x report-emacs-bug} is not relevant, but unless you are
|
||||
absolutely sure it is best to leave it, so that the developers can
|
||||
decide for themselves.
|
||||
|
||||
When you have finished writing your report, type @kbd{C-c C-c} and it
|
||||
will be sent to the Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}.
|
||||
(If you want to suggest an improvement or new feature, use the same
|
||||
address.) If you cannot send mail from inside Emacs, you can copy the
|
||||
text of your report to your normal mail client and send it to that
|
||||
address. Or you can simply send an email to that address describing
|
||||
the problem.
|
||||
|
||||
Your report will be sent to the @samp{bug-gnu-emacs} mailing list, and
|
||||
stored in the tracker at @url{http://debbugs.gnu.org}. Please try to
|
||||
include a valid reply email address, in case we need to ask you for
|
||||
more information about your report. Submissions are moderated, so
|
||||
there may be a delay before your report appears.
|
||||
|
||||
You do not need to know how the @url{http://debbugs.gnu.org} bug
|
||||
tracker works in order to report a bug, but if you want to, you can
|
||||
read the tracker's online documentation to see the various features
|
||||
you can use.
|
||||
|
||||
All mail sent to the @samp{bug-gnu-emacs} mailing list is also
|
||||
gatewayed to the @samp{bug.gnu.emacs} newsgroup. The reverse is also
|
||||
true, but we ask you not to post bug reports via the newsgroup. It
|
||||
can make it much harder to contact you if we need to ask for more
|
||||
information, and it does not integrate well with the bug tracker.
|
||||
|
||||
If your data is more than 500,000 bytes, please don't include it
|
||||
directly in the bug report; instead, offer to send it on request, or
|
||||
make it available by ftp and say where.
|
||||
|
||||
To enable maintainers to investigate a bug, your report
|
||||
should include all these things:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
The version number of Emacs. Without this, we won't know whether there
|
||||
is any point in looking for the bug in the current version of GNU
|
||||
Emacs.
|
||||
The version number of Emacs. Without this, we won't know whether there is any
|
||||
point in looking for the bug in the current version of GNU Emacs.
|
||||
|
||||
You can get the version number by typing @kbd{M-x emacs-version
|
||||
@key{RET}}. If that command does not work, you probably have something
|
||||
other than GNU Emacs, so you will have to report the bug somewhere
|
||||
else.
|
||||
@kbd{M-x report-emacs-bug} includes this information automatically,
|
||||
but if you are not using that command for your report you can get the
|
||||
version number by typing @kbd{M-x emacs-version @key{RET}}. If that
|
||||
command does not work, you probably have something other than GNU
|
||||
Emacs, so you will have to report the bug somewhere else.
|
||||
|
||||
@item
|
||||
The type of machine you are using, and the operating system name and
|
||||
version number. @kbd{M-x emacs-version @key{RET}} provides this
|
||||
information too. Copy its output from the @samp{*Messages*} buffer, so
|
||||
that you get it all and get it accurately.
|
||||
version number (again, automatically included by @kbd{M-x
|
||||
report-emacs-bug}). @kbd{M-x emacs-version @key{RET}} provides this
|
||||
information too. Copy its output from the @samp{*Messages*} buffer,
|
||||
so that you get it all and get it accurately.
|
||||
|
||||
@item
|
||||
The operands given to the @code{configure} command when Emacs was
|
||||
installed.
|
||||
installed (automatically included by @kbd{M-x report-emacs-bug}).
|
||||
|
||||
@item
|
||||
A complete list of any modifications you have made to the Emacs source.
|
||||
|
@ -619,12 +691,15 @@ the last line is terminated, but try telling the bugs that).
|
|||
|
||||
@item
|
||||
The precise commands we need to type to reproduce the bug.
|
||||
If at all possible, give a full recipe for an Emacs started with the
|
||||
@samp{-Q} option (@pxref{Initial Options}). This bypasses your
|
||||
@file{.emacs} customizations.
|
||||
|
||||
@findex open-dribble-file
|
||||
@cindex dribble file
|
||||
@cindex logging keystrokes
|
||||
The easy way to record the input to Emacs precisely is to write a
|
||||
dribble file. To start the file, execute the Lisp expression
|
||||
One way to record the input to Emacs precisely is to write a dribble
|
||||
file. To start the file, execute the Lisp expression
|
||||
|
||||
@example
|
||||
(open-dribble-file "~/dribble")
|
||||
|
@ -735,7 +810,7 @@ Check whether any programs you have loaded into the Lisp world,
|
|||
including your @file{.emacs} file, set any variables that may affect the
|
||||
functioning of Emacs. Also, see whether the problem happens in a
|
||||
freshly started Emacs without loading your @file{.emacs} file (start
|
||||
Emacs with the @code{-q} switch to prevent loading the init file). If
|
||||
Emacs with the @code{-Q} switch to prevent loading the init files). If
|
||||
the problem does @emph{not} occur then, you must report the precise
|
||||
contents of any programs that you must load into the Lisp world in order
|
||||
to cause the problem to occur.
|
||||
|
@ -907,12 +982,10 @@ your best to help.
|
|||
@itemize @bullet
|
||||
@item
|
||||
Send an explanation with your changes of what problem they fix or what
|
||||
improvement they bring about. For a bug fix, just include a copy of the
|
||||
bug report, and explain why the change fixes the bug.
|
||||
|
||||
(Referring to a bug report is not as good as including it, because then
|
||||
we will have to look it up, and we have probably already deleted it if
|
||||
we've already fixed the bug.)
|
||||
improvement they bring about. For a fix for an existing bug, it is
|
||||
best to reply to the relevant discussion on the @samp{bug-gnu-emacs}
|
||||
list, or item in the @url{http://debbugs.gnu.org} tracker. Explain
|
||||
why your change fixes the bug.
|
||||
|
||||
@item
|
||||
Always include a proper bug report for the problem you think you have
|
||||
|
|
|
@ -40,6 +40,8 @@ This can be used in place of the default appt-message-warning-time.
|
|||
|
||||
* Lisp changes in Emacs 23.3
|
||||
|
||||
** The use of unintern without an obarray arg is declared obsolete.
|
||||
|
||||
** New function byte-to-string, like char-to-string but for bytes.
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,72 @@
|
|||
2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/byte-run.el (set-advertised-calling-convention):
|
||||
Add `when' argument. Update callers.
|
||||
|
||||
* subr.el (unintern): Declare the obarray arg mandatory.
|
||||
|
||||
2010-09-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* calendar/diary-lib.el (diary-list-entries-hook, diary-sort-entries):
|
||||
Doc fixes.
|
||||
|
||||
* calendar/diary-lib.el (diary-included-files): New variable.
|
||||
(diary-list-entries): Maybe initialize diary-included-files.
|
||||
(diary-include-other-diary-files): Append to diary-included-files.
|
||||
* calendar/appt.el (appt-update-list): Also check the members of
|
||||
diary-included-files. (Bug#6999)
|
||||
(appt-check): Doc fix.
|
||||
|
||||
2010-09-14 David Reitter <david.reitter@gmail.com>
|
||||
|
||||
* simple.el (line-move-visual): Do not truncate goal column to
|
||||
integer size. (Bug#7020)
|
||||
|
||||
2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* repeat.el (repeat): Allow repeating when the last event is a click.
|
||||
Suggested by Drew Adams (bug#6256).
|
||||
|
||||
2010-09-14 Sascha Wilde <wilde@sha-bang.de>
|
||||
|
||||
* vc/vc-hg.el (vc-hg-state,vc-hg-working-revision):
|
||||
Replace setting HGRCPATH to "" by some less invasive --config options.
|
||||
|
||||
2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* font-lock.el (font-lock-beginning-of-syntax-function):
|
||||
Mark as obsolete.
|
||||
|
||||
2010-09-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* menu-bar.el (menu-bar-options-save): Fix handling of menu-bar
|
||||
and tool-bar modes. (Bug#6211)
|
||||
(menu-bar-mode): Move setting of standard-value after the
|
||||
minor-mode definition, otherwise it seems to have no effect.
|
||||
|
||||
2010-09-14 Masatake YAMATO <yamato@redhat.com>
|
||||
|
||||
* progmodes/antlr-mode.el (antlr-font-lock-additional-keywords):
|
||||
Fix typo. (Bug#6976)
|
||||
|
||||
2010-09-14 Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
|
||||
* whitespace.el: Allow cleaning up blanks without blank
|
||||
visualization (Bug#6651). Adjust help window for
|
||||
whitespace-toggle-options (Bug#6479). Allow to use fill-column
|
||||
instead of whitespace-line-column (from EmacsWiki). New version 13.1.
|
||||
(whitespace-style): Add new value 'face. Adjust docstring.
|
||||
(whitespace-space, whitespace-hspace, whitespace-tab):
|
||||
Adjust foreground property face.
|
||||
(whitespace-line-column): Adjust docstring and type declaration.
|
||||
(whitespace-style-value-list, whitespace-toggle-option-alist)
|
||||
(whitespace-help-text): Adjust const initialization.
|
||||
(whitespace-toggle-options, global-whitespace-toggle-options):
|
||||
Adjust docstring.
|
||||
(whitespace-display-window, whitespace-interactive-char)
|
||||
(whitespace-style-face-p, whitespace-color-on): Adjust code.
|
||||
(whitespace-help-scroll): New fun.
|
||||
|
||||
2010-09-14 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* calendar/time-date.el (format-seconds): Comment fix.
|
||||
|
@ -116,7 +185,7 @@
|
|||
(tramp-get-remote-readlink, tramp-get-remote-trash)
|
||||
(tramp-get-remote-id, tramp-get-remote-uid, tramp-get-remote-gid)
|
||||
(tramp-get-local-uid, tramp-get-local-gid)
|
||||
(tramp-get-inline-compress, tramp-get-inline-coding, ): Move to
|
||||
(tramp-get-inline-compress, tramp-get-inline-coding): Move to
|
||||
tramp-sh.el.
|
||||
(tramp-methods, tramp-default-method-alist)
|
||||
(tramp-default-user-alist, tramp-foreign-file-name-handler-alist):
|
||||
|
|
|
@ -48,8 +48,9 @@
|
|||
;; package is activated. Additionally, the appointments list is
|
||||
;; recreated automatically at 12:01am for those who do not logout
|
||||
;; every day or are programming late. It is also updated when the
|
||||
;; `diary-file' is saved. Calling `appt-check' with an argument (or
|
||||
;; re-enabling the package) forces a re-initialization at any time.
|
||||
;; `diary-file' (or a file it includes) is saved. Calling
|
||||
;; `appt-check' with an argument (or re-enabling the package) forces a
|
||||
;; re-initialization at any time.
|
||||
;;
|
||||
;; In order to add or delete items from today's list, without
|
||||
;; changing the diary file, use `appt-add' and `appt-delete'.
|
||||
|
@ -262,7 +263,7 @@ The variable `appt-audible' controls the audible reminder."
|
|||
"Check for an appointment and update any reminder display.
|
||||
If optional argument FORCE is non-nil, reparse the diary file for
|
||||
appointments. Otherwise the diary file is only parsed once per day,
|
||||
and when saved.
|
||||
or when it (or a file it includes) is saved.
|
||||
|
||||
Note: the time must be the first thing in the line in the diary
|
||||
for a warning to be issued. The format of the time can be either
|
||||
|
@ -346,6 +347,8 @@ displayed in a window:
|
|||
(if d-buff ; diary buffer exists
|
||||
(with-current-buffer d-buff
|
||||
diary-selective-display))))
|
||||
;; FIXME why not using diary-list-entries with
|
||||
;; non-nil LIST-ONLY?
|
||||
(diary)
|
||||
;; If the diary buffer existed before this command,
|
||||
;; restore its display state. Otherwise, kill it.
|
||||
|
@ -643,8 +646,10 @@ hour and minute parts."
|
|||
|
||||
(defun appt-update-list ()
|
||||
"If the current buffer is visiting the diary, update appointments.
|
||||
This function is intended for use with `write-file-functions'."
|
||||
(and (string-equal buffer-file-name (expand-file-name diary-file))
|
||||
This function also acts on any file listed in `diary-included-files'.
|
||||
It is intended for use with `write-file-functions'."
|
||||
(and (member buffer-file-name (append diary-included-files
|
||||
(list (expand-file-name diary-file))))
|
||||
appt-timer
|
||||
(let ((appt-display-diary nil))
|
||||
(appt-check t)))
|
||||
|
|
|
@ -187,11 +187,12 @@ you will probably also want to add `diary-mark-included-diary-files' to
|
|||
|
||||
(setq diary-display-function 'diary-fancy-display)
|
||||
(add-hook 'diary-list-entries-hook 'diary-include-other-diary-files)
|
||||
(add-hook 'diary-list-entries-hook 'diary-sort-entries)
|
||||
(add-hook 'diary-list-entries-hook 'diary-sort-entries t)
|
||||
|
||||
in your `.emacs' file to cause the fancy diary buffer to be displayed with
|
||||
diary entries from various included files, each day's entries sorted into
|
||||
lexicographic order."
|
||||
lexicographic order. Note how the sort function is placed last,
|
||||
so that it can sort the entries included from other files."
|
||||
:type 'hook
|
||||
:options '(diary-include-other-diary-files diary-sort-entries)
|
||||
:group 'diary)
|
||||
|
@ -699,6 +700,10 @@ of the appropriate type."
|
|||
(1+ (calendar-absolute-from-gregorian gdate))))))
|
||||
(goto-char (point-min)))
|
||||
|
||||
(defvar diary-including) ; dynamically bound in diary-include-other-diary-files
|
||||
(defvar diary-included-files nil
|
||||
"List of any diary files included in the last call to `diary-list-entries'.")
|
||||
|
||||
;; FIXME non-greg and list hooks run same number of times?
|
||||
(defun diary-list-entries (date number &optional list-only)
|
||||
"Create and display a buffer containing the relevant lines in `diary-file'.
|
||||
|
@ -743,6 +748,8 @@ LIST-ONLY is non-nil, in which case it just returns the list."
|
|||
(date-string (calendar-date-string date))
|
||||
(diary-buffer (find-buffer-visiting diary-file))
|
||||
diary-entries-list file-glob-attrs)
|
||||
(or (bound-and-true-p diary-including)
|
||||
(setq diary-included-files nil))
|
||||
(message "Preparing diary...")
|
||||
(save-current-buffer
|
||||
(if (not diary-buffer)
|
||||
|
@ -828,11 +835,15 @@ the variable `diary-include-string'."
|
|||
(let ((diary-file (match-string-no-properties 1))
|
||||
(diary-list-entries-hook 'diary-include-other-diary-files)
|
||||
(diary-display-function 'ignore)
|
||||
(diary-including t)
|
||||
diary-hook diary-list-include-blanks)
|
||||
(if (file-exists-p diary-file)
|
||||
(if (file-readable-p diary-file)
|
||||
(unwind-protect
|
||||
(setq diary-entries-list
|
||||
(setq diary-included-files
|
||||
(append diary-included-files
|
||||
(list (expand-file-name diary-file)))
|
||||
diary-entries-list
|
||||
(append diary-entries-list
|
||||
(diary-list-entries original-date number)))
|
||||
(with-current-buffer (find-buffer-visiting diary-file)
|
||||
|
@ -1574,7 +1585,10 @@ be used instead of a colon (:) to separate the hour and minute parts."
|
|||
(string-lessp ts1 ts2)))))))
|
||||
|
||||
(defun diary-sort-entries ()
|
||||
"Sort the list of diary entries by time of day."
|
||||
"Sort the list of diary entries by time of day.
|
||||
If you add this function to `diary-list-entries-hook', it should
|
||||
be the last item in the hook, in case earlier items add diary
|
||||
entries, or change the order."
|
||||
(setq diary-entries-list (sort diary-entries-list 'diary-entry-compare)))
|
||||
|
||||
(define-obsolete-function-alias 'sort-diary-entries 'diary-sort-entries "23.1")
|
||||
|
|
|
@ -108,10 +108,11 @@ The return value of this function is not used."
|
|||
|
||||
(defvar advertised-signature-table (make-hash-table :test 'eq :weakness 'key))
|
||||
|
||||
(defun set-advertised-calling-convention (function signature)
|
||||
(defun set-advertised-calling-convention (function signature when)
|
||||
"Set the advertised SIGNATURE of FUNCTION.
|
||||
This will allow the byte-compiler to warn the programmer when she uses
|
||||
an obsolete calling convention."
|
||||
an obsolete calling convention. WHEN specifies since when the calling
|
||||
convention was modified."
|
||||
(puthash (indirect-function function) signature
|
||||
advertised-signature-table))
|
||||
|
||||
|
@ -132,7 +133,7 @@ was first made obsolete, for example a date or a release number."
|
|||
obsolete-name)
|
||||
(set-advertised-calling-convention
|
||||
;; New code should always provide the `when' argument.
|
||||
'make-obsolete '(obsolete-name current-name when))
|
||||
'make-obsolete '(obsolete-name current-name when) "23.1")
|
||||
|
||||
(defmacro define-obsolete-function-alias (obsolete-name current-name
|
||||
&optional when docstring)
|
||||
|
@ -153,7 +154,7 @@ See the docstrings of `defalias' and `make-obsolete' for more details."
|
|||
(set-advertised-calling-convention
|
||||
;; New code should always provide the `when' argument.
|
||||
'define-obsolete-function-alias
|
||||
'(obsolete-name current-name when &optional docstring))
|
||||
'(obsolete-name current-name when &optional docstring) "23.1")
|
||||
|
||||
(defun make-obsolete-variable (obsolete-name current-name &optional when)
|
||||
"Make the byte-compiler warn that OBSOLETE-NAME is obsolete.
|
||||
|
@ -175,7 +176,7 @@ was first made obsolete, for example a date or a release number."
|
|||
obsolete-name)
|
||||
(set-advertised-calling-convention
|
||||
;; New code should always provide the `when' argument.
|
||||
'make-obsolete-variable '(obsolete-name current-name when))
|
||||
'make-obsolete-variable '(obsolete-name current-name when) "23.1")
|
||||
|
||||
(defmacro define-obsolete-variable-alias (obsolete-name current-name
|
||||
&optional when docstring)
|
||||
|
@ -210,7 +211,7 @@ CURRENT-NAME, if it does not already have them:
|
|||
(set-advertised-calling-convention
|
||||
;; New code should always provide the `when' argument.
|
||||
'define-obsolete-variable-alias
|
||||
'(obsolete-name current-name when &optional docstring))
|
||||
'(obsolete-name current-name when &optional docstring) "23.1")
|
||||
|
||||
;; FIXME This is only defined in this file because the variable- and
|
||||
;; function- versions are too. Unlike those two, this one is not used
|
||||
|
|
|
@ -564,6 +564,8 @@ outside of any comment, string, or sexp. This variable is semi-obsolete;
|
|||
we recommend setting `syntax-begin-function' instead.
|
||||
|
||||
This is normally set via `font-lock-defaults'.")
|
||||
(make-obsolete-variable 'font-lock-beginning-of-syntax-function
|
||||
'syntax-begin-function "23.3")
|
||||
|
||||
(defvar font-lock-mark-block-function nil
|
||||
"*Non-nil means use this function to mark a block of text.
|
||||
|
|
|
@ -664,13 +664,23 @@ by \"Save Options\" in Custom buffers.")
|
|||
;; put on a customized-value property.
|
||||
(dolist (elt '(line-number-mode column-number-mode size-indication-mode
|
||||
cua-mode show-paren-mode transient-mark-mode
|
||||
blink-cursor-mode display-time-mode display-battery-mode))
|
||||
blink-cursor-mode display-time-mode display-battery-mode
|
||||
;; These are set by other functions that don't set
|
||||
;; the customized state. Having them here has the
|
||||
;; side-effect that turning them off via X
|
||||
;; resources acts like having customized them, but
|
||||
;; that seems harmless.
|
||||
menu-bar-mode tool-bar-mode))
|
||||
;; FIXME ? It's a little annoying that running this command
|
||||
;; always loads cua-base, paren, time, and battery, even if they
|
||||
;; have not been customized in any way. (Due to custom-load-symbol.)
|
||||
(and (customize-mark-to-save elt)
|
||||
(setq need-save t)))
|
||||
;; These are set with `customize-set-variable'.
|
||||
(dolist (elt '(scroll-bar-mode
|
||||
debug-on-quit debug-on-error
|
||||
tooltip-mode menu-bar-mode tool-bar-mode
|
||||
;; Somehow this works, when tool-bar and menu-bar don't.
|
||||
tooltip-mode
|
||||
save-place uniquify-buffer-name-style fringe-mode
|
||||
indicate-empty-lines indicate-buffer-boundaries
|
||||
case-fold-search font-use-system-font
|
||||
|
@ -2037,6 +2047,16 @@ turn on menu bars; otherwise, turn off menu bars."
|
|||
(run-with-idle-timer 0 nil 'message
|
||||
"Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear.")))
|
||||
|
||||
;;;###autoload
|
||||
;; (This does not work right unless it comes after the above definition.)
|
||||
;; This comment is taken from tool-bar.el near
|
||||
;; (put 'tool-bar-mode ...)
|
||||
;; We want to pretend the menu bar by standard is on, as this will make
|
||||
;; customize consider disabling the menu bar a customization, and save
|
||||
;; that. We could do this for real by setting :init-value above, but
|
||||
;; that would overwrite disabling the menu bar from X resources.
|
||||
(put 'menu-bar-mode 'standard-value '(t))
|
||||
|
||||
(defun toggle-menu-bar-mode-from-frame (&optional arg)
|
||||
"Toggle menu bar on or off, based on the status of the current frame.
|
||||
See `menu-bar-mode' for more information."
|
||||
|
|
|
@ -951,7 +951,7 @@ group. The string matched by the first group is highlighted with
|
|||
(3 antlr-keyword-face)
|
||||
(4 (if (member (match-string 4) '("Lexer" "Parser" "TreeParser"))
|
||||
antlr-keyword-face
|
||||
type-face)))
|
||||
font-lock-type-face)))
|
||||
(,(lambda (limit)
|
||||
(antlr-re-search-forward
|
||||
"\\<\\(header\\|options\\|tokens\\|exception\\|catch\\|returns\\)\\>"
|
||||
|
|
|
@ -335,7 +335,12 @@ recently executed command not bound to an input event\"."
|
|||
(setq real-last-command 'repeat)
|
||||
(setq repeat-undo-count 1)
|
||||
(unwind-protect
|
||||
(while (eq (read-event) repeat-repeat-char)
|
||||
(while (let ((evt (read-event))) ;FIXME: read-key maybe?
|
||||
;; For clicks, we need to strip the meta-data to
|
||||
;; check the underlying event name.
|
||||
(eq (or (car-safe evt) evt)
|
||||
(or (car-safe repeat-repeat-char)
|
||||
repeat-repeat-char)))
|
||||
(repeat repeat-arg))
|
||||
;; Make sure `repeat-undo-count' is reset.
|
||||
(setq repeat-undo-count nil))
|
||||
|
|
|
@ -4343,7 +4343,7 @@ into account variable-width characters and line continuation."
|
|||
(or (and (= (vertical-motion
|
||||
(cons (or goal-column
|
||||
(if (consp temporary-goal-column)
|
||||
(truncate (car temporary-goal-column))
|
||||
(car temporary-goal-column)
|
||||
temporary-goal-column))
|
||||
arg))
|
||||
arg)
|
||||
|
|
13
lisp/subr.el
13
lisp/subr.el
|
@ -239,7 +239,7 @@ letter but *do not* end with a period. Please follow this convention
|
|||
for the sake of consistency."
|
||||
(while t
|
||||
(signal 'error (list (apply 'format args)))))
|
||||
(set-advertised-calling-convention 'error '(string &rest args))
|
||||
(set-advertised-calling-convention 'error '(string &rest args) "23.1")
|
||||
|
||||
;; We put this here instead of in frame.el so that it's defined even on
|
||||
;; systems where frame.el isn't loaded.
|
||||
|
@ -1039,9 +1039,10 @@ is converted into a string by expressing it in decimal."
|
|||
(make-obsolete 'make-variable-frame-local
|
||||
"explicitly check for a frame-parameter instead." "22.2")
|
||||
(make-obsolete 'interactive-p 'called-interactively-p "23.2")
|
||||
(set-advertised-calling-convention 'called-interactively-p '(kind))
|
||||
(set-advertised-calling-convention 'called-interactively-p '(kind) "23.1")
|
||||
(set-advertised-calling-convention
|
||||
'all-completions '(string collection &optional predicate))
|
||||
'all-completions '(string collection &optional predicate) "23.1")
|
||||
(set-advertised-calling-convention 'unintern '(name obarray) "23.3")
|
||||
|
||||
;;;; Obsolescence declarations for variables, and aliases.
|
||||
|
||||
|
@ -2064,7 +2065,7 @@ floating point support."
|
|||
(setq read (cons t read)))
|
||||
(push read unread-command-events)
|
||||
nil))))))
|
||||
(set-advertised-calling-convention 'sit-for '(seconds &optional nodisp))
|
||||
(set-advertised-calling-convention 'sit-for '(seconds &optional nodisp) "22.1")
|
||||
|
||||
;;; Atomic change groups.
|
||||
|
||||
|
@ -2592,7 +2593,7 @@ discouraged."
|
|||
(start-process name buffer shell-file-name shell-command-switch
|
||||
(mapconcat 'identity args " ")))
|
||||
(set-advertised-calling-convention 'start-process-shell-command
|
||||
'(name buffer command))
|
||||
'(name buffer command) "23.1")
|
||||
|
||||
(defun start-file-process-shell-command (name buffer &rest args)
|
||||
"Start a program in a subprocess. Return the process object for it.
|
||||
|
@ -2603,7 +2604,7 @@ Similar to `start-process-shell-command', but calls `start-file-process'."
|
|||
(if (file-remote-p default-directory) "-c" shell-command-switch)
|
||||
(mapconcat 'identity args " ")))
|
||||
(set-advertised-calling-convention 'start-file-process-shell-command
|
||||
'(name buffer command))
|
||||
'(name buffer command) "23.1")
|
||||
|
||||
(defun call-process-shell-command (command &optional infile buffer display
|
||||
&rest args)
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
2010-09-14 Julien Danjou <julien@danjou.info>
|
||||
|
||||
* url-cache (url-store-in-cache): Make `buff' argument really optional.
|
||||
|
||||
2010-09-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* url-cookie.el (url-cookie-expired-p): Tweak previous change.
|
||||
|
||||
2010-09-14 shawn boles <shawn.boles@gmail.com> (tiny change)
|
||||
|
||||
* url-cookie.el (url-cookie-expired-p): Simplify and fix. (Bug#6957)
|
||||
|
||||
2010-09-11 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* url-cache.el, url-gw.el, url-history.el, url-irc.el, url-util.el:
|
||||
|
|
|
@ -62,14 +62,11 @@ FILE can be created or overwritten."
|
|||
;;;###autoload
|
||||
(defun url-store-in-cache (&optional buff)
|
||||
"Store buffer BUFF in the cache."
|
||||
(if (not (and buff (get-buffer buff)))
|
||||
nil
|
||||
(save-current-buffer
|
||||
(and buff (set-buffer buff))
|
||||
(let* ((fname (url-cache-create-filename (url-view-url t))))
|
||||
(if (url-cache-prepare fname)
|
||||
(let ((coding-system-for-write 'binary))
|
||||
(write-region (point-min) (point-max) fname nil 5)))))))
|
||||
(with-current-buffer (get-buffer (or buff (current-buffer)))
|
||||
(let ((fname (url-cache-create-filename (url-view-url t))))
|
||||
(if (url-cache-prepare fname)
|
||||
(let ((coding-system-for-write 'binary))
|
||||
(write-region (point-min) (point-max) fname nil 5))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun url-is-cached (url)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;;; url-cookie.el --- Netscape Cookie support
|
||||
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2004,
|
||||
;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 1996, 1997, 1998, 1999, 2004, 2005, 2006, 2007, 2008,
|
||||
;; 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
;; Keywords: comm, data, processes, hypermedia
|
||||
|
||||
|
@ -24,7 +24,6 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'timezone)
|
||||
(require 'url-util)
|
||||
(require 'url-parse)
|
||||
(eval-when-compile (require 'cl))
|
||||
|
@ -194,34 +193,9 @@ telling Microsoft that."
|
|||
(setq url-cookie-storage (list (list domain tmp))))))))
|
||||
|
||||
(defun url-cookie-expired-p (cookie)
|
||||
(let* (
|
||||
(exp (url-cookie-expires cookie))
|
||||
(cur-date (and exp (timezone-parse-date (current-time-string))))
|
||||
(exp-date (and exp (timezone-parse-date exp)))
|
||||
(cur-greg (and cur-date (timezone-absolute-from-gregorian
|
||||
(string-to-number (aref cur-date 1))
|
||||
(string-to-number (aref cur-date 2))
|
||||
(string-to-number (aref cur-date 0)))))
|
||||
(exp-greg (and exp (timezone-absolute-from-gregorian
|
||||
(string-to-number (aref exp-date 1))
|
||||
(string-to-number (aref exp-date 2))
|
||||
(string-to-number (aref exp-date 0)))))
|
||||
(diff-in-days (and exp (- cur-greg exp-greg)))
|
||||
)
|
||||
(cond
|
||||
((not exp) nil) ; No expiry == expires at browser quit
|
||||
((< diff-in-days 0) nil) ; Expires sometime after today
|
||||
((> diff-in-days 0) t) ; Expired before today
|
||||
(t ; Expires sometime today, check times
|
||||
(let* ((cur-time (timezone-parse-time (aref cur-date 3)))
|
||||
(exp-time (timezone-parse-time (aref exp-date 3)))
|
||||
(cur-norm (+ (* 360 (string-to-number (aref cur-time 2)))
|
||||
(* 60 (string-to-number (aref cur-time 1)))
|
||||
(* 1 (string-to-number (aref cur-time 0)))))
|
||||
(exp-norm (+ (* 360 (string-to-number (aref exp-time 2)))
|
||||
(* 60 (string-to-number (aref exp-time 1)))
|
||||
(* 1 (string-to-number (aref exp-time 0))))))
|
||||
(> (- cur-norm exp-norm) 1))))))
|
||||
"Return non-nil if COOKIE is expired."
|
||||
(let ((exp (url-cookie-expires cookie)))
|
||||
(and exp (> (float-time) (float-time (date-to-time exp))))))
|
||||
|
||||
(defun url-cookie-retrieve (host &optional localpart secure)
|
||||
"Retrieve all the netscape-style cookies for a specified HOST and LOCALPART."
|
||||
|
|
|
@ -171,10 +171,12 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
|
|||
(let ((process-environment
|
||||
;; Avoid localization of messages so we
|
||||
;; can parse the output.
|
||||
(append (list "TERM=dumb" "LANGUAGE=C" "HGRCPATH=")
|
||||
(append (list "TERM=dumb" "LANGUAGE=C")
|
||||
process-environment)))
|
||||
(process-file
|
||||
"hg" nil t nil
|
||||
"--config" "alias.status=status"
|
||||
"--config" "defaults.status="
|
||||
"status" "-A" (file-relative-name file)))
|
||||
;; Some problem happened. E.g. We can't find an `hg'
|
||||
;; executable.
|
||||
|
@ -199,7 +201,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
|
|||
((status nil)
|
||||
(default-directory (file-name-directory file))
|
||||
;; Avoid localization of messages so we can parse the output.
|
||||
(avoid-local-env (append (list "TERM=dumb" "LANGUAGE=C" "HGRCPATH=")
|
||||
(avoid-local-env (append (list "TERM=dumb" "LANGUAGE=C")
|
||||
process-environment))
|
||||
(out
|
||||
(with-output-to-string
|
||||
|
@ -211,6 +213,8 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches."
|
|||
;; Ignore all errors.
|
||||
(process-file
|
||||
"hg" nil t nil
|
||||
"--config" "alias.parents=parents"
|
||||
"--config" "defaults.parents="
|
||||
"parents" "--template" "{rev}" (file-relative-name file)))
|
||||
;; Some problem happened. E.g. We can't find an `hg'
|
||||
;; executable.
|
||||
|
|
|
@ -1,7 +1,29 @@
|
|||
2010-09-14 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* xterm.c (get_current_vm_state): New function.
|
||||
(do_ewmh_fullscreen): Call get_current_vm_state and compare with
|
||||
want_fullscreen so set_wm_state calls are few (Bug#7013).
|
||||
(x_handle_net_wm_state): Move code to get_current_vm_state and
|
||||
call that function.
|
||||
|
||||
2010-09-14 Courtney Bane <emacs-bugs-7626@cbane.org> (tiny change)
|
||||
|
||||
* term.c (tty_set_terminal_modes): Don't initialize twice (bug#7002).
|
||||
|
||||
2010-09-14 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* coding.c (encode_coding_iso_2022): Don't optimize for ASCII if
|
||||
we may use designation or locking-shift.
|
||||
|
||||
2010-09-14 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* coding.c (detect_coding_emacs_mule): Fix checking of multibyte
|
||||
sequence when the source is multibyte.
|
||||
|
||||
2010-09-14 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* xml.c (Fxml_parse_string, Fxml_parse_string): Revert last
|
||||
change. Don't make first argument optional. Doc fix.
|
||||
* xml.c (Fxml_parse_string, Fxml_parse_string): Revert last change.
|
||||
Don't make first argument optional. Doc fix.
|
||||
|
||||
2010-09-14 Leo <sdl.web@gmail.com> (tiny change)
|
||||
|
||||
|
@ -111,8 +133,8 @@
|
|||
(produce_stretch_glyph): Set it2.char_to_display too before
|
||||
calling x_produce_glyphs.
|
||||
(x_produce_glyphs): Simplify by using the same code for ASCII and
|
||||
non-ASCII characters. Don't set it->char_to_display here. Don't
|
||||
handle unibyte-display-via-language-environment here. For a
|
||||
non-ASCII characters. Don't set it->char_to_display here.
|
||||
Don't handle unibyte-display-via-language-environment here. For a
|
||||
charater of no glyph, use font->space_width instead of FONT_WIDTH.
|
||||
|
||||
2010-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
|
|
@ -2008,7 +2008,7 @@ detect_coding_emacs_mule (struct coding_system *coding,
|
|||
}
|
||||
else
|
||||
{
|
||||
int more_bytes = emacs_mule_bytes[*src_base] - 1;
|
||||
int more_bytes = emacs_mule_bytes[c] - 1;
|
||||
|
||||
while (more_bytes > 0)
|
||||
{
|
||||
|
@ -4490,7 +4490,10 @@ encode_coding_iso_2022 (struct coding_system *coding)
|
|||
charset_list = CODING_ATTR_CHARSET_LIST (attrs);
|
||||
coding->safe_charsets = SDATA (CODING_ATTR_SAFE_CHARSETS (attrs));
|
||||
|
||||
ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
|
||||
ascii_compatible
|
||||
= (! NILP (CODING_ATTR_ASCII_COMPAT (attrs))
|
||||
&& ! (CODING_ISO_FLAGS (coding) & (CODING_ISO_FLAG_DESIGNATION
|
||||
| CODING_ISO_FLAG_LOCKING_SHIFT)));
|
||||
|
||||
while (charbuf < charbuf_end)
|
||||
{
|
||||
|
|
|
@ -247,7 +247,6 @@ tty_set_terminal_modes (struct terminal *terminal)
|
|||
cmputc ('\n');
|
||||
}
|
||||
|
||||
OUTPUT_IF (tty, tty->TS_termcap_modes);
|
||||
OUTPUT_IF (tty, visible_cursor ? tty->TS_cursor_visible : tty->TS_cursor_normal);
|
||||
OUTPUT_IF (tty, tty->TS_keypad_mode);
|
||||
losecursor (tty);
|
||||
|
|
156
src/xterm.c
156
src/xterm.c
|
@ -8285,19 +8285,89 @@ x_set_sticky (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
|
|||
"_NET_WM_STATE_STICKY", NULL);
|
||||
}
|
||||
|
||||
/* Return the current _NET_WM_STATE.
|
||||
SIZE_STATE is set to one of the FULLSCREEN_* values.
|
||||
STICKY is set to 1 if the sticky state is set, 0 if not. */
|
||||
|
||||
static void
|
||||
get_current_vm_state (struct frame *f,
|
||||
Window window,
|
||||
int *size_state,
|
||||
int *sticky)
|
||||
{
|
||||
Atom actual_type;
|
||||
unsigned long actual_size, bytes_remaining;
|
||||
int i, rc, actual_format;
|
||||
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
|
||||
long max_len = 65536;
|
||||
Display *dpy = FRAME_X_DISPLAY (f);
|
||||
unsigned char *tmp_data = NULL;
|
||||
Atom target_type = XA_ATOM;
|
||||
|
||||
*sticky = 0;
|
||||
*size_state = FULLSCREEN_NONE;
|
||||
|
||||
BLOCK_INPUT;
|
||||
x_catch_errors (dpy);
|
||||
rc = XGetWindowProperty (dpy, window, dpyinfo->Xatom_net_wm_state,
|
||||
0, max_len, False, target_type,
|
||||
&actual_type, &actual_format, &actual_size,
|
||||
&bytes_remaining, &tmp_data);
|
||||
|
||||
if (rc != Success || actual_type != target_type || x_had_errors_p (dpy))
|
||||
{
|
||||
if (tmp_data) XFree (tmp_data);
|
||||
x_uncatch_errors ();
|
||||
UNBLOCK_INPUT;
|
||||
return;
|
||||
}
|
||||
|
||||
x_uncatch_errors ();
|
||||
|
||||
for (i = 0; i < actual_size; ++i)
|
||||
{
|
||||
Atom a = ((Atom*)tmp_data)[i];
|
||||
if (a == dpyinfo->Xatom_net_wm_state_maximized_horz)
|
||||
{
|
||||
if (*size_state == FULLSCREEN_HEIGHT)
|
||||
*size_state = FULLSCREEN_MAXIMIZED;
|
||||
else
|
||||
*size_state = FULLSCREEN_WIDTH;
|
||||
}
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_maximized_vert)
|
||||
{
|
||||
if (*size_state == FULLSCREEN_WIDTH)
|
||||
*size_state = FULLSCREEN_MAXIMIZED;
|
||||
else
|
||||
*size_state = FULLSCREEN_HEIGHT;
|
||||
}
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_fullscreen_atom)
|
||||
*size_state = FULLSCREEN_BOTH;
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_sticky)
|
||||
*sticky = 1;
|
||||
}
|
||||
|
||||
if (tmp_data) XFree (tmp_data);
|
||||
UNBLOCK_INPUT;
|
||||
}
|
||||
|
||||
/* Do fullscreen as specified in extended window manager hints */
|
||||
|
||||
static int
|
||||
do_ewmh_fullscreen (struct frame *f)
|
||||
{
|
||||
int have_net_atom = wm_supports (f, "_NET_WM_STATE");
|
||||
Lisp_Object lval = get_frame_param (f, Qfullscreen);
|
||||
int cur, dummy;
|
||||
|
||||
get_current_vm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
|
||||
|
||||
/* Some window managers don't say they support _NET_WM_STATE, but they do say
|
||||
they support _NET_WM_STATE_FULLSCREEN. Try that also. */
|
||||
if (!have_net_atom)
|
||||
have_net_atom = wm_supports (f, "_NET_WM_STATE_FULLSCREEN");
|
||||
|
||||
if (have_net_atom)
|
||||
if (have_net_atom && cur != f->want_fullscreen)
|
||||
{
|
||||
Lisp_Object frame;
|
||||
const char *fs = "_NET_WM_STATE_FULLSCREEN";
|
||||
|
@ -8306,26 +8376,41 @@ do_ewmh_fullscreen (struct frame *f)
|
|||
|
||||
XSETFRAME (frame, f);
|
||||
|
||||
set_wm_state (frame, 0, fs, NULL);
|
||||
set_wm_state (frame, 0, fh, NULL);
|
||||
set_wm_state (frame, 0, fw, NULL);
|
||||
|
||||
/* If there are _NET_ atoms we assume we have extended window manager
|
||||
hints. */
|
||||
/* Keep number of calls to set_wm_state as low as possible.
|
||||
Some window managers, or possible Gtk+, hangs when too many
|
||||
are sent at once. */
|
||||
switch (f->want_fullscreen)
|
||||
{
|
||||
case FULLSCREEN_BOTH:
|
||||
if (cur == FULLSCREEN_WIDTH || cur == FULLSCREEN_MAXIMIZED
|
||||
|| cur == FULLSCREEN_HEIGHT)
|
||||
set_wm_state (frame, 0, fw, fh);
|
||||
set_wm_state (frame, 1, fs, NULL);
|
||||
break;
|
||||
case FULLSCREEN_WIDTH:
|
||||
set_wm_state (frame, 1, fw, NULL);
|
||||
if (cur == FULLSCREEN_BOTH || cur == FULLSCREEN_HEIGHT
|
||||
|| cur == FULLSCREEN_MAXIMIZED)
|
||||
set_wm_state (frame, 0, fs, fh);
|
||||
if (cur != FULLSCREEN_MAXIMIZED)
|
||||
set_wm_state (frame, 1, fw, NULL);
|
||||
break;
|
||||
case FULLSCREEN_HEIGHT:
|
||||
set_wm_state (frame, 1, fh, NULL);
|
||||
if (cur == FULLSCREEN_BOTH || cur == FULLSCREEN_WIDTH
|
||||
|| cur == FULLSCREEN_MAXIMIZED)
|
||||
set_wm_state (frame, 0, fs, fw);
|
||||
if (cur != FULLSCREEN_MAXIMIZED)
|
||||
set_wm_state (frame, 1, fh, NULL);
|
||||
break;
|
||||
case FULLSCREEN_MAXIMIZED:
|
||||
if (cur == FULLSCREEN_BOTH)
|
||||
set_wm_state (frame, 0, fs, NULL);
|
||||
set_wm_state (frame, 1, fw, fh);
|
||||
break;
|
||||
case FULLSCREEN_NONE:
|
||||
if (cur == FULLSCREEN_BOTH)
|
||||
set_wm_state (frame, 0, fs, NULL);
|
||||
else
|
||||
set_wm_state (frame, 0, fw, fh);
|
||||
}
|
||||
|
||||
f->want_fullscreen = FULLSCREEN_NONE;
|
||||
|
@ -8351,57 +8436,11 @@ XTfullscreen_hook (FRAME_PTR f)
|
|||
static void
|
||||
x_handle_net_wm_state (struct frame *f, XPropertyEvent *event)
|
||||
{
|
||||
Atom actual_type;
|
||||
unsigned long actual_size, bytes_remaining;
|
||||
int i, rc, actual_format, value = FULLSCREEN_NONE;
|
||||
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
|
||||
long max_len = 65536;
|
||||
Display *dpy = FRAME_X_DISPLAY (f);
|
||||
unsigned char *tmp_data = NULL;
|
||||
Atom target_type = XA_ATOM;
|
||||
int value = FULLSCREEN_NONE;
|
||||
Lisp_Object lval;
|
||||
int sticky = 0;
|
||||
|
||||
BLOCK_INPUT;
|
||||
x_catch_errors (dpy);
|
||||
rc = XGetWindowProperty (dpy, event->window,
|
||||
event->atom, 0, max_len, False, target_type,
|
||||
&actual_type, &actual_format, &actual_size,
|
||||
&bytes_remaining, &tmp_data);
|
||||
|
||||
if (rc != Success || actual_type != target_type || x_had_errors_p (dpy))
|
||||
{
|
||||
if (tmp_data) XFree (tmp_data);
|
||||
x_uncatch_errors ();
|
||||
UNBLOCK_INPUT;
|
||||
return;
|
||||
}
|
||||
|
||||
x_uncatch_errors ();
|
||||
|
||||
for (i = 0; i < actual_size; ++i)
|
||||
{
|
||||
Atom a = ((Atom*)tmp_data)[i];
|
||||
if (a == dpyinfo->Xatom_net_wm_state_maximized_horz)
|
||||
{
|
||||
if (value == FULLSCREEN_HEIGHT)
|
||||
value = FULLSCREEN_MAXIMIZED;
|
||||
else
|
||||
value = FULLSCREEN_WIDTH;
|
||||
}
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_maximized_vert)
|
||||
{
|
||||
if (value == FULLSCREEN_WIDTH)
|
||||
value = FULLSCREEN_MAXIMIZED;
|
||||
else
|
||||
value = FULLSCREEN_HEIGHT;
|
||||
}
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_fullscreen_atom)
|
||||
value = FULLSCREEN_BOTH;
|
||||
else if (a == dpyinfo->Xatom_net_wm_state_sticky)
|
||||
sticky = 1;
|
||||
}
|
||||
|
||||
get_current_vm_state (f, event->window, &value, &sticky);
|
||||
lval = Qnil;
|
||||
switch (value)
|
||||
{
|
||||
|
@ -8421,9 +8460,6 @@ x_handle_net_wm_state (struct frame *f, XPropertyEvent *event)
|
|||
|
||||
store_frame_param (f, Qfullscreen, lval);
|
||||
store_frame_param (f, Qsticky, sticky ? Qt : Qnil);
|
||||
|
||||
if (tmp_data) XFree (tmp_data);
|
||||
UNBLOCK_INPUT;
|
||||
}
|
||||
|
||||
/* Check if we need to resize the frame due to a fullscreen request.
|
||||
|
|
Loading…
Add table
Reference in a new issue