aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2012-02-10 08:29:52 +0100
committerJoakim Verona2012-02-10 08:29:52 +0100
commitdb2e8ff4fd52d6a06cef414787fd031cc26d43fa (patch)
treec0e6fe54a70be21c9efa1f34040ce08499754e74
parent8c5c7f5afa968d06efb6788cf680d5463c389d85 (diff)
parent667ced3a2d224b0f2ab3f2da26468791252c234a (diff)
downloademacs-db2e8ff4fd52d6a06cef414787fd031cc26d43fa.tar.gz
emacs-db2e8ff4fd52d6a06cef414787fd031cc26d43fa.zip
upstream
-rw-r--r--ChangeLog7
-rw-r--r--admin/FOR-RELEASE2
-rw-r--r--admin/notes/bugtracker11
-rw-r--r--doc/emacs/ChangeLog4
-rw-r--r--doc/emacs/files.texi21
-rw-r--r--doc/lispref/ChangeLog29
-rw-r--r--doc/lispref/control.texi19
-rw-r--r--doc/lispref/customize.texi108
-rw-r--r--doc/lispref/display.texi60
-rw-r--r--doc/lispref/keymaps.texi39
-rw-r--r--doc/lispref/modes.texi43
-rw-r--r--doc/lispref/variables.texi11
-rw-r--r--etc/ChangeLog4
-rw-r--r--etc/NEWS77
-rw-r--r--etc/tutorials/TUTORIAL.es519
-rw-r--r--lib/makefile.w32-in1
-rw-r--r--lisp/ChangeLog51
-rw-r--r--lisp/comint.el2
-rw-r--r--lisp/cus-edit.el17
-rw-r--r--lisp/cus-start.el4
-rw-r--r--lisp/custom.el29
-rw-r--r--lisp/emacs-lisp/easy-mmode.el10
-rw-r--r--lisp/gnus/ChangeLog40
-rw-r--r--lisp/gnus/gnus-sum.el9
-rw-r--r--lisp/gnus/nnimap.el23
-rw-r--r--lisp/gnus/shr-color.el9
-rw-r--r--lisp/gnus/shr.el22
-rw-r--r--lisp/image.el7
-rw-r--r--lisp/notifications.el7
-rw-r--r--lisp/progmodes/cc-engine.el4
-rw-r--r--lisp/progmodes/cc-mode.el3
-rw-r--r--lisp/simple.el81
-rw-r--r--lisp/url/ChangeLog16
-rw-r--r--lisp/url/url-cache.el28
-rw-r--r--lisp/url/url-queue.el45
-rw-r--r--lisp/url/url.el7
-rw-r--r--lisp/wid-edit.el11
-rwxr-xr-xmake-dist3
-rw-r--r--nt/ChangeLog18
-rw-r--r--nt/README.W3217
-rw-r--r--nt/gmake.defs2
-rw-r--r--nt/makefile.w32-in19
-rw-r--r--nt/nmake.defs3
-rw-r--r--src/ChangeLog19
-rw-r--r--src/buffer.c14
-rw-r--r--src/doc.c6
-rw-r--r--src/image.c23
-rw-r--r--src/xfaces.c2
48 files changed, 1001 insertions, 505 deletions
diff --git a/ChangeLog b/ChangeLog
index 9712a2f0d0f..d7d9b14c929 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
12012-02-05 Christoph Scholtes <cschol2112@googlemail.com>
2
3 * make-dist (README.W32): Include file in source tarball. (Bug#9750)
4
5 * lib/makefile.w32-in (PRAGMA_SYSTEM_HEADER): Move to platform
6 specific makefiles to support getopt_.h generation with MSVC.
7
12012-02-04 Glenn Morris <rgm@gnu.org> 82012-02-04 Glenn Morris <rgm@gnu.org>
2 9
3 * Makefile.in (uninstall): 10 * Makefile.in (uninstall):
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index 74a758826a1..379363252b2 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -188,7 +188,7 @@ buffers.texi
188commands.texi 188commands.texi
189compile.texi 189compile.texi
190control.texi cyd 190control.texi cyd
191customize.texi 191customize.texi cyd
192debugging.texi 192debugging.texi
193display.texi 193display.texi
194edebug.texi 194edebug.texi
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index dd1ea46ceb2..3c24212ea10 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -640,3 +640,14 @@ I think you also have to add them to 'tags' and 'tags_single_letter'
640in /usr/share/perl5/Debbugs/Config.pm. 640in /usr/share/perl5/Debbugs/Config.pm.
641And update /var/www/Developer.html with a description of what the tag means. 641And update /var/www/Developer.html with a description of what the tag means.
642And the "valid tags" list in /var/www/index.html. 642And the "valid tags" list in /var/www/index.html.
643
644** Backups
645
646The FSF sysadmins handle multi-generational backups of the filesystem
647on debbugs.gnu.org. But if you really want to have your own backup of
648the bug database, you can use rsync (this requires login access to
649debbugs.gnu.org):
650
651 rsync -azvv -e ssh USER@debbugs.gnu.org:/var/lib/debbugs/ DEST
652
653Note that this occupies well over 1G of disk space.
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index ab4161c75b8..a5a54dad049 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,7 @@
12012-02-07 Glenn Morris <rgm@gnu.org>
2
3 * files.texi (File Conveniences): Mention ImageMagick images.
4
12012-02-05 Glenn Morris <rgm@gnu.org> 52012-02-05 Glenn Morris <rgm@gnu.org>
2 6
3 * trouble.texi (Checklist): Mention debug-on-event. 7 * trouble.texi (Checklist): Mention debug-on-event.
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index b2eb68d2812..b34b96126ad 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1915,15 +1915,18 @@ point. Partial Completion mode offers other features extending
1915mode allows you to toggle between displaying the file as an image in 1915mode allows you to toggle between displaying the file as an image in
1916the Emacs buffer, and displaying its underlying text representation, 1916the Emacs buffer, and displaying its underlying text representation,
1917using the command @kbd{C-c C-c} (@code{image-toggle-display}). This 1917using the command @kbd{C-c C-c} (@code{image-toggle-display}). This
1918works only when Emacs can display the specific image type. If the 1918works only when Emacs can display the specific image type@footnote{If
1919displayed image is wider or taller than the frame, the usual point 1919your Emacs was compiled with ImageMagick support, then after using
1920motion keys (@kbd{C-f}, @kbd{C-p}, and so forth) cause different parts 1920@code{imagemagick-register-types}, you can view in Image mode any
1921of the image to be displayed. If the image can be animated, then 1921image type that ImageMagick supports; @pxref{ImageMagick Images,,,
1922the command @kbd{RET} (@code{image-toggle-animation}), will start (or 1922elisp, The Emacs Lisp Reference Manual}}. If the displayed image is wider
1923stop) animating it. Animation plays once, unless the option 1923or taller than the frame, the usual point motion keys (@kbd{C-f},
1924@code{image-animate-loop} is non-@code{nil}. Currently, Emacs only 1924@kbd{C-p}, and so forth) cause different parts of the image to be
1925supports animated GIF files (@pxref{Animated Images,,, elisp, The Emacs 1925displayed. If the image can be animated, then the command @kbd{RET}
1926Lisp Reference Manual}). 1926(@code{image-toggle-animation}), will start (or stop) animating it.
1927Animation plays once, unless the option @code{image-animate-loop} is
1928non-@code{nil}. Currently, Emacs only supports animated GIF files
1929(@pxref{Animated Images,,, elisp, The Emacs Lisp Reference Manual}).
1927 1930
1928@findex thumbs-mode 1931@findex thumbs-mode
1929@findex mode, thumbs 1932@findex mode, thumbs
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index bd7b27bbe60..a172f82d2e5 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,9 +1,38 @@
12012-02-07 Glenn Morris <rgm@gnu.org>
2
3 * modes.texi (Defining Minor Modes):
4 Expand on args of defined minor modes.
5
62012-02-07 Chong Yidong <cyd@gnu.org>
7
8 * variables.texi (Creating Buffer-Local): Minor clarification
9 to buffer-local-variables doc (Bug#10715).
10
112012-02-07 Glenn Morris <rgm@gnu.org>
12
13 * display.texi (ImageMagick Images): General update.
14 Move most details of imagemagick-render-type to the variable's doc.
15
162012-02-06 Glenn Morris <rgm@gnu.org>
17
18 * keymaps.texi (Tool Bar): Mention separators.
19 (Inheritance and Keymaps):
20 Mention make-composed-keymap and multiple inheritance.
21
22 * modes.texi (Running Hooks): Mention run-hook-wrapped.
23
24 * control.texi (Handling Errors):
25 Mention condition-case-no-debug and with-demoted-errors.
26
12012-02-05 Chong Yidong <cyd@gnu.org> 272012-02-05 Chong Yidong <cyd@gnu.org>
2 28
3 * customize.texi (Common Keywords): Minor clarifications. 29 * customize.texi (Common Keywords): Minor clarifications.
4 Document custom-unlispify-remove-prefixes. 30 Document custom-unlispify-remove-prefixes.
5 (Variable Definitions): Backquotes in defcustom seem to work fine 31 (Variable Definitions): Backquotes in defcustom seem to work fine
6 now. Various other copyedits. 32 now. Various other copyedits.
33 (Simple Types): Copyedits. Document color selector.
34 (Composite Types): Copyedits.
35 (Splicing into Lists): Clarifications.
7 36
8 * eval.texi (Backquote): Move from macros.texi. 37 * eval.texi (Backquote): Move from macros.texi.
9 38
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 0511f21007d..3673f753a0a 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -891,9 +891,8 @@ establishing an error handler, with the special form
891 891
892@noindent 892@noindent
893This deletes the file named @var{filename}, catching any error and 893This deletes the file named @var{filename}, catching any error and
894returning @code{nil} if an error occurs@footnote{ 894returning @code{nil} if an error occurs. (You can use the macro
895Actually, you should use @code{ignore-errors} in such a simple case; 895@code{ignore-errors} for a simple case like this; see below.)
896see below.}.
897 896
898 The @code{condition-case} construct is often used to trap errors that 897 The @code{condition-case} construct is often used to trap errors that
899are predictable, such as failure to open a file in a call to 898are predictable, such as failure to open a file in a call to
@@ -949,6 +948,13 @@ The effect of @code{debug} here is only to prevent
949given error will invoke the debugger only if @code{debug-on-error} and 948given error will invoke the debugger only if @code{debug-on-error} and
950the other usual filtering mechanisms say it should. @xref{Error Debugging}. 949the other usual filtering mechanisms say it should. @xref{Error Debugging}.
951 950
951@defmac condition-case-no-debug var protected-form handlers@dots{}
952The macro @code{condition-case-no-debug} provides another way to
953handle debugging of such forms. It behaves exactly like
954@code{condition-case}, unless the variable @code{debug-on-error} is
955non-@code{nil}, in which case it does not handle any errors at all.
956@end defmac
957
952 Once Emacs decides that a certain handler handles the error, it 958 Once Emacs decides that a certain handler handles the error, it
953returns control to that handler. To do so, Emacs unbinds all variable 959returns control to that handler. To do so, Emacs unbinds all variable
954bindings made by binding constructs that are being exited, and 960bindings made by binding constructs that are being exited, and
@@ -1122,6 +1128,13 @@ Here's the example at the beginning of this subsection rewritten using
1122@end smallexample 1128@end smallexample
1123@end defmac 1129@end defmac
1124 1130
1131@defmac with-demoted-errors body@dots{}
1132This macro is like a milder version of @code{ignore-errors}. Rather
1133than suppressing errors altogether, it converts them into messages.
1134Use this form around code that is not expected to signal errors,
1135but should be robust if one does occur. Note that this macro
1136uses @code{condition-case-no-debug} rather than @code{condition-case}.
1137@end defmac
1125 1138
1126@node Error Symbols 1139@node Error Symbols
1127@subsubsection Error Symbols and Condition Names 1140@subsubsection Error Symbols and Condition Names
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index b8c30fff8ae..4c3adee0db5 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -519,30 +519,28 @@ Introduction, widget, The Emacs Widget Library}, for details.
519@node Simple Types 519@node Simple Types
520@subsection Simple Types 520@subsection Simple Types
521 521
522 This section describes all the simple customization types. 522 This section describes all the simple customization types. For
523several of these customization types, the customization widget
524provides inline completion with @kbd{C-M-i} or @kbd{M-@key{TAB}}.
523 525
524@table @code 526@table @code
525@item sexp 527@item sexp
526The value may be any Lisp object that can be printed and read back. You 528The value may be any Lisp object that can be printed and read back.
527can use @code{sexp} as a fall-back for any option, if you don't want to 529You can use @code{sexp} as a fall-back for any option, if you don't
528take the time to work out a more specific type to use. 530want to take the time to work out a more specific type to use.
529 531
530@item integer 532@item integer
531The value must be an integer, and is represented textually 533The value must be an integer.
532in the customization buffer.
533 534
534@item number 535@item number
535The value must be a number (floating point or integer), and is 536The value must be a number (floating point or integer).
536represented textually in the customization buffer.
537 537
538@item float 538@item float
539The value must be a floating point number, and is represented 539The value must be a floating point number.
540textually in the customization buffer.
541 540
542@item string 541@item string
543The value must be a string, and the customization buffer shows just the 542The value must be a string. The customization buffer shows the string
544contents, with no delimiting @samp{"} characters and no quoting with 543without delimiting @samp{"} characters or @samp{\} quotes.
545@samp{\}.
546 544
547@item regexp 545@item regexp
548Like @code{string} except that the string must be a valid regular 546Like @code{string} except that the string must be a valid regular
@@ -554,39 +552,35 @@ integer, but this type shows the value by inserting the character in the
554buffer, rather than by showing the number. 552buffer, rather than by showing the number.
555 553
556@item file 554@item file
557The value must be a file name, and you can do completion with 555The value must be a file name. The widget provides completion.
558@kbd{M-@key{TAB}}.
559 556
560@item (file :must-match t) 557@item (file :must-match t)
561The value must be a file name for an existing file, and you can do 558The value must be a file name for an existing file. The widget
562completion with @kbd{M-@key{TAB}}. 559provides completion.
563 560
564@item directory 561@item directory
565The value must be a directory name, and you can do completion with 562The value must be a directory name. The widget provides completion.
566@kbd{M-@key{TAB}}.
567 563
568@item hook 564@item hook
569The value must be a list of functions (or a single function, but that is 565The value must be a list of functions. This customization type is
570obsolete usage). This customization type is used for hook variables. 566used for hook variables. You can use the @code{:options} keyword in a
571You can use the @code{:options} keyword in a hook variable's 567hook variable's @code{defcustom} to specify a list of functions
572@code{defcustom} to specify a list of functions recommended for use in 568recommended for use in the hook; @xref{Variable Definitions}.
573the hook; see @ref{Variable Definitions}.
574 569
575@item symbol 570@item symbol
576The value must be a symbol. It appears in the customization buffer as 571The value must be a symbol. It appears in the customization buffer as
577the name of the symbol. 572the symbol name. The widget provides completion.
578 573
579@item function 574@item function
580The value must be either a lambda expression or a function name. When 575The value must be either a lambda expression or a function name. The
581it is a function name, you can do completion with @kbd{M-@key{TAB}}. 576widget provides completion for function names.
582 577
583@item variable 578@item variable
584The value must be a variable name, and you can do completion with 579The value must be a variable name. The widget provides completion.
585@kbd{M-@key{TAB}}.
586 580
587@item face 581@item face
588The value must be a symbol which is a face name, and you can do 582The value must be a symbol which is a face name. The widget provides
589completion with @kbd{M-@key{TAB}}. 583completion.
590 584
591@item boolean 585@item boolean
592The value is boolean---either @code{nil} or @code{t}. Note that by 586The value is boolean---either @code{nil} or @code{t}. Note that by
@@ -600,8 +594,10 @@ The value must be a coding-system name, and you can do completion with
600@kbd{M-@key{TAB}}. 594@kbd{M-@key{TAB}}.
601 595
602@item color 596@item color
603The value must be a valid color name, and you can do completion with 597The value must be a valid color name. The widget provides completion
604@kbd{M-@key{TAB}}. A sample is provided. 598for color names, as well as a sample and a button for selecting a
599color name from a list of color names shown in a @samp{*Colors*}
600buffer.
605@end table 601@end table
606 602
607@node Composite Types 603@node Composite Types
@@ -635,9 +631,8 @@ its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
635symbol)} is a customization type which matches values such as 631symbol)} is a customization type which matches values such as
636@code{("foo" . foo)}. 632@code{("foo" . foo)}.
637 633
638In the customization buffer, the @sc{car} and the @sc{cdr} are 634In the customization buffer, the @sc{car} and @sc{cdr} are displayed
639displayed and edited separately, each according to the type 635and edited separately, each according to their specified type.
640that you specify for it.
641 636
642@item (list @var{element-types}@dots{}) 637@item (list @var{element-types}@dots{})
643The value must be a list with exactly as many elements as the 638The value must be a list with exactly as many elements as the
@@ -680,7 +675,7 @@ specified by the @code{:options} keyword argument.
680 675
681The argument to the @code{:options} keywords should be a list of 676The argument to the @code{:options} keywords should be a list of
682specifications for reasonable keys in the alist. Ordinarily, they are 677specifications for reasonable keys in the alist. Ordinarily, they are
683simply atoms, which stand for themselves as. For example: 678simply atoms, which stand for themselves. For example:
684 679
685@smallexample 680@smallexample
686:options '("foo" "bar" "baz") 681:options '("foo" "bar" "baz")
@@ -753,14 +748,6 @@ key, using variations of this trick:
753 "Alist of basic info about people. 748 "Alist of basic info about people.
754Each element has the form (NAME AGE MALE-FLAG)." 749Each element has the form (NAME AGE MALE-FLAG)."
755 :type '(alist :value-type (group integer boolean))) 750 :type '(alist :value-type (group integer boolean)))
756
757(defcustom pets '(("brian")
758 ("dorith" "dog" "guppy")
759 ("ken" "cat"))
760 "Alist of people's pets.
761In an element (KEY . VALUE), KEY is the person's name,
762and the VALUE is a list of that person's pets."
763 :type '(alist :value-type (repeat string)))
764@end smallexample 751@end smallexample
765 752
766@item (plist :key-type @var{key-type} :value-type @var{value-type}) 753@item (plist :key-type @var{key-type} :value-type @var{value-type})
@@ -770,9 +757,8 @@ that (i) the information is stored as a property list,
770defaults to @code{symbol} rather than @code{sexp}. 757defaults to @code{symbol} rather than @code{sexp}.
771 758
772@item (choice @var{alternative-types}@dots{}) 759@item (choice @var{alternative-types}@dots{})
773The value must fit at least one of @var{alternative-types}. 760The value must fit one of @var{alternative-types}. For example,
774For example, @code{(choice integer string)} allows either an 761@code{(choice integer string)} allows either an integer or a string.
775integer or a string.
776 762
777In the customization buffer, the user selects an alternative 763In the customization buffer, the user selects an alternative
778using a menu, and can then edit the value in the usual way for that 764using a menu, and can then edit the value in the usual way for that
@@ -964,20 +950,18 @@ whatever follows the last keyword-value pair.
964@subsection Splicing into Lists 950@subsection Splicing into Lists
965 951
966 The @code{:inline} feature lets you splice a variable number of 952 The @code{:inline} feature lets you splice a variable number of
967elements into the middle of a list or vector. You use it in a 953elements into the middle of a @code{list} or @code{vector}
968@code{set}, @code{choice} or @code{repeat} type which appears among the 954customization type. You use it by adding @code{:inline t} to a type
969element-types of a @code{list} or @code{vector}. 955specification which is contained in a @code{list} or @code{vector}
970 956specification.
971 Normally, each of the element-types in a @code{list} or @code{vector} 957
972describes one and only one element of the list or vector. Thus, if an 958 Normally, each entry in a @code{list} or @code{vector} type
973element-type is a @code{repeat}, that specifies a list of unspecified 959specification describes a single element type. But when an entry
974length which appears as one element. 960contains @code{:inline t}, the value it matches is merged directly
975 961into the containing sequence. For example, if the entry matches a
976 But when the element-type uses @code{:inline}, the value it matches is 962list with three elements, those become three elements of the overall
977merged directly into the containing sequence. For example, if it 963sequence. This is analogous to @samp{,@@} in a backquote construct
978matches a list with three elements, those become three elements of the 964(@pxref{Backquote}).
979overall sequence. This is analogous to using @samp{,@@} in the backquote
980construct.
981 965
982 For example, to specify a list whose first element must be @code{baz} 966 For example, to specify a list whose first element must be @code{baz}
983and whose remaining arguments should be zero or more of @code{foo} and 967and whose remaining arguments should be zero or more of @code{foo} and
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index e97e6c264a3..d5870fd3abb 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -4527,30 +4527,51 @@ specifying the bounding box of the PostScript image, analogous to the
4527support, you can use the ImageMagick library to load many image formats. 4527support, you can use the ImageMagick library to load many image formats.
4528 4528
4529@findex imagemagick-types 4529@findex imagemagick-types
4530@findex imagemagick-register-types
4530The function @code{imagemagick-types} returns a list of image file 4531The function @code{imagemagick-types} returns a list of image file
4531extensions that your installation of ImageMagick supports. To enable 4532extensions that your installation of ImageMagick supports. To enable
4532support, you must call the function @code{imagemagick-register-types}. 4533support, you must call the function @code{imagemagick-register-types}.
4534This enables Emacs to visit these file types in @code{image-mode}
4535(@pxref{File Conveniences,,, emacs, The GNU Emacs Manual}).
4536If your Emacs was not compiled with ImageMagick support, then
4537@code{imagemagick-types} will be undefined and
4538@code{imagemagick-register-types} will do nothing.
4533 4539
4534@vindex imagemagick-types-inhibit 4540@vindex imagemagick-types-inhibit
4535The variable @code{imagemagick-types-inhibit} specifies a list of 4541The variable @code{imagemagick-types-inhibit} specifies a list of
4536image types that you do @emph{not} want ImageMagick to handle. There 4542image types that you do @emph{not} want ImageMagick to handle. It is
4537may be overlap between image loaders in your Emacs installation, and 4543a list of symbols, each of which has the same name as one of the
4538you may prefer to use a different one for a given image type (which 4544format tags used internally by ImageMagick (i.e., as
4539@c FIXME how is this priority determined? 4545@code{imagemagick-types} returns). ImageMagick has a very broad
4540loader will be used in practice depends on the priority of the loaders). 4546definition of what an image is, for example it includes such file
4541@c FIXME why are these uppercase when image-types is lower-case? 4547types as C files and HTML files. It is not appropriate to treat these
4542@c FIXME what are the possible options? Are these actually file extensions? 4548as images in Emacs. You can add any other ImageMagick type that you
4543For example, if you never want to use the ImageMagick loader to use 4549wish to this list.
4550@ignore
4551@c I don't know what this means. I suspect it means eg loading jpg
4552@c images via libjpeg or ImageMagick. But it doesn't work.
4553@c If you don't have libjpeg support compiled in, you cannot
4554@c view jpeg images, even if you have imagemagick support:
4555@c http://debbugs.gnu.org/9045
4556@c And if you have both compiled in, then you always get
4557@c the libjpeg version:
4558@c http://debbugs.gnu.org/10746
4559There may be overlap between image loaders in your Emacs installation,
4560and you may prefer to use a different one for a given image type
4561(which loader will be used in practice depends on the priority of the
4562loaders).
4563For example, if you never want to use the ImageMagick loader to view
4544JPEG files, add @code{JPG} to this list. 4564JPEG files, add @code{JPG} to this list.
4565@end ignore
4566Note that ImageMagick often distinguishes between several different
4567types of a particular format (e.g., @code{JPG}, @code{JPEG},
4568@code{PJPEG}, etc.), and you may need to add all versions to this
4569list.
4545 4570
4571@c Not sure this should even be in the manual at all.
4546@vindex imagemagick-render-type 4572@vindex imagemagick-render-type
4547You can set the variable @code{imagemagick-render-type} to choose 4573If you wish to experiment with the performance of the ImageMagick
4548between screen render methods for the ImageMagick loader. The options 4574loader, see the variable @code{imagemagick-render-type}.
4549are: @code{0}, a conservative method which works with older
4550@c FIXME details of this "newer method"?
4551@c Presumably it is faster but may be less "robust"?
4552ImageMagick versions (it is a bit slow, but robust); and @code{1},
4553a newer ImageMagick method.
4554 4575
4555Images loaded with ImageMagick support a few new display specifications: 4576Images loaded with ImageMagick support a few new display specifications:
4556 4577
@@ -4565,10 +4586,11 @@ aspect ratio may not be preserved.
4565Specifies a rotation angle in degrees. 4586Specifies a rotation angle in degrees.
4566 4587
4567@item :index 4588@item :index
4568Specifies which image to view inside an image bundle file format, such 4589@c Doesn't work: http://debbugs.gnu.org/7978
4569as TIFF or DJVM. You can use the @code{image-metadata} function to 4590This has the same meaning as it does for GIF images (@pxref{GIF Images}),
4570retrieve the total number of images in an image bundle (this is 4591i.e. it specifies which image to view inside an image bundle file format
4571similar to how GIF files work). 4592such as DJVM. You can use the @code{image-metadata} function to
4593retrieve the total number of images in an image bundle.
4572@end table 4594@end table
4573 4595
4574 4596
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index 8e03ade285f..a8528a548fc 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -432,6 +432,34 @@ for every numeric character code without modifier bits, even if it is
432@code{nil}, so these character's bindings are never inherited from 432@code{nil}, so these character's bindings are never inherited from
433the parent keymap. 433the parent keymap.
434 434
435@cindex keymap inheritance from multiple maps
436 Sometimes you want to make a keymap that inherits from more than one
437map. You can use the function @code{make-composed-keymap} for this.
438
439@defun make-composed-keymap maps &optional parent
440This function returns a new keymap composed of the existing keymap(s)
441@var{maps}, and optionally inheriting from a parent keymap
442@var{parent}. @var{maps} can be a single keymap or a list of more
443than one. When looking up a key in the resulting new map, Emacs
444searches in each of the @var{maps}, and then in @var{parent}, stopping
445at the first match. A @code{nil} binding in any one of @var{maps}
446overrides any binding in @var{parent}, but not a non-@code{nil} binding
447in any other of the @var{maps}.
448@end defun
449
450@noindent For example, here is how Emacs sets the parent of
451@code{help-mode-map}, such that it inherits from both
452@code{button-buffer-map} and @code{special-mode-map}:
453
454@example
455(defvar help-mode-map
456 (let ((map (make-sparse-keymap)))
457 (set-keymap-parent map (make-composed-keymap button-buffer-map
458 special-mode-map))
459 ... map) ... )
460@end example
461
462
435@node Prefix Keys 463@node Prefix Keys
436@section Prefix Keys 464@section Prefix Keys
437@cindex prefix key 465@cindex prefix key
@@ -2318,7 +2346,7 @@ The various toolkits with which you can build Emacs do not all support
2318the same set of features for menus. Some code works as expected with 2346the same set of features for menus. Some code works as expected with
2319one toolkit, but not under another. 2347one toolkit, but not under another.
2320 2348
2321One example is menu actions or buttons in a top-level menu-bar. The 2349One example is menu actions or buttons in a top-level menu bar. The
2322following works with the Lucid toolkit or on MS Windows, but not with 2350following works with the Lucid toolkit or on MS Windows, but not with
2323GTK or Nextstep, where clicking on the item has no effect. 2351GTK or Nextstep, where clicking on the item has no effect.
2324 2352
@@ -2658,6 +2686,15 @@ The @code{:rtl} property specifies an alternative image to use for
2658right-to-left languages. Only the Gtk+ version of Emacs supports this 2686right-to-left languages. Only the Gtk+ version of Emacs supports this
2659at present. 2687at present.
2660 2688
2689Like the menu bar, the tool bar can display separators (@pxref{Menu
2690Separators}). Tool bar separators are vertical rather than
2691horizontal, though, and only a single style is supported. Separators
2692are represented in the tool bar keymap in the same way as for the
2693menu bar, i.e. using a @code{(menu-item "--"}) entry. The Gtk+ and
2694Nextstep tool bars render separators natively, otherwise Emacs selects
2695a separator image that is appropriate for the display. Note that tool
2696bar separators do not support any properties, such as @code{:visible}.
2697
2661The default tool bar is defined so that items specific to editing do not 2698The default tool bar is defined so that items specific to editing do not
2662appear for major modes whose command symbol has a @code{mode-class} 2699appear for major modes whose command symbol has a @code{mode-class}
2663property of @code{special} (@pxref{Major Mode Conventions}). Major 2700property of @code{special} (@pxref{Major Mode Conventions}). Major
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 638ab89e37f..052fd037167 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -163,6 +163,14 @@ A wrapper-hook also allows for a hook function to completely replace the
163default definition (by not calling @var{fun}). 163default definition (by not calling @var{fun}).
164@end defmac 164@end defmac
165 165
166@defun run-hook-wrapped hook wrap-function &rest args
167This function is similar to @code{run-hook-with-args-until-success}.
168Like that function, it runs the functions on the abnormal hook
169@code{hook}, stopping at the first one that returns non-@code{nil}.
170Instead of calling the hook functions directly, though, it actually
171calls @code{wrap-function} with arguments @code{fun} and @code{args}.
172@end defun
173
166@node Setting Hooks 174@node Setting Hooks
167@subsection Setting Hooks 175@subsection Setting Hooks
168 176
@@ -1372,11 +1380,21 @@ implementing a mode in one self-contained definition.
1372@defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{} 1380@defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{}
1373This macro defines a new minor mode whose name is @var{mode} (a 1381This macro defines a new minor mode whose name is @var{mode} (a
1374symbol). It defines a command named @var{mode} to toggle the minor 1382symbol). It defines a command named @var{mode} to toggle the minor
1375mode, with @var{doc} as its documentation string. By default, it also 1383mode, with @var{doc} as its documentation string.
1376defines a variable named @var{mode}, which is set to @code{t} or 1384
1377@code{nil} by enabling or disabling the mode. The variable is 1385The toggle command takes one optional (prefix) argument.
1378initialized to @var{init-value}. Except in unusual circumstances (see 1386If called interactively with no argument it toggles the mode on or off.
1379below), this value must be @code{nil}. 1387A positive prefix argument enables the mode, any other prefix argument
1388disables it. From Lisp, an argument of @code{toggle} toggles the mode,
1389whereas an omitted or @code{nil} argument enables the mode.
1390This makes it easy to enable the minor mode in a major mode hook, for example.
1391If @var{doc} is nil, the macro supplies a default documentation string
1392explaining the above.
1393
1394By default, it also defines a variable named @var{mode}, which is set to
1395@code{t} or @code{nil} by enabling or disabling the mode. The variable
1396is initialized to @var{init-value}. Except in unusual circumstances
1397(see below), this value must be @code{nil}.
1380 1398
1381The string @var{lighter} says what to display in the mode line 1399The string @var{lighter} says what to display in the mode line
1382when the mode is enabled; if it is @code{nil}, the mode is not displayed 1400when the mode is enabled; if it is @code{nil}, the mode is not displayed
@@ -1470,9 +1488,10 @@ for this macro.
1470@smallexample 1488@smallexample
1471(define-minor-mode hungry-mode 1489(define-minor-mode hungry-mode
1472 "Toggle Hungry mode. 1490 "Toggle Hungry mode.
1473With no argument, this command toggles the mode. 1491Interactively with no argument, this command toggles the mode.
1474Non-null prefix argument turns on the mode. 1492A positive prefix argument enables the mode, any other prefix
1475Null prefix argument turns off the mode. 1493argument disables it. From Lisp, argument omitted or nil enables
1494the mode, `toggle' toggles the state.
1476 1495
1477When Hungry mode is enabled, the control delete key 1496When Hungry mode is enabled, the control delete key
1478gobbles all preceding whitespace except the last. 1497gobbles all preceding whitespace except the last.
@@ -1501,13 +1520,7 @@ minor modes don't need any.
1501@smallexample 1520@smallexample
1502(define-minor-mode hungry-mode 1521(define-minor-mode hungry-mode
1503 "Toggle Hungry mode. 1522 "Toggle Hungry mode.
1504With no argument, this command toggles the mode. 1523...rest of documentation as before..."
1505Non-null prefix argument turns on the mode.
1506Null prefix argument turns off the mode.
1507
1508When Hungry mode is enabled, the control delete key
1509gobbles all preceding whitespace except the last.
1510See the command \\[hungry-electric-delete]."
1511 ;; The initial value. 1524 ;; The initial value.
1512 :init-value nil 1525 :init-value nil
1513 ;; The indicator for the mode line. 1526 ;; The indicator for the mode line.
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index bdb16cd10a8..ab3a4edc0ac 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1317,11 +1317,12 @@ value (@pxref{Default Value}) of @var{variable} instead.
1317 1317
1318@defun buffer-local-variables &optional buffer 1318@defun buffer-local-variables &optional buffer
1319This function returns a list describing the buffer-local variables in 1319This function returns a list describing the buffer-local variables in
1320buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer is 1320buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer
1321used.) It returns an association list (@pxref{Association Lists}) in 1321is used.) Normally, each list element has the form
1322which each element contains one buffer-local variable and its value. 1322@w{@code{(@var{sym} . @var{val})}}, where @var{sym} is a buffer-local
1323However, when a variable's buffer-local binding in @var{buffer} is void, 1323variable (a symbol) and @var{val} is its buffer-local value. But when
1324then the variable appears directly in the resulting list. 1324a variable's buffer-local binding in @var{buffer} is void, its list
1325element is just @var{sym}.
1325 1326
1326@example 1327@example
1327@group 1328@group
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 9951e131e15..0ce71a21d06 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
12012-02-06 Juanma Barranquero <lekktu@gmail.com>
2
3 * tutorials/TUTORIAL.es: Updated; synchronize with TUTORIAL.
4
12012-02-03 Pieter Schoenmakers <tiggr@tiggr.net> 52012-02-03 Pieter Schoenmakers <tiggr@tiggr.net>
2 6
3 * tutorials/TUTORIAL.nl: Updated; synchronize with TUTORIAL. 7 * tutorials/TUTORIAL.nl: Updated; synchronize with TUTORIAL.
diff --git a/etc/NEWS b/etc/NEWS
index 2cdfcf1dad4..5866a065252 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -47,6 +47,7 @@ found at build time. To prevent this, use the configure option
47This happens by default if a suitably recent version of the library is 47This happens by default if a suitably recent version of the library is
48found at build time. To prevent this, use the configure option 48found at build time. To prevent this, use the configure option
49`--without-imagemagick'. See below for ImageMagick features. 49`--without-imagemagick'. See below for ImageMagick features.
50This feature is not available for the Nextstep or MS ports.
50 51
51--- 52---
52** Emacs can be compiled with libxml2 support. 53** Emacs can be compiled with libxml2 support.
@@ -995,15 +996,27 @@ coordinate in the POSITION list now counts from the top of the text
995area, excluding any header line. Previously, it counted from the top 996area, excluding any header line. Previously, it counted from the top
996of the header line. 997of the header line.
997 998
998** A backquote not followed by a space is now always treated as new-style. 999---
1000** Support for "old-style" backquotes, which have been obsolete for
1001more than 10 years, has been further reduced. Now a backquote not
1002followed by a space is always treated as a "new-style" backquote.
1003Please consider completely removing all "old-style" backquotes from
1004your code as a matter of some urgency. If your code uses backquotes
1005as documented in the Elisp manual, and compiles without warning, then
1006you have nothing to do in this regard. Code not following the
1007appropriate conventions may fail to compile. The most common cause of
1008trouble seems to be an old-style backquote followed by a newline.
999 1009
1000--- 1010---
1001** view-buffer now treats special mode-class in the same way that 1011** view-buffer now treats special mode-class in the same way that
1002view-file has since Emacs 22 (ie, it won't enable View mode if the 1012view-file has since Emacs 22 (ie, it won't enable View mode if the
1003major-mode is special). 1013major-mode is special).
1004 1014
1005** Passing a nil argument to a minor mode function now turns the mode 1015** Passing a nil argument to a minor mode defined by define-minor-mode
1006ON unconditionally. 1016now turns the mode ON unconditionally. This is so that you can write, e.g.
1017 (add-hook 'text-mode-hook 'foo-minor-mode)
1018to enable foo-minor-mode in Text mode buffers, thus removing the need
1019for `turn-on-foo-minor-mode' style functions.
1007 1020
1008+++ 1021+++
1009** During startup, Emacs no longer adds entries for `menu-bar-lines' 1022** During startup, Emacs no longer adds entries for `menu-bar-lines'
@@ -1030,20 +1043,32 @@ Eg simply pass the result through substring-no-properties if you need this.
1030** The menu bar bindings's caches are not used any more. 1043** The menu bar bindings's caches are not used any more.
1031Use (where-is-internal <def> nil t) instead. 1044Use (where-is-internal <def> nil t) instead.
1032 1045
1033** The following obsolete functions and aliases were removed:
1034comint-kill-output, decompose-composite-char, outline-visible,
1035internal-find-face, internal-get-face, frame-update-faces,
1036frame-update-face-colors, x-frob-font-weight, x-frob-font-slant,
1037x-make-font-bold, x-make-font-demibold, x-make-font-unbold
1038x-make-font-italic, x-make-font-oblique, x-make-font-unitalic
1039x-make-font-bold-italic, mldrag-drag-mode-line, mldrag-drag-vertical-line,
1040iswitchb-default-keybindings, char-bytes, isearch-return-char,
1041make-local-hook
1042
1043+++ 1046+++
1044** The following obsolete variables and varaliases were removed: 1047** The following obsolete (mostly since at least 21.1) functions and aliases
1045checkdoc-minor-keymap, vc-header-alist, directory-sep-char, 1048have been removed (the appropriate new function is given in parentheses):
1046font-lock-defaults-alist, and e (use float-e). 1049comint-kill-output (comint-delete-output),
1050decompose-composite-char (char-to-string),
1051outline-visible (outline-invisible-p),
1052internal-find-face (facep), internal-get-face (facep and check-face),
1053frame-update-faces (not needed),
1054frame-update-face-colors (frame-set-background-mode),
1055x-frob-font-weight and x-frob-font-slant (appropriate make-face-* function),
1056x-make-font-bold and x-make-font-demibold (make-face-bold),
1057x-make-font-italic and x-make-font-oblique (make-face-italic),
1058x-make-font-bold-italic (make-face-bold-italic),
1059x-make-font-unbold (make-face-unbold),
1060x-make-font-unitalic (make-face-unitalic),
1061mldrag-drag-mode-line (mouse-drag-mode-line),
1062mldrag-drag-vertical-line (mouse-drag-vertical-line),
1063iswitchb-default-keybindings (iswitchb-mode), char-bytes (== 1),
1064isearch-return-char (isearch-printing-char), make-local-hook (not needed)
1065
1066+++
1067** The following obsolete (mostly since at least 21.1) variables and varaliases
1068have been removed (the appropriate new variable is given in parentheses):
1069checkdoc-minor-keymap (checkdoc-minor-mode-map),
1070vc-header-alist (vc-BACKEND-header), directory-sep-char (== ?/)
1071font-lock-defaults-alist (font-lock-defaults), and e (float-e).
1047 1072
1048--- 1073---
1049** The following obsolete files were removed: 1074** The following obsolete files were removed:
@@ -1236,15 +1261,21 @@ Instead, the offending function is removed.
1236 1261
1237** New hook types 1262** New hook types
1238 1263
1264+++
1239*** New function `run-hook-wrapped' for running an abnormal hook by 1265*** New function `run-hook-wrapped' for running an abnormal hook by
1240passing the hook functions as arguments to a "wrapping" function. 1266passing the hook functions as arguments to a "wrapping" function.
1267Like `run-hook-with-args-until-success', it stops at the first
1268non-nil return value.
1269
1241+++ 1270+++
1242*** New macro `with-wrapper-hook' for running an abnormal hook as a 1271*** New macro `with-wrapper-hook' for running an abnormal hook as a
1243set of "wrapping" filters, similar to around advice. 1272set of "wrapping" filters, similar to around advice.
1244(A version of this macro was actually added in Emacs 23.2 but was not 1273(A version of this macro was actually added in Emacs 23.2 but was not
1245advertised at the time.) 1274advertised at the time.)
1246 1275
1247** Macro `with-demoted-errors' was added in Emacs 23.1 but not advertised. 1276+++
1277** The macros `condition-case-no-debug' and `with-demoted-errors' were
1278added in Emacs 23.1, but not advertised.
1248 1279
1249+++ 1280+++
1250** The new function `server-eval-at' allows evaluation of Lisp forms on 1281** The new function `server-eval-at' allows evaluation of Lisp forms on
@@ -1329,6 +1360,7 @@ argument is supplied (see Trash changes, above).
1329or RGB triplet, instead of signaling an error if the user provides 1360or RGB triplet, instead of signaling an error if the user provides
1330invalid input. 1361invalid input.
1331 1362
1363+++
1332** Tool-bars can display separators. 1364** Tool-bars can display separators.
1333Tool-bar separators are handled like menu separators in menu-bar maps, 1365Tool-bar separators are handled like menu separators in menu-bar maps,
1334i.e. via menu entries of the form `(menu-item "--")'. 1366i.e. via menu entries of the form `(menu-item "--")'.
@@ -1352,13 +1384,14 @@ is being animated.
1352*** `image-extension-data' has been renamed to `image-metadata'. 1384*** `image-extension-data' has been renamed to `image-metadata'.
1353The old name is an obsolete alias to the new one. 1385The old name is an obsolete alias to the new one.
1354 1386
1387+++
1355*** Emacs can be compiled with ImageMagick support. 1388*** Emacs can be compiled with ImageMagick support.
1389This feature is not available for the Nextstep or MS ports.
1356Then the function `imagemagick-types' returns a list of image file 1390Then the function `imagemagick-types' returns a list of image file
1357extensions that your installation of ImageMagick supports. The 1391extensions that your installation of ImageMagick supports. The
1358function `imagemagick-register-types' enables ImageMagick support for 1392function `imagemagick-register-types' enables ImageMagick support for
1359these image types, minus those listed in `imagemagick-types-inhibit'. 1393these image types, minus those listed in `imagemagick-types-inhibit'.
1360 1394Visiting one of these file types will then use Image mode.
1361See the Emacs Lisp Reference Manual for more information.
1362 1395
1363** XML and HTML parsing 1396** XML and HTML parsing
1364If Emacs is compiled with libxml2 support, there are two new functions: 1397If Emacs is compiled with libxml2 support, there are two new functions:
@@ -1405,7 +1438,11 @@ as well as those in the -*- line.
1405--- 1438---
1406** rx.el has a new `group-n' construct for explicitly numbered groups. 1439** rx.el has a new `group-n' construct for explicitly numbered groups.
1407 1440
1408** keymaps can inherit from multiple parents. 1441+++
1442** New function `make-composed-keymap' that constructs a new keymap
1443from multiple input maps. You can use this to make a keymap that
1444inherits from multiple maps, eg:
1445 (set-keymap-parent newmap (make-composed-keymap othermap parent))
1409 1446
1410+++ 1447+++
1411** Set `debug-on-event' to make Emacs enter the debugger e.g. on receipt 1448** Set `debug-on-event' to make Emacs enter the debugger e.g. on receipt
diff --git a/etc/tutorials/TUTORIAL.es b/etc/tutorials/TUTORIAL.es
index 2597f00e95f..fe8c223551a 100644
--- a/etc/tutorials/TUTORIAL.es
+++ b/etc/tutorials/TUTORIAL.es
@@ -14,8 +14,10 @@ ocasión, usaremos las siguientes abreviaturas.
14 <car>. Escribimos <ESC> para referirnos a la tecla ESC. 14 <car>. Escribimos <ESC> para referirnos a la tecla ESC.
15 15
16Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos 16Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos
17caracteres). Los caracteres ">>" en el margen izquierdo indican 17caracteres). Para cancelar un comando parcialmente introducido,
18instrucciones para que usted trate de usar un comando. Por ejemplo: 18teclee C-g.
19Los caracteres ">>" en el margen izquierdo indican instrucciones para
20que usted trate de usar un comando. Por ejemplo:
19<<Blank lines inserted around following line by help-with-tutorial>> 21<<Blank lines inserted around following line by help-with-tutorial>>
20[Mitad de página en blanco para propósitos didácticos. El texto continúa abajo] 22[Mitad de página en blanco para propósitos didácticos. El texto continúa abajo]
21>> Ahora teclee C-v (ver la próxima pantalla) para desplazarse a la 23>> Ahora teclee C-v (ver la próxima pantalla) para desplazarse a la
@@ -47,9 +49,12 @@ Los siguientes comandos son útiles para ver pantallas completas:
47 pantalla (Esto es CONTROL-L, no CONTROL-1.) 49 pantalla (Esto es CONTROL-L, no CONTROL-1.)
48 50
49>> Encuentre el cursor, y fíjese qué texto hay cerca de éste. 51>> Encuentre el cursor, y fíjese qué texto hay cerca de éste.
50 Luego teclee C-l. 52 Luego teclee C-l. Encuentre el cursor otra vez y note que el mismo
51 Encuentre el cursor otra vez y note que el mismo texto está cerca 53 texto está todavía cerca del cursor, pero ahora está en el centro
52 del cursor ahora. 54 de la pantalla.
55 Si vuelve teclear C-l, ese texto se moverá al principio de la
56 pantalla. Al teclear C-l otra vez, se moverá al final de la
57 pantalla.
53 58
54Si su terminal las soporta, también puede usar las teclas AvPág o 59Si su terminal las soporta, también puede usar las teclas AvPág o
55RegPág para moverse por pantallas completas, pero puede editar más 60RegPág para moverse por pantallas completas, pero puede editar más
@@ -89,9 +94,9 @@ comandos de posicionamiento básico del cursor todo el tiempo.
89 lo que hace C-p cuando el cursor está en medio de la línea. 94 lo que hace C-p cuando el cursor está en medio de la línea.
90 95
91Cada línea de texto termina con un carácter de nueva línea (Newline), 96Cada línea de texto termina con un carácter de nueva línea (Newline),
92que sirve para separarla de la línea siguiente. La última línea de su 97que sirve para separarla de la línea siguiente. (Normalmente, la
93archivo debe de tener un carácter de nueva línea al final (pero Emacs 98última línea de un archivo termina con un carácter de nueva línea,
94no requiere que ésta lo tenga). 99pero Emacs no requiere que sea a.)
95 100
96>> Intente usar C-b al comienzo de una línea. Debería moverse al 101>> Intente usar C-b al comienzo de una línea. Debería moverse al
97 final de la línea previa. Esto sucede porque retrocede a través 102 final de la línea previa. Esto sucede porque retrocede a través
@@ -227,24 +232,17 @@ Esto debió haber desplazado la pantalla hacia arriba 8 líneas. Si
227quisiera desplazarla hacia abajo de nuevo, puede dar un argumento a 232quisiera desplazarla hacia abajo de nuevo, puede dar un argumento a
228M-v. 233M-v.
229 234
230Si está usando un sistema de ventanas, como X11 o MS-Windows, debe 235Si está usando un entorno gráfico, como X o MS-Windows, debe
231haber una larga área rectangular llamada una barra de desplazamiento 236haber una larga área rectangular llamada una barra de desplazamiento
232en el lado izquierdo de la ventana de Emacs. Puede desplazar el texto 237en el lado izquierdo de la ventana de Emacs. Puede desplazar el texto
233al oprimir el botón del ratón en la barra de desplazamiento. 238al oprimir el botón del ratón en la barra de desplazamiento.
234 239
235>> Pruebe presionando el botón del medio en la parte superior del área 240Si su ratón tiene un botón de rueda, también puede utilizarlo para
236 resaltada en la barra de desplazamiento. Éste debe desplazar el 241desplazar el texto.
237 texto a una posición determinada según cuan alto o bajo oprima el
238 botón.
239
240>> Intente mover el ratón arriba y abajo, mientras mantiene el botón
241 del medio presionado. Verá que el texto se desplaza arriba y abajo
242 a medida que mueve el ratón.
243
244 242
245 243
246* CUANDO EMACS ESTÁ BLOQUEADO 244* SI EMACS DEJA DE RESPONDER
247----------------------------- 245----------------------------
248 246
249Si Emacs dejara de responder a sus comandos, puede detenerlo con 247Si Emacs dejara de responder a sus comandos, puede detenerlo con
250seguridad al teclear C-g. Puede usar C-g para detener un comando que 248seguridad al teclear C-g. Puede usar C-g para detener un comando que
@@ -253,7 +251,7 @@ esté tomando mucho tiempo para ejecutarse.
253También puede usar C-g para descartar un argumento numérico o el 251También puede usar C-g para descartar un argumento numérico o el
254comienzo de un comando que no quiere finalizar. 252comienzo de un comando que no quiere finalizar.
255 253
256>> Escriba C-u 100 para hacer un argumento numérico de 100, entonces 254>> Escriba C-u 100 para hacer un argumento numérico de 100, y luego
257 pruebe C-g. 255 pruebe C-g.
258 Ahora pruebe C-f. Esto deberá mover sólo un carácter, ya que 256 Ahora pruebe C-f. Esto deberá mover sólo un carácter, ya que
259 canceló el argumento con C-g. 257 canceló el argumento con C-g.
@@ -282,7 +280,7 @@ desactivado, conteste la pregunta con "n".
282* VENTANAS 280* VENTANAS
283---------- 281----------
284 282
285Emacs puede tener varias ventanas, cada una mostrando su propio texto. 283Emacs puede tener varias "ventanas", cada una mostrando su propio texto.
286Explicaremos después como usar múltiples ventanas. Ahora mismo 284Explicaremos después como usar múltiples ventanas. Ahora mismo
287queremos explicar cómo deshacerse de ventanas adicionales y volver a 285queremos explicar cómo deshacerse de ventanas adicionales y volver a
288la edición básica en una ventana. Es sencillo: 286la edición básica en una ventana. Es sencillo:
@@ -294,9 +292,9 @@ contiene el cursor, para ocupar toda la pantalla. Esto borra todas las
294demás ventanas. 292demás ventanas.
295 293
296>> Mueva el cursor a esta línea y escriba C-u 0 C-l. 294>> Mueva el cursor a esta línea y escriba C-u 0 C-l.
297>> Escriba Control-h k Control-f. 295>> Escriba C-h k C-f.
298 Vea como esta ventana se encoge, mientras una nueva aparece y 296 Vea como esta ventana se encoge, mientras una nueva aparece y
299 muestra documentación sobre el comando Control-f. 297 muestra documentación sobre el comando C-f.
300 298
301>> Escriba C-x 1 y vea que la ventana de listado de documentación 299>> Escriba C-x 1 y vea que la ventana de listado de documentación
302 desaparece. 300 desaparece.
@@ -312,41 +310,36 @@ cuatro caracteres.
312* INSERTAR Y BORRAR 310* INSERTAR Y BORRAR
313------------------- 311-------------------
314 312
315Si quiere insertar un texto, basta con que lo teclee. Emacs 313Si quiere insertar un texto, basta con que lo teclee. Los caracteres
316interpreta los caracteres que usted puede ver, tales como A, 7, *, 314normales, como A, 7, *, etc. se insertan nada más teclearlos. Teclee
317etc. como texto y los inserta inmediatamente. Teclee <Return> (la 315<Return> (la tecla "Enter" o "Intro") para insertar un carácter de
318tecla Enter) para insertar un carácter de nueva línea. 316nueva línea.
319
320Puede borrar el último carácter que escribió oprimiendo <Delback>.
321<Delback> es una tecla en el teclado--la misma que normalmente usa
322fuera de emacs para borrar el último carácter que escribió.
323Normalmente es una tecla una o dos filas arriba de la tecla <Return>,
324y que está usualmente rotulada como "Backspace", "Del" o simplemente
325con una flecha en dirección izquierda que no es parte de las teclas de
326flecha.
327 317
328Si la tecla larga está rotulada "Backspace", entonces ésa es la que 318Para borrar el carácter que precede al cursor, oprima <DEL>. Es una
329debe de usar para <Delback>. Puede haber otra tecla llamada "Del" en 319tecla alargada, normalmente etiquetada como "Backspace" o "Del", o con
330otra parte, pero ésa no es <Delback>. 320una flecha apuntando a la izquierda; la misma que suele utilizar fuera
321de Emacs para borrar el último carácter introducido.
331 322
332Generalmente, <Delback> borra el carácter inmediatamente anterior a la 323Puede haber otra tecla llamada "Del" o "Supr" en otra parte, pero ésa
333posición actual del cursor. 324no es <DEL>.
334 325
335>> Haga esto ahora: teclee unos pocos caracteres, después bórrelos 326>> Haga esto ahora: teclee unos pocos caracteres, después bórrelos
336 tecleando <Delback> varias veces. No se preocupe si este archivo 327 tecleando <DEL> varias veces. No se preocupe si este archivo
337 cambia, no alterará el tutorial principal. Ésta es su copia 328 cambia, no alterará el tutorial principal. Ésta es su copia
338 personal de él. 329 personal de él.
339 330
340Cuando una línea de texto se hace muy grande para una sola línea en la 331Cuando una línea de texto se hace muy grande para una sola línea de la
341pantalla, la línea de texto "continúa" en una segunda línea en la 332pantalla, la línea de texto "continúa" en una segunda línea en la
342pantalla. Un backslash ("\") (o, si está usando un sistema de 333pantalla. Si está usando un entorno gráfico, se mostrarán pequeñas
343ventanas, una pequeña flecha curva) en el margen derecho indica que la 334flechas curvas en las estrechas franjas vacías (los "márgenes" derecho
344línea "continúa". 335e izquierdo) a cada lado del área de texto, para indicar que la línea
336continúa. Si está utilizando una terminal, la continuación se señala
337mediante una barra invertida ("\") en la última columna de la derecha.
345 338
346>> Inserte texto hasta que llegue al margen derecho, y siga 339>> Inserte texto hasta que llegue al margen derecho, y siga
347 insertando. Verá aparecer una línea de continuación. 340 insertando. Verá aparecer una línea de continuación.
348 341
349>> Use <Delback> para borrar el texto hasta que la línea de nuevo 342>> Use <DEL> para borrar el texto hasta que la línea de nuevo
350 quepa en la pantalla. La línea de continuación se pierde. 343 quepa en la pantalla. La línea de continuación se pierde.
351 344
352Puede borrar un carácter de nueva línea como cualquier otro carácter. 345Puede borrar un carácter de nueva línea como cualquier otro carácter.
@@ -355,7 +348,7 @@ sola línea. Si el resultado de la combinación de líneas es demasiado
355largo para caber en el ancho de la pantalla, se mostrará con una línea 348largo para caber en el ancho de la pantalla, se mostrará con una línea
356de continuación. 349de continuación.
357 350
358>> Mueva el cursor al comienzo de una línea y teclee <Delback>. Esto 351>> Mueva el cursor al comienzo de una línea y teclee <DEL>. Esto
359 juntará esa línea con la línea anterior. 352 juntará esa línea con la línea anterior.
360 353
361>> Teclee <Return> para reinsertar la nueva línea que borró. 354>> Teclee <Return> para reinsertar la nueva línea que borró.
@@ -370,27 +363,29 @@ Ya ha aprendido la manera más básica de teclear algo en Emacs y
370corregir errores. Puede borrar por palabras o por líneas. He aquí un 363corregir errores. Puede borrar por palabras o por líneas. He aquí un
371resumen de las operaciones de borrado: 364resumen de las operaciones de borrado:
372 365
373 <Delback> borra el carácter justo antes que el cursor 366 <DEL> borra el carácter justo antes que el cursor
374 C-d borra el siguiente carácter después del cursor 367 C-d borra el siguiente carácter después del cursor
375 368
376 M-<Delback> Elimina la palabra inmediatamente antes del 369 M-<DEL> Elimina la palabra inmediatamente antes del
377 cursor 370 cursor
378 M-d Elimina la siguiente palabra después del cursor 371 M-d Elimina la siguiente palabra después del cursor
379 372
380 C-k Elimina desde el cursor hasta el fin de la línea 373 C-k Elimina desde el cursor hasta el fin de la línea
381 M-k Elimina hasta el final de la oración actual 374 M-k Elimina hasta el final de la oración actual
382 375
383Note que <Delback> y C-d, comparados con M-<Delback> y M-d, extienden 376Note que <DEL> y C-d, comparados con M-<DEL> y M-d, extienden el
384el paralelismo iniciado por C-f y M-f (bien, <Delback> no es realmente 377paralelismo iniciado por C-f y M-f (bien, <DEL> no es realmente una
385una tecla de control, pero no nos preocuparemos de eso ahora). C-k y 378tecla de control, pero no nos preocuparemos de eso ahora). C-k y M-k,
386M-k, en ciertas forma, son como C-e y M-e, en que las líneas son 379en ciertas forma, son como C-e y M-e, en que las líneas de unos
387oraciones opuestas. 380corresponden a sentencias en los otros.
388 381
389También puede eliminar cualquier parte del buffer con un método 382También puede eliminar un segmento contiguo de texto con un método
390uniforme. Muévase a un extremo de esa parte, y teclee C-@ o C-SPC 383uniforme. Muévase a un extremo de ese segmento de texto, y teclee C-@
391(cualquiera de los dos). (SPC es la barra espaciadora.) Muévase al 384o C-SPC (cualquiera de los dos). (SPC es la barra espaciadora.)
392otro extremo de esa parte, y teclee C-w. Eso elimina todo el texto 385Luego, mueva el cursor al otro extremo del texto que desea eliminar.
393entre las dos posiciones. 386Al hacerlo, Emacs resaltará el texto situado entre el cursor y la
387posición en la que tecleó C-SPC. Finalmente, teclee C-w. Eso elimina
388todo el texto entre las dos posiciones.
394 389
395>> Mueva el cursor a la letra T del inicio del párrafo anterior. 390>> Mueva el cursor a la letra T del inicio del párrafo anterior.
396>> Teclee C-SPC. Emacs debe mostrar el mensaje "Mark set" en la parte 391>> Teclee C-SPC. Emacs debe mostrar el mensaje "Mark set" en la parte
@@ -401,12 +396,15 @@ entre las dos posiciones.
401 termina justo antes de la x. 396 termina justo antes de la x.
402 397
403La diferencia entre "eliminar" y "borrar" es que el texto "eliminado" 398La diferencia entre "eliminar" y "borrar" es que el texto "eliminado"
404puede ser reinsertado, mientras que las cosas "borradas" no pueden ser 399puede ser reinsertado (en cualquier posición), mientras que las cosas
405reinsertadas. La reinserción de texto eliminado se llama "yanking" o 400"borradas" no pueden ser reinsertadas (sin embargo, es posible
406"pegar". Generalmente, los comandos que pueden quitar mucho texto lo 401deshacer el borrado; ver más abajo). La reinserción de texto
407eliminan, mientras que los comandos que quitan solo un carácter, o 402eliminado se llama "yanking" o "pegar". Generalmente, los comandos
408solo líneas en blanco y espacios, borran (para que no pueda pegar ese 403que pueden quitar mucho texto lo eliminan (para que pueda pegarlo de
409texto). 404nuevo) mientras que los comandos que quitan solo un carácter, o solo
405líneas en blanco y espacios, borran (y por tanto no se puede pegar lo
406borrado). Si se normalmente, sin pasar un argumento, <DEL> y C-d
407borran. Con un argumento, eliminan.
410 408
411>> Mueva el cursor al comienzo de una línea que no esté vacía. 409>> Mueva el cursor al comienzo de una línea que no esté vacía.
412 Luego teclee C-k para eliminar el texto de esa línea. 410 Luego teclee C-k para eliminar el texto de esa línea.
@@ -420,12 +418,13 @@ especialmente: Elimina ese número de líneas y TAMBIÉN sus
420contenidos. Esto no es una simple repetición. C-u 2 C-k elimina dos 418contenidos. Esto no es una simple repetición. C-u 2 C-k elimina dos
421líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto. 419líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto.
422 420
423Traer texto eliminado de regreso es llamado "yanking" o "pegar". 421Reinsertar texto eliminado se denomina "yanking" o "pegar". (Piense
424(Piense en ello como pegar de nuevo, o traer de vuelta, algún texto 422en ello como pegar de nuevo, o traer de vuelta, algún texto que le fue
425que le fue quitado.) Puede pegar el texto eliminado en, ya sea el 423quitado.) Puede pegar el texto eliminado, ya sea el lugar en que fue
426lugar en que fue eliminado, o en otra parte del buffer, o hasta en un 424eliminado, o en otra parte del buffer, o hasta en un archivo
427archivo diferente. Puede pegar el texto varias veces, lo que hace 425diferente. Puede pegar el texto varias veces, lo que hace varias
428varias copias de él. 426copias de él. Algunos editores se refieren a eliminar y reinsertar
427como "cortar" y "pegar" (consulte el Glosario en el manual de Emacs).
429 428
430El comando para pegar es C-y. Reinserta el último texto eliminado, en 429El comando para pegar es C-y. Reinserta el último texto eliminado, en
431la posición actual del cursor. 430la posición actual del cursor.
@@ -468,32 +467,31 @@ eliminación más reciente).
468---------- 467----------
469 468
470Si hace un cambio al texto, y luego decide que fue un error, 469Si hace un cambio al texto, y luego decide que fue un error,
471puede deshacer el cambio con el comando deshacer, C-x u. 470puede deshacer el cambio con el comando deshacer, C-/.
472 471
473Normalmente, C-x u deshace los cambios hechos por un comando; si repite 472Normalmente, C-/ deshace los cambios hechos por un comando; si repite
474varias veces seguidas C-x u, cada repetición deshará un comando 473varias veces seguidas C-/, cada repetición deshará un comando
475adicional. 474adicional.
476 475
477Pero hay dos excepciones: los comandos que no cambian el texto no 476Pero hay dos excepciones: los comandos que no cambian el texto no
478cuentan (esto incluye los comandos de movimiento del cursor y el 477cuentan (esto incluye los comandos de movimiento del cursor y de
479comando de desplazamiento), y los caracteres de autoinserción se 478desplazamiento), y los caracteres de autoinserción se manejan
480manejan usualmente en grupos de hasta 20. (Esto es para reducir el 479usualmente en grupos de hasta 20 caracteres. (Esto es para reducir el
481numero de C-x u que tenga que teclear para deshacer una inserción en 480numero de C-/ que tenga que teclear para deshacer una inserción en
482el texto.) 481el texto.)
483 482
484>> Elimine esta línea con C-k, después teclee C-x u y debería 483>> Elimine esta línea con C-k, después teclee C-/ y debería
485 reaparecer. 484 reaparecer.
486 485
487C-_ es un comando alternativo para deshacer; funciona igual que C-x u, 486C-_ es un comando alternativo para deshacer; funciona igual que C-/.
488pero es más fácil de teclear varias veces seguidas. La desventaja de 487En algunas terminales, al teclear C-/ en realidad envía C-_ a Emacs.
489C-_ es que en algunos teclados no es obvio cómo se teclea. Por esto 488También existe la alternativa de usar C-x u, que funciona exactamente
490existe también C-x u. En algunas terminales, puede teclear C-_ al 489igual que C-/, pero es menos cómodo de teclear.
491teclear / mientras oprime CONTROL.
492 490
493Un argumento numérico para C-_ o C-x u actúa como un factor de 491Un argumento numérico para C-/, C-_ o C-x u actúa como un factor de
494repetición. 492repetición.
495 493
496Uuede deshacer un texto borrado justo como puede deshacer el texto 494Puede deshacer un texto borrado justo como puede deshacer el texto
497eliminado. La distinción entre eliminar algo y borrar algo afecta en 495eliminado. La distinción entre eliminar algo y borrar algo afecta en
498si puede pegarlo con C-y; no hay diferencia alguna para deshacer. 496si puede pegarlo con C-y; no hay diferencia alguna para deshacer.
499 497
@@ -516,17 +514,17 @@ cuando guarde, Emacs dejará el archivo original bajo un nombre
516cambiado en caso de que luego decida que sus cambios fueron un error. 514cambiado en caso de que luego decida que sus cambios fueron un error.
517 515
518Si mira cerca del final de la pantalla podrá ver una línea que 516Si mira cerca del final de la pantalla podrá ver una línea que
519comienza y termina con guiones, y comienza con "--:-- TUTORIAL.es" o 517comienza con guiones, y empieza con " -:--- TUTORIAL.es" o algo así.
520algo así. Esta parte de la pantalla normalmente muestra el nombre del 518Esta parte de la pantalla normalmente muestra el nombre del archivo
521archivo que está visitando. En este momento está visitando un archivo 519que está visitando. En este momento está visitando su propia copia
522llamado "TUTORIAL.es" que es su borrador personal del tutorial de 520del tutorial de Emacs, que se llama "TUTORIAL.es". Cuando encuentre
523Emacs. Cuando encuentre un archivo con Emacs, el nombre de ese 521un archivo con Emacs, el nombre de ese archivo aparecerá en ese mismo
524archivo aparecerá en ese mismo punto. 522punto.
525 523
526Una cosa especial acerca del comando para encontrar un archivo, es que 524Una cosa especial acerca del comando para encontrar un archivo, es que
527tendrá que decir que nombre de archivo desea. Decimos que el comando 525tendrá que decir que nombre de archivo desea. Decimos que el comando
528"lee un argumento desde la terminal" (en este caso, el argumento es el 526"lee un argumento" (en este caso, el argumento es el nombre del
529nombre del archivo). Después de teclear el comando: 527archivo). Después de teclear el comando:
530 528
531 C-x C-f Encontrar un archivo 529 C-x C-f Encontrar un archivo
532 530
@@ -544,13 +542,12 @@ entrada al minibuffer) puede cancelar el comando con C-g.
544 Así que no encontrará archivo alguno. 542 Así que no encontrará archivo alguno.
545 543
546Cuando haya finalizado de ingresar el nombre del archivo, teclee 544Cuando haya finalizado de ingresar el nombre del archivo, teclee
547<Return> para terminarlo. Entonces el comando C-x C-f trabaja, y 545<Return> para terminarlo. El minibuffer desaparece, y el comando C-x
548encuentra el archivo que escogió. El minibuffer desaparece cuando el 546C-f trabaja para encontrar el archivo que escogió.
549comando C-x C-f termina.
550 547
551Poco tiempo después aparecerá el contenido del archivo en la pantalla, 548En seguida aparecerá el contenido del archivo en la pantalla, y puede
552y puede editarlo. Cuando quiera que sus cambios sean permanentes, 549editarlo. Cuando quiera que sus cambios sean permanentes, teclee el
553teclee el comando 550comando
554 551
555 C-x C-s Guardar el archivo 552 C-x C-s Guardar el archivo
556 553
@@ -561,11 +558,12 @@ final del nombre del archivo original.
561 558
562Cuando guardar haya terminado, Emacs mostrará el nombre del archivo 559Cuando guardar haya terminado, Emacs mostrará el nombre del archivo
563escrito. Deberá guardar frecuentemente, para que no pierda mucho 560escrito. Deberá guardar frecuentemente, para que no pierda mucho
564trabajo si el sistema falla. 561trabajo si el sistema falla (vea la sección "AUTO GUARDADO", más
562adelante).
565 563
566>> Teclee C-x C-s, guardando la copia del tutorial. 564>> Teclee C-x C-s TUTORIAL.es <Return>
567 Esto debería mostrar "Wrote ...TUTORIAL.es" al final de la 565 Esto guarda el tutorial en un archivo llamado TUTORIAL.es, y
568 pantalla. 566 mostrará "Wrote ...TUTORIAL.es" al final de la pantalla.
569 567
570Puede encontrar un archivo existente, para verlo o editarlo. También 568Puede encontrar un archivo existente, para verlo o editarlo. También
571puede hacerlo con un archivo que no exista. Ésta es la forma de crear 569puede hacerlo con un archivo que no exista. Ésta es la forma de crear
@@ -584,16 +582,10 @@ dentro de Emacs. Puede volver a el encontrándolo de nuevo con C-x
584C-f. De esta forma puede mantener un gran número de archivos dentro 582C-f. De esta forma puede mantener un gran número de archivos dentro
585de Emacs. 583de Emacs.
586 584
587>> Cree un archivo llamado "foo" tecleando C-x C-f foo <Return>.
588 Luego inserte algún texto, edítelo, y guarde "foo" tecleando C-x
589 C-s.
590 Finalmente teclee C-x C-f TUTORIAL.es <Return>
591 para regresar al tutorial.
592
593Emacs almacena cada texto del archivo dentro de un objeto llamado 585Emacs almacena cada texto del archivo dentro de un objeto llamado
594"buffer". Al encontrar un archivo se crea un nuevo buffer dentro de 586"buffer". Al encontrar un archivo se crea un nuevo buffer dentro de
595Emacs. Para mirar la lista de los buffers que existen actualmente en 587Emacs. Para mirar la lista de los buffers que existen actualmente,
596su sesión de Emacs, teclee: 588teclee:
597 589
598 C-x C-b Lista de buffers 590 C-x C-b Lista de buffers
599 591
@@ -612,22 +604,24 @@ que corresponde a un archivo, puede hacerlo visitando el archivo de
612nuevo con C-x C-f. Pero existe una manera más rápida: use el comando 604nuevo con C-x C-f. Pero existe una manera más rápida: use el comando
613C-x b. En ese comando, necesita teclear el nombre de buffer. 605C-x b. En ese comando, necesita teclear el nombre de buffer.
614 606
615>> Teclee C-x b foo <Return> para volver al buffer "foo" que contiene 607>> Cree un archivo llamado "foo" tecleando C-x C-f foo <Return>.
616 el texto del archivo "foo". Después teclee C-x b TUTORIAL.es 608 Después teclee C-x b TUTORIAL.es <Return> para regresar a este
617 <Return> para regresar a este tutorial. 609 tutorial.
618 610
619La mayoría del tiempo el nombre del buffer es el mismo que el nombre 611La mayoría del tiempo el nombre del buffer es el mismo que el nombre
620del archivo (sin la parte del directorio del archivo). Sin embargo, 612del archivo (sin la parte del directorio del archivo). Sin embargo,
621esto no es así siempre. La lista de buffers que hace con C-x C-b 613esto no es así siempre. La lista de buffers que hace con C-x C-b
622siempre muestra el nombre de todos los buffers. 614muestra el nombre de cada buffer y de su archivo correspondiente.
623 615
624CUALQUIER texto que vea en una ventana de Emacs siempre es parte de un 616Algunos buffers no corresponden a un archivo. El buffer llamado
625buffer. Algunos buffers no corresponden a un archivo. Por ejemplo, 617"*Buffer List*", que contiene la lista de buffers que ha creado con
626el buffer llamado "*Buffer List*" no tiene ningún archivo. Es el 618C-x C-b, no tiene archivo. Este buffer TUTORIAL.es al principio no
627buffer que contiene la lista de buffers que ha creado con C-x C-b. El 619tenía archivo, pero ahora ya sí, porque en la sección anterior tecleó
628buffer llamado "*Messages*" tampoco tiene un archivo correspondiente; 620C-x C-s y lo guardó en un archivo.
629contiene los mensajes que han aparecido en la línea de abajo durante 621
630su sesión de Emacs. 622El buffer llamado "*Messages*" tampoco tiene un archivo
623correspondiente. Este buffer contiene los mensajes que han aparecido
624en la línea de abajo durante su sesión de Emacs.
631 625
632>> Teclee C-x b *Messages* <Return> para ver el buffer de mensajes. 626>> Teclee C-x b *Messages* <Return> para ver el buffer de mensajes.
633 Luego teclee C-x b TUTORIAL <Return> para regresar a este tutorial. 627 Luego teclee C-x b TUTORIAL <Return> para regresar a este tutorial.
@@ -669,45 +663,45 @@ comando C-x C-c. (No se preocupe por perder los cambios que haya
669hecho; C-x C-c ofrece guardar cada archivo alterado antes de finalizar 663hecho; C-x C-c ofrece guardar cada archivo alterado antes de finalizar
670Emacs.) 664Emacs.)
671 665
672C-z es el comando para salir de Emacs *temporalmente*: para que pueda 666Si está utilizando una pantalla gráfica, no necesita ningún comando
673regresar a la misma sesión de Emacs después. 667especial para cambiar de Emacs a otra aplicación. Puede hacerlo con
668el ratón, o mediante el gestor de ventanas. Sin embargo, si está
669usando una terminal que solo puede mostrar una aplicación a la vez,
670tendrá que "suspender" Emacs para poder acceder a otros programas.
674 671
675En sistemas que lo permiten C-z "suspende" Emacs; esto es, se regresa 672C-z es el comando para salir de Emacs *temporalmente*: para que pueda
676al intérprete de comandos pero no se destruye Emacs. En los 673regresar a la misma sesión de Emacs después. Cuando Emacs está
674ejecutándose en una terminal, C-z "suspende" Emacs; esto es, se
675regresa al intérprete de comandos pero no se destruye Emacs. En los
677intérpretes de comandos más comunes, puede reanudar Emacs con el 676intérpretes de comandos más comunes, puede reanudar Emacs con el
678comando `fg' o con `%emacs'. 677comando `fg' o con `%emacs'.
679 678
680En sistemas que no implementen el suspendido, C-z crea un
681subintérprete que corre bajo Emacs para darle la opción de correr
682otros programas y regresar a Emacs después; esto en realidad no "sale"
683de Emacs. En este caso, el comando `exit' del intérprete es la vía
684usual para regresar a Emacs desde éste.
685
686El momento para usar C-x C-c es cuando está listo para salir del 679El momento para usar C-x C-c es cuando está listo para salir del
687sistema. Es además el paso correcto para salir de un Emacs llamado 680sistema. Es además el paso correcto para salir de un Emacs llamado
688bajo programas de manejo de correo y diversas otras utilidades, puesto 681bajo programas de gestión de correo y otras utilidades diversas.
689que ellos no saben cómo lidiar con la suspensión de Emacs. En
690circunstancias normales, si no va a salir, es mejor suspender
691Emacs con C-z en lugar de salir de él.
692 682
693Existen varios comandos C-x. Aquí hay una lista de los que ha 683Existen muchos comandos C-x. He aquí la lista de los que ya ha
694aprendido: 684aprendido:
695 685
696 C-x C-f Encontrar archivo. 686 C-x C-f Encontrar archivo
697 C-x C-s Guardar archivo. 687 C-x C-s Guardar archivo
698 C-x C-b Lista de buffers. 688 C-x s Guardar varios buffers
699 C-x C-c Salir de Emacs. 689 C-x C-b Lista de buffers
700 C-x 1 Borrar todo menos una ventana. 690 C-x b Cambiar a otro buffer
701 C-x u Deshacer. 691 C-x C-c Salir de Emacs
692 C-x 1 Borrar todo menos una ventana
693 C-x u Deshacer
702 694
703Los comandos eXtendidos por nombre son comandos que se utilizan aún 695Los comandos eXtendidos por nombre son comandos que se utilizan aún
704con menos frecuencia, o únicamente en ciertos modos. Un ejemplo es el 696con menos frecuencia, o únicamente en ciertos modos. Un ejemplo es el
705comando replace-string, el cual globalmente substituye una cadena de 697comando replace-string, el cual substituye globalmente una cadena de
706caracteres por otra. Cuando teclea M-x, Emacs le pregunta al 698caracteres por otra. Cuando teclea M-x, Emacs le pregunta al final de
707final de la pantalla con M-x y debe escribir el nombre del 699la pantalla con M-x y debe escribir el nombre del comando; en este
708comando; en este caso "replace-string". Solo teclee "repl s<TAB>" y 700caso "replace-string". Solo teclee "repl s<TAB>" y Emacs completará
709Emacs completará el nombre. Finalice el nombre del comando con 701el nombre. (<TAB> es la tecla del tabulador, que habitualmenté está
710<Return>. 702situada sobre la tecla de bloquear mayúsculas o la de shift, en el
703lado izquierdo del teclado.) Para aceptar el comando y ejecutarlo,
704pulse <Return>.
711 705
712El comando replace-string requiere dos argumentos: la cadena de 706El comando replace-string requiere dos argumentos: la cadena de
713caracteres a reemplazar, y la cadena de caracteres para reemplazarla. 707caracteres a reemplazar, y la cadena de caracteres para reemplazarla.
@@ -733,11 +727,11 @@ un # al principio y al final; por ejemplo, si su archivo se llama
733"hola.c", su archivo auto guardado es "#hola.c#". Cuando guarda por 727"hola.c", su archivo auto guardado es "#hola.c#". Cuando guarda por
734la vía normal, Emacs borra su archivo de auto guardado. 728la vía normal, Emacs borra su archivo de auto guardado.
735 729
736Si la computadora falla, puede recuperar su edición de auto 730Si la computadora falla, puede recuperar su edición de auto guardado
737guardado encontrando el archivo normal (el archivo que estuvo 731encontrando el archivo normal (el archivo que estuvo editando, no el
738editando, no el archivo de auto guardar) y entonces tecleando M-x 732archivo de auto guardar) y entonces tecleando M-x recover-file
739recover file<Return>. Cuando le pregunte por la confirmación, teclee 733<Return>. Cuando le pregunte por la confirmación, teclee yes<Return>
740yes<Return> para ir y recuperar la información del auto guardado. 734para seguir adelante y recuperar la información de auto guardado.
741 735
742 736
743* ÁREA DE ECO 737* ÁREA DE ECO
@@ -754,20 +748,20 @@ lentamente, se los muestra al final de la pantalla en un área llamada
754La línea inmediatamente encima del área de eco recibe el nombre de 748La línea inmediatamente encima del área de eco recibe el nombre de
755"línea de modo" o "mode line". La línea de modo dice algo así: 749"línea de modo" o "mode line". La línea de modo dice algo así:
756 750
757--:** TUTORIAL.es (Fundamental)--l765--65%--------- 751 -:**- TUTORIAL.es 63% L749 (Fundamental)
758 752
759Esta línea da información útil acerca del estado de Emacs y del texto 753Esta línea da información útil acerca del estado de Emacs y del texto
760que está editando. 754que está editando.
761 755
762Ya sabe qué significa el nombre del archivo: es el archivo que usted 756Ya sabe qué significa el nombre del archivo: es el archivo que usted
763ha encontrado. -NN%-- indica su posición actual en el texto; esto 757ha encontrado. NN% indica su posición actual en el texto; esto
764significa que NN por ciento del texto está encima de la parte superior 758significa que NN por ciento del texto está encima de la parte superior
765de la pantalla. Si el principio del archivo está en la pantalla, éste 759de la pantalla. Si el principio del archivo está en la pantalla, éste
766dirá --Top-- en vez de --00%--. Si el final del texto está en la 760dirá "Top" en vez de " 0%". Si el final del texto está en la
767pantalla, dirá --Bot--. Si está mirando un texto tan pequeño que cabe 761pantalla, dirá "Bot". Si está mirando un texto tan pequeño que cabe
768en la pantalla, el modo de línea dirá --All--. 762entero en la pantalla, el modo de línea dirá "All".
769 763
770La L y los dígitos indican la posición de otra forma: ellos dan el 764La L y los dígitos señalan la posición de otra forma: indican el
771número de línea actual del punto. 765número de línea actual del punto.
772 766
773Los asteriscos cerca del frente significan que usted ha hecho cambios 767Los asteriscos cerca del frente significan que usted ha hecho cambios
@@ -795,7 +789,8 @@ fundamental-mode es un comando para cambiar al modo fundamental.
795 789
796Si va a editar un texto de algún lenguaje humano, como este archivo, 790Si va a editar un texto de algún lenguaje humano, como este archivo,
797debería usar el modo de texto. 791debería usar el modo de texto.
798>> Teclee M-x text mode<Return>. 792
793>> Teclee M-x text-mode <Return>.
799 794
800No se preocupe, ninguno de los comandos de Emacs que ha aprendido 795No se preocupe, ninguno de los comandos de Emacs que ha aprendido
801cambia de manera significativa. Pero puede observar que M-f y M-b 796cambia de manera significativa. Pero puede observar que M-f y M-b
@@ -805,20 +800,20 @@ de palabras.
805 800
806Los modos mayores normalmente hacen cambios sutiles como el anterior: 801Los modos mayores normalmente hacen cambios sutiles como el anterior:
807la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor, 802la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor,
808pero funcionan un poco diferente. 803pero funcionan de forma un poco diferente.
809 804
810Para ver documentación en el modo mayor actual, teclee C-h m. 805Para ver la documentación del modo mayor actual, teclee C-h m.
811 806
812>> Use C-u C-v una o más veces para traer esta línea cerca de la 807>> Use C-l C-l para traer esta línea en la parte superior de la
813 parte superior de la pantalla. 808 pantalla.
814 809
815>> Teclee C-h m, para ver como el modo de Texto difiere del modo 810>> Teclee C-h m, para ver como el modo de Texto difiere del modo
816 Fundamental. 811 Fundamental.
817 812
818>> Teclee C-x 1 para eliminar la documentación de la pantalla. 813>> Teclee C-x 1 para eliminar la documentación de la pantalla.
819 814
820Los modos mayores son llamados así porque también hay modos menores. 815Los modos mayores se llaman así porque también hay modos menores. Los
821Los modos menores no son alternativas para los modos mayores, solo 816modos menores no son alternativas para los modos mayores, solo
822modificaciones menores de éstos. Cada modo menor puede ser activado o 817modificaciones menores de éstos. Cada modo menor puede ser activado o
823desactivado por sí mismo, independiente de todos los otros modos 818desactivado por sí mismo, independiente de todos los otros modos
824menores, e independiente de su modo mayor. Por tanto, puede no usar 819menores, e independiente de su modo mayor. Por tanto, puede no usar
@@ -830,13 +825,13 @@ español, es el modo Auto Fill. Cuando este modo está activado, Emacs
830rompe la línea entre palabras automáticamente siempre que inserte 825rompe la línea entre palabras automáticamente siempre que inserte
831texto y la línea sea demasiado ancha. 826texto y la línea sea demasiado ancha.
832 827
833Puede activar el modo Auto Fill al hacer M-x auto fill mode<Return>. 828Puede activar el modo Auto Fill al hacer M-x auto-fill-mode <Return>.
834Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x 829Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x
835auto fill mode<Return>. Si el modo está desactivado, este comando lo 830auto-fill-mode <Return>. Si el modo está desactivado, este comando lo
836activa, y si el modo está activado, este comando lo desactiva. 831activa, y si el modo está activado, este comando lo desactiva.
837Decimos que el comando "cambia el modo". 832Decimos que el comando "cambia el modo".
838 833
839>> teclee M-x auto fill mode<Return> ahora. Luego inserte una línea 834>> teclee M-x auto-fill-mode <Return> ahora. Luego inserte una línea
840 de "asdf " repetidas veces hasta que la vea dividida en dos líneas. 835 de "asdf " repetidas veces hasta que la vea dividida en dos líneas.
841 Debe intercalar espacios porque Auto Fill sólo rompe líneas en los 836 Debe intercalar espacios porque Auto Fill sólo rompe líneas en los
842 espacios. 837 espacios.
@@ -861,15 +856,13 @@ ese párrafo.
861* BUSCAR 856* BUSCAR
862-------- 857--------
863 858
864Emacs puede hacer búsquedas de cadenas (grupos de caracteres o 859Emacs puede hacer búsquedas de cadenas (una "cadena" es un grupo de
865palabras contiguos) hacia adelante a través del texto o hacia atrás en 860caracteres contiguos) hacia adelante a través del texto o hacia atrás
866el mismo. La búsqueda de una cadena es un comando de movimiento de 861en el mismo. La búsqueda de una cadena es un comando de movimiento de
867cursor; mueve el cursor al próximo lugar donde esa cadena aparece. 862cursor; mueve el cursor al próximo lugar donde esa cadena aparece.
868 863
869El comando de búsqueda de Emacs es diferente a los comandos de 864El comando de búsqueda de Emacs es "incremental". Esto significa que
870búsqueda de los demás editores, en que es "incremental". Esto 865la búsqueda ocurre mientras teclea la cadena para buscarla.
871significa que la búsqueda ocurre mientras teclea la cadena para
872buscarla.
873 866
874El comando para iniciar una búsqueda es C-s para búsqueda hacia 867El comando para iniciar una búsqueda es C-s para búsqueda hacia
875adelante, y C-r para la búsqueda hacia atrás. ¡PERO ESPERE! No los 868adelante, y C-r para la búsqueda hacia atrás. ¡PERO ESPERE! No los
@@ -886,7 +879,7 @@ quiere buscar. <Return> termina una búsqueda.
886 Ahora ha buscado "cursor", una vez. 879 Ahora ha buscado "cursor", una vez.
887>> Teclee C-s de nuevo, para buscar la siguiente ocurrencia de 880>> Teclee C-s de nuevo, para buscar la siguiente ocurrencia de
888 "cursor". 881 "cursor".
889>> Ahora teclee <Delback> cuatro veces y vea como se mueve el cursor. 882>> Ahora teclee <DEL> cuatro veces y vea como se mueve el cursor.
890>> Teclee <Return> para terminar la búsqueda. 883>> Teclee <Return> para terminar la búsqueda.
891 884
892¿Vió lo que ocurrió? Emacs, en una búsqueda incremental, trata de ir 885¿Vió lo que ocurrió? Emacs, en una búsqueda incremental, trata de ir
@@ -895,27 +888,22 @@ ir a la próxima ocurrencia de 'cursor' solo teclee C-s de nuevo. Si
895tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual 888tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual
896está fallando ("failing"). C-g también termina la búsqueda. 889está fallando ("failing"). C-g también termina la búsqueda.
897 890
898NOTA: En algunos sistemas, teclear C-s dejará inmóvil la pantalla y no 891Si se encuentra en medio de una búsqueda incremental y teclea <DEL>,
899podrá ver más respuesta de Emacs. Esto indica que una 892la búsqueda "vuelve" a un punto anterior. Si teclea <DEL> justo
900"característica" del sistema operativo llamada "control de flujo" está 893después de teclear C-s para avanzar hasta la siguiente ocurrencia de
901interceptando el C-s y no permitiéndole llegar hasta Emacs. Para 894la cadena buscada, el cursor retrocede a una ocurrencia previa. Si no
902descongelar la pantalla, teclee C-q. Luego consulte la sección 895hay ocurrencias previas, <DEL> borra el último carácter de la cadena
903"Entrada Espontánea para Búsqueda Incremental" en el manual de Emacs 896buscada. Por ejemplo, suponga que ha tecleado "c", para buscar la
904para consejos de cómo tratar con esta "característica". 897primera ocurrencia de "c". Ahora, si teclea "u", el cursor se moverá
905 898a la primera ocurrencia de "cu". Ahora teclee <DEL>. Esto borra la
906Si se encuentra en medio de una búsqueda incremental y teclea 899"u" de la cadena buscada, y el cursor vuelve a la primera ocurrencia
907<Delback>, notará que el último carácter de la cadena buscada se borra 900de "c".
908y la búsqueda vuelve al sitio anterior de la búsqueda. Por ejemplo,
909suponga que ha tecleado "c", para buscar la primera ocurrencia de "c".
910Ahora, si teclea "u", el cursor se moverá a la primera ocurrencia de
911"cu". Ahora teclee <Delback>. Esto borra la "u" de la cadena
912buscada, y el cursor vuelve a la primera ocurrencia de "c".
913 901
914Si está en medio de una búsqueda y teclea un carácter control o meta 902Si está en medio de una búsqueda y teclea un carácter control o meta
915(con algunas pocas excepciones: los caracteres que son especiales en 903(con algunas pocas excepciones: los caracteres que son especiales en
916una búsqueda, tales como C-s y C-r), la búsqueda termina. 904una búsqueda, tales como C-s y C-r), la búsqueda termina.
917 905
918El C-s inicia una exploración que busca alguna ocurrencia de la cadena 906C-s inicia una exploración que busca alguna ocurrencia de la cadena
919buscada DESPUÉS de la posición actual del cursor. Si quiere buscar 907buscada DESPUÉS de la posición actual del cursor. Si quiere buscar
920algo anterior en el texto, teclee en cambio C-r. Todo lo que hemos 908algo anterior en el texto, teclee en cambio C-r. Todo lo que hemos
921dicho sobre C-s también se aplica a C-r, excepto que la dirección de 909dicho sobre C-s también se aplica a C-r, excepto que la dirección de
@@ -926,14 +914,16 @@ la búsqueda se invierte.
926-------------------- 914--------------------
927 915
928Una de las características agradables de Emacs es que se puede mostrar 916Una de las características agradables de Emacs es que se puede mostrar
929más de una ventana en la pantalla al mismo tiempo. 917más de una ventana en la pantalla al mismo tiempo. (Note que Emacs
918usa el término "marcos", descrito en la siguiente sección, para
919referirse a lo que otras aplicaciones llaman "ventanas". El manual de
920Emacs contiene un Glosario de términos.)
930 921
931>> Mueva el cursor a esta línea y teclee C-u 0 C-l (eso es CONTROL-L, 922>> Mueva el cursor a esta línea y teclee C-l C-l.
932 no CONTROL-1).
933 923
934>> Ahora teclee C-x 2 que divide la pantalla en dos ventanas. Ambas 924>> Ahora teclee C-x 2 que divide la pantalla en dos ventanas.
935 ventanas muestran este tutorial. El cursor permanece en la ventana 925 Ambas ventanas muestran este tutorial. El cursor de edición
936 superior. 926 permanece en la ventana superior.
937 927
938>> Teclee C-M-v para desplazar la ventana inferior. 928>> Teclee C-M-v para desplazar la ventana inferior.
939 (Si no tiene una tecla META real, teclee ESC C-v.) 929 (Si no tiene una tecla META real, teclee ESC C-v.)
@@ -947,24 +937,25 @@ más de una ventana en la pantalla al mismo tiempo.
947 superior. 937 superior.
948 El cursor en la ventana superior está justo donde estaba antes. 938 El cursor en la ventana superior está justo donde estaba antes.
949 939
950Puede continuar usando C-x o para cambiar entre las ventanas. Cada 940Puede continuar usando C-x o para cambiar entre las ventanas. La
951ventana tiene su propia posición del cursor, pero únicamente una 941"ventana seleccionada", donde tiene lugar casi toda la edición, es la
952ventana actual muestra el cursor. Todos los comandos de edición 942que tiene un cursor muy visible que parpadea cuando usted no está
953comunes se aplican a la ventana en que está el cursor. Llamaremos 943tecleando. Las otras ventanas tienen sus propia posición del cursor;
954esto la "ventana seleccionada". 944si está ejecutando Emacs en una pantalla gráfica, esos cursores se
945muestran como rectángulos vacíos que no parpadean.
955 946
956El comando C-M-v es muy útil cuando está editando un texto en una 947El comando C-M-v es muy útil cuando está editando un texto en una
957ventana y usando la otra ventana como referencia. Puede mantener el 948ventana y usando la otra ventana como referencia. Sin moverse de la
958cursor siempre en la ventana donde eseditando, y avanzar a la otra 949ventana seleccionada, puede desplazar el texto de la otra ventana con
959ventana secuencialmente con C-M-v. 950C-M-v.
960 951
961C-M-v es un ejemplo de un carácter CONTROL-META. Si tiene una tecla 952C-M-v es un ejemplo de un carácter CONTROL-META. Si tiene una tecla
962META real, puede teclear C-M-v pulsando a la vez CONTROL y META 953META (o Alt), puede teclear C-M-v pulsando a la vez CONTROL y META
963mientras teclea v. No importa qué tecla "vaya primero", CONTROL o 954mientras teclea v. No importa qué tecla "vaya primero", CONTROL o
964META, porque las dos teclas actúan modificando los caracteres que 955META, porque las dos teclas actúan modificando los caracteres que
965teclea. 956teclea.
966 957
967Si no tiene una tecla META real, y en vez de eso usa ESC, el orden sí 958Si no tiene una tecla META, y en vez de eso usa ESC, el orden sí
968importa: debe teclear ESC seguido de Control-v, porque Control-ESC v 959importa: debe teclear ESC seguido de Control-v, porque Control-ESC v
969no funcionará. Esto es porque ESC es un carácter que tiene valor por 960no funcionará. Esto es porque ESC es un carácter que tiene valor por
970sí mismo, no es una tecla modificadora. 961sí mismo, no es una tecla modificadora.
@@ -992,6 +983,32 @@ diferentes:
992 borrar la ventana inferior. 983 borrar la ventana inferior.
993 984
994 985
986* MÚLTIPLES MARCOS
987------------------
988
989Emacs puede crear también múltiples "marcos". Marco es como
990denominamos a un grupo de ventanas, junto con sus menus, barras de
991desplazamiento, áreas de eco, etc. En entornos gráficos, lo que Emacs
992denomina "marco" es lo que otras aplicaciones llaman "ventana". En
993entornos gráficos, es posible mostrar varios marcos al mismo tiempo.
994En una terminal, solo se puede mostrar un marco a la vez.
995
996>> Teclee M-x make-frame <Return>.
997 En la pantalla aparecerá un nuevo marco.
998
999En el nuevo marco puede hacer todo lo que hacía en el marco original.
1000El primer marco no tiene nada de especial.
1001
1002>> Teclee M-x delete-frame <Return>.
1003 Esto destruye el marco seleccionado.
1004
1005También puede destruir un marco mediante el método normal que ofrezca
1006el entorno gráfico (a menudo, pinchando con el ratón en un botón
1007etiquetado como "X" en alguna de las esquinas superiores del marco).
1008Si al hacer eso destruye el último marco de Emacs, la aplicación
1009termina.
1010
1011
995* NIVELES RECURSIVOS DE EDICIÓN 1012* NIVELES RECURSIVOS DE EDICIÓN
996-------------------------------- 1013--------------------------------
997 1014
@@ -1024,32 +1041,27 @@ Emacs. Todos estos comandos de "ayuda" comienzan con el carácter
1024Control-h, que es llamado "el carácter de Ayuda (Help)". 1041Control-h, que es llamado "el carácter de Ayuda (Help)".
1025 1042
1026Para usar las funciones de ayuda, teclee el carácter C-h, y luego un 1043Para usar las funciones de ayuda, teclee el carácter C-h, y luego un
1027carácter decidiendo qué tipo de ayuda quiere. Si está REALMENTE 1044carácter que especifica qué tipo de ayuda quiere. Si está REALMENTE
1028perdido teclee C-h ? y Emacs le dirá qué tipo de ayuda puede 1045perdido teclee C-h ? y Emacs le dirá qué tipo de ayuda puede
1029ofrecerle. Si ha tecleado C-h y decide que no quiere ninguna ayuda, 1046ofrecerle. Si ha tecleado C-h y decide que no quiere ninguna ayuda,
1030teclee C-g para cancelarlo. 1047teclee C-g para cancelarlo.
1031 1048
1032(En algunas instalaciones cambian el significado del carácter C-h. 1049(Si C-h no muestra un mensaje de ayuda en el final de la pantalla,
1033Realmente no deberían hacer esto como una política para todos los 1050intente teclear la tecla F1 o, en su lugar, M-x help <Return>.)
1034usuarios, así que tiene argumentos para quejarse al administrador del
1035sistema. Mientras tanto, si C-h no muestra un mensaje de ayuda en el
1036final de la pantalla, intente teclear la tecla F1 o, en su lugar, M-x
1037help <Return>).
1038 1051
1039La función de AYUDA más básica es C-h c. Teclee C-h, el carácter c y 1052La función de AYUDA más básica es C-h c. Teclee C-h, el carácter c y
1040un carácter de comando o secuencia de comando; Emacs le mostrará 1053un carácter de comando o secuencia de comando; Emacs le mostrará
1041una descripción muy breve del comando. 1054una descripción muy breve del comando.
1042 1055
1043>> Teclee C-h c C-p. 1056>> Teclee C-h c C-p.
1044 El mensaje debe ser algo como 1057 El mensaje debe ser algo como
1045 1058
1046 C-p runs the command previous-line 1059 C-p runs the command previous-line
1047 1060
1048Esto le dice el "nombre de la función". Los nombres de función se 1061Esto le dice el "nombre de la función". Ya que los nombres de las
1049usan principalmente para adecuar y extender Emacs. Pero ya que los 1062funciones se eligen para indicar lo que hace el comando, pueden servir
1050nombres de las funciones se eligen para indicar lo que el comando 1063como una breve documentación: suficiente para recordarle los comandos
1051hace, también pueden servir como una breve documentación: suficiente 1064que ha aprendido.
1052para recordarle los comandos que ha aprendido.
1053 1065
1054Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene 1066Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene
1055las teclas META o EDIT o ALT) <ESC>v también están permitidos después 1067las teclas META o EDIT o ALT) <ESC>v también están permitidos después
@@ -1062,22 +1074,23 @@ C-h c.
1062 1074
1063Esto muestra la documentación de la función, al igual que el nombre, 1075Esto muestra la documentación de la función, al igual que el nombre,
1064en una ventana de Emacs. Cuando haya terminado de leer el resultado, 1076en una ventana de Emacs. Cuando haya terminado de leer el resultado,
1065teclee C-x 1 para deshacerse del texto de ayuda. No tiene que hacer 1077teclee C-x 1 para deshacerse de la ventana. No tiene que hacer esto
1066esto ahora. Puede hacer algunas ediciones mientras se refiere 1078ahora. Puede hacer algunas ediciones mientras se refiere al texto de
1067al texto de ayuda, y entonces teclear C-x 1. 1079ayuda, y entonces teclear C-x 1.
1068 1080
1069Aquí hay algunas otras opciones útiles de C-h: 1081Aquí hay algunas otras opciones útiles de C-h:
1070 1082
1071 C-h f Describe una función. Usted teclea el nombre de la 1083 C-h f Describe una función. Usted teclea el nombre de la
1072 función. 1084 función.
1073 1085
1074>> Intente teclear C-h f previous-line<Return>. 1086>> Intente teclear C-h f previous-line <Return>.
1075 Esto muestra toda la información que Emacs tiene sobre la función 1087 Esto muestra toda la información que Emacs tiene sobre la función
1076 que implementa el comando C-p 1088 que implementa el comando C-p
1077 1089
1078Un comando similar, C-h v, muestra la documentación de variables cuyos 1090Un comando similar, C-h v, muestra documentación de las variables,
1079valores pueda poner para adecuar el comportamiento de Emacs. Necesita 1091incluyendo los valores que pueda poner para adaptar el comportamiento
1080teclear el nombre de la variable cuando Emacs pregunte por ella. 1092de Emacs. Deberá teclear el nombre de la variable cuando Emacs
1093pregunte por ella.
1081 1094
1082 C-h a Comando Apropos. Teclee una palabra y Emacs hará una 1095 C-h a Comando Apropos. Teclee una palabra y Emacs hará una
1083 lista de todos los comandos que contengan esa palabra. 1096 lista de todos los comandos que contengan esa palabra.
@@ -1086,7 +1099,7 @@ teclear el nombre de la variable cuando Emacs pregunte por ella.
1086 listará una secuencia de uno o dos caracteres la cual 1099 listará una secuencia de uno o dos caracteres la cual
1087 ejecutará el mismo comando. 1100 ejecutará el mismo comando.
1088 1101
1089>> Teclee C-h a file<Return>. 1102>> Teclee C-h a file <Return>.
1090 1103
1091Esto muestra en otra ventana una lista de todos los comandos M-x con 1104Esto muestra en otra ventana una lista de todos los comandos M-x con
1092la palabra "file" en sus nombres. Verá comandos de caracteres como 1105la palabra "file" en sus nombres. Verá comandos de caracteres como
@@ -1098,36 +1111,37 @@ correspondientes tales como find-file.
1098 1111
1099>> Teclee C-x 1 para borrar la ventana de ayuda. 1112>> Teclee C-x 1 para borrar la ventana de ayuda.
1100 1113
1101 C-h i Leer los Manuales En-Línea (alias Info). Este comando 1114 C-h i Leer los manuales incluidos (alias Info). Este comando
1102 lo pone en un buffer especial llamado `*info*' donde 1115 lo pone en un buffer especial llamado `*info*' donde
1103 puede leer manuales en línea de los paquetes 1116 puede leer manuales de los paquetes instalados en su
1104 instalados en su sistema. Teclee m Emacs <Return> 1117 sistema. Teclee m emacs <Return> para leer el manual
1105 para leer el manual de Emacs. Sí nunca ha usado Info 1118 de Emacs. Si nunca ha usado Info, teclee ? y Emacs y
1106 antes, teclee ? y Emacs lo llevará en una visita 1119 lo llevará por una visita guiada de los servicios del
1107 guiada de los servicios del modo de Info. Una vez que 1120 modo de Info. Una vez que haya terminado este
1108 haya terminado este tutorial, debería considerar el 1121 tutorial, debería considerar el manual Info de Emacs
1109 manual Info de Emacs como su documentación primaria. 1122 como su documentación primaria.
1110 1123
1111 1124
1112* MÁS CARACTERÍSTICAS 1125* MÁS CARACTERÍSTICAS
1113--------------------- 1126---------------------
1114 1127
1115Puede aprender más de Emacs leyendo su manual, ya sea como libro o en 1128Puede aprender más acerca de Emacs leyendo su manual, ya sea como
1116línea en el Info (use el menú Ayuda--"Help"--o teclee F10 h r). Dos 1129libro o en el propio Emacs (use el menú Ayuda, "Help", o teclee C-h
1117características que pueden gustarle son la completación, que ahorra 1130r). Dos características que pueden gustarle son la completación, que
1118teclear, y dired, que simplifica el manejo de archivos. 1131ahorra teclear, y dired, que simplifica el manejo de archivos.
1119 1132
1120La completación es una manera de ahorrar teclear innecesariamente. 1133La completación es una manera de ahorrar teclear innecesariamente.
1121Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear 1134Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear
1122C-x b *M<Tab> y emacs encontrará el resto del nombre del buffer tan 1135C-x b *M<Tab> y emacs encontrará el resto del nombre del buffer tan
1123lejos como pueda determinar de lo que ya haya tecleado. La 1136lejos como pueda determinar de lo que ya haya tecleado. La
1124completación es descrita en el Info del manual de Emacs en el nodo 1137completación también funciona con nombres de comandos y de archivos.
1125llamado "Completation". 1138La completación se describe en el Info del manual de Emacs en el nodo
1139llamado "Completion".
1126 1140
1127Dired le permite listar los archivos en un directorio (y opcionalmente 1141Dired le permite listar los archivos en un directorio (y opcionalmente
1128sus subdirectorios), moverse alrededor de esa lista, visitar, 1142sus subdirectorios), moverse alrededor de esa lista, visitar,
1129renombrar, borrar y aparte de eso operar en los archivos. Dired está 1143renombrar, borrar y aparte de eso operar en los archivos. Dired está
1130descrito en el Info en el manual de Emacs en el nodo llamado "Dired". 1144descrito en el manual de Emacs en el nodo llamado "Dired".
1131 1145
1132El manual también describe otras características de Emacs. 1146El manual también describe otras características de Emacs.
1133 1147
@@ -1135,13 +1149,11 @@ El manual también describe otras características de Emacs.
1135* CONCLUSIÓN 1149* CONCLUSIÓN
1136------------ 1150------------
1137 1151
1138Recuerde, para salir permanentemente de Emacs use C-x C-c. Para salir 1152Para salir permanentemente de Emacs use C-x C-c.
1139temporalmente a un intérprete de comandos, de forma que puede volver a
1140Emacs después, use C-z.
1141 1153
1142Este tutorial intenta ser comprensible para todos los usuarios nuevos, 1154Este tutorial intenta ser comprensible para todos los usuarios nuevos,
1143así que si encuentra algo que no esté claro, no se siente y se culpe a 1155así que si encuentra algo que no esté claro, no se quede parado
1144sí mismo: ¡Quéjese! 1156culpándose a sí mismo: ¡Quéjese!
1145 1157
1146 1158
1147* COPIA 1159* COPIA
@@ -1174,6 +1186,7 @@ La versión en español ha sido revisada y corregida por:
1174La versión en español ha sido actualizada por: 1186La versión en español ha sido actualizada por:
1175 1187
1176 Rafael Sepúlveda <drs@gnulinux.org.mx> 1188 Rafael Sepúlveda <drs@gnulinux.org.mx>
1189 Juanma Barranquero <lekktu@gmail.com>
1177 1190
1178Por favor, en caso de duda, sólo es válido el original en inglés de la 1191Por favor, en caso de duda, sólo es válido el original en inglés de la
1179siguiente nota de derechos de reproducción (que puede encontrar en el 1192siguiente nota de derechos de reproducción (que puede encontrar en el
diff --git a/lib/makefile.w32-in b/lib/makefile.w32-in
index ccc0cf6a595..3600406ac13 100644
--- a/lib/makefile.w32-in
+++ b/lib/makefile.w32-in
@@ -213,7 +213,6 @@ getopt_.h-SH: doit
213 213
214HAVE_GETOPT_H = HAVE_GETOPT_H 214HAVE_GETOPT_H = HAVE_GETOPT_H
215INCLUDE_NEXT = include_next 215INCLUDE_NEXT = include_next
216PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header
217PRAGMA_COLUMNS = 216PRAGMA_COLUMNS =
218NEXT_GETOPT_H = <getopt.h> 217NEXT_GETOPT_H = <getopt.h>
219ARG_NONNULL_H = ../build-aux/snippet/arg-nonnull.h 218ARG_NONNULL_H = ../build-aux/snippet/arg-nonnull.h
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fdf25af86ee..0a65a759b7f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,51 @@
12012-02-07 Alan Mackenzie <acm@muc.de>
2
3 * progmodes/cc-engine.el (c-forward-objc-directive): Prevent
4 looping in "#pragma mark @implementation".
5
62012-02-07 Michael Albinus <michael.albinus@gmx.de>
7
8 * notifications.el (notifications-on-closed-signal): Make `reason'
9 optional. (Bug#10744)
10
112012-02-07 Glenn Morris <rgm@gnu.org>
12
13 * emacs-lisp/easy-mmode.el (define-minor-mode):
14 Doc fixes for the macro and the mode it defines.
15
16 * image.el (imagemagick-types-inhibit): Doc fix.
17
18 * cus-start.el (imagemagick-render-type): Add it.
19
202012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
21
22 * progmodes/cc-mode.el
23 (c-standard-font-lock-fontify-region-function): Set the default at
24 load time, too, so that `font-lock-fontify-buffer' can be called
25 without setting up the entire mode first. This fixes a bug in
26 `mm-inline-text' with C MIME parts.
27
282012-02-06 Chong Yidong <cyd@gnu.org>
29
30 * simple.el (list-processes--refresh): Delete exited processes
31 (Bug#8094).
32
33 * comint.el (comint-next-prompt): next-single-char-property-change
34 and prev-single-char-property-change never return nil (Bug#8657).
35
36 * custom.el (defcustom): Doc fix (Bug#9711).
37
382012-02-05 Chong Yidong <cyd@gnu.org>
39
40 * cus-edit.el (custom-variable-reset-backup): Quote the value
41 before storing it in the customized-value property (Bug#6712).
42 (custom-display): Add a customization type tag.
43 (custom-buffer-create-internal): Improve tooltip message.
44
45 * wid-edit.el (widget-field-value-get): New optional arg to
46 suppress trailing whitespace truncation.
47 (character): Use it (Bug#2689).
48
12012-02-05 Andreas Schwab <schwab@linux-m68k.org> 492012-02-05 Andreas Schwab <schwab@linux-m68k.org>
2 50
3 * progmodes/gud.el (gud-pv): Use pv instead of pv1. 51 * progmodes/gud.el (gud-pv): Use pv instead of pv1.
@@ -5,6 +53,9 @@
5 53
62012-02-05 Chong Yidong <cyd@gnu.org> 542012-02-05 Chong Yidong <cyd@gnu.org>
7 55
56 * cus-edit.el (custom-variable-value-create): For mismatched
57 types, show the current value (Bug#7600).
58
8 * custom.el (defcustom): Doc fix. 59 * custom.el (defcustom): Doc fix.
9 60
102012-02-05 Glenn Morris <rgm@gnu.org> 612012-02-05 Glenn Morris <rgm@gnu.org>
diff --git a/lisp/comint.el b/lisp/comint.el
index 2d0ae6920f9..975291471df 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2513,7 +2513,7 @@ text matching `comint-prompt-regexp'."
2513 (if (> n 0) 2513 (if (> n 0)
2514 (next-single-char-property-change pos 'field) 2514 (next-single-char-property-change pos 'field)
2515 (previous-single-char-property-change pos 'field))) 2515 (previous-single-char-property-change pos 'field)))
2516 (cond ((or (null pos) (= pos prev-pos)) 2516 (cond ((= pos prev-pos)
2517 ;; Ran off the end of the buffer. 2517 ;; Ran off the end of the buffer.
2518 (when (> n 0) 2518 (when (> n 0)
2519 ;; There's always an input field at the end of the 2519 ;; There's always an input field at the end of the
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 0d7b0733b64..4ed72be06fb 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1624,7 +1624,9 @@ Otherwise use brackets."
1624 ;; Insert the search field. 1624 ;; Insert the search field.
1625 (when custom-search-field 1625 (when custom-search-field
1626 (widget-insert "\n") 1626 (widget-insert "\n")
1627 (let* ((echo "Search for custom items") 1627 (let* ((echo "Search for custom items.
1628You can enter one or more words separated by spaces,
1629or a regular expression.")
1628 (search-widget 1630 (search-widget
1629 (widget-create 1631 (widget-create
1630 'editable-field 1632 'editable-field
@@ -2599,7 +2601,6 @@ try matching its doc string against `custom-guess-doc-alist'."
2599 :parent widget) 2601 :parent widget)
2600 buttons)) 2602 buttons))
2601 ((memq form '(lisp mismatch)) 2603 ((memq form '(lisp mismatch))
2602 ;; In lisp mode edit the saved value when possible.
2603 (push (widget-create-child-and-convert 2604 (push (widget-create-child-and-convert
2604 widget 'custom-visibility 2605 widget 'custom-visibility
2605 :help-echo "Hide the value of this option." 2606 :help-echo "Hide the value of this option."
@@ -2611,11 +2612,10 @@ try matching its doc string against `custom-guess-doc-alist'."
2611 t) 2612 t)
2612 buttons) 2613 buttons)
2613 (insert " ") 2614 (insert " ")
2614 (let* ((value (cond ((get symbol 'saved-value) 2615 ;; This used to try presenting the saved value or the
2615 (car (get symbol 'saved-value))) 2616 ;; standard value, but it seems more intuitive to present
2616 ((get symbol 'standard-value) 2617 ;; the current value (Bug#7600).
2617 (car (get symbol 'standard-value))) 2618 (let* ((value (cond ((default-boundp symbol)
2618 ((default-boundp symbol)
2619 (custom-quote (funcall get symbol))) 2619 (custom-quote (funcall get symbol)))
2620 (t 2620 (t
2621 (custom-quote (widget-get conv :value)))))) 2621 (custom-quote (widget-get conv :value))))))
@@ -3073,7 +3073,7 @@ to switch between two values."
3073 (funcall set symbol (car value)) 3073 (funcall set symbol (car value))
3074 (error nil))) 3074 (error nil)))
3075 (error "No backup value for %s" symbol)) 3075 (error "No backup value for %s" symbol))
3076 (put symbol 'customized-value (list (car value))) 3076 (put symbol 'customized-value (list (custom-quote (car value))))
3077 (put symbol 'variable-comment comment) 3077 (put symbol 'variable-comment comment)
3078 (put symbol 'customized-variable-comment comment) 3078 (put symbol 'customized-variable-comment comment)
3079 (custom-variable-state-set widget) 3079 (custom-variable-state-set widget)
@@ -3251,6 +3251,7 @@ Also change :reverse-video to :inverse-video."
3251 :args '((const :tag "all" t) 3251 :args '((const :tag "all" t)
3252 (const :tag "defaults" default) 3252 (const :tag "defaults" default)
3253 (checklist 3253 (checklist
3254 :tag "specific display"
3254 :offset 0 3255 :offset 0
3255 :extra-offset 9 3256 :extra-offset 9
3256 :args ((group :sibling-args (:help-echo "\ 3257 :args ((group :sibling-args (:help-echo "\
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 2cee72d717e..a5032cf99e7 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -237,6 +237,8 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
237 :set custom-set-minor-mode) 237 :set custom-set-minor-mode)
238 ;; fringe.c 238 ;; fringe.c
239 (overflow-newline-into-fringe fringe boolean) 239 (overflow-newline-into-fringe fringe boolean)
240 ;; image.c
241 (imagemagick-render-type image integer "24.1")
240 ;; indent.c 242 ;; indent.c
241 (indent-tabs-mode indent boolean) 243 (indent-tabs-mode indent boolean)
242 ;; keyboard.c 244 ;; keyboard.c
@@ -504,6 +506,8 @@ since it could result in memory overflow and make Emacs crash."
504 (fboundp 'x-selection-exists-p)) 506 (fboundp 'x-selection-exists-p))
505 ((string-match "fringe" (symbol-name symbol)) 507 ((string-match "fringe" (symbol-name symbol))
506 (fboundp 'define-fringe-bitmap)) 508 (fboundp 'define-fringe-bitmap))
509 ((string-match "\\`imagemagick" (symbol-name symbol))
510 (fboundp 'imagemagick-types))
507 ((equal "font-use-system-font" (symbol-name symbol)) 511 ((equal "font-use-system-font" (symbol-name symbol))
508 (featurep 'system-font-setting)) 512 (featurep 'system-font-setting))
509 ;; Conditioned on x-create-frame, because that's 513 ;; Conditioned on x-create-frame, because that's
diff --git a/lisp/custom.el b/lisp/custom.el
index 962336978b1..2d880d23955 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -198,12 +198,16 @@ set to nil, as the value is no longer rogue."
198 (run-hooks 'custom-define-hook) 198 (run-hooks 'custom-define-hook)
199 symbol) 199 symbol)
200 200
201(defmacro defcustom (symbol value doc &rest args) 201(defmacro defcustom (symbol standard doc &rest args)
202 "Declare SYMBOL as a customizable variable that defaults to VALUE. 202 "Declare SYMBOL as a customizable variable.
203SYMBOL is the variable name; it should not be quoted.
204STANDARD is an expression specifying the variable's standard
205value. It should not be quoted. It is evaluated once by
206`defcustom', and the value is assigned to SYMBOL if the variable
207is unbound. The expression itself is also stored, so that
208Customize can re-evaluate it later to get the standard value.
203DOC is the variable documentation. 209DOC is the variable documentation.
204 210
205Neither SYMBOL nor VALUE need to be quoted.
206If SYMBOL is not already bound, initialize it to VALUE.
207The remaining arguments should have the form 211The remaining arguments should have the form
208 212
209 [KEYWORD VALUE]... 213 [KEYWORD VALUE]...
@@ -320,14 +324,15 @@ for more information."
320 `(custom-declare-variable 324 `(custom-declare-variable
321 ',symbol 325 ',symbol
322 ,(if lexical-binding ;FIXME: This is not reliable, but is all we have. 326 ,(if lexical-binding ;FIXME: This is not reliable, but is all we have.
323 ;; The `default' arg should be an expression that evaluates to 327 ;; The STANDARD arg should be an expression that evaluates to
324 ;; the value to use. The use of `eval' for it is spread over 328 ;; the standard value. The use of `eval' for it is spread
325 ;; many different places and hence difficult to eliminate, yet 329 ;; over many different places and hence difficult to
326 ;; we want to make sure that the `value' expression is checked by the 330 ;; eliminate, yet we want to make sure that the `standard'
327 ;; byte-compiler, and that lexical-binding is obeyed, so quote the 331 ;; expression is checked by the byte-compiler, and that
328 ;; expression with `lambda' rather than with `quote'. 332 ;; lexical-binding is obeyed, so quote the expression with
329 `(list (lambda () ,value)) 333 ;; `lambda' rather than with `quote'.
330 `',value) 334 `(list (lambda () ,standard))
335 `',standard)
331 ,doc 336 ,doc
332 ,@args)) 337 ,@args))
333 338
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index d871f6f1212..dbacba6cd29 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -90,6 +90,14 @@ This defines the toggle command MODE and (by default) a control variable
90MODE (you can override this with the :variable keyword, see below). 90MODE (you can override this with the :variable keyword, see below).
91DOC is the documentation for the mode toggle command. 91DOC is the documentation for the mode toggle command.
92 92
93The defined mode command takes one optional (prefix) argument.
94Interactively with no prefix argument it toggles the mode.
95With a prefix argument, it enables the mode if the argument is
96positive and otherwise disables it. When called from Lisp, it
97enables the mode if the argument is omitted or nil, and toggles
98the mode if the argument is `toggle'. If DOC is nil this
99function adds a basic doc-string stating these facts.
100
93Optional INIT-VALUE is the initial value of the mode's variable. 101Optional INIT-VALUE is the initial value of the mode's variable.
94Optional LIGHTER is displayed in the modeline when the mode is on. 102Optional LIGHTER is displayed in the modeline when the mode is on.
95Optional KEYMAP is the default keymap bound to the mode keymap. 103Optional KEYMAP is the default keymap bound to the mode keymap.
@@ -242,7 +250,7 @@ or call the function `%s'."))))
242 (format (concat "Toggle %s on or off. 250 (format (concat "Toggle %s on or off.
243With a prefix argument ARG, enable %s if ARG is 251With a prefix argument ARG, enable %s if ARG is
244positive, and disable it otherwise. If called from Lisp, enable 252positive, and disable it otherwise. If called from Lisp, enable
245the mode if ARG is omitted or nil. 253the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'.
246\\{%s}") pretty-name pretty-name keymap-sym)) 254\\{%s}") pretty-name pretty-name keymap-sym))
247 ;; Use `toggle' rather than (if ,mode 0 1) so that using 255 ;; Use `toggle' rather than (if ,mode 0 1) so that using
248 ;; repeat-command still does the toggling correctly. 256 ;; repeat-command still does the toggling correctly.
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 740a2340243..7c83b9d99de 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,43 @@
12012-02-07 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * gnus-sum.el (gnus-summary-show-thread): Revert last two changes.
4
52012-02-07 Lars Ingebrigtsen <larsi@gnus.org>
6
7 * nnimap.el (nnimap-transform-headers): Remove unused variable.
8 (nnimap-transform-headers): Fix parsing BODYSTRUCTURE elements that
9 have newlines within the strings, and where the UID comes after the
10 BODYSTRUCTURE element (bug#10537).
11
12 * shr-color.el (shr-color-set-minimum-interval): Renamed to add prefix
13 (bug#10732).
14
15 * shr.el (shr-insert-document): Add doc string.
16 (shr-visit-file): Ditto.
17 (shr-remove-trailing-whitespace): New function.
18 (shr-insert-document): Use it to clean up trailing whitespace as the
19 final step (bug#10714).
20
212012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
22
23 * gnus-sum.el (gnus-summary-exit-no-update): Really deaden the summary
24 buffer if `gnus-kill-summary-on-exit' is nil.
25
262012-02-06 Katsumi Yamaoka <yamaoka@jpl.org>
27
28 * gnus-sum.el (gnus-summary-show-thread):
29 next-single-char-property-change may return nil in XEmacs.
30
312012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
32
33 * gnus-sum.el (gnus-handle-ephemeral-exit): Allow exiting from Gnus
34 when just reading a single group from "without" Gnus.
35
362012-02-06 Chong Yidong <cyd@gnu.org>
37
38 * gnus-sum.el (gnus-summary-show-thread):
39 next-single-char-property-change never returns nil (Bug#8657).
40
12012-02-05 Lars Ingebrigtsen <larsi@gnus.org> 412012-02-05 Lars Ingebrigtsen <larsi@gnus.org>
2 42
3 * nnimap.el (nnimap-open-server): Allow switching the nnoo server 43 * nnimap.el (nnimap-open-server): Allow switching the nnoo server
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index d0a582e2712..296f25a09f9 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -7328,9 +7328,11 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7328 (gnus-kill-buffer gnus-original-article-buffer) 7328 (gnus-kill-buffer gnus-original-article-buffer)
7329 (setq gnus-article-current nil)) 7329 (setq gnus-article-current nil))
7330 ;; Return to the group buffer. 7330 ;; Return to the group buffer.
7331 (gnus-configure-windows 'group 'force)
7332 (if (not gnus-kill-summary-on-exit) 7331 (if (not gnus-kill-summary-on-exit)
7333 (gnus-deaden-summary) 7332 (progn
7333 (gnus-deaden-summary)
7334 (gnus-configure-windows 'group 'force))
7335 (gnus-configure-windows 'group 'force)
7334 (gnus-close-group group) 7336 (gnus-close-group group)
7335 (gnus-kill-buffer gnus-summary-buffer)) 7337 (gnus-kill-buffer gnus-summary-buffer))
7336 (unless gnus-single-article-buffer 7338 (unless gnus-single-article-buffer
@@ -7352,7 +7354,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
7352(defun gnus-handle-ephemeral-exit (quit-config) 7354(defun gnus-handle-ephemeral-exit (quit-config)
7353 "Handle movement when leaving an ephemeral group. 7355 "Handle movement when leaving an ephemeral group.
7354The state which existed when entering the ephemeral is reset." 7356The state which existed when entering the ephemeral is reset."
7355 (if (not (buffer-name (car quit-config))) 7357 (if (not (buffer-live-p (car quit-config)))
7356 (gnus-configure-windows 'group 'force) 7358 (gnus-configure-windows 'group 'force)
7357 (set-buffer (car quit-config)) 7359 (set-buffer (car quit-config))
7358 (unless (eq (cdr quit-config) 'group) 7360 (unless (eq (cdr quit-config) 'group)
@@ -11579,6 +11581,7 @@ Returns nil if no thread was there to be shown."
11579 (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point))))) 11581 (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point)))))
11580 (eoi (when end 11582 (eoi (when end
11581 (if (fboundp 'next-single-char-property-change) 11583 (if (fboundp 'next-single-char-property-change)
11584 ;; Note: XEmacs version of n-s-c-p-c may return nil
11582 (or (next-single-char-property-change end 'invisible) 11585 (or (next-single-char-property-change end 'invisible)
11583 (point-max)) 11586 (point-max))
11584 (while (progn 11587 (while (progn
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 09cf554312b..4c75f721ff6 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -189,25 +189,32 @@ textual parts.")
189 189
190(defun nnimap-transform-headers () 190(defun nnimap-transform-headers ()
191 (goto-char (point-min)) 191 (goto-char (point-min))
192 (let (article bytes lines size string) 192 (let (article lines size string)
193 (block nil 193 (block nil
194 (while (not (eobp)) 194 (while (not (eobp))
195 (while (not (looking-at "\\* [0-9]+ FETCH.+?UID \\([0-9]+\\)")) 195 (while (not (looking-at "\\* [0-9]+ FETCH"))
196 (delete-region (point) (progn (forward-line 1) (point))) 196 (delete-region (point) (progn (forward-line 1) (point)))
197 (when (eobp) 197 (when (eobp)
198 (return))) 198 (return)))
199 (setq article (match-string 1)) 199 (goto-char (match-end 0))
200 ;; Unfold quoted {number} strings. 200 ;; Unfold quoted {number} strings.
201 (while (re-search-forward "[^]][ (]{\\([0-9]+\\)}\r?\n" 201 (while (re-search-forward
202 (1+ (line-end-position)) t) 202 "[^]][ (]{\\([0-9]+\\)}\r?\n"
203 (save-excursion
204 (or (re-search-forward "\\* [0-9]+ FETCH" nil t)
205 (point-max)))
206 t)
203 (setq size (string-to-number (match-string 1))) 207 (setq size (string-to-number (match-string 1)))
204 (delete-region (+ (match-beginning 0) 2) (point)) 208 (delete-region (+ (match-beginning 0) 2) (point))
205 (setq string (buffer-substring (point) (+ (point) size))) 209 (setq string (buffer-substring (point) (+ (point) size)))
206 (delete-region (point) (+ (point) size)) 210 (delete-region (point) (+ (point) size))
207 (insert (format "%S" string))) 211 (insert (format "%S" (mm-subst-char-in-string ?\n ?\s string))))
208 (setq bytes (nnimap-get-length)
209 lines nil)
210 (beginning-of-line) 212 (beginning-of-line)
213 (setq article
214 (and (re-search-forward "UID \\([0-9]+\\)" (line-end-position)
215 t)
216 (match-string 1)))
217 (setq lines nil)
211 (setq size 218 (setq size
212 (and (re-search-forward "RFC822.SIZE \\([0-9]+\\)" 219 (and (re-search-forward "RFC822.SIZE \\([0-9]+\\)"
213 (line-end-position) 220 (line-end-position)
diff --git a/lisp/gnus/shr-color.el b/lisp/gnus/shr-color.el
index e23ab57965e..7011034d242 100644
--- a/lisp/gnus/shr-color.el
+++ b/lisp/gnus/shr-color.el
@@ -267,7 +267,8 @@ Like rgb() or hsl()."
267 (t 267 (t
268 nil)))) 268 nil))))
269 269
270(defun set-minimum-interval (val1 val2 min max interval &optional fixed) 270(defun shr-color-set-minimum-interval (val1 val2 min max interval
271 &optional fixed)
271 "Set minimum interval between VAL1 and VAL2 to INTERVAL. 272 "Set minimum interval between VAL1 and VAL2 to INTERVAL.
272The values are bound by MIN and MAX. 273The values are bound by MIN and MAX.
273If FIXED is t, then VAL1 will not be touched." 274If FIXED is t, then VAL1 will not be touched."
@@ -341,9 +342,9 @@ color will be adapted to be visible on BG."
341 (>= luminance-distance shr-color-visible-luminance-min)) 342 (>= luminance-distance shr-color-visible-luminance-min))
342 (list bg fg) 343 (list bg fg)
343 ;; Not visible, try to change luminance to make them visible 344 ;; Not visible, try to change luminance to make them visible
344 (let ((Ls (set-minimum-interval (car bg-lab) (car fg-lab) 0 100 345 (let ((Ls (shr-color-set-minimum-interval
345 shr-color-visible-luminance-min 346 (car bg-lab) (car fg-lab) 0 100
346 fixed-background))) 347 shr-color-visible-luminance-min fixed-background)))
347 (unless fixed-background 348 (unless fixed-background
348 (setcar bg-lab (car Ls))) 349 (setcar bg-lab (car Ls)))
349 (setcar fg-lab (cadr Ls)) 350 (setcar fg-lab (cadr Ls))
diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el
index acce7660263..deaef1d3f25 100644
--- a/lisp/gnus/shr.el
+++ b/lisp/gnus/shr.el
@@ -128,6 +128,7 @@ cid: URL as the argument.")
128;; Public functions and commands. 128;; Public functions and commands.
129 129
130(defun shr-visit-file (file) 130(defun shr-visit-file (file)
131 "Parse FILE as an HTML document, and render it in a new buffer."
131 (interactive "fHTML file name: ") 132 (interactive "fHTML file name: ")
132 (pop-to-buffer "*html*") 133 (pop-to-buffer "*html*")
133 (erase-buffer) 134 (erase-buffer)
@@ -139,12 +140,29 @@ cid: URL as the argument.")
139 140
140;;;###autoload 141;;;###autoload
141(defun shr-insert-document (dom) 142(defun shr-insert-document (dom)
143 "Render the parsed document DOM into the current buffer.
144DOM should be a parse tree as generated by
145`libxml-parse-html-region' or similar."
142 (setq shr-content-cache nil) 146 (setq shr-content-cache nil)
143 (let ((shr-state nil) 147 (let ((start (point))
148 (shr-state nil)
144 (shr-start nil) 149 (shr-start nil)
145 (shr-base nil) 150 (shr-base nil)
146 (shr-width (or shr-width (window-width)))) 151 (shr-width (or shr-width (window-width))))
147 (shr-descend (shr-transform-dom dom)))) 152 (shr-descend (shr-transform-dom dom))
153 (shr-remove-trailing-whitespace start (point))))
154
155(defun shr-remove-trailing-whitespace (start end)
156 (save-restriction
157 (narrow-to-region start end)
158 (delete-trailing-whitespace)
159 (goto-char start)
160 (while (not (eobp))
161 (end-of-line)
162 (dolist (overlay (overlays-at (point)))
163 (when (overlay-get overlay 'before-string)
164 (overlay-put overlay 'before-string nil)))
165 (forward-line 1))))
148 166
149(defun shr-copy-url () 167(defun shr-copy-url ()
150 "Copy the URL under point to the kill ring. 168 "Copy the URL under point to the kill ring.
diff --git a/lisp/image.el b/lisp/image.el
index c4b51716dad..8c52db149a0 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -686,13 +686,16 @@ The minimum delay between successive frames is 0.01s."
686 '(C HTML HTM TXT PDF) 686 '(C HTML HTM TXT PDF)
687 "ImageMagick types that Emacs should not use ImageMagick to handle. 687 "ImageMagick types that Emacs should not use ImageMagick to handle.
688This should be a list of symbols, each of which has the same 688This should be a list of symbols, each of which has the same
689names as one of the format tags used internally by ImageMagick; 689name as one of the format tags used internally by ImageMagick;
690see `imagemagick-types'. Entries in this list are excluded from 690see `imagemagick-types'. Entries in this list are excluded from
691being registered by `imagemagick-register-types'. 691being registered by `imagemagick-register-types', so if you change
692this variable you must do so before you call that function.
692 693
693If Emacs is compiled without ImageMagick, this variable has no effect." 694If Emacs is compiled without ImageMagick, this variable has no effect."
694 :type '(choice (const :tag "Let ImageMagick handle all types it can" nil) 695 :type '(choice (const :tag "Let ImageMagick handle all types it can" nil)
695 (repeat symbol)) 696 (repeat symbol))
697 ;; Ideally, would have a :set function that checks if we already did
698 ;; imagemagick-register-types, and if so undoes it, then redoes it.
696 :version "24.1" 699 :version "24.1"
697 :group 'image) 700 :group 'image)
698 701
diff --git a/lisp/notifications.el b/lisp/notifications.el
index c3b6c759506..9f7576b3f5d 100644
--- a/lisp/notifications.el
+++ b/lisp/notifications.el
@@ -107,9 +107,12 @@
107 notifications-action-signal 107 notifications-action-signal
108 'notifications-on-action-signal)) 108 'notifications-on-action-signal))
109 109
110(defun notifications-on-closed-signal (id reason) 110(defun notifications-on-closed-signal (id &optional reason)
111 "Dispatch signals to callback functions from `notifications-on-closed-map'." 111 "Dispatch signals to callback functions from `notifications-on-closed-map'."
112 (let ((entry (assoc id notifications-on-close-map))) 112 ;; notification-daemon prior 0.4.0 does not send a reason. So we
113 ;; make it optional, and assume `undefined' as default.
114 (let ((entry (assoc id notifications-on-close-map))
115 (reason (or reason 4)))
113 (when entry 116 (when entry
114 (funcall (cadr entry) 117 (funcall (cadr entry)
115 id (cadr (assoc reason notifications-closed-reason))) 118 id (cadr (assoc reason notifications-closed-reason)))
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 52f18a89849..47ceec309f4 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -7396,6 +7396,7 @@ comment at the start of cc-engine.el for more info."
7396 (let ((start (point)) 7396 (let ((start (point))
7397 start-char 7397 start-char
7398 (c-promote-possible-types t) 7398 (c-promote-possible-types t)
7399 lim
7399 ;; Turn off recognition of angle bracket arglists while parsing 7400 ;; Turn off recognition of angle bracket arglists while parsing
7400 ;; types here since the protocol reference list might then be 7401 ;; types here since the protocol reference list might then be
7401 ;; considered part of the preceding name or superclass-name. 7402 ;; considered part of the preceding name or superclass-name.
@@ -7423,6 +7424,7 @@ comment at the start of cc-engine.el for more info."
7423; (c-forward-token-2) ; 2006/1/13 This doesn't move if the token's 7424; (c-forward-token-2) ; 2006/1/13 This doesn't move if the token's
7424; at EOB. 7425; at EOB.
7425 (goto-char (match-end 0)) 7426 (goto-char (match-end 0))
7427 (setq lim (point))
7426 (c-skip-ws-forward) 7428 (c-skip-ws-forward)
7427 (c-forward-type)) 7429 (c-forward-type))
7428 7430
@@ -7447,7 +7449,7 @@ comment at the start of cc-engine.el for more info."
7447 t)))) 7449 t))))
7448 7450
7449 (progn 7451 (progn
7450 (c-backward-syntactic-ws) 7452 (c-backward-syntactic-ws lim)
7451 (c-clear-c-type-property start (1- (point)) 'c-decl-end) 7453 (c-clear-c-type-property start (1- (point)) 'c-decl-end)
7452 (c-put-c-type-property (1- (point)) 'c-decl-end) 7454 (c-put-c-type-property (1- (point)) 'c-decl-end)
7453 t) 7455 t)
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 0c86b68f1d9..374c9b434d1 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1155,7 +1155,8 @@ Note that the style variables are always made local to the buffer."
1155 ;; `c-set-fl-decl-start' for the detailed functionality. 1155 ;; `c-set-fl-decl-start' for the detailed functionality.
1156 (cons (c-set-fl-decl-start beg) end)) 1156 (cons (c-set-fl-decl-start beg) end))
1157 1157
1158(defvar c-standard-font-lock-fontify-region-function nil 1158(defvar c-standard-font-lock-fontify-region-function
1159 (default-value 'font-lock-fontify-region-function)
1159 "Standard value of `font-lock-fontify-region-function'") 1160 "Standard value of `font-lock-fontify-region-function'")
1160 1161
1161(defun c-font-lock-fontify-region (beg end &optional verbose) 1162(defun c-font-lock-fontify-region (beg end &optional verbose)
diff --git a/lisp/simple.el b/lisp/simple.el
index 8bd32a8db8d..610d4a3be42 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2713,47 +2713,50 @@ support pty association, if PROGRAM is nil."
2713 (tabulated-list-init-header)) 2713 (tabulated-list-init-header))
2714 2714
2715(defun list-processes--refresh () 2715(defun list-processes--refresh ()
2716 "Recompute the list of processes for the Process List buffer." 2716 "Recompute the list of processes for the Process List buffer.
2717Also, delete any process that is exited or signaled."
2717 (setq tabulated-list-entries nil) 2718 (setq tabulated-list-entries nil)
2718 (dolist (p (process-list)) 2719 (dolist (p (process-list))
2719 (when (or (not process-menu-query-only) 2720 (cond ((memq (process-status p) '(exit signal closed))
2720 (process-query-on-exit-flag p)) 2721 (delete-process p))
2721 (let* ((buf (process-buffer p)) 2722 ((or (not process-menu-query-only)
2722 (type (process-type p)) 2723 (process-query-on-exit-flag p))
2723 (name (process-name p)) 2724 (let* ((buf (process-buffer p))
2724 (status (symbol-name (process-status p))) 2725 (type (process-type p))
2725 (buf-label (if (buffer-live-p buf) 2726 (name (process-name p))
2726 `(,(buffer-name buf) 2727 (status (symbol-name (process-status p)))
2727 face link 2728 (buf-label (if (buffer-live-p buf)
2728 help-echo ,(concat "Visit buffer `" 2729 `(,(buffer-name buf)
2729 (buffer-name buf) "'") 2730 face link
2730 follow-link t 2731 help-echo ,(concat "Visit buffer `"
2731 process-buffer ,buf 2732 (buffer-name buf) "'")
2732 action process-menu-visit-buffer) 2733 follow-link t
2733 "--")) 2734 process-buffer ,buf
2734 (tty (or (process-tty-name p) "--")) 2735 action process-menu-visit-buffer)
2735 (cmd 2736 "--"))
2736 (if (memq type '(network serial)) 2737 (tty (or (process-tty-name p) "--"))
2737 (let ((contact (process-contact p t))) 2738 (cmd
2738 (if (eq type 'network) 2739 (if (memq type '(network serial))
2739 (format "(%s %s)" 2740 (let ((contact (process-contact p t)))
2740 (if (plist-get contact :type) 2741 (if (eq type 'network)
2741 "datagram" 2742 (format "(%s %s)"
2742 "network") 2743 (if (plist-get contact :type)
2743 (if (plist-get contact :server) 2744 "datagram"
2744 (format "server on %s" 2745 "network")
2745 (plist-get contact :server)) 2746 (if (plist-get contact :server)
2746 (format "connection to %s" 2747 (format "server on %s"
2747 (plist-get contact :host)))) 2748 (plist-get contact :server))
2748 (format "(serial port %s%s)" 2749 (format "connection to %s"
2749 (or (plist-get contact :port) "?") 2750 (plist-get contact :host))))
2750 (let ((speed (plist-get contact :speed))) 2751 (format "(serial port %s%s)"
2751 (if speed 2752 (or (plist-get contact :port) "?")
2752 (format " at %s b/s" speed) 2753 (let ((speed (plist-get contact :speed)))
2753 ""))))) 2754 (if speed
2754 (mapconcat 'identity (process-command p) " ")))) 2755 (format " at %s b/s" speed)
2755 (push (list p (vector name status buf-label tty cmd)) 2756 "")))))
2756 tabulated-list-entries))))) 2757 (mapconcat 'identity (process-command p) " "))))
2758 (push (list p (vector name status buf-label tty cmd))
2759 tabulated-list-entries))))))
2757 2760
2758(defun process-menu-visit-buffer (button) 2761(defun process-menu-visit-buffer (button)
2759 (display-buffer (button-get button 'process-buffer))) 2762 (display-buffer (button-get button 'process-buffer)))
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 7c92fc33490..f4cca618b49 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,19 @@
12012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
2
3 * url-cache.el (url-cache-prune-cache): New function.
4 (url-cache-prune-cache): Check that the directory exists before
5 trying to delete it.
6
7 * url.el (url-retrieve-number-of-calls): New variable.
8 (url-retrieve-internal): Use it to expire the cache once in a
9 while.
10
11 * url-queue.el (url-queue-setup-runners): New function that uses
12 `run-with-idle-timer' for extra asynchronicity.
13 (url-queue-remove-jobs-from-host): New function.
14 (url-queue-callback-function): Remove jobs from the same host if
15 connection failed.
16
12012-01-12 Glenn Morris <rgm@gnu.org> 172012-01-12 Glenn Morris <rgm@gnu.org>
2 18
3 * url-auth.el (url-basic-auth, url-digest-auth): 19 * url-auth.el (url-basic-auth, url-digest-auth):
diff --git a/lisp/url/url-cache.el b/lisp/url/url-cache.el
index 20602a2f8ef..6559de4deb7 100644
--- a/lisp/url/url-cache.el
+++ b/lisp/url/url-cache.el
@@ -209,6 +209,34 @@ If `url-standalone-mode' is non-nil, cached items never expire."
209 (seconds-to-time (or expire-time url-cache-expire-time))) 209 (seconds-to-time (or expire-time url-cache-expire-time)))
210 (current-time)))))) 210 (current-time))))))
211 211
212(defun url-cache-prune-cache (&optional directory)
213 "Remove all expired files from the cache.
214`url-cache-expire-time' says how old a file has to be to be
215considered \"expired\"."
216 (let ((current-time (current-time))
217 (total-files 0)
218 (deleted-files 0))
219 (setq directory (or directory url-cache-directory))
220 (when (file-exists-p directory)
221 (dolist (file (directory-files directory t))
222 (unless (member (file-name-nondirectory file) '("." ".."))
223 (setq total-files (1+ total-files))
224 (cond
225 ((file-directory-p file)
226 (when (url-cache-prune-cache file)
227 (setq deleted-files (1+ deleted-files))))
228 ((time-less-p
229 (time-add
230 (nth 5 (file-attributes file))
231 (seconds-to-time url-cache-expire-time))
232 current-time)
233 (delete-file file)
234 (setq deleted-files (1+ deleted-files))))))
235 (if (< deleted-files total-files)
236 nil
237 (delete-directory directory)
238 t))))
239
212(provide 'url-cache) 240(provide 'url-cache)
213 241
214;;; url-cache.el ends here 242;;; url-cache.el ends here
diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el
index 534c94b4d52..976a26635cd 100644
--- a/lisp/url/url-queue.el
+++ b/lisp/url/url-queue.el
@@ -30,6 +30,7 @@
30 30
31(eval-when-compile (require 'cl)) 31(eval-when-compile (require 'cl))
32(require 'browse-url) 32(require 'browse-url)
33(require 'url-parse)
33 34
34(defcustom url-queue-parallel-processes 6 35(defcustom url-queue-parallel-processes 6
35 "The number of concurrent processes." 36 "The number of concurrent processes."
@@ -49,7 +50,7 @@
49 50
50(defstruct url-queue 51(defstruct url-queue
51 url callback cbargs silentp 52 url callback cbargs silentp
52 buffer start-time) 53 buffer start-time pre-triggered)
53 54
54;;;###autoload 55;;;###autoload
55(defun url-queue-retrieve (url callback &optional cbargs silent) 56(defun url-queue-retrieve (url callback &optional cbargs silent)
@@ -63,7 +64,30 @@ controls the level of parallelism via the
63 :callback callback 64 :callback callback
64 :cbargs cbargs 65 :cbargs cbargs
65 :silentp silent)))) 66 :silentp silent))))
66 (url-queue-run-queue)) 67 (url-queue-setup-runners))
68
69;; To ensure asynch behaviour, we start the required number of queue
70;; runners from `run-with-idle-timer'. So we're basically going
71;; through the queue in two ways: 1) synchronously when a program
72;; calls `url-queue-retrieve' (which will then start the required
73;; number of queue runners), and 2) at the exit of each job, which
74;; will then not start any further threads, but just reuse the
75;; previous "slot".
76
77(defun url-queue-setup-runners ()
78 (let ((running 0)
79 waiting)
80 (dolist (entry url-queue)
81 (cond
82 ((or (url-queue-start-time entry)
83 (url-queue-pre-triggered entry))
84 (incf running))
85 ((not waiting)
86 (setq waiting entry))))
87 (when (and waiting
88 (< running url-queue-parallel-processes))
89 (setf (url-queue-pre-triggered waiting) t)
90 (run-with-idle-timer 0.01 nil 'url-queue-run-queue))))
67 91
68(defun url-queue-run-queue () 92(defun url-queue-run-queue ()
69 (url-queue-prune-old-entries) 93 (url-queue-prune-old-entries)
@@ -81,10 +105,27 @@ controls the level of parallelism via the
81 (url-queue-start-retrieve waiting)))) 105 (url-queue-start-retrieve waiting))))
82 106
83(defun url-queue-callback-function (status job) 107(defun url-queue-callback-function (status job)
108 (when (and (eq (car status) :error)
109 (eq (cadr (cadr status)) 'connection-failed))
110 ;; If we get a connection error, then flush all other jobs from
111 ;; the host from the queue. This particularly makes sense if the
112 ;; error really is a DNS resolver issue, which happens
113 ;; synchronously and totally halts Emacs.
114 (url-queue-remove-jobs-from-host
115 (plist-get (nthcdr 3 (cadr status)) :host)))
84 (setq url-queue (delq job url-queue)) 116 (setq url-queue (delq job url-queue))
85 (url-queue-run-queue) 117 (url-queue-run-queue)
86 (apply (url-queue-callback job) (cons status (url-queue-cbargs job)))) 118 (apply (url-queue-callback job) (cons status (url-queue-cbargs job))))
87 119
120(defun url-queue-remove-jobs-from-host (host)
121 (let ((jobs nil))
122 (dolist (job url-queue)
123 (when (equal (url-host (url-generic-parse-url (url-queue-url job)))
124 host)
125 (push job jobs)))
126 (dolist (job jobs)
127 (setq url-queue (delq job url-queue)))))
128
88(defun url-queue-start-retrieve (job) 129(defun url-queue-start-retrieve (job)
89 (setf (url-queue-buffer job) 130 (setf (url-queue-buffer job)
90 (ignore-errors 131 (ignore-errors
diff --git a/lisp/url/url.el b/lisp/url/url.el
index 883e1a0c765..03b66b15232 100644
--- a/lisp/url/url.el
+++ b/lisp/url/url.el
@@ -119,6 +119,9 @@ Sometimes while retrieving a URL, the URL library needs to use another buffer
119than the one returned initially by `url-retrieve'. In this case, it sets this 119than the one returned initially by `url-retrieve'. In this case, it sets this
120variable in the original buffer as a forwarding pointer.") 120variable in the original buffer as a forwarding pointer.")
121 121
122(defvar url-retrieve-number-of-calls 0)
123(autoload 'url-cache-prune-cache "url-cache")
124
122;;;###autoload 125;;;###autoload
123(defun url-retrieve (url callback &optional cbargs silent) 126(defun url-retrieve (url callback &optional cbargs silent)
124 "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. 127 "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished.
@@ -174,6 +177,10 @@ If SILENT, don't message progress reports and the like."
174 (unless (url-type url) 177 (unless (url-type url)
175 (error "Bad url: %s" (url-recreate-url url))) 178 (error "Bad url: %s" (url-recreate-url url)))
176 (setf (url-silent url) silent) 179 (setf (url-silent url) silent)
180 ;; Once in a while, remove old entries from the URL cache.
181 (when (zerop (% url-retrieve-number-of-calls 1000))
182 (url-cache-prune-cache))
183 (setq url-retrieve-number-of-calls (1+ url-retrieve-number-of-calls))
177 (let ((loader (url-scheme-get-property (url-type url) 'loader)) 184 (let ((loader (url-scheme-get-property (url-type url) 'loader))
178 (url-using-proxy (if (url-host url) 185 (url-using-proxy (if (url-host url)
179 (url-find-proxy-for-url url (url-host url)))) 186 (url-find-proxy-for-url url (url-host url))))
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 27922327f44..61bb4db558c 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -1987,10 +1987,14 @@ the earlier input."
1987 (when (overlayp overlay) 1987 (when (overlayp overlay)
1988 (delete-overlay overlay)))) 1988 (delete-overlay overlay))))
1989 1989
1990(defun widget-field-value-get (widget) 1990(defun widget-field-value-get (widget &optional no-truncate)
1991 "Return current text in editing field." 1991 "Return current text in editing field.
1992Normally, trailing spaces within the editing field are truncated.
1993But if NO-TRUNCATE is non-nil, include them."
1992 (let ((from (widget-field-start widget)) 1994 (let ((from (widget-field-start widget))
1993 (to (widget-field-text-end widget)) 1995 (to (if no-truncate
1996 (widget-field-end widget)
1997 (widget-field-text-end widget)))
1994 (buffer (widget-field-buffer widget)) 1998 (buffer (widget-field-buffer widget))
1995 (secret (widget-get widget :secret)) 1999 (secret (widget-get widget :secret))
1996 (old (current-buffer))) 2000 (old (current-buffer)))
@@ -3407,6 +3411,7 @@ To use this type, you must define :match or :match-alternatives."
3407 :format "%{%t%}: %v\n" 3411 :format "%{%t%}: %v\n"
3408 :valid-regexp "\\`.\\'" 3412 :valid-regexp "\\`.\\'"
3409 :error "This field should contain a single character" 3413 :error "This field should contain a single character"
3414 :value-get (lambda (w) (widget-field-value-get w t))
3410 :value-to-internal (lambda (_widget value) 3415 :value-to-internal (lambda (_widget value)
3411 (if (stringp value) 3416 (if (stringp value)
3412 value 3417 value
diff --git a/make-dist b/make-dist
index d1d80097824..55dac98d713 100755
--- a/make-dist
+++ b/make-dist
@@ -398,13 +398,12 @@ echo "Making links to \`m4'"
398(cd m4 398(cd m4
399 ln *.m4 ../${tempdir}/m4) 399 ln *.m4 ../${tempdir}/m4)
400 400
401## Exclude README.W32 because it is specific to pre-built binaries(?).
402echo "Making links to \`nt'" 401echo "Making links to \`nt'"
403(cd nt 402(cd nt
404 ln emacs.manifest emacs.rc emacsclient.rc config.nt ../${tempdir}/nt 403 ln emacs.manifest emacs.rc emacsclient.rc config.nt ../${tempdir}/nt
405 ln emacs-src.tags nmake.defs gmake.defs subdirs.el ../${tempdir}/nt 404 ln emacs-src.tags nmake.defs gmake.defs subdirs.el ../${tempdir}/nt
406 ln [a-z]*.bat [a-z]*.[ch] ../${tempdir}/nt 405 ln [a-z]*.bat [a-z]*.[ch] ../${tempdir}/nt
407 ln ChangeLog INSTALL README makefile.w32-in ../${tempdir}/nt) 406 ln ChangeLog INSTALL README README.W32 makefile.w32-in ../${tempdir}/nt)
408 407
409echo "Making links to \`nt/inc' and its subdirectories" 408echo "Making links to \`nt/inc' and its subdirectories"
410for f in `find nt/inc -type f -name '[a-z]*.h'`; do 409for f in `find nt/inc -type f -name '[a-z]*.h'`; do
diff --git a/nt/ChangeLog b/nt/ChangeLog
index 81bf6a1e105..544b964be3d 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,21 @@
12012-02-06 Christoph Scholtes <cschol2112@googlemail.com>
2
3 * README.W32: Removed specific version information for libXpm
4 included in the binary distribution for maintenance purposes.
5
62012-02-05 Christoph Scholtes <cschol2112@googlemail.com>
7
8 * README.W32: Clarification for inclusion in source tarball. (Bug#9750)
9
10 * gmake.defs (PRAGMA_SYSTEM_HEADER): Add for GCC.
11
12 * nmake.defs (PRAGMA_SYSTEM_HEADER): Add, but ignore with MSVC.
13
14 * makefile.w32-in (maybe-copy-distfiles)
15 (maybe-copy-distfiles-CMD, maybe-copy-distfiles-SH)
16 (create-tmp-dist-dir): Added to make --distfiles optional.
17 (dist): Use create-tmp-dist-dir and maybe-copy-distfiles. (Bug#10261)
18
12012-02-04 Eli Zaretskii <eliz@gnu.org> 192012-02-04 Eli Zaretskii <eliz@gnu.org>
2 20
3 * inc/sys/stat.h (_STAT_DEFINED): Define, to prevent redefinitions 21 * inc/sys/stat.h (_STAT_DEFINED): Define, to prevent redefinitions
diff --git a/nt/README.W32 b/nt/README.W32
index 8f33dee2d9b..05456fd1d6d 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -3,16 +3,21 @@ See the end of the file for license conditions.
3 3
4 Emacs for Windows 4 Emacs for Windows
5 5
6 This README file describes how to set up and run a precompiled 6 This README.W32 file describes how to set up and run a precompiled
7 version of GNU Emacs for Windows. This distribution can be found on 7 distribution of GNU Emacs for Windows. You can find the precompiled
8 the ftp.gnu.org server and its mirrors: 8 distribution on the ftp.gnu.org server and its mirrors:
9 9
10 ftp://ftp.gnu.org/gnu/emacs/windows/ 10 ftp://ftp.gnu.org/gnu/emacs/windows/
11 11
12 This server contains other distributions, including the full Emacs 12 This server contains other distributions, including the full Emacs
13 source distribution and a barebin distribution which can be installed 13 source distribution and a barebin distribution which can be installed
14 over it, as well as older releases of Emacs for Windows. 14 over it, as well as older releases of Emacs for Windows.
15 15
16 Information on how to compile Emacs from sources on Windows is in
17 the files README and INSTALL in this directory. If you received
18 this file as part of the Emacs source distribution, please read
19 those 2 files and not this one.
20
16 Answers to frequently asked questions, and further information about 21 Answers to frequently asked questions, and further information about
17 this port of GNU Emacs and related software packages can be found via 22 this port of GNU Emacs and related software packages can be found via
18 http: 23 http:
@@ -123,9 +128,7 @@ See the end of the file for license conditions.
123 Emacs has built in support for XBM and PPM/PGM/PBM images, and the 128 Emacs has built in support for XBM and PPM/PGM/PBM images, and the
124 libXpm library is bundled, providing XPM support (required for color 129 libXpm library is bundled, providing XPM support (required for color
125 toolbar icons and splash screen). Source for libXpm should be available 130 toolbar icons and splash screen). Source for libXpm should be available
126 on the same place as you got this binary distribution from. The version 131 on the same place as you got this binary distribution from.
127 of libXpm bundled with this version of Emacs is 3.5.7, based on x.org's
128 libXpm library from X11R7.3.
129 132
130 Emacs can also support some other image formats with appropriate 133 Emacs can also support some other image formats with appropriate
131 libraries. These libraries are all available as part of GTK 134 libraries. These libraries are all available as part of GTK
diff --git a/nt/gmake.defs b/nt/gmake.defs
index e58ee4f3213..6839b28b975 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -289,6 +289,8 @@ ifdef USER_LIBS
289USER_LIBS := $(patsubst %,-l%,$(USER_LIBS)) 289USER_LIBS := $(patsubst %,-l%,$(USER_LIBS))
290endif 290endif
291 291
292PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header
293
292ifeq "$(ARCH)" "i386" 294ifeq "$(ARCH)" "i386"
293ifdef NOOPT 295ifdef NOOPT
294ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN) 296ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN)
diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in
index b442ca57b78..30a5f83ea00 100644
--- a/nt/makefile.w32-in
+++ b/nt/makefile.w32-in
@@ -257,8 +257,22 @@ install-other-dirs-gmake:
257install-shortcuts: 257install-shortcuts:
258 "$(INSTALL_DIR)/bin/addpm" -q 258 "$(INSTALL_DIR)/bin/addpm" -q
259 259
260dist: install-bin 260maybe-copy-distfiles: maybe-copy-distfiles-$(SHELLTYPE)
261 mkdir $(TMP_DIST_DIR) 261
262maybe-copy-distfiles-CMD: doit
263 @if not $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin
264
265maybe-copy-distfiles-SH: doit
266 @if [ ! $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" ] ; then \
267 $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin
268 fi
269
270create-tmp-dist-dir:
271 mkdir "$(TMP_DIST_DIR)"
272# Also create bin directory for dist files.
273 mkdir "$(TMP_DIST_DIR)/bin"
274
275dist: install-bin create-tmp-dist-dir maybe-copy-distfiles
262 $(CP) "$(INSTALL_DIR)/BUGS" $(TMP_DIST_DIR) 276 $(CP) "$(INSTALL_DIR)/BUGS" $(TMP_DIST_DIR)
263 $(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR) 277 $(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR)
264 $(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR) 278 $(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR)
@@ -269,7 +283,6 @@ dist: install-bin
269 $(CP_DIR) "$(INSTALL_DIR)/lisp" $(TMP_DIST_DIR) 283 $(CP_DIR) "$(INSTALL_DIR)/lisp" $(TMP_DIST_DIR)
270 $(CP_DIR) "$(INSTALL_DIR)/leim" $(TMP_DIST_DIR) 284 $(CP_DIR) "$(INSTALL_DIR)/leim" $(TMP_DIST_DIR)
271 $(CP_DIR) "$(INSTALL_DIR)/site-lisp" $(TMP_DIST_DIR) 285 $(CP_DIR) "$(INSTALL_DIR)/site-lisp" $(TMP_DIST_DIR)
272 $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin
273 $(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(VERSION)$(ARGQUOTE) 286 $(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(VERSION)$(ARGQUOTE)
274 $(DEL_TREE) $(TMP_DIST_DIR) 287 $(DEL_TREE) $(TMP_DIST_DIR)
275 288
diff --git a/nt/nmake.defs b/nt/nmake.defs
index a143fe65fac..2cb3113ca9a 100644
--- a/nt/nmake.defs
+++ b/nt/nmake.defs
@@ -203,6 +203,9 @@ DEBUG_LINK = -debug
203D = d 203D = d
204!endif 204!endif
205 205
206# gcc-specific pragma (ignore for MSVC)
207PRAGMA_SYSTEM_HEADER =
208
206!if "$(ARCH)" == "i386" 209!if "$(ARCH)" == "i386"
207!ifdef NOOPT 210!ifdef NOOPT
208#ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG) 211#ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG)
diff --git a/src/ChangeLog b/src/ChangeLog
index 2353cc1eca2..71af862cdac 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,22 @@
12012-02-07 Chong Yidong <cyd@gnu.org>
2
3 * buffer.c (Fbuffer_local_variables)
4 (buffer_lisp_local_variables): Handle unbound vars correctly;
5 don't let Qunbound leak into Lisp.
6
72012-02-07 Glenn Morris <rgm@gnu.org>
8
9 * image.c (Fimagemagick_types): Doc fix.
10
11 * image.c (imagemagick-render-type): Change it from a lisp object
12 to an integer. Move the doc here from the lisp manual.
13 Treat all values not equal to 0 the same.
14
152012-02-06 Chong Yidong <cyd@gnu.org>
16
17 * doc.c (store_function_docstring): Avoid applying docstring of
18 alias to base function (Bug#2603).
19
12012-02-04 Andreas Schwab <schwab@linux-m68k.org> 202012-02-04 Andreas Schwab <schwab@linux-m68k.org>
2 21
3 * .gdbinit (pp1, pv1): Remove redundant defines. 22 * .gdbinit (pp1, pv1): Remove redundant defines.
diff --git a/src/buffer.c b/src/buffer.c
index 01418956c8d..a6f61a1936a 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1022,7 +1022,10 @@ buffer_lisp_local_variables (struct buffer *buf)
1022 if (buf != current_buffer) 1022 if (buf != current_buffer)
1023 val = XCDR (elt); 1023 val = XCDR (elt);
1024 1024
1025 result = Fcons (Fcons (XCAR (elt), val), result); 1025 result = Fcons (EQ (val, Qunbound)
1026 ? XCAR (elt)
1027 : Fcons (XCAR (elt), val),
1028 result);
1026 } 1029 }
1027 1030
1028 return result; 1031 return result;
@@ -1064,9 +1067,12 @@ No argument or nil as argument means use current buffer as BUFFER. */)
1064 idx = PER_BUFFER_IDX (offset); 1067 idx = PER_BUFFER_IDX (offset);
1065 if ((idx == -1 || PER_BUFFER_VALUE_P (buf, idx)) 1068 if ((idx == -1 || PER_BUFFER_VALUE_P (buf, idx))
1066 && SYMBOLP (PER_BUFFER_SYMBOL (offset))) 1069 && SYMBOLP (PER_BUFFER_SYMBOL (offset)))
1067 result = Fcons (Fcons (PER_BUFFER_SYMBOL (offset), 1070 {
1068 PER_BUFFER_VALUE (buf, offset)), 1071 Lisp_Object sym = PER_BUFFER_SYMBOL (offset);
1069 result); 1072 Lisp_Object val = PER_BUFFER_VALUE (buf, offset);
1073 result = Fcons (EQ (val, Qunbound) ? sym : Fcons (sym, val),
1074 result);
1075 }
1070 } 1076 }
1071 } 1077 }
1072 1078
diff --git a/src/doc.c b/src/doc.c
index 7bdb8c658b0..02db4dde072 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -502,10 +502,12 @@ aren't strings. */)
502/* Scanning the DOC files and placing docstring offsets into functions. */ 502/* Scanning the DOC files and placing docstring offsets into functions. */
503 503
504static void 504static void
505store_function_docstring (Lisp_Object fun, EMACS_INT offset) 505store_function_docstring (Lisp_Object obj, EMACS_INT offset)
506/* Use EMACS_INT because we get offset from pointer subtraction. */ 506/* Use EMACS_INT because we get offset from pointer subtraction. */
507{ 507{
508 fun = indirect_function (fun); 508 /* Don't use indirect_function here, or defaliases will apply their
509 docstrings to the base functions (Bug#2603). */
510 Lisp_Object fun = SYMBOLP (obj) ? XSYMBOL (obj)->function : obj;
509 511
510 /* The type determines where the docstring is stored. */ 512 /* The type determines where the docstring is stored. */
511 513
diff --git a/src/image.c b/src/image.c
index f4def3e681e..b2951dd70fb 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7617,7 +7617,6 @@ imagemagick_load_image (struct frame *f, struct image *img,
7617 EMACS_INT ino; 7617 EMACS_INT ino;
7618 int desired_width, desired_height; 7618 int desired_width, desired_height;
7619 double rotation; 7619 double rotation;
7620 EMACS_INT imagemagick_rendermethod;
7621 int pixelwidth; 7620 int pixelwidth;
7622 ImageInfo *image_info; 7621 ImageInfo *image_info;
7623 ExceptionInfo *exception; 7622 ExceptionInfo *exception;
@@ -7798,9 +7797,8 @@ imagemagick_load_image (struct frame *f, struct image *img,
7798 went ok. */ 7797 went ok. */
7799 7798
7800 init_color_table (); 7799 init_color_table ();
7801 imagemagick_rendermethod = (INTEGERP (Vimagemagick_render_type) 7800
7802 ? XINT (Vimagemagick_render_type) : 0); 7801 if (imagemagick_render_type == 0)
7803 if (imagemagick_rendermethod == 0)
7804 { 7802 {
7805 size_t image_height; 7803 size_t image_height;
7806 7804
@@ -7850,8 +7848,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
7850 } 7848 }
7851 DestroyPixelIterator (iterator); 7849 DestroyPixelIterator (iterator);
7852 } 7850 }
7853 7851 else /* imagemagick_render_type != 0 */
7854 if (imagemagick_rendermethod == 1)
7855 { 7852 {
7856 /* Magicexportimage is normally faster than pixelpushing. This 7853 /* Magicexportimage is normally faster than pixelpushing. This
7857 method is also well tested. Some aspects of this method are 7854 method is also well tested. Some aspects of this method are
@@ -7986,6 +7983,7 @@ DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0,
7986Each entry in this list is a symbol named after an ImageMagick format 7983Each entry in this list is a symbol named after an ImageMagick format
7987tag. See the ImageMagick manual for a list of ImageMagick formats and 7984tag. See the ImageMagick manual for a list of ImageMagick formats and
7988their descriptions (http://www.imagemagick.org/script/formats.php). 7985their descriptions (http://www.imagemagick.org/script/formats.php).
7986You can also try the shell command: `identify -list format'.
7989 7987
7990Note that ImageMagick recognizes many file-types that Emacs does not 7988Note that ImageMagick recognizes many file-types that Emacs does not
7991recognize as images, such as C. See `imagemagick-types-inhibit'. */) 7989recognize as images, such as C. See `imagemagick-types-inhibit'. */)
@@ -8958,8 +8956,17 @@ The value can also be nil, meaning the cache is never cleared.
8958The function `clear-image-cache' disregards this variable. */); 8956The function `clear-image-cache' disregards this variable. */);
8959 Vimage_cache_eviction_delay = make_number (300); 8957 Vimage_cache_eviction_delay = make_number (300);
8960#ifdef HAVE_IMAGEMAGICK 8958#ifdef HAVE_IMAGEMAGICK
8961 DEFVAR_LISP ("imagemagick-render-type", Vimagemagick_render_type, 8959 DEFVAR_INT ("imagemagick-render-type", imagemagick_render_type,
8962 doc: /* Choose between ImageMagick render methods. */); 8960 doc: /* Integer indicating which ImageMagick rendering method to use.
8961The options are:
8962 0 -- the default method (pixel pushing)
8963 1 -- a newer method ("MagickExportImagePixels") that may perform
8964 better (speed etc) in some cases, but has not been as thoroughly
8965 tested with Emacs as the default method. This method requires
8966 ImageMagick version 6.4.6 (approximately) or later.
8967*/);
8968 /* MagickExportImagePixels is in 6.4.6-9, but not 6.4.4-10. */
8969 imagemagick_render_type = 0;
8963#endif 8970#endif
8964 8971
8965} 8972}
diff --git a/src/xfaces.c b/src/xfaces.c
index 617097d056b..bcb04188aeb 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -3360,7 +3360,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param,
3360 3360
3361 /* Changing the background color might change the background 3361 /* Changing the background color might change the background
3362 mode, so that we have to load new defface specs. 3362 mode, so that we have to load new defface specs.
3363 Call frame-update-face-colors to do that. */ 3363 Call frame-set-background-mode to do that. */
3364 XSETFRAME (frame, f); 3364 XSETFRAME (frame, f);
3365 call1 (Qframe_set_background_mode, frame); 3365 call1 (Qframe_set_background_mode, frame);
3366 3366