diff options
| author | Miles Bader | 2007-12-06 00:46:18 +0000 |
|---|---|---|
| committer | Miles Bader | 2007-12-06 00:46:18 +0000 |
| commit | e5e76c04310d287a56675876dd83e1089faba215 (patch) | |
| tree | a4b4f1cc134e4fd5af42671ec6689e07afe48ff2 | |
| parent | b890d447fb56bfe9f2e4742eda4b3ab4b5f4b32a (diff) | |
| parent | a2afc99dbad3fa9a3170ad72c578451c3aea58a4 (diff) | |
| download | emacs-e5e76c04310d287a56675876dd83e1089faba215.tar.gz emacs-e5e76c04310d287a56675876dd83e1089faba215.zip | |
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-943
| -rwxr-xr-x | configure | 8 | ||||
| -rw-r--r-- | doc/lispref/ChangeLog | 17 | ||||
| -rw-r--r-- | doc/lispref/customize.texi | 5 | ||||
| -rw-r--r-- | doc/lispref/display.texi | 80 | ||||
| -rw-r--r-- | doc/lispref/hooks.texi | 4 | ||||
| -rw-r--r-- | doc/lispref/objects.texi | 2 | ||||
| -rw-r--r-- | etc/NEWS.22 | 5 | ||||
| -rw-r--r-- | lib-src/ChangeLog | 5 | ||||
| -rw-r--r-- | lib-src/etags.c | 14 | ||||
| -rw-r--r-- | lisp/ChangeLog | 15 | ||||
| -rw-r--r-- | lisp/international/mule-cmds.el | 8 | ||||
| -rw-r--r-- | lisp/progmodes/perl-mode.el | 4 | ||||
| -rw-r--r-- | lisp/wid-edit.el | 2 | ||||
| -rw-r--r-- | mac/ChangeLog | 4 | ||||
| -rw-r--r-- | mac/INSTALL | 2 | ||||
| -rw-r--r-- | src/ChangeLog | 43 | ||||
| -rw-r--r-- | src/image.c | 15 | ||||
| -rw-r--r-- | src/mac.c | 51 | ||||
| -rw-r--r-- | src/process.c | 1 | ||||
| -rw-r--r-- | src/sysdep.c | 9 | ||||
| -rw-r--r-- | src/unexmacosx.c | 103 | ||||
| -rw-r--r-- | src/w32proc.c | 9 | ||||
| -rw-r--r-- | src/xdisp.c | 8 |
23 files changed, 353 insertions, 61 deletions
| @@ -412,10 +412,10 @@ else | |||
| 412 | fi | 412 | fi |
| 413 | 413 | ||
| 414 | test \$exitcode = 0") || { | 414 | test \$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 @@ | |||
| 1 | 2007-12-04 Richard Stallman <rms@gnu.org> | ||
| 2 | |||
| 3 | * objects.texi (Symbol Type): Fix typo. | ||
| 4 | |||
| 5 | 2007-12-03 Richard Stallman <rms@gnu.org> | ||
| 6 | |||
| 7 | * hooks.texi (Standard Hooks): Add link to Hooks for Loading. | ||
| 8 | |||
| 1 | 2007-12-01 Glenn Morris <rgm@gnu.org> | 9 | 2007-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 | ||
| 18 | 2007-11-29 Richard Stallman <rms@gnu.org> | ||
| 19 | |||
| 20 | * customize.texi (Composite Types): Document `group' type. | ||
| 21 | |||
| 10 | 2007-11-29 Glenn Morris <rgm@gnu.org> | 22 | 2007-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 | ||
| 49 | 2007-11-24 Richard Stallman <rms@gnu.org> | ||
| 50 | |||
| 51 | * display.texi (Refresh Screen, Forcing Redisplay): | ||
| 52 | Clarify the text and move items around. | ||
| 53 | |||
| 37 | 2007-11-24 Glenn Morris <rgm@gnu.org> | 54 | 2007-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. | |||
| 755 | In the customization buffer, each element is displayed and edited | 755 | In the customization buffer, each element is displayed and edited |
| 756 | separately, according to the type specified for it. | 756 | separately, according to the type specified for it. |
| 757 | 757 | ||
| 758 | @item (group @var{element-types}@dots{}) | ||
| 759 | This works like @code{list} except for the formatting | ||
| 760 | of text in the Custom buffer. @code{list} labels each | ||
| 761 | element value with its tag; @code{group} does not. | ||
| 762 | |||
| 758 | @item (vector @var{element-types}@dots{}) | 763 | @item (vector @var{element-types}@dots{}) |
| 759 | Like @code{list} except that the value must be a vector instead of a | 764 | Like @code{list} except that the value must be a vector instead of a |
| 760 | list. The elements work the same as in @code{list}. | 765 | list. 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}. | |||
| 55 | This function clears and redisplays all visible frames. | 55 | This 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 |
| 59 | redisplay is done, but does not clear them first. | 59 | you call these functions when input is available, they don't redisplay |
| 60 | 60 | immediately, but the requested redisplay does happen | |
| 61 | @defun force-window-update &optional object | 61 | eventually---after all the input has been processed. |
| 62 | This function forces some or all windows to be updated on next redisplay. | ||
| 63 | If @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 | ||
| 65 | windows displaying that buffer. If @var{object} is @code{nil} (or | ||
| 66 | omitted), it forces redisplay of all windows. | ||
| 67 | @end defun | ||
| 68 | |||
| 69 | Processing user input takes absolute priority over redisplay. If you | ||
| 70 | call these functions when input is available, they do nothing | ||
| 71 | immediately, but a full redisplay does happen eventually---after all the | ||
| 72 | input 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. |
| 75 | Some terminal emulators record separate contents for display-oriented | 64 | Some 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 | ||
| 82 | input. With this function you can request an immediate attempt to | ||
| 83 | redisplay, in the middle of Lisp code, without actually waiting for | ||
| 84 | input. | ||
| 85 | |||
| 86 | @defun redisplay &optional force | ||
| 87 | This function tries immediately to redisplay, provided there are no | ||
| 88 | pending input events. It is equivalent to @code{(sit-for 0)}. | ||
| 89 | |||
| 90 | If the optional argument @var{force} is non-@code{nil}, it does all | ||
| 91 | pending redisplay work even if input is available, with no | ||
| 92 | pre-emption. | ||
| 93 | |||
| 94 | The function returns @code{t} if it actually tried to redisplay, and | ||
| 95 | @code{nil} otherwise. A value of @code{t} does not mean that | ||
| 96 | redisplay proceeded to completion; it could have been pre-empted by | ||
| 97 | newly arriving terminal input. | ||
| 98 | @end defun | ||
| 99 | |||
| 100 | @code{redisplay} with no argument tries immediately to redisplay, | ||
| 101 | but has no effect on the usual rules for what parts of the screen to | ||
| 102 | redisplay. By contrast, the following function adds certain windows | ||
| 103 | to the pending redisplay work (as if their contents had completely | ||
| 104 | changed), but doesn't immediately try to do any redisplay work. | ||
| 105 | |||
| 106 | @defun force-window-update &optional object | ||
| 107 | This function forces some or all windows to be updated on next | ||
| 108 | redisplay. If @var{object} is a window, it requires eventual | ||
| 109 | redisplay of that window. If @var{object} is a buffer or buffer name, | ||
| 110 | it requires eventual redisplay of all windows displaying that buffer. | ||
| 111 | If @var{object} is @code{nil} (or omitted), it requires eventual | ||
| 112 | redisplay 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 | ||
| 117 | to put more work on the queue to be done by redisplay whenever there | ||
| 118 | is 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 |
| 93 | at all if input is available before it starts. Most of the time, this | 121 | at all if input is available before it starts. Most of the time, this |
| 94 | is exactly what you want. However, you can prevent preemption by | 122 | is exactly what you want. However, you can prevent preemption by |
| 95 | binding @code{redisplay-dont-pause} to a non-@code{nil} value. | 123 | binding @code{redisplay-dont-pause} to a non-@code{nil} value. |
| 96 | 124 | ||
| 125 | @defvar redisplay-dont-pause | ||
| 126 | If this variable is non-@code{nil}, pending input does not | ||
| 127 | prevent or halt redisplay; redisplay occurs, and finishes, | ||
| 128 | regardless of whether input is available. | ||
| 129 | @end defvar | ||
| 130 | |||
| 97 | @defvar redisplay-preemption-period | 131 | @defvar redisplay-preemption-period |
| 98 | This variable specifies how many seconds Emacs waits between checks | 132 | This variable specifies how many seconds Emacs waits between checks |
| 99 | for new input during redisplay. (The default is 0.1 seconds.) If | 133 | for new input during redisplay. (The default is 0.1 seconds.) If |
| @@ -107,22 +141,6 @@ This variable is only obeyed on graphical terminals. For | |||
| 107 | text terminals, see @ref{Terminal Output}. | 141 | text terminals, see @ref{Terminal Output}. |
| 108 | @end defvar | 142 | @end defvar |
| 109 | 143 | ||
| 110 | @defvar redisplay-dont-pause | ||
| 111 | If this variable is non-@code{nil}, pending input does not | ||
| 112 | prevent or halt redisplay; redisplay occurs, and finishes, | ||
| 113 | regardless of whether input is available. | ||
| 114 | @end defvar | ||
| 115 | |||
| 116 | @defun redisplay &optional force | ||
| 117 | This function performs an immediate redisplay provided there are no | ||
| 118 | pending input events. This is equivalent to @code{(sit-for 0)}. | ||
| 119 | |||
| 120 | If the optional argument @var{force} is non-@code{nil}, it forces an | ||
| 121 | immediate and complete redisplay even if input is available. | ||
| 122 | |||
| 123 | Returns @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, | |||
| 31 | or their values are used). The variables whose names end in | 31 | or 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 | ||
| 34 | A special feature allows you to specify expressions to evaluate if and | ||
| 35 | when a file is loaded (@pxref{Hooks for Loading}). That feature is | ||
| 36 | not 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 |
| 527 | symbol name serves as the printed representation of the symbol. In | 527 | symbol name serves as the printed representation of the symbol. In |
| 528 | ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}, | 528 | ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}), |
| 529 | a symbol's name is unique---no two symbols have the same name. | 529 | a 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 | |||
| 3138 | reads from standard input and marks the produced tags as belonging to | 3138 | reads from standard input and marks the produced tags as belonging to |
| 3139 | the file FILE. | 3139 | the file FILE. |
| 3140 | 3140 | ||
| 3141 | *** The --members option is now the default. | ||
| 3142 | |||
| 3143 | Use --no-members if you want the old default behaviour of not tagging | ||
| 3144 | struct 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 | ||
| 18 | 2007-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 | |||
| 18 | 2007-11-15 Francesco Potort,Al(B <pot@gnu.org> | 23 | 2007-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 */ | |||
| 514 | static bool vgrind_style; /* -v: create vgrind style index output */ | 514 | static bool vgrind_style; /* -v: create vgrind style index output */ |
| 515 | static bool no_warnings; /* -w: suppress warnings (undocumented) */ | 515 | static bool no_warnings; /* -w: suppress warnings (undocumented) */ |
| 516 | static bool cxref_style; /* -x: create cxref style output */ | 516 | static bool cxref_style; /* -x: create cxref style output */ |
| 517 | static bool cplusplus; /* .[hc] means C++, not C */ | 517 | static bool cplusplus; /* .[hc] means C++, not C (undocumented) */ |
| 518 | static bool ignoreindent; /* -I: ignore indentation in C */ | 518 | static bool ignoreindent; /* -I: ignore indentation in C */ |
| 519 | static bool packages_only; /* --packages-only: in Ada, only tag packages*/ | 519 | static 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. */ |
| 626 | static char *default_C_suffixes [] = | 626 | static char *default_C_suffixes [] = |
| 627 | { "c", "h", NULL }; | 627 | { "c", "h", NULL }; |
| 628 | #if CTAGS /* C help for Ctags */ | ||
| 629 | static char default_C_help [] = | ||
| 630 | "In C code, any C function is a tag. Use -t to tag typedefs.\n\ | ||
| 631 | Use -T to tag definitions of `struct', `union' and `enum'.\n\ | ||
| 632 | Use -d to tag `#define' macro definitions and `enum' constants.\n\ | ||
| 633 | Use --globals to tag global variables.\n\ | ||
| 634 | You can tag function declarations and external variables by\n\ | ||
| 635 | using `--declarations', and struct members by using `--members'."; | ||
| 636 | #else /* C help for Etags */ | ||
| 628 | static char default_C_help [] = | 637 | static 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\ |
| 630 | definitions of `struct', `union' and `enum'. `#define' macro\n\ | 639 | definitions 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\ |
| 636 | You can tag function declarations and external variables by\n\ | 645 | You can tag function declarations and external variables by\n\ |
| 637 | using `--declarations'."; | 646 | using `--declarations'."; |
| 647 | #endif /* C help for Ctags and Etags */ | ||
| 638 | 648 | ||
| 639 | static char *Cplusplus_suffixes [] = | 649 | static 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 @@ | |||
| 1 | 2007-12-05 Richard Stallman <rms@gnu.org> | ||
| 2 | |||
| 3 | * wid-edit.el (widget-type): Doc fix. | ||
| 4 | |||
| 5 | 2007-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 | |||
| 10 | 2007-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 | |||
| 1 | 2007-12-05 Reiner Steib <Reiner.Steib@gmx.de> | 16 | 2007-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. |
| 1497 | Only one input method can be enabled at any time in a given buffer. | 1500 | Only 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, | |||
| 1511 | which marks the variable `default-input-method' as set for Custom buffers." | 1514 | which 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 @@ | |||
| 1 | 2007-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 | |||
| 1 | 2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 5 | 2007-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 | ||
| 194 | Emacs should build and run on a PowerMac running Mac OS 8.6 - 9.2 (but | 194 | Emacs should build and run on a PowerMac running Mac OS 8.6 - 9.2 (but |
| 195 | only tested on 9.2.2), and Mac OS X 10.1 - 10.4. | 195 | only tested on 9.2.2), and Mac OS X 10.1 - 10.5. |
| 196 | 196 | ||
| 197 | You will need around 100 MB of disk space for the source files and | 197 | You will need around 100 MB of disk space for the source files and |
| 198 | intermediate files. | 198 | intermediate files. |
diff --git a/src/ChangeLog b/src/ChangeLog index d1507f7edde..f55e4ac786c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,46 @@ | |||
| 1 | 2007-12-05 Magnus Henoch <mange@freemail.hu> | ||
| 2 | |||
| 3 | * process.c (make_process): Initialize pty_flag to 0. | ||
| 4 | |||
| 5 | 2007-12-05 Jason Rumney <jasonr@gnu.org> | ||
| 6 | |||
| 7 | * image.c (xbm_load) [WINDOWSNT]: Shuffle the bits of directly | ||
| 8 | specified XBMs. | ||
| 9 | |||
| 10 | 2007-12-05 Richard Stallman <rms@gnu.org> | ||
| 11 | |||
| 12 | * xdisp.c (syms_of_xdisp) <scroll-conservatively>: Doc fix. | ||
| 13 | |||
| 14 | 2007-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 | |||
| 25 | 2007-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 | |||
| 34 | 2007-12-05 Jason Rumney <jasonr@gnu.org> | ||
| 35 | |||
| 36 | * w32proc.c (sys_spawnve): Quote args with wildcards. | ||
| 37 | |||
| 38 | 2007-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 | |||
| 1 | 2007-12-05 Michael Albinus <michael.albinus@gmx.de> | 44 | 2007-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, |
| @@ -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. */ | ||
| 5009 | static CFMutableDictionaryRef cfsockets_for_select; | ||
| 5010 | |||
| 5007 | static void | 5011 | static void |
| 5008 | socket_callback (s, type, address, data, info) | 5012 | socket_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 | |||
| 5101 | int | ||
| 5102 | mac_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 | |||
| 5092 | int | 5133 | int |
| 5093 | sys_select (nfds, rfds, wfds, efds, timeout) | 5134 | sys_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. */ |
| 900 | static void | 902 | static void |
| 901 | unrelocate (const char *name, off_t reloff, int nrel) | 903 | unrelocate (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. */ | ||
| 964 | static void | ||
| 965 | rebase_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. */ |
| 960 | static void | 993 | static void |
| 961 | copy_dysymtab (struct load_command *lc, long delta) | 994 | copy_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. |
| 24163 | A value of zero means to scroll the text to center point vertically | 24163 | If point moves off-screen, redisplay will scroll by up to |
| 24164 | in the window. */); | 24164 | `scroll-conservatively' lines in order to bring point just barely |
| 24165 | onto the screen again. If that cannot be done, then redisplay | ||
| 24166 | recenters point as usual. | ||
| 24167 | |||
| 24168 | A 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, |