aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2007-12-06 00:46:18 +0000
committerMiles Bader2007-12-06 00:46:18 +0000
commite5e76c04310d287a56675876dd83e1089faba215 (patch)
treea4b4f1cc134e4fd5af42671ec6689e07afe48ff2
parentb890d447fb56bfe9f2e4742eda4b3ab4b5f4b32a (diff)
parenta2afc99dbad3fa9a3170ad72c578451c3aea58a4 (diff)
downloademacs-e5e76c04310d287a56675876dd83e1089faba215.tar.gz
emacs-e5e76c04310d287a56675876dd83e1089faba215.zip
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-943
-rwxr-xr-xconfigure8
-rw-r--r--doc/lispref/ChangeLog17
-rw-r--r--doc/lispref/customize.texi5
-rw-r--r--doc/lispref/display.texi80
-rw-r--r--doc/lispref/hooks.texi4
-rw-r--r--doc/lispref/objects.texi2
-rw-r--r--etc/NEWS.225
-rw-r--r--lib-src/ChangeLog5
-rw-r--r--lib-src/etags.c14
-rw-r--r--lisp/ChangeLog15
-rw-r--r--lisp/international/mule-cmds.el8
-rw-r--r--lisp/progmodes/perl-mode.el4
-rw-r--r--lisp/wid-edit.el2
-rw-r--r--mac/ChangeLog4
-rw-r--r--mac/INSTALL2
-rw-r--r--src/ChangeLog43
-rw-r--r--src/image.c15
-rw-r--r--src/mac.c51
-rw-r--r--src/process.c1
-rw-r--r--src/sysdep.c9
-rw-r--r--src/unexmacosx.c103
-rw-r--r--src/w32proc.c9
-rw-r--r--src/xdisp.c8
23 files changed, 353 insertions, 61 deletions
diff --git a/configure b/configure
index 10fea94c506..f2f56482347 100755
--- a/configure
+++ b/configure
@@ -412,10 +412,10 @@ else
412fi 412fi
413 413
414test \$exitcode = 0") || { 414test \$exitcode = 0") || {
415 echo No shell found that supports shell functions. 415 echo Please tell bug-autoconf@gnu.org about your system,
416 echo Please tell autoconf@gnu.org about your system, 416 echo including any error possibly output before this message.
417 echo including any error possibly output before this 417 echo This can help us improve future autoconf versions.
418 echo message 418 echo Configuration will now proceed without shell functions.
419} 419}
420 420
421 421
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 95ab2e09b4b..586f250bd06 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,11 @@
12007-12-04 Richard Stallman <rms@gnu.org>
2
3 * objects.texi (Symbol Type): Fix typo.
4
52007-12-03 Richard Stallman <rms@gnu.org>
6
7 * hooks.texi (Standard Hooks): Add link to Hooks for Loading.
8
12007-12-01 Glenn Morris <rgm@gnu.org> 92007-12-01 Glenn Morris <rgm@gnu.org>
2 10
3 * functions.texi (Declaring Functions): Improve previous change. 11 * functions.texi (Declaring Functions): Improve previous change.
@@ -7,6 +15,10 @@
7 * functions.texi (Declaring Functions): Add optional fourth 15 * functions.texi (Declaring Functions): Add optional fourth
8 argument of declare-function, and setting third argument to `t'. 16 argument of declare-function, and setting third argument to `t'.
9 17
182007-11-29 Richard Stallman <rms@gnu.org>
19
20 * customize.texi (Composite Types): Document `group' type.
21
102007-11-29 Glenn Morris <rgm@gnu.org> 222007-11-29 Glenn Morris <rgm@gnu.org>
11 23
12 * functions.texi (Declaring Functions): Add findex. Mention 24 * functions.texi (Declaring Functions): Add findex. Mention
@@ -34,6 +46,11 @@
34 46
35 * compile.texi (Compiler Errors): Clarify previous change. 47 * compile.texi (Compiler Errors): Clarify previous change.
36 48
492007-11-24 Richard Stallman <rms@gnu.org>
50
51 * display.texi (Refresh Screen, Forcing Redisplay):
52 Clarify the text and move items around.
53
372007-11-24 Glenn Morris <rgm@gnu.org> 542007-11-24 Glenn Morris <rgm@gnu.org>
38 55
39 * functions.texi (Declaring Functions): New section. 56 * functions.texi (Declaring Functions): New section.
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 7c723a29f28..b97ce20fc22 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -755,6 +755,11 @@ string, and the third a function.
755In the customization buffer, each element is displayed and edited 755In the customization buffer, each element is displayed and edited
756separately, according to the type specified for it. 756separately, according to the type specified for it.
757 757
758@item (group @var{element-types}@dots{})
759This works like @code{list} except for the formatting
760of text in the Custom buffer. @code{list} labels each
761element value with its tag; @code{group} does not.
762
758@item (vector @var{element-types}@dots{}) 763@item (vector @var{element-types}@dots{})
759Like @code{list} except that the value must be a vector instead of a 764Like @code{list} except that the value must be a vector instead of a
760list. The elements work the same as in @code{list}. 765list. The elements work the same as in @code{list}.
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 4c9df9c5ede..165636006d3 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -55,21 +55,10 @@ This function clears and redisplays frame @var{frame}.
55This function clears and redisplays all visible frames. 55This function clears and redisplays all visible frames.
56@end deffn 56@end deffn
57 57
58 This function calls for redisplay of certain windows, the next time 58 In Emacs, processing user input takes priority over redisplay. If
59redisplay is done, but does not clear them first. 59you call these functions when input is available, they don't redisplay
60 60immediately, but the requested redisplay does happen
61@defun force-window-update &optional object 61eventually---after all the input has been processed.
62This function forces some or all windows to be updated on next redisplay.
63If @var{object} is a window, it forces redisplay of that window. If
64@var{object} is a buffer or buffer name, it forces redisplay of all
65windows displaying that buffer. If @var{object} is @code{nil} (or
66omitted), it forces redisplay of all windows.
67@end defun
68
69 Processing user input takes absolute priority over redisplay. If you
70call these functions when input is available, they do nothing
71immediately, but a full redisplay does happen eventually---after all the
72input has been processed.
73 62
74 Normally, suspending and resuming Emacs also refreshes the screen. 63 Normally, suspending and resuming Emacs also refreshes the screen.
75Some terminal emulators record separate contents for display-oriented 64Some terminal emulators record separate contents for display-oriented
@@ -89,11 +78,56 @@ to redraw, @code{nil} means redrawing is needed. The default is @code{nil}.
89@section Forcing Redisplay 78@section Forcing Redisplay
90@cindex forcing redisplay 79@cindex forcing redisplay
91 80
81 Emacs normally tries to redisplay the screen whenever it waits for
82input. With this function you can request an immediate attempt to
83redisplay, in the middle of Lisp code, without actually waiting for
84input.
85
86@defun redisplay &optional force
87This function tries immediately to redisplay, provided there are no
88pending input events. It is equivalent to @code{(sit-for 0)}.
89
90If the optional argument @var{force} is non-@code{nil}, it does all
91pending redisplay work even if input is available, with no
92pre-emption.
93
94The function returns @code{t} if it actually tried to redisplay, and
95@code{nil} otherwise. A value of @code{t} does not mean that
96redisplay proceeded to completion; it could have been pre-empted by
97newly arriving terminal input.
98@end defun
99
100 @code{redisplay} with no argument tries immediately to redisplay,
101but has no effect on the usual rules for what parts of the screen to
102redisplay. By contrast, the following function adds certain windows
103to the pending redisplay work (as if their contents had completely
104changed), but doesn't immediately try to do any redisplay work.
105
106@defun force-window-update &optional object
107This function forces some or all windows to be updated on next
108redisplay. If @var{object} is a window, it requires eventual
109redisplay of that window. If @var{object} is a buffer or buffer name,
110it requires eventual redisplay of all windows displaying that buffer.
111If @var{object} is @code{nil} (or omitted), it requires eventual
112redisplay of all windows.
113@end defun
114
115 @code{force-window-update} does not do a redisplay immediately.
116(Emacs will do that when it waits for input.) Rather, its effect is
117to put more work on the queue to be done by redisplay whenever there
118is a chance.
119
92 Emacs redisplay normally stops if input arrives, and does not happen 120 Emacs redisplay normally stops if input arrives, and does not happen
93at all if input is available before it starts. Most of the time, this 121at all if input is available before it starts. Most of the time, this
94is exactly what you want. However, you can prevent preemption by 122is exactly what you want. However, you can prevent preemption by
95binding @code{redisplay-dont-pause} to a non-@code{nil} value. 123binding @code{redisplay-dont-pause} to a non-@code{nil} value.
96 124
125@defvar redisplay-dont-pause
126If this variable is non-@code{nil}, pending input does not
127prevent or halt redisplay; redisplay occurs, and finishes,
128regardless of whether input is available.
129@end defvar
130
97@defvar redisplay-preemption-period 131@defvar redisplay-preemption-period
98This variable specifies how many seconds Emacs waits between checks 132This variable specifies how many seconds Emacs waits between checks
99for new input during redisplay. (The default is 0.1 seconds.) If 133for new input during redisplay. (The default is 0.1 seconds.) If
@@ -107,22 +141,6 @@ This variable is only obeyed on graphical terminals. For
107text terminals, see @ref{Terminal Output}. 141text terminals, see @ref{Terminal Output}.
108@end defvar 142@end defvar
109 143
110@defvar redisplay-dont-pause
111If this variable is non-@code{nil}, pending input does not
112prevent or halt redisplay; redisplay occurs, and finishes,
113regardless of whether input is available.
114@end defvar
115
116@defun redisplay &optional force
117This function performs an immediate redisplay provided there are no
118pending input events. This is equivalent to @code{(sit-for 0)}.
119
120If the optional argument @var{force} is non-@code{nil}, it forces an
121immediate and complete redisplay even if input is available.
122
123Returns @code{t} if redisplay was performed, or @code{nil} otherwise.
124@end defun
125
126@node Truncation 144@node Truncation
127@section Truncation 145@section Truncation
128@cindex line wrapping 146@cindex line wrapping
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index d0bb2de8675..3f7f4b4d8bb 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -31,6 +31,10 @@ these functions are called in a special way (they are passed arguments,
31or their values are used). The variables whose names end in 31or their values are used). The variables whose names end in
32@samp{-function} have single functions as their values. 32@samp{-function} have single functions as their values.
33 33
34A special feature allows you to specify expressions to evaluate if and
35when a file is loaded (@pxref{Hooks for Loading}). That feature is
36not exactly a hook, but does a similar job.
37
34@c We need to xref to where each hook is documented or else document 38@c We need to xref to where each hook is documented or else document
35@c it here. 39@c it here.
36 40
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 0da05488858..64c79d63162 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -525,7 +525,7 @@ bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
525 525
526 A @dfn{symbol} in GNU Emacs Lisp is an object with a name. The 526 A @dfn{symbol} in GNU Emacs Lisp is an object with a name. The
527symbol name serves as the printed representation of the symbol. In 527symbol name serves as the printed representation of the symbol. In
528ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}, 528ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}),
529a symbol's name is unique---no two symbols have the same name. 529a symbol's name is unique---no two symbols have the same name.
530 530
531 A symbol can serve as a variable, as a function name, or to hold a 531 A symbol can serve as a variable, as a function name, or to hold a
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index b276e939ae4..d7368ac6f38 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -3138,11 +3138,6 @@ be used (only once) in place of a file name on the command line. Etags
3138reads from standard input and marks the produced tags as belonging to 3138reads from standard input and marks the produced tags as belonging to
3139the file FILE. 3139the file FILE.
3140 3140
3141*** The --members option is now the default.
3142
3143Use --no-members if you want the old default behaviour of not tagging
3144struct members in C, members variables in C++ and variables in PHP.
3145
3146** Ctags changes. 3141** Ctags changes.
3147 3142
3148*** Ctags now allows duplicate tags 3143*** Ctags now allows duplicate tags
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 3e8cb73c605..2cc37d49dd4 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -15,6 +15,11 @@
15 15
16 * pop.c (socket_connection): Use getaddrinfo if available. 16 * pop.c (socket_connection): Use getaddrinfo if available.
17 17
182007-11-22 Francesco Potort,Al(B <pot@gnu.org>
19
20 * etags.c (default_C_help) [CTAGS]: differentiate the help string,
21 as the defaults in ctags are different from etags.
22
182007-11-15 Francesco Potort,Al(B <pot@gnu.org> 232007-11-15 Francesco Potort,Al(B <pot@gnu.org>
19 24
20 * etags.c: Make prototypes for extern definitions, and add all 25 * etags.c: Make prototypes for extern definitions, and add all
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 280399868d1..23527171e48 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -514,7 +514,7 @@ static bool update; /* -u: update tags */
514static bool vgrind_style; /* -v: create vgrind style index output */ 514static bool vgrind_style; /* -v: create vgrind style index output */
515static bool no_warnings; /* -w: suppress warnings (undocumented) */ 515static bool no_warnings; /* -w: suppress warnings (undocumented) */
516static bool cxref_style; /* -x: create cxref style output */ 516static bool cxref_style; /* -x: create cxref style output */
517static bool cplusplus; /* .[hc] means C++, not C */ 517static bool cplusplus; /* .[hc] means C++, not C (undocumented) */
518static bool ignoreindent; /* -I: ignore indentation in C */ 518static bool ignoreindent; /* -I: ignore indentation in C */
519static bool packages_only; /* --packages-only: in Ada, only tag packages*/ 519static bool packages_only; /* --packages-only: in Ada, only tag packages*/
520 520
@@ -621,10 +621,19 @@ followed by a colon, are tags.";
621 621
622 622
623/* Note that .c and .h can be considered C++, if the --c++ flag was 623/* Note that .c and .h can be considered C++, if the --c++ flag was
624 given, or if the `class' or `template' keyowrds are met inside the file. 624 given, or if the `class' or `template' keywords are met inside the file.
625 That is why default_C_entries is called for these. */ 625 That is why default_C_entries is called for these. */
626static char *default_C_suffixes [] = 626static char *default_C_suffixes [] =
627 { "c", "h", NULL }; 627 { "c", "h", NULL };
628#if CTAGS /* C help for Ctags */
629static char default_C_help [] =
630"In C code, any C function is a tag. Use -t to tag typedefs.\n\
631Use -T to tag definitions of `struct', `union' and `enum'.\n\
632Use -d to tag `#define' macro definitions and `enum' constants.\n\
633Use --globals to tag global variables.\n\
634You can tag function declarations and external variables by\n\
635using `--declarations', and struct members by using `--members'.";
636#else /* C help for Etags */
628static char default_C_help [] = 637static char default_C_help [] =
629"In C code, any C function or typedef is a tag, and so are\n\ 638"In C code, any C function or typedef is a tag, and so are\n\
630definitions of `struct', `union' and `enum'. `#define' macro\n\ 639definitions of `struct', `union' and `enum'. `#define' macro\n\
@@ -635,6 +644,7 @@ definitions and `enum' constants are tags unless you specify\n\
635`--no-members' can make the tags table file much smaller.\n\ 644`--no-members' can make the tags table file much smaller.\n\
636You can tag function declarations and external variables by\n\ 645You can tag function declarations and external variables by\n\
637using `--declarations'."; 646using `--declarations'.";
647#endif /* C help for Ctags and Etags */
638 648
639static char *Cplusplus_suffixes [] = 649static char *Cplusplus_suffixes [] =
640 { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx", 650 { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx",
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1bcc372a619..f623747209f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,18 @@
12007-12-05 Richard Stallman <rms@gnu.org>
2
3 * wid-edit.el (widget-type): Doc fix.
4
52007-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
6
7 * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords):
8 Don't match "sub { (...) ... }".
9
102007-12-05 Richard Stallman <rms@gnu.org>
11
12 * international/mule-cmds.el (toggle-input-method-active): New var.
13 (toggle-input-method): Bind toggle-input-method-active to t.
14 Error if it was already non-nil.
15
12007-12-05 Reiner Steib <Reiner.Steib@gmx.de> 162007-12-05 Reiner Steib <Reiner.Steib@gmx.de>
2 17
3 * net/tls.el (tls-hostmismatch, open-tls-stream): Checkdoc cleanup. 18 * net/tls.el (tls-hostmismatch, open-tls-stream): Checkdoc cleanup.
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index ca76d4f5054..77ef1f9cd40 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1492,6 +1492,9 @@ To deactivate it programmatically, use `inactivate-input-method'."
1492 (customize-mark-as-set 'default-input-method)) 1492 (customize-mark-as-set 'default-input-method))
1493 default-input-method) 1493 default-input-method)
1494 1494
1495(defvar toggle-input-method-active nil
1496 "Non-nil inside `toggle-input-method'.")
1497
1495(defun toggle-input-method (&optional arg interactive) 1498(defun toggle-input-method (&optional arg interactive)
1496 "Enable or disable multilingual text input method for the current buffer. 1499 "Enable or disable multilingual text input method for the current buffer.
1497Only one input method can be enabled at any time in a given buffer. 1500Only one input method can be enabled at any time in a given buffer.
@@ -1511,9 +1514,12 @@ When called interactively, the optional arg INTERACTIVE is non-nil,
1511which marks the variable `default-input-method' as set for Custom buffers." 1514which marks the variable `default-input-method' as set for Custom buffers."
1512 1515
1513 (interactive "P\np") 1516 (interactive "P\np")
1517 (if toggle-input-method-active
1518 (error "Recursive use of `toggle-input-method'"))
1514 (if (and current-input-method (not arg)) 1519 (if (and current-input-method (not arg))
1515 (inactivate-input-method) 1520 (inactivate-input-method)
1516 (let ((default (or (car input-method-history) default-input-method))) 1521 (let ((toggle-input-method-active t)
1522 (default (or (car input-method-history) default-input-method)))
1517 (if (and arg default (equal current-input-method default) 1523 (if (and arg default (equal current-input-method default)
1518 (> (length input-method-history) 1)) 1524 (> (length input-method-history) 1))
1519 (setq default (nth 1 input-method-history))) 1525 (setq default (nth 1 input-method-history)))
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 809ed7a9f36..ee14100f56d 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -266,7 +266,9 @@ The expansion is entirely correct because it uses the C preprocessor."
266 ;; format statements 266 ;; format statements
267 ("^[ \t]*format.*=[ \t]*\\(\n\\)" (1 '(7))) 267 ("^[ \t]*format.*=[ \t]*\\(\n\\)" (1 '(7)))
268 ;; Funny things in sub arg specifications like `sub myfunc ($$)' 268 ;; Funny things in sub arg specifications like `sub myfunc ($$)'
269 ("\\<sub\\s-+\\S-+\\s-*(\\([^)]+\\))" 1 '(1)) 269 ;; Be careful not to match "sub { (...) ... }".
270 ("\\<sub[[:space:]]+[^{}[:punct:][:space:]]+[[:space:]]*(\\([^)]+\\))"
271 1 '(1))
270 ;; Regexp and funny quotes. 272 ;; Regexp and funny quotes.
271 ("\\(?:[?:.,;=!~({[]\\|\\(^\\)\\)[ \t\n]*\\(/\\)" 273 ("\\(?:[?:.,;=!~({[]\\|\\(^\\)\\)[ \t\n]*\\(/\\)"
272 (2 (if (and (match-end 1) 274 (2 (if (and (match-end 1)
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 48d74b4fb25..1ce6deda89e 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -488,7 +488,7 @@ new value.")
488;;; Widget Properties. 488;;; Widget Properties.
489 489
490(defsubst widget-type (widget) 490(defsubst widget-type (widget)
491 "Return the type of WIDGET, a symbol." 491 "Return the type of WIDGET. The type is a symbol."
492 (car widget)) 492 (car widget))
493 493
494;;;###autoload 494;;;###autoload
diff --git a/mac/ChangeLog b/mac/ChangeLog
index bcf4d5b5624..20a0de91012 100644
--- a/mac/ChangeLog
+++ b/mac/ChangeLog
@@ -1,3 +1,7 @@
12007-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
2
3 * INSTALL: Also build and run on Mac OS X 10.5.
4
12007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> 52007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2 6
3 * inc/config.h: Remove HAVE_X11R5. 7 * inc/config.h: Remove HAVE_X11R5.
diff --git a/mac/INSTALL b/mac/INSTALL
index 7cdf0de4940..6d78910b464 100644
--- a/mac/INSTALL
+++ b/mac/INSTALL
@@ -192,7 +192,7 @@ is created.
192* NOTES 192* NOTES
193 193
194Emacs should build and run on a PowerMac running Mac OS 8.6 - 9.2 (but 194Emacs should build and run on a PowerMac running Mac OS 8.6 - 9.2 (but
195only tested on 9.2.2), and Mac OS X 10.1 - 10.4. 195only tested on 9.2.2), and Mac OS X 10.1 - 10.5.
196 196
197You will need around 100 MB of disk space for the source files and 197You will need around 100 MB of disk space for the source files and
198intermediate files. 198intermediate files.
diff --git a/src/ChangeLog b/src/ChangeLog
index d1507f7edde..f55e4ac786c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,46 @@
12007-12-05 Magnus Henoch <mange@freemail.hu>
2
3 * process.c (make_process): Initialize pty_flag to 0.
4
52007-12-05 Jason Rumney <jasonr@gnu.org>
6
7 * image.c (xbm_load) [WINDOWSNT]: Shuffle the bits of directly
8 specified XBMs.
9
102007-12-05 Richard Stallman <rms@gnu.org>
11
12 * xdisp.c (syms_of_xdisp) <scroll-conservatively>: Doc fix.
13
142007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
15
16 * mac.c (cfsockets_for_select) [MAC_OSX && SELECT_USE_CFSOCKET]:
17 New variable.
18 (mac_try_close_socket) [MAC_OSX]: New function.
19 [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]:
20 Update cfsockets_for_select. Replace invalid CFRunLoop source.
21
22 * sysdep.c (emacs_close) [MAC_OSX && HAVE_CARBON]:
23 Use mac_try_close_socket.
24
252007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
26
27 * unexmacosx.c (unrelocate): New argument BASE. Use it instead of
28 reloc_base.
29 (copy_dysymtab): Compute relocation base here.
30 (rebase_reloc_address) [__ppc64__]: New function.
31 (copy_dysymtab) [__ppc64__]: Use it if relocation base needs to be
32 changed.
33
342007-12-05 Jason Rumney <jasonr@gnu.org>
35
36 * w32proc.c (sys_spawnve): Quote args with wildcards.
37
382007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
39
40 * unexmacosx.c (copy_data_segment): Also copy __gcc_except_tab and
41 __objc_* sections.
42 (unrelocate) [_LP64]: Set relocation base to address of data segment.
43
12007-12-05 Michael Albinus <michael.albinus@gmx.de> 442007-12-05 Michael Albinus <michael.albinus@gmx.de>
2 45
3 * dbusbind.c (xd_read_message): Return value is a Lisp_Object. 46 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
diff --git a/src/image.c b/src/image.c
index 91be3f4b57e..a9b1e9835ed 100644
--- a/src/image.c
+++ b/src/image.c
@@ -3128,6 +3128,8 @@ convert_mono_to_color_image (f, img, foreground, background)
3128 release_frame_dc (f, hdc); 3128 release_frame_dc (f, hdc);
3129 old_prev = SelectObject (old_img_dc, img->pixmap); 3129 old_prev = SelectObject (old_img_dc, img->pixmap);
3130 new_prev = SelectObject (new_img_dc, new_pixmap); 3130 new_prev = SelectObject (new_img_dc, new_pixmap);
3131 /* Windows convention for mono bitmaps is black = background,
3132 white = foreground. */
3131 SetTextColor (new_img_dc, background); 3133 SetTextColor (new_img_dc, background);
3132 SetBkColor (new_img_dc, foreground); 3134 SetBkColor (new_img_dc, foreground);
3133 3135
@@ -3523,6 +3525,19 @@ xbm_load (f, img)
3523 else 3525 else
3524 bits = XBOOL_VECTOR (data)->data; 3526 bits = XBOOL_VECTOR (data)->data;
3525 3527
3528#ifdef WINDOWSNT
3529 {
3530 char *invertedBits;
3531 int nbytes, i;
3532 /* Windows mono bitmaps are reversed compared with X. */
3533 invertedBits = bits;
3534 nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR
3535 * img->height;
3536 bits = (char *) alloca(nbytes);
3537 for (i = 0; i < nbytes; i++)
3538 bits[i] = XBM_BIT_SHUFFLE (invertedBits[i]);
3539 }
3540#endif
3526 /* Create the pixmap. */ 3541 /* Create the pixmap. */
3527 3542
3528 Create_Pixmap_From_Bitmap_Data (f, img, bits, 3543 Create_Pixmap_From_Bitmap_Data (f, img, bits,
diff --git a/src/mac.c b/src/mac.c
index 75a606b60b3..9c1a08075f8 100644
--- a/src/mac.c
+++ b/src/mac.c
@@ -5004,6 +5004,10 @@ extern int noninteractive;
5004#if SELECT_USE_CFSOCKET 5004#if SELECT_USE_CFSOCKET
5005#define SELECT_TIMEOUT_THRESHOLD_RUNLOOP 0.2 5005#define SELECT_TIMEOUT_THRESHOLD_RUNLOOP 0.2
5006 5006
5007/* Dictionary of file descriptors vs CFSocketRef's allocated in
5008 sys_select. */
5009static CFMutableDictionaryRef cfsockets_for_select;
5010
5007static void 5011static void
5008socket_callback (s, type, address, data, info) 5012socket_callback (s, type, address, data, info)
5009 CFSocketRef s; 5013 CFSocketRef s;
@@ -5089,6 +5093,43 @@ select_and_poll_event (nfds, rfds, wfds, efds, timeout)
5089 return 0; 5093 return 0;
5090} 5094}
5091 5095
5096/* Clean up the CFSocket associated with the file descriptor FD in
5097 case the same descriptor is used in other threads later. If no
5098 CFSocket is associated with FD, then return 0 without closing FD.
5099 Otherwise, return 1 with closing FD. */
5100
5101int
5102mac_try_close_socket (fd)
5103 int fd;
5104{
5105#if SELECT_USE_CFSOCKET
5106 if (cfsockets_for_select)
5107 {
5108 void *key = (void *) fd;
5109 CFSocketRef socket =
5110 (CFSocketRef) CFDictionaryGetValue (cfsockets_for_select, key);
5111
5112 if (socket)
5113 {
5114#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
5115 CFOptionFlags flags = CFSocketGetSocketFlags (socket);
5116
5117 if (!(flags & kCFSocketCloseOnInvalidate))
5118 CFSocketSetSocketFlags (socket, flags | kCFSocketCloseOnInvalidate);
5119#endif
5120 BLOCK_INPUT;
5121 CFSocketInvalidate (socket);
5122 CFDictionaryRemoveValue (cfsockets_for_select, key);
5123 UNBLOCK_INPUT;
5124
5125 return 1;
5126 }
5127 }
5128#endif
5129
5130 return 0;
5131}
5132
5092int 5133int
5093sys_select (nfds, rfds, wfds, efds, timeout) 5134sys_select (nfds, rfds, wfds, efds, timeout)
5094 int nfds; 5135 int nfds;
@@ -5165,6 +5206,11 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5165 CFDictionaryCreateMutable (NULL, 0, NULL, 5206 CFDictionaryCreateMutable (NULL, 0, NULL,
5166 &kCFTypeDictionaryValueCallBacks); 5207 &kCFTypeDictionaryValueCallBacks);
5167 5208
5209 if (cfsockets_for_select == NULL)
5210 cfsockets_for_select =
5211 CFDictionaryCreateMutable (NULL, 0, NULL,
5212 &kCFTypeDictionaryValueCallBacks);
5213
5168 for (minfd = 1; ; minfd++) /* nfds-1 works as a sentinel. */ 5214 for (minfd = 1; ; minfd++) /* nfds-1 works as a sentinel. */
5169 if (FD_ISSET (minfd, rfds) || (wfds && FD_ISSET (minfd, wfds))) 5215 if (FD_ISSET (minfd, rfds) || (wfds && FD_ISSET (minfd, wfds)))
5170 break; 5216 break;
@@ -5176,7 +5222,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5176 CFRunLoopSourceRef source = 5222 CFRunLoopSourceRef source =
5177 (CFRunLoopSourceRef) CFDictionaryGetValue (sources, key); 5223 (CFRunLoopSourceRef) CFDictionaryGetValue (sources, key);
5178 5224
5179 if (source == NULL) 5225 if (source == NULL || !CFRunLoopSourceIsValid (source))
5180 { 5226 {
5181 CFSocketRef socket = 5227 CFSocketRef socket =
5182 CFSocketCreateWithNative (NULL, fd, 5228 CFSocketCreateWithNative (NULL, fd,
@@ -5186,11 +5232,12 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5186 5232
5187 if (socket == NULL) 5233 if (socket == NULL)
5188 continue; 5234 continue;
5235 CFDictionarySetValue (cfsockets_for_select, key, socket);
5189 source = CFSocketCreateRunLoopSource (NULL, socket, 0); 5236 source = CFSocketCreateRunLoopSource (NULL, socket, 0);
5190 CFRelease (socket); 5237 CFRelease (socket);
5191 if (source == NULL) 5238 if (source == NULL)
5192 continue; 5239 continue;
5193 CFDictionaryAddValue (sources, key, source); 5240 CFDictionarySetValue (sources, key, source);
5194 CFRelease (source); 5241 CFRelease (source);
5195 } 5242 }
5196 CFRunLoopAddSource (runloop, source, kCFRunLoopDefaultMode); 5243 CFRunLoopAddSource (runloop, source, kCFRunLoopDefaultMode);
diff --git a/src/process.c b/src/process.c
index dc96bc27e78..0204388e672 100644
--- a/src/process.c
+++ b/src/process.c
@@ -631,6 +631,7 @@ make_process (name)
631 p->tick = 0; 631 p->tick = 0;
632 p->update_tick = 0; 632 p->update_tick = 0;
633 p->pid = 0; 633 p->pid = 0;
634 p->pty_flag = 0;
634 p->raw_status_new = 0; 635 p->raw_status_new = 0;
635 p->status = Qrun; 636 p->status = Qrun;
636 p->mark = Fmake_marker (); 637 p->mark = Fmake_marker ();
diff --git a/src/sysdep.c b/src/sysdep.c
index 81850919dd3..d1f378a3f87 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -3486,6 +3486,15 @@ emacs_close (fd)
3486 int did_retry = 0; 3486 int did_retry = 0;
3487 register int rtnval; 3487 register int rtnval;
3488 3488
3489#if defined (MAC_OSX) && defined (HAVE_CARBON)
3490 {
3491 extern int mac_try_close_socket P_ ((int));
3492
3493 if (mac_try_close_socket (fd))
3494 return 0;
3495 }
3496#endif
3497
3489 while ((rtnval = close (fd)) == -1 3498 while ((rtnval = close (fd)) == -1
3490 && (errno == EINTR)) 3499 && (errno == EINTR))
3491 did_retry = 1; 3500 did_retry = 1;
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index 3646aec6983..dadc19d52e3 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -819,7 +819,9 @@ copy_data_segment (struct load_command *lc)
819 || strncmp (sectp->sectname, "__la_sym_ptr2", 16) == 0 819 || strncmp (sectp->sectname, "__la_sym_ptr2", 16) == 0
820 || strncmp (sectp->sectname, "__dyld", 16) == 0 820 || strncmp (sectp->sectname, "__dyld", 16) == 0
821 || strncmp (sectp->sectname, "__const", 16) == 0 821 || strncmp (sectp->sectname, "__const", 16) == 0
822 || strncmp (sectp->sectname, "__cfstring", 16) == 0) 822 || strncmp (sectp->sectname, "__cfstring", 16) == 0
823 || strncmp (sectp->sectname, "__gcc_except_tab", 16) == 0
824 || strncmp (sectp->sectname, "__objc_", 7) == 0)
823 { 825 {
824 if (!unexec_copy (sectp->offset, old_file_offset, sectp->size)) 826 if (!unexec_copy (sectp->offset, old_file_offset, sectp->size))
825 unexec_error ("cannot copy section %s", sectp->sectname); 827 unexec_error ("cannot copy section %s", sectp->sectname);
@@ -898,12 +900,13 @@ copy_symtab (struct load_command *lc, long delta)
898 900
899/* Fix up relocation entries. */ 901/* Fix up relocation entries. */
900static void 902static void
901unrelocate (const char *name, off_t reloff, int nrel) 903unrelocate (const char *name, off_t reloff, int nrel, vm_address_t base)
902{ 904{
903 int i, unreloc_count; 905 int i, unreloc_count;
904 struct relocation_info reloc_info; 906 struct relocation_info reloc_info;
905 struct scattered_relocation_info *sc_reloc_info 907 struct scattered_relocation_info *sc_reloc_info
906 = (struct scattered_relocation_info *) &reloc_info; 908 = (struct scattered_relocation_info *) &reloc_info;
909 vm_address_t location;
907 910
908 for (unreloc_count = 0, i = 0; i < nrel; i++) 911 for (unreloc_count = 0, i = 0; i < nrel; i++)
909 { 912 {
@@ -917,14 +920,15 @@ unrelocate (const char *name, off_t reloff, int nrel)
917 switch (reloc_info.r_type) 920 switch (reloc_info.r_type)
918 { 921 {
919 case GENERIC_RELOC_VANILLA: 922 case GENERIC_RELOC_VANILLA:
920 if (reloc_info.r_address >= data_segment_scp->vmaddr 923 location = base + reloc_info.r_address;
921 && reloc_info.r_address < (data_segment_scp->vmaddr 924 if (location >= data_segment_scp->vmaddr
922 + data_segment_scp->vmsize)) 925 && location < (data_segment_scp->vmaddr
926 + data_segment_scp->vmsize))
923 { 927 {
924 off_t src_off = data_segment_old_fileoff 928 off_t src_off = data_segment_old_fileoff
925 + reloc_info.r_address - data_segment_scp->vmaddr; 929 + (location - data_segment_scp->vmaddr);
926 off_t dst_off = data_segment_scp->fileoff 930 off_t dst_off = data_segment_scp->fileoff
927 + reloc_info.r_address - data_segment_scp->vmaddr; 931 + (location - data_segment_scp->vmaddr);
928 932
929 if (!unexec_copy (dst_off, src_off, 1 << reloc_info.r_length)) 933 if (!unexec_copy (dst_off, src_off, 1 << reloc_info.r_length))
930 unexec_error ("unrelocate: %s:%d cannot copy original value", 934 unexec_error ("unrelocate: %s:%d cannot copy original value",
@@ -955,15 +959,73 @@ unrelocate (const char *name, off_t reloff, int nrel)
955 unreloc_count, nrel, name); 959 unreloc_count, nrel, name);
956} 960}
957 961
962#if __ppc64__
963/* Rebase r_address in the relocation table. */
964static void
965rebase_reloc_address (off_t reloff, int nrel, long linkedit_delta, long diff)
966{
967 int i;
968 struct relocation_info reloc_info;
969 struct scattered_relocation_info *sc_reloc_info
970 = (struct scattered_relocation_info *) &reloc_info;
971
972 for (i = 0; i < nrel; i++, reloff += sizeof (reloc_info))
973 {
974 if (lseek (infd, reloff - linkedit_delta, L_SET)
975 != reloff - linkedit_delta)
976 unexec_error ("rebase_reloc_table: cannot seek to reloc_info");
977 if (!unexec_read (&reloc_info, sizeof (reloc_info)))
978 unexec_error ("rebase_reloc_table: cannot read reloc_info");
979
980 if (sc_reloc_info->r_scattered == 0
981 && reloc_info.r_type == GENERIC_RELOC_VANILLA)
982 {
983 reloc_info.r_address -= diff;
984 if (!unexec_write (reloff, &reloc_info, sizeof (reloc_info)))
985 unexec_error ("rebase_reloc_table: cannot write reloc_info");
986 }
987 }
988}
989#endif
990
958/* Copy a LC_DYSYMTAB load command from the input file to the output 991/* Copy a LC_DYSYMTAB load command from the input file to the output
959 file, adjusting the file offset fields. */ 992 file, adjusting the file offset fields. */
960static void 993static void
961copy_dysymtab (struct load_command *lc, long delta) 994copy_dysymtab (struct load_command *lc, long delta)
962{ 995{
963 struct dysymtab_command *dstp = (struct dysymtab_command *) lc; 996 struct dysymtab_command *dstp = (struct dysymtab_command *) lc;
997 vm_address_t base;
964 998
965 unrelocate ("local", dstp->locreloff, dstp->nlocrel); 999#ifdef _LP64
966 unrelocate ("external", dstp->extreloff, dstp->nextrel); 1000#if __ppc64__
1001 {
1002 int i;
1003
1004 base = 0;
1005 for (i = 0; i < nlc; i++)
1006 if (lca[i]->cmd == LC_SEGMENT)
1007 {
1008 struct segment_command *scp = (struct segment_command *) lca[i];
1009
1010 if (scp->vmaddr + scp->vmsize > 0x100000000
1011 && (scp->initprot & VM_PROT_WRITE) != 0)
1012 {
1013 base = data_segment_scp->vmaddr;
1014 break;
1015 }
1016 }
1017 }
1018#else
1019 /* First writable segment address. */
1020 base = data_segment_scp->vmaddr;
1021#endif
1022#else
1023 /* First segment address in the file (unless MH_SPLIT_SEGS set). */
1024 base = 0;
1025#endif
1026
1027 unrelocate ("local", dstp->locreloff, dstp->nlocrel, base);
1028 unrelocate ("external", dstp->extreloff, dstp->nextrel, base);
967 1029
968 if (dstp->nextrel > 0) { 1030 if (dstp->nextrel > 0) {
969 dstp->extreloff += delta; 1031 dstp->extreloff += delta;
@@ -982,6 +1044,29 @@ copy_dysymtab (struct load_command *lc, long delta)
982 unexec_error ("cannot write symtab command to header"); 1044 unexec_error ("cannot write symtab command to header");
983 1045
984 curr_header_offset += lc->cmdsize; 1046 curr_header_offset += lc->cmdsize;
1047
1048#if __ppc64__
1049 /* Check if the relocation base needs to be changed. */
1050 if (base == 0)
1051 {
1052 vm_address_t newbase = 0;
1053 int i;
1054
1055 for (i = 0; i < num_unexec_regions; i++)
1056 if (unexec_regions[i].range.address + unexec_regions[i].range.size
1057 > 0x100000000)
1058 {
1059 newbase = data_segment_scp->vmaddr;
1060 break;
1061 }
1062
1063 if (newbase)
1064 {
1065 rebase_reloc_address (dstp->locreloff, dstp->nlocrel, delta, newbase);
1066 rebase_reloc_address (dstp->extreloff, dstp->nextrel, delta, newbase);
1067 }
1068 }
1069#endif
985} 1070}
986 1071
987/* Copy a LC_TWOLEVEL_HINTS load command from the input file to the output 1072/* Copy a LC_TWOLEVEL_HINTS load command from the input file to the output
diff --git a/src/w32proc.c b/src/w32proc.c
index c21d589c525..a14a8ee384c 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -781,7 +781,14 @@ sys_spawnve (int mode, char *cmdname, char **argv, char **envp)
781 variable in their environment. */ 781 variable in their environment. */
782 char ppid_env_var_buffer[64]; 782 char ppid_env_var_buffer[64];
783 char *extra_env[] = {ppid_env_var_buffer, NULL}; 783 char *extra_env[] = {ppid_env_var_buffer, NULL};
784 char *sepchars = " \t"; 784 /* These are the characters that cause an argument to need quoting.
785 Arguments with whitespace characters need quoting to prevent the
786 argument being split into two or more. Arguments with wildcards
787 are also quoted, for consistency with posix platforms, where wildcards
788 are not expanded if we run the program directly without a shell.
789 Some extra whitespace characters need quoting in Cygwin programs,
790 so this list is conditionally modified below. */
791 char *sepchars = " \t*?";
785 792
786 /* We don't care about the other modes */ 793 /* We don't care about the other modes */
787 if (mode != _P_NOWAIT) 794 if (mode != _P_NOWAIT)
diff --git a/src/xdisp.c b/src/xdisp.c
index eb0fda1fa91..22f51859eff 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -24160,8 +24160,12 @@ If you want scrolling to always be a line at a time, you should set
24160 24160
24161 DEFVAR_INT ("scroll-conservatively", &scroll_conservatively, 24161 DEFVAR_INT ("scroll-conservatively", &scroll_conservatively,
24162 doc: /* *Scroll up to this many lines, to bring point back on screen. 24162 doc: /* *Scroll up to this many lines, to bring point back on screen.
24163A value of zero means to scroll the text to center point vertically 24163If point moves off-screen, redisplay will scroll by up to
24164in the window. */); 24164`scroll-conservatively' lines in order to bring point just barely
24165onto the screen again. If that cannot be done, then redisplay
24166recenters point as usual.
24167
24168A value of zero means always recenter point if it moves off screen. */);
24165 scroll_conservatively = 0; 24169 scroll_conservatively = 0;
24166 24170
24167 DEFVAR_INT ("scroll-margin", &scroll_margin, 24171 DEFVAR_INT ("scroll-margin", &scroll_margin,