diff options
| author | Joakim Verona | 2012-02-10 08:29:52 +0100 |
|---|---|---|
| committer | Joakim Verona | 2012-02-10 08:29:52 +0100 |
| commit | db2e8ff4fd52d6a06cef414787fd031cc26d43fa (patch) | |
| tree | c0e6fe54a70be21c9efa1f34040ce08499754e74 | |
| parent | 8c5c7f5afa968d06efb6788cf680d5463c389d85 (diff) | |
| parent | 667ced3a2d224b0f2ab3f2da26468791252c234a (diff) | |
| download | emacs-db2e8ff4fd52d6a06cef414787fd031cc26d43fa.tar.gz emacs-db2e8ff4fd52d6a06cef414787fd031cc26d43fa.zip | |
upstream
48 files changed, 1001 insertions, 505 deletions
| @@ -1,3 +1,10 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-02-04 Glenn Morris <rgm@gnu.org> | 8 | 2012-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 | |||
| 188 | commands.texi | 188 | commands.texi |
| 189 | compile.texi | 189 | compile.texi |
| 190 | control.texi cyd | 190 | control.texi cyd |
| 191 | customize.texi | 191 | customize.texi cyd |
| 192 | debugging.texi | 192 | debugging.texi |
| 193 | display.texi | 193 | display.texi |
| 194 | edebug.texi | 194 | edebug.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' | |||
| 640 | in /usr/share/perl5/Debbugs/Config.pm. | 640 | in /usr/share/perl5/Debbugs/Config.pm. |
| 641 | And update /var/www/Developer.html with a description of what the tag means. | 641 | And update /var/www/Developer.html with a description of what the tag means. |
| 642 | And the "valid tags" list in /var/www/index.html. | 642 | And the "valid tags" list in /var/www/index.html. |
| 643 | |||
| 644 | ** Backups | ||
| 645 | |||
| 646 | The FSF sysadmins handle multi-generational backups of the filesystem | ||
| 647 | on debbugs.gnu.org. But if you really want to have your own backup of | ||
| 648 | the bug database, you can use rsync (this requires login access to | ||
| 649 | debbugs.gnu.org): | ||
| 650 | |||
| 651 | rsync -azvv -e ssh USER@debbugs.gnu.org:/var/lib/debbugs/ DEST | ||
| 652 | |||
| 653 | Note 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 @@ | |||
| 1 | 2012-02-07 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * files.texi (File Conveniences): Mention ImageMagick images. | ||
| 4 | |||
| 1 | 2012-02-05 Glenn Morris <rgm@gnu.org> | 5 | 2012-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 | |||
| 1915 | mode allows you to toggle between displaying the file as an image in | 1915 | mode allows you to toggle between displaying the file as an image in |
| 1916 | the Emacs buffer, and displaying its underlying text representation, | 1916 | the Emacs buffer, and displaying its underlying text representation, |
| 1917 | using the command @kbd{C-c C-c} (@code{image-toggle-display}). This | 1917 | using the command @kbd{C-c C-c} (@code{image-toggle-display}). This |
| 1918 | works only when Emacs can display the specific image type. If the | 1918 | works only when Emacs can display the specific image type@footnote{If |
| 1919 | displayed image is wider or taller than the frame, the usual point | 1919 | your Emacs was compiled with ImageMagick support, then after using |
| 1920 | motion 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 |
| 1921 | of the image to be displayed. If the image can be animated, then | 1921 | image type that ImageMagick supports; @pxref{ImageMagick Images,,, |
| 1922 | the command @kbd{RET} (@code{image-toggle-animation}), will start (or | 1922 | elisp, The Emacs Lisp Reference Manual}}. If the displayed image is wider |
| 1923 | stop) animating it. Animation plays once, unless the option | 1923 | or 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 |
| 1925 | supports animated GIF files (@pxref{Animated Images,,, elisp, The Emacs | 1925 | displayed. If the image can be animated, then the command @kbd{RET} |
| 1926 | Lisp Reference Manual}). | 1926 | (@code{image-toggle-animation}), will start (or stop) animating it. |
| 1927 | Animation plays once, unless the option @code{image-animate-loop} is | ||
| 1928 | non-@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 @@ | |||
| 1 | 2012-02-07 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * modes.texi (Defining Minor Modes): | ||
| 4 | Expand on args of defined minor modes. | ||
| 5 | |||
| 6 | 2012-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 | |||
| 11 | 2012-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 | |||
| 16 | 2012-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 | |||
| 1 | 2012-02-05 Chong Yidong <cyd@gnu.org> | 27 | 2012-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 |
| 893 | This deletes the file named @var{filename}, catching any error and | 893 | This deletes the file named @var{filename}, catching any error and |
| 894 | returning @code{nil} if an error occurs@footnote{ | 894 | returning @code{nil} if an error occurs. (You can use the macro |
| 895 | Actually, you should use @code{ignore-errors} in such a simple case; | 895 | @code{ignore-errors} for a simple case like this; see below.) |
| 896 | see 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 |
| 899 | are predictable, such as failure to open a file in a call to | 898 | are 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 | |||
| 949 | given error will invoke the debugger only if @code{debug-on-error} and | 948 | given error will invoke the debugger only if @code{debug-on-error} and |
| 950 | the other usual filtering mechanisms say it should. @xref{Error Debugging}. | 949 | the other usual filtering mechanisms say it should. @xref{Error Debugging}. |
| 951 | 950 | ||
| 951 | @defmac condition-case-no-debug var protected-form handlers@dots{} | ||
| 952 | The macro @code{condition-case-no-debug} provides another way to | ||
| 953 | handle debugging of such forms. It behaves exactly like | ||
| 954 | @code{condition-case}, unless the variable @code{debug-on-error} is | ||
| 955 | non-@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 |
| 953 | returns control to that handler. To do so, Emacs unbinds all variable | 959 | returns control to that handler. To do so, Emacs unbinds all variable |
| 954 | bindings made by binding constructs that are being exited, and | 960 | bindings 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{} | ||
| 1132 | This macro is like a milder version of @code{ignore-errors}. Rather | ||
| 1133 | than suppressing errors altogether, it converts them into messages. | ||
| 1134 | Use this form around code that is not expected to signal errors, | ||
| 1135 | but should be robust if one does occur. Note that this macro | ||
| 1136 | uses @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 |
| 523 | several of these customization types, the customization widget | ||
| 524 | provides 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 |
| 526 | The value may be any Lisp object that can be printed and read back. You | 528 | The value may be any Lisp object that can be printed and read back. |
| 527 | can use @code{sexp} as a fall-back for any option, if you don't want to | 529 | You can use @code{sexp} as a fall-back for any option, if you don't |
| 528 | take the time to work out a more specific type to use. | 530 | want to take the time to work out a more specific type to use. |
| 529 | 531 | ||
| 530 | @item integer | 532 | @item integer |
| 531 | The value must be an integer, and is represented textually | 533 | The value must be an integer. |
| 532 | in the customization buffer. | ||
| 533 | 534 | ||
| 534 | @item number | 535 | @item number |
| 535 | The value must be a number (floating point or integer), and is | 536 | The value must be a number (floating point or integer). |
| 536 | represented textually in the customization buffer. | ||
| 537 | 537 | ||
| 538 | @item float | 538 | @item float |
| 539 | The value must be a floating point number, and is represented | 539 | The value must be a floating point number. |
| 540 | textually in the customization buffer. | ||
| 541 | 540 | ||
| 542 | @item string | 541 | @item string |
| 543 | The value must be a string, and the customization buffer shows just the | 542 | The value must be a string. The customization buffer shows the string |
| 544 | contents, with no delimiting @samp{"} characters and no quoting with | 543 | without delimiting @samp{"} characters or @samp{\} quotes. |
| 545 | @samp{\}. | ||
| 546 | 544 | ||
| 547 | @item regexp | 545 | @item regexp |
| 548 | Like @code{string} except that the string must be a valid regular | 546 | Like @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 | |||
| 554 | buffer, rather than by showing the number. | 552 | buffer, rather than by showing the number. |
| 555 | 553 | ||
| 556 | @item file | 554 | @item file |
| 557 | The value must be a file name, and you can do completion with | 555 | The 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) |
| 561 | The value must be a file name for an existing file, and you can do | 558 | The value must be a file name for an existing file. The widget |
| 562 | completion with @kbd{M-@key{TAB}}. | 559 | provides completion. |
| 563 | 560 | ||
| 564 | @item directory | 561 | @item directory |
| 565 | The value must be a directory name, and you can do completion with | 562 | The value must be a directory name. The widget provides completion. |
| 566 | @kbd{M-@key{TAB}}. | ||
| 567 | 563 | ||
| 568 | @item hook | 564 | @item hook |
| 569 | The value must be a list of functions (or a single function, but that is | 565 | The value must be a list of functions. This customization type is |
| 570 | obsolete usage). This customization type is used for hook variables. | 566 | used for hook variables. You can use the @code{:options} keyword in a |
| 571 | You can use the @code{:options} keyword in a hook variable's | 567 | hook variable's @code{defcustom} to specify a list of functions |
| 572 | @code{defcustom} to specify a list of functions recommended for use in | 568 | recommended for use in the hook; @xref{Variable Definitions}. |
| 573 | the hook; see @ref{Variable Definitions}. | ||
| 574 | 569 | ||
| 575 | @item symbol | 570 | @item symbol |
| 576 | The value must be a symbol. It appears in the customization buffer as | 571 | The value must be a symbol. It appears in the customization buffer as |
| 577 | the name of the symbol. | 572 | the symbol name. The widget provides completion. |
| 578 | 573 | ||
| 579 | @item function | 574 | @item function |
| 580 | The value must be either a lambda expression or a function name. When | 575 | The value must be either a lambda expression or a function name. The |
| 581 | it is a function name, you can do completion with @kbd{M-@key{TAB}}. | 576 | widget provides completion for function names. |
| 582 | 577 | ||
| 583 | @item variable | 578 | @item variable |
| 584 | The value must be a variable name, and you can do completion with | 579 | The value must be a variable name. The widget provides completion. |
| 585 | @kbd{M-@key{TAB}}. | ||
| 586 | 580 | ||
| 587 | @item face | 581 | @item face |
| 588 | The value must be a symbol which is a face name, and you can do | 582 | The value must be a symbol which is a face name. The widget provides |
| 589 | completion with @kbd{M-@key{TAB}}. | 583 | completion. |
| 590 | 584 | ||
| 591 | @item boolean | 585 | @item boolean |
| 592 | The value is boolean---either @code{nil} or @code{t}. Note that by | 586 | The 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 |
| 603 | The value must be a valid color name, and you can do completion with | 597 | The value must be a valid color name. The widget provides completion |
| 604 | @kbd{M-@key{TAB}}. A sample is provided. | 598 | for color names, as well as a sample and a button for selecting a |
| 599 | color name from a list of color names shown in a @samp{*Colors*} | ||
| 600 | buffer. | ||
| 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 | |||
| 635 | symbol)} is a customization type which matches values such as | 631 | symbol)} is a customization type which matches values such as |
| 636 | @code{("foo" . foo)}. | 632 | @code{("foo" . foo)}. |
| 637 | 633 | ||
| 638 | In the customization buffer, the @sc{car} and the @sc{cdr} are | 634 | In the customization buffer, the @sc{car} and @sc{cdr} are displayed |
| 639 | displayed and edited separately, each according to the type | 635 | and edited separately, each according to their specified type. |
| 640 | that you specify for it. | ||
| 641 | 636 | ||
| 642 | @item (list @var{element-types}@dots{}) | 637 | @item (list @var{element-types}@dots{}) |
| 643 | The value must be a list with exactly as many elements as the | 638 | The 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 | ||
| 681 | The argument to the @code{:options} keywords should be a list of | 676 | The argument to the @code{:options} keywords should be a list of |
| 682 | specifications for reasonable keys in the alist. Ordinarily, they are | 677 | specifications for reasonable keys in the alist. Ordinarily, they are |
| 683 | simply atoms, which stand for themselves as. For example: | 678 | simply 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. |
| 754 | Each element has the form (NAME AGE MALE-FLAG)." | 749 | Each 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. | ||
| 761 | In an element (KEY . VALUE), KEY is the person's name, | ||
| 762 | and 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, | |||
| 770 | defaults to @code{symbol} rather than @code{sexp}. | 757 | defaults to @code{symbol} rather than @code{sexp}. |
| 771 | 758 | ||
| 772 | @item (choice @var{alternative-types}@dots{}) | 759 | @item (choice @var{alternative-types}@dots{}) |
| 773 | The value must fit at least one of @var{alternative-types}. | 760 | The value must fit one of @var{alternative-types}. For example, |
| 774 | For example, @code{(choice integer string)} allows either an | 761 | @code{(choice integer string)} allows either an integer or a string. |
| 775 | integer or a string. | ||
| 776 | 762 | ||
| 777 | In the customization buffer, the user selects an alternative | 763 | In the customization buffer, the user selects an alternative |
| 778 | using a menu, and can then edit the value in the usual way for that | 764 | using 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 |
| 967 | elements into the middle of a list or vector. You use it in a | 953 | elements into the middle of a @code{list} or @code{vector} |
| 968 | @code{set}, @code{choice} or @code{repeat} type which appears among the | 954 | customization type. You use it by adding @code{:inline t} to a type |
| 969 | element-types of a @code{list} or @code{vector}. | 955 | specification which is contained in a @code{list} or @code{vector} |
| 970 | 956 | specification. | |
| 971 | Normally, each of the element-types in a @code{list} or @code{vector} | 957 | |
| 972 | describes 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 |
| 973 | element-type is a @code{repeat}, that specifies a list of unspecified | 959 | specification describes a single element type. But when an entry |
| 974 | length which appears as one element. | 960 | contains @code{:inline t}, the value it matches is merged directly |
| 975 | 961 | into the containing sequence. For example, if the entry matches a | |
| 976 | But when the element-type uses @code{:inline}, the value it matches is | 962 | list with three elements, those become three elements of the overall |
| 977 | merged directly into the containing sequence. For example, if it | 963 | sequence. This is analogous to @samp{,@@} in a backquote construct |
| 978 | matches a list with three elements, those become three elements of the | 964 | (@pxref{Backquote}). |
| 979 | overall sequence. This is analogous to using @samp{,@@} in the backquote | ||
| 980 | construct. | ||
| 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} |
| 983 | and whose remaining arguments should be zero or more of @code{foo} and | 967 | and 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 | |||
| 4527 | support, you can use the ImageMagick library to load many image formats. | 4527 | support, 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 | ||
| 4530 | The function @code{imagemagick-types} returns a list of image file | 4531 | The function @code{imagemagick-types} returns a list of image file |
| 4531 | extensions that your installation of ImageMagick supports. To enable | 4532 | extensions that your installation of ImageMagick supports. To enable |
| 4532 | support, you must call the function @code{imagemagick-register-types}. | 4533 | support, you must call the function @code{imagemagick-register-types}. |
| 4534 | This enables Emacs to visit these file types in @code{image-mode} | ||
| 4535 | (@pxref{File Conveniences,,, emacs, The GNU Emacs Manual}). | ||
| 4536 | If 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 |
| 4535 | The variable @code{imagemagick-types-inhibit} specifies a list of | 4541 | The variable @code{imagemagick-types-inhibit} specifies a list of |
| 4536 | image types that you do @emph{not} want ImageMagick to handle. There | 4542 | image types that you do @emph{not} want ImageMagick to handle. It is |
| 4537 | may be overlap between image loaders in your Emacs installation, and | 4543 | a list of symbols, each of which has the same name as one of the |
| 4538 | you may prefer to use a different one for a given image type (which | 4544 | format 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 |
| 4540 | loader will be used in practice depends on the priority of the loaders). | 4546 | definition of what an image is, for example it includes such file |
| 4541 | @c FIXME why are these uppercase when image-types is lower-case? | 4547 | types 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? | 4548 | as images in Emacs. You can add any other ImageMagick type that you |
| 4543 | For example, if you never want to use the ImageMagick loader to use | 4549 | wish 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 | ||
| 4559 | There may be overlap between image loaders in your Emacs installation, | ||
| 4560 | and 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 | ||
| 4562 | loaders). | ||
| 4563 | For example, if you never want to use the ImageMagick loader to view | ||
| 4544 | JPEG files, add @code{JPG} to this list. | 4564 | JPEG files, add @code{JPG} to this list. |
| 4565 | @end ignore | ||
| 4566 | Note that ImageMagick often distinguishes between several different | ||
| 4567 | types of a particular format (e.g., @code{JPG}, @code{JPEG}, | ||
| 4568 | @code{PJPEG}, etc.), and you may need to add all versions to this | ||
| 4569 | list. | ||
| 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 |
| 4547 | You can set the variable @code{imagemagick-render-type} to choose | 4573 | If you wish to experiment with the performance of the ImageMagick |
| 4548 | between screen render methods for the ImageMagick loader. The options | 4574 | loader, see the variable @code{imagemagick-render-type}. |
| 4549 | are: @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"? | ||
| 4552 | ImageMagick versions (it is a bit slow, but robust); and @code{1}, | ||
| 4553 | a newer ImageMagick method. | ||
| 4554 | 4575 | ||
| 4555 | Images loaded with ImageMagick support a few new display specifications: | 4576 | Images loaded with ImageMagick support a few new display specifications: |
| 4556 | 4577 | ||
| @@ -4565,10 +4586,11 @@ aspect ratio may not be preserved. | |||
| 4565 | Specifies a rotation angle in degrees. | 4586 | Specifies a rotation angle in degrees. |
| 4566 | 4587 | ||
| 4567 | @item :index | 4588 | @item :index |
| 4568 | Specifies which image to view inside an image bundle file format, such | 4589 | @c Doesn't work: http://debbugs.gnu.org/7978 |
| 4569 | as TIFF or DJVM. You can use the @code{image-metadata} function to | 4590 | This has the same meaning as it does for GIF images (@pxref{GIF Images}), |
| 4570 | retrieve the total number of images in an image bundle (this is | 4591 | i.e. it specifies which image to view inside an image bundle file format |
| 4571 | similar to how GIF files work). | 4592 | such as DJVM. You can use the @code{image-metadata} function to |
| 4593 | retrieve 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 |
| 433 | the parent keymap. | 433 | the 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 | ||
| 437 | map. You can use the function @code{make-composed-keymap} for this. | ||
| 438 | |||
| 439 | @defun make-composed-keymap maps &optional parent | ||
| 440 | This 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 | ||
| 443 | than one. When looking up a key in the resulting new map, Emacs | ||
| 444 | searches in each of the @var{maps}, and then in @var{parent}, stopping | ||
| 445 | at the first match. A @code{nil} binding in any one of @var{maps} | ||
| 446 | overrides any binding in @var{parent}, but not a non-@code{nil} binding | ||
| 447 | in 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 | |||
| 2318 | the same set of features for menus. Some code works as expected with | 2346 | the same set of features for menus. Some code works as expected with |
| 2319 | one toolkit, but not under another. | 2347 | one toolkit, but not under another. |
| 2320 | 2348 | ||
| 2321 | One example is menu actions or buttons in a top-level menu-bar. The | 2349 | One example is menu actions or buttons in a top-level menu bar. The |
| 2322 | following works with the Lucid toolkit or on MS Windows, but not with | 2350 | following works with the Lucid toolkit or on MS Windows, but not with |
| 2323 | GTK or Nextstep, where clicking on the item has no effect. | 2351 | GTK 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 | |||
| 2658 | right-to-left languages. Only the Gtk+ version of Emacs supports this | 2686 | right-to-left languages. Only the Gtk+ version of Emacs supports this |
| 2659 | at present. | 2687 | at present. |
| 2660 | 2688 | ||
| 2689 | Like the menu bar, the tool bar can display separators (@pxref{Menu | ||
| 2690 | Separators}). Tool bar separators are vertical rather than | ||
| 2691 | horizontal, though, and only a single style is supported. Separators | ||
| 2692 | are represented in the tool bar keymap in the same way as for the | ||
| 2693 | menu bar, i.e. using a @code{(menu-item "--"}) entry. The Gtk+ and | ||
| 2694 | Nextstep tool bars render separators natively, otherwise Emacs selects | ||
| 2695 | a separator image that is appropriate for the display. Note that tool | ||
| 2696 | bar separators do not support any properties, such as @code{:visible}. | ||
| 2697 | |||
| 2661 | The default tool bar is defined so that items specific to editing do not | 2698 | The default tool bar is defined so that items specific to editing do not |
| 2662 | appear for major modes whose command symbol has a @code{mode-class} | 2699 | appear for major modes whose command symbol has a @code{mode-class} |
| 2663 | property of @code{special} (@pxref{Major Mode Conventions}). Major | 2700 | property 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 | |||
| 163 | default definition (by not calling @var{fun}). | 163 | default definition (by not calling @var{fun}). |
| 164 | @end defmac | 164 | @end defmac |
| 165 | 165 | ||
| 166 | @defun run-hook-wrapped hook wrap-function &rest args | ||
| 167 | This function is similar to @code{run-hook-with-args-until-success}. | ||
| 168 | Like that function, it runs the functions on the abnormal hook | ||
| 169 | @code{hook}, stopping at the first one that returns non-@code{nil}. | ||
| 170 | Instead of calling the hook functions directly, though, it actually | ||
| 171 | calls @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{} |
| 1373 | This macro defines a new minor mode whose name is @var{mode} (a | 1381 | This macro defines a new minor mode whose name is @var{mode} (a |
| 1374 | symbol). It defines a command named @var{mode} to toggle the minor | 1382 | symbol). It defines a command named @var{mode} to toggle the minor |
| 1375 | mode, with @var{doc} as its documentation string. By default, it also | 1383 | mode, with @var{doc} as its documentation string. |
| 1376 | defines 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 | 1385 | The toggle command takes one optional (prefix) argument. |
| 1378 | initialized to @var{init-value}. Except in unusual circumstances (see | 1386 | If called interactively with no argument it toggles the mode on or off. |
| 1379 | below), this value must be @code{nil}. | 1387 | A positive prefix argument enables the mode, any other prefix argument |
| 1388 | disables it. From Lisp, an argument of @code{toggle} toggles the mode, | ||
| 1389 | whereas an omitted or @code{nil} argument enables the mode. | ||
| 1390 | This makes it easy to enable the minor mode in a major mode hook, for example. | ||
| 1391 | If @var{doc} is nil, the macro supplies a default documentation string | ||
| 1392 | explaining the above. | ||
| 1393 | |||
| 1394 | By 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 | ||
| 1396 | is initialized to @var{init-value}. Except in unusual circumstances | ||
| 1397 | (see below), this value must be @code{nil}. | ||
| 1380 | 1398 | ||
| 1381 | The string @var{lighter} says what to display in the mode line | 1399 | The string @var{lighter} says what to display in the mode line |
| 1382 | when the mode is enabled; if it is @code{nil}, the mode is not displayed | 1400 | when 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. |
| 1473 | With no argument, this command toggles the mode. | 1491 | Interactively with no argument, this command toggles the mode. |
| 1474 | Non-null prefix argument turns on the mode. | 1492 | A positive prefix argument enables the mode, any other prefix |
| 1475 | Null prefix argument turns off the mode. | 1493 | argument disables it. From Lisp, argument omitted or nil enables |
| 1494 | the mode, `toggle' toggles the state. | ||
| 1476 | 1495 | ||
| 1477 | When Hungry mode is enabled, the control delete key | 1496 | When Hungry mode is enabled, the control delete key |
| 1478 | gobbles all preceding whitespace except the last. | 1497 | gobbles 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. |
| 1504 | With no argument, this command toggles the mode. | 1523 | ...rest of documentation as before..." |
| 1505 | Non-null prefix argument turns on the mode. | ||
| 1506 | Null prefix argument turns off the mode. | ||
| 1507 | |||
| 1508 | When Hungry mode is enabled, the control delete key | ||
| 1509 | gobbles all preceding whitespace except the last. | ||
| 1510 | See 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 |
| 1319 | This function returns a list describing the buffer-local variables in | 1319 | This function returns a list describing the buffer-local variables in |
| 1320 | buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer is | 1320 | buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer |
| 1321 | used.) It returns an association list (@pxref{Association Lists}) in | 1321 | is used.) Normally, each list element has the form |
| 1322 | which each element contains one buffer-local variable and its value. | 1322 | @w{@code{(@var{sym} . @var{val})}}, where @var{sym} is a buffer-local |
| 1323 | However, when a variable's buffer-local binding in @var{buffer} is void, | 1323 | variable (a symbol) and @var{val} is its buffer-local value. But when |
| 1324 | then the variable appears directly in the resulting list. | 1324 | a variable's buffer-local binding in @var{buffer} is void, its list |
| 1325 | element 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 @@ | |||
| 1 | 2012-02-06 Juanma Barranquero <lekktu@gmail.com> | ||
| 2 | |||
| 3 | * tutorials/TUTORIAL.es: Updated; synchronize with TUTORIAL. | ||
| 4 | |||
| 1 | 2012-02-03 Pieter Schoenmakers <tiggr@tiggr.net> | 5 | 2012-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. |
| @@ -47,6 +47,7 @@ found at build time. To prevent this, use the configure option | |||
| 47 | This happens by default if a suitably recent version of the library is | 47 | This happens by default if a suitably recent version of the library is |
| 48 | found at build time. To prevent this, use the configure option | 48 | found 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. |
| 50 | This 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 | |||
| 995 | area, excluding any header line. Previously, it counted from the top | 996 | area, excluding any header line. Previously, it counted from the top |
| 996 | of the header line. | 997 | of 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 | ||
| 1001 | more than 10 years, has been further reduced. Now a backquote not | ||
| 1002 | followed by a space is always treated as a "new-style" backquote. | ||
| 1003 | Please consider completely removing all "old-style" backquotes from | ||
| 1004 | your code as a matter of some urgency. If your code uses backquotes | ||
| 1005 | as documented in the Elisp manual, and compiles without warning, then | ||
| 1006 | you have nothing to do in this regard. Code not following the | ||
| 1007 | appropriate conventions may fail to compile. The most common cause of | ||
| 1008 | trouble 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 |
| 1002 | view-file has since Emacs 22 (ie, it won't enable View mode if the | 1012 | view-file has since Emacs 22 (ie, it won't enable View mode if the |
| 1003 | major-mode is special). | 1013 | major-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 |
| 1006 | ON unconditionally. | 1016 | now turns the mode ON unconditionally. This is so that you can write, e.g. |
| 1017 | (add-hook 'text-mode-hook 'foo-minor-mode) | ||
| 1018 | to enable foo-minor-mode in Text mode buffers, thus removing the need | ||
| 1019 | for `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. |
| 1031 | Use (where-is-internal <def> nil t) instead. | 1044 | Use (where-is-internal <def> nil t) instead. |
| 1032 | 1045 | ||
| 1033 | ** The following obsolete functions and aliases were removed: | ||
| 1034 | comint-kill-output, decompose-composite-char, outline-visible, | ||
| 1035 | internal-find-face, internal-get-face, frame-update-faces, | ||
| 1036 | frame-update-face-colors, x-frob-font-weight, x-frob-font-slant, | ||
| 1037 | x-make-font-bold, x-make-font-demibold, x-make-font-unbold | ||
| 1038 | x-make-font-italic, x-make-font-oblique, x-make-font-unitalic | ||
| 1039 | x-make-font-bold-italic, mldrag-drag-mode-line, mldrag-drag-vertical-line, | ||
| 1040 | iswitchb-default-keybindings, char-bytes, isearch-return-char, | ||
| 1041 | make-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 |
| 1045 | checkdoc-minor-keymap, vc-header-alist, directory-sep-char, | 1048 | have been removed (the appropriate new function is given in parentheses): |
| 1046 | font-lock-defaults-alist, and e (use float-e). | 1049 | comint-kill-output (comint-delete-output), |
| 1050 | decompose-composite-char (char-to-string), | ||
| 1051 | outline-visible (outline-invisible-p), | ||
| 1052 | internal-find-face (facep), internal-get-face (facep and check-face), | ||
| 1053 | frame-update-faces (not needed), | ||
| 1054 | frame-update-face-colors (frame-set-background-mode), | ||
| 1055 | x-frob-font-weight and x-frob-font-slant (appropriate make-face-* function), | ||
| 1056 | x-make-font-bold and x-make-font-demibold (make-face-bold), | ||
| 1057 | x-make-font-italic and x-make-font-oblique (make-face-italic), | ||
| 1058 | x-make-font-bold-italic (make-face-bold-italic), | ||
| 1059 | x-make-font-unbold (make-face-unbold), | ||
| 1060 | x-make-font-unitalic (make-face-unitalic), | ||
| 1061 | mldrag-drag-mode-line (mouse-drag-mode-line), | ||
| 1062 | mldrag-drag-vertical-line (mouse-drag-vertical-line), | ||
| 1063 | iswitchb-default-keybindings (iswitchb-mode), char-bytes (== 1), | ||
| 1064 | isearch-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 | ||
| 1068 | have been removed (the appropriate new variable is given in parentheses): | ||
| 1069 | checkdoc-minor-keymap (checkdoc-minor-mode-map), | ||
| 1070 | vc-header-alist (vc-BACKEND-header), directory-sep-char (== ?/) | ||
| 1071 | font-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 |
| 1240 | passing the hook functions as arguments to a "wrapping" function. | 1266 | passing the hook functions as arguments to a "wrapping" function. |
| 1267 | Like `run-hook-with-args-until-success', it stops at the first | ||
| 1268 | non-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 |
| 1243 | set of "wrapping" filters, similar to around advice. | 1272 | set 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 |
| 1245 | advertised at the time.) | 1274 | advertised 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 | ||
| 1278 | added 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). | |||
| 1329 | or RGB triplet, instead of signaling an error if the user provides | 1360 | or RGB triplet, instead of signaling an error if the user provides |
| 1330 | invalid input. | 1361 | invalid input. |
| 1331 | 1362 | ||
| 1363 | +++ | ||
| 1332 | ** Tool-bars can display separators. | 1364 | ** Tool-bars can display separators. |
| 1333 | Tool-bar separators are handled like menu separators in menu-bar maps, | 1365 | Tool-bar separators are handled like menu separators in menu-bar maps, |
| 1334 | i.e. via menu entries of the form `(menu-item "--")'. | 1366 | i.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'. |
| 1353 | The old name is an obsolete alias to the new one. | 1385 | The 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. |
| 1389 | This feature is not available for the Nextstep or MS ports. | ||
| 1356 | Then the function `imagemagick-types' returns a list of image file | 1390 | Then the function `imagemagick-types' returns a list of image file |
| 1357 | extensions that your installation of ImageMagick supports. The | 1391 | extensions that your installation of ImageMagick supports. The |
| 1358 | function `imagemagick-register-types' enables ImageMagick support for | 1392 | function `imagemagick-register-types' enables ImageMagick support for |
| 1359 | these image types, minus those listed in `imagemagick-types-inhibit'. | 1393 | these image types, minus those listed in `imagemagick-types-inhibit'. |
| 1360 | 1394 | Visiting one of these file types will then use Image mode. | |
| 1361 | See the Emacs Lisp Reference Manual for more information. | ||
| 1362 | 1395 | ||
| 1363 | ** XML and HTML parsing | 1396 | ** XML and HTML parsing |
| 1364 | If Emacs is compiled with libxml2 support, there are two new functions: | 1397 | If 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 | ||
| 1443 | from multiple input maps. You can use this to make a keymap that | ||
| 1444 | inherits 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 | ||
| 16 | Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos | 16 | Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos |
| 17 | caracteres). Los caracteres ">>" en el margen izquierdo indican | 17 | caracteres). Para cancelar un comando parcialmente introducido, |
| 18 | instrucciones para que usted trate de usar un comando. Por ejemplo: | 18 | teclee C-g. |
| 19 | Los caracteres ">>" en el margen izquierdo indican instrucciones para | ||
| 20 | que 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 | ||
| 54 | Si su terminal las soporta, también puede usar las teclas AvPág o | 59 | Si su terminal las soporta, también puede usar las teclas AvPág o |
| 55 | RegPág para moverse por pantallas completas, pero puede editar más | 60 | RegPá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 | ||
| 91 | Cada línea de texto termina con un carácter de nueva línea (Newline), | 96 | Cada línea de texto termina con un carácter de nueva línea (Newline), |
| 92 | que sirve para separarla de la línea siguiente. La última línea de su | 97 | que sirve para separarla de la línea siguiente. (Normalmente, la |
| 93 | archivo 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, |
| 94 | no requiere que ésta lo tenga). | 99 | pero Emacs no requiere que sea así.) |
| 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 | |||
| 227 | quisiera desplazarla hacia abajo de nuevo, puede dar un argumento a | 232 | quisiera desplazarla hacia abajo de nuevo, puede dar un argumento a |
| 228 | M-v. | 233 | M-v. |
| 229 | 234 | ||
| 230 | Si está usando un sistema de ventanas, como X11 o MS-Windows, debe | 235 | Si está usando un entorno gráfico, como X o MS-Windows, debe |
| 231 | haber una larga área rectangular llamada una barra de desplazamiento | 236 | haber una larga área rectangular llamada una barra de desplazamiento |
| 232 | en el lado izquierdo de la ventana de Emacs. Puede desplazar el texto | 237 | en el lado izquierdo de la ventana de Emacs. Puede desplazar el texto |
| 233 | al oprimir el botón del ratón en la barra de desplazamiento. | 238 | al 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 | 240 | Si 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 | 241 | desplazar 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 | ||
| 249 | Si Emacs dejara de responder a sus comandos, puede detenerlo con | 247 | Si Emacs dejara de responder a sus comandos, puede detenerlo con |
| 250 | seguridad al teclear C-g. Puede usar C-g para detener un comando que | 248 | seguridad al teclear C-g. Puede usar C-g para detener un comando que |
| @@ -253,7 +251,7 @@ esté tomando mucho tiempo para ejecutarse. | |||
| 253 | También puede usar C-g para descartar un argumento numérico o el | 251 | También puede usar C-g para descartar un argumento numérico o el |
| 254 | comienzo de un comando que no quiere finalizar. | 252 | comienzo 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 | ||
| 285 | Emacs puede tener varias ventanas, cada una mostrando su propio texto. | 283 | Emacs puede tener varias "ventanas", cada una mostrando su propio texto. |
| 286 | Explicaremos después como usar múltiples ventanas. Ahora mismo | 284 | Explicaremos después como usar múltiples ventanas. Ahora mismo |
| 287 | queremos explicar cómo deshacerse de ventanas adicionales y volver a | 285 | queremos explicar cómo deshacerse de ventanas adicionales y volver a |
| 288 | la edición básica en una ventana. Es sencillo: | 286 | la 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 | |||
| 294 | demás ventanas. | 292 | demá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 | ||
| 315 | Si quiere insertar un texto, basta con que lo teclee. Emacs | 313 | Si quiere insertar un texto, basta con que lo teclee. Los caracteres |
| 316 | interpreta los caracteres que usted puede ver, tales como A, 7, *, | 314 | normales, como A, 7, *, etc. se insertan nada más teclearlos. Teclee |
| 317 | etc. como texto y los inserta inmediatamente. Teclee <Return> (la | 315 | <Return> (la tecla "Enter" o "Intro") para insertar un carácter de |
| 318 | tecla Enter) para insertar un carácter de nueva línea. | 316 | nueva línea. |
| 319 | |||
| 320 | Puede borrar el último carácter que escribió oprimiendo <Delback>. | ||
| 321 | <Delback> es una tecla en el teclado--la misma que normalmente usa | ||
| 322 | fuera de emacs para borrar el último carácter que escribió. | ||
| 323 | Normalmente es una tecla una o dos filas arriba de la tecla <Return>, | ||
| 324 | y que está usualmente rotulada como "Backspace", "Del" o simplemente | ||
| 325 | con una flecha en dirección izquierda que no es parte de las teclas de | ||
| 326 | flecha. | ||
| 327 | 317 | ||
| 328 | Si la tecla larga está rotulada "Backspace", entonces ésa es la que | 318 | Para borrar el carácter que precede al cursor, oprima <DEL>. Es una |
| 329 | debe de usar para <Delback>. Puede haber otra tecla llamada "Del" en | 319 | tecla alargada, normalmente etiquetada como "Backspace" o "Del", o con |
| 330 | otra parte, pero ésa no es <Delback>. | 320 | una flecha apuntando a la izquierda; la misma que suele utilizar fuera |
| 321 | de Emacs para borrar el último carácter introducido. | ||
| 331 | 322 | ||
| 332 | Generalmente, <Delback> borra el carácter inmediatamente anterior a la | 323 | Puede haber otra tecla llamada "Del" o "Supr" en otra parte, pero ésa |
| 333 | posición actual del cursor. | 324 | no 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 | ||
| 340 | Cuando una línea de texto se hace muy grande para una sola línea en la | 331 | Cuando una línea de texto se hace muy grande para una sola línea de la |
| 341 | pantalla, la línea de texto "continúa" en una segunda línea en la | 332 | pantalla, la línea de texto "continúa" en una segunda línea en la |
| 342 | pantalla. Un backslash ("\") (o, si está usando un sistema de | 333 | pantalla. Si está usando un entorno gráfico, se mostrarán pequeñas |
| 343 | ventanas, una pequeña flecha curva) en el margen derecho indica que la | 334 | flechas curvas en las estrechas franjas vacías (los "márgenes" derecho |
| 344 | línea "continúa". | 335 | e izquierdo) a cada lado del área de texto, para indicar que la línea |
| 336 | continúa. Si está utilizando una terminal, la continuación se señala | ||
| 337 | mediante 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 | ||
| 352 | Puede borrar un carácter de nueva línea como cualquier otro carácter. | 345 | Puede 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 | |||
| 355 | largo para caber en el ancho de la pantalla, se mostrará con una línea | 348 | largo para caber en el ancho de la pantalla, se mostrará con una línea |
| 356 | de continuación. | 349 | de 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 | |||
| 370 | corregir errores. Puede borrar por palabras o por líneas. He aquí un | 363 | corregir errores. Puede borrar por palabras o por líneas. He aquí un |
| 371 | resumen de las operaciones de borrado: | 364 | resumen 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 | ||
| 383 | Note que <Delback> y C-d, comparados con M-<Delback> y M-d, extienden | 376 | Note que <DEL> y C-d, comparados con M-<DEL> y M-d, extienden el |
| 384 | el paralelismo iniciado por C-f y M-f (bien, <Delback> no es realmente | 377 | paralelismo iniciado por C-f y M-f (bien, <DEL> no es realmente una |
| 385 | una tecla de control, pero no nos preocuparemos de eso ahora). C-k y | 378 | tecla de control, pero no nos preocuparemos de eso ahora). C-k y M-k, |
| 386 | M-k, en ciertas forma, son como C-e y M-e, en que las líneas son | 379 | en ciertas forma, son como C-e y M-e, en que las líneas de unos |
| 387 | oraciones opuestas. | 380 | corresponden a sentencias en los otros. |
| 388 | 381 | ||
| 389 | También puede eliminar cualquier parte del buffer con un método | 382 | También puede eliminar un segmento contiguo de texto con un método |
| 390 | uniforme. Muévase a un extremo de esa parte, y teclee C-@ o C-SPC | 383 | uniforme. 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 | 384 | o C-SPC (cualquiera de los dos). (SPC es la barra espaciadora.) |
| 392 | otro extremo de esa parte, y teclee C-w. Eso elimina todo el texto | 385 | Luego, mueva el cursor al otro extremo del texto que desea eliminar. |
| 393 | entre las dos posiciones. | 386 | Al hacerlo, Emacs resaltará el texto situado entre el cursor y la |
| 387 | posición en la que tecleó C-SPC. Finalmente, teclee C-w. Eso elimina | ||
| 388 | todo 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 | ||
| 403 | La diferencia entre "eliminar" y "borrar" es que el texto "eliminado" | 398 | La diferencia entre "eliminar" y "borrar" es que el texto "eliminado" |
| 404 | puede ser reinsertado, mientras que las cosas "borradas" no pueden ser | 399 | puede ser reinsertado (en cualquier posición), mientras que las cosas |
| 405 | reinsertadas. 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 | 401 | deshacer el borrado; ver más abajo). La reinserción de texto |
| 407 | eliminan, mientras que los comandos que quitan solo un carácter, o | 402 | eliminado se llama "yanking" o "pegar". Generalmente, los comandos |
| 408 | solo líneas en blanco y espacios, borran (para que no pueda pegar ese | 403 | que pueden quitar mucho texto lo eliminan (para que pueda pegarlo de |
| 409 | texto). | 404 | nuevo) mientras que los comandos que quitan solo un carácter, o solo |
| 405 | líneas en blanco y espacios, borran (y por tanto no se puede pegar lo | ||
| 406 | borrado). Si se normalmente, sin pasar un argumento, <DEL> y C-d | ||
| 407 | borran. 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 | |||
| 420 | contenidos. Esto no es una simple repetición. C-u 2 C-k elimina dos | 418 | contenidos. Esto no es una simple repetición. C-u 2 C-k elimina dos |
| 421 | líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto. | 419 | líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto. |
| 422 | 420 | ||
| 423 | Traer texto eliminado de regreso es llamado "yanking" o "pegar". | 421 | Reinsertar texto eliminado se denomina "yanking" o "pegar". (Piense |
| 424 | (Piense en ello como pegar de nuevo, o traer de vuelta, algún texto | 422 | en ello como pegar de nuevo, o traer de vuelta, algún texto que le fue |
| 425 | que le fue quitado.) Puede pegar el texto eliminado en, ya sea el | 423 | quitado.) Puede pegar el texto eliminado, ya sea el lugar en que fue |
| 426 | lugar en que fue eliminado, o en otra parte del buffer, o hasta en un | 424 | eliminado, o en otra parte del buffer, o hasta en un archivo |
| 427 | archivo diferente. Puede pegar el texto varias veces, lo que hace | 425 | diferente. Puede pegar el texto varias veces, lo que hace varias |
| 428 | varias copias de él. | 426 | copias de él. Algunos editores se refieren a eliminar y reinsertar |
| 427 | como "cortar" y "pegar" (consulte el Glosario en el manual de Emacs). | ||
| 429 | 428 | ||
| 430 | El comando para pegar es C-y. Reinserta el último texto eliminado, en | 429 | El comando para pegar es C-y. Reinserta el último texto eliminado, en |
| 431 | la posición actual del cursor. | 430 | la posición actual del cursor. |
| @@ -468,32 +467,31 @@ eliminación más reciente). | |||
| 468 | ---------- | 467 | ---------- |
| 469 | 468 | ||
| 470 | Si hace un cambio al texto, y luego decide que fue un error, | 469 | Si hace un cambio al texto, y luego decide que fue un error, |
| 471 | puede deshacer el cambio con el comando deshacer, C-x u. | 470 | puede deshacer el cambio con el comando deshacer, C-/. |
| 472 | 471 | ||
| 473 | Normalmente, C-x u deshace los cambios hechos por un comando; si repite | 472 | Normalmente, C-/ deshace los cambios hechos por un comando; si repite |
| 474 | varias veces seguidas C-x u, cada repetición deshará un comando | 473 | varias veces seguidas C-/, cada repetición deshará un comando |
| 475 | adicional. | 474 | adicional. |
| 476 | 475 | ||
| 477 | Pero hay dos excepciones: los comandos que no cambian el texto no | 476 | Pero hay dos excepciones: los comandos que no cambian el texto no |
| 478 | cuentan (esto incluye los comandos de movimiento del cursor y el | 477 | cuentan (esto incluye los comandos de movimiento del cursor y de |
| 479 | comando de desplazamiento), y los caracteres de autoinserción se | 478 | desplazamiento), y los caracteres de autoinserción se manejan |
| 480 | manejan usualmente en grupos de hasta 20. (Esto es para reducir el | 479 | usualmente en grupos de hasta 20 caracteres. (Esto es para reducir el |
| 481 | numero de C-x u que tenga que teclear para deshacer una inserción en | 480 | numero de C-/ que tenga que teclear para deshacer una inserción en |
| 482 | el texto.) | 481 | el 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 | ||
| 487 | C-_ es un comando alternativo para deshacer; funciona igual que C-x u, | 486 | C-_ es un comando alternativo para deshacer; funciona igual que C-/. |
| 488 | pero es más fácil de teclear varias veces seguidas. La desventaja de | 487 | En algunas terminales, al teclear C-/ en realidad envía C-_ a Emacs. |
| 489 | C-_ es que en algunos teclados no es obvio cómo se teclea. Por esto | 488 | También existe la alternativa de usar C-x u, que funciona exactamente |
| 490 | existe también C-x u. En algunas terminales, puede teclear C-_ al | 489 | igual que C-/, pero es menos cómodo de teclear. |
| 491 | teclear / mientras oprime CONTROL. | ||
| 492 | 490 | ||
| 493 | Un argumento numérico para C-_ o C-x u actúa como un factor de | 491 | Un argumento numérico para C-/, C-_ o C-x u actúa como un factor de |
| 494 | repetición. | 492 | repetición. |
| 495 | 493 | ||
| 496 | Uuede deshacer un texto borrado justo como puede deshacer el texto | 494 | Puede deshacer un texto borrado justo como puede deshacer el texto |
| 497 | eliminado. La distinción entre eliminar algo y borrar algo afecta en | 495 | eliminado. La distinción entre eliminar algo y borrar algo afecta en |
| 498 | si puede pegarlo con C-y; no hay diferencia alguna para deshacer. | 496 | si 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 | |||
| 516 | cambiado en caso de que luego decida que sus cambios fueron un error. | 514 | cambiado en caso de que luego decida que sus cambios fueron un error. |
| 517 | 515 | ||
| 518 | Si mira cerca del final de la pantalla podrá ver una línea que | 516 | Si mira cerca del final de la pantalla podrá ver una línea que |
| 519 | comienza y termina con guiones, y comienza con "--:-- TUTORIAL.es" o | 517 | comienza con guiones, y empieza con " -:--- TUTORIAL.es" o algo así. |
| 520 | algo así. Esta parte de la pantalla normalmente muestra el nombre del | 518 | Esta parte de la pantalla normalmente muestra el nombre del archivo |
| 521 | archivo que está visitando. En este momento está visitando un archivo | 519 | que está visitando. En este momento está visitando su propia copia |
| 522 | llamado "TUTORIAL.es" que es su borrador personal del tutorial de | 520 | del tutorial de Emacs, que se llama "TUTORIAL.es". Cuando encuentre |
| 523 | Emacs. Cuando encuentre un archivo con Emacs, el nombre de ese | 521 | un archivo con Emacs, el nombre de ese archivo aparecerá en ese mismo |
| 524 | archivo aparecerá en ese mismo punto. | 522 | punto. |
| 525 | 523 | ||
| 526 | Una cosa especial acerca del comando para encontrar un archivo, es que | 524 | Una cosa especial acerca del comando para encontrar un archivo, es que |
| 527 | tendrá que decir que nombre de archivo desea. Decimos que el comando | 525 | tendrá 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 |
| 529 | nombre del archivo). Después de teclear el comando: | 527 | archivo). 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 | ||
| 546 | Cuando haya finalizado de ingresar el nombre del archivo, teclee | 544 | Cuando 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 |
| 548 | encuentra el archivo que escogió. El minibuffer desaparece cuando el | 546 | C-f trabaja para encontrar el archivo que escogió. |
| 549 | comando C-x C-f termina. | ||
| 550 | 547 | ||
| 551 | Poco tiempo después aparecerá el contenido del archivo en la pantalla, | 548 | En seguida aparecerá el contenido del archivo en la pantalla, y puede |
| 552 | y puede editarlo. Cuando quiera que sus cambios sean permanentes, | 549 | editarlo. Cuando quiera que sus cambios sean permanentes, teclee el |
| 553 | teclee el comando | 550 | comando |
| 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 | ||
| 562 | Cuando guardar haya terminado, Emacs mostrará el nombre del archivo | 559 | Cuando guardar haya terminado, Emacs mostrará el nombre del archivo |
| 563 | escrito. Deberá guardar frecuentemente, para que no pierda mucho | 560 | escrito. Deberá guardar frecuentemente, para que no pierda mucho |
| 564 | trabajo si el sistema falla. | 561 | trabajo si el sistema falla (vea la sección "AUTO GUARDADO", más |
| 562 | adelante). | ||
| 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 guardará el tutorial en un archivo llamado TUTORIAL.es, y |
| 568 | pantalla. | 566 | mostrará "Wrote ...TUTORIAL.es" al final de la pantalla. |
| 569 | 567 | ||
| 570 | Puede encontrar un archivo existente, para verlo o editarlo. También | 568 | Puede encontrar un archivo existente, para verlo o editarlo. También |
| 571 | puede hacerlo con un archivo que no exista. Ésta es la forma de crear | 569 | puede 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 | |||
| 584 | C-f. De esta forma puede mantener un gran número de archivos dentro | 582 | C-f. De esta forma puede mantener un gran número de archivos dentro |
| 585 | de Emacs. | 583 | de 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 | |||
| 593 | Emacs almacena cada texto del archivo dentro de un objeto llamado | 585 | Emacs 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 |
| 595 | Emacs. Para mirar la lista de los buffers que existen actualmente en | 587 | Emacs. Para mirar la lista de los buffers que existen actualmente, |
| 596 | su sesión de Emacs, teclee: | 588 | teclee: |
| 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 | |||
| 612 | nuevo con C-x C-f. Pero existe una manera más rápida: use el comando | 604 | nuevo con C-x C-f. Pero existe una manera más rápida: use el comando |
| 613 | C-x b. En ese comando, necesita teclear el nombre de buffer. | 605 | C-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 | ||
| 619 | La mayoría del tiempo el nombre del buffer es el mismo que el nombre | 611 | La mayoría del tiempo el nombre del buffer es el mismo que el nombre |
| 620 | del archivo (sin la parte del directorio del archivo). Sin embargo, | 612 | del archivo (sin la parte del directorio del archivo). Sin embargo, |
| 621 | esto no es así siempre. La lista de buffers que hace con C-x C-b | 613 | esto no es así siempre. La lista de buffers que hace con C-x C-b |
| 622 | siempre muestra el nombre de todos los buffers. | 614 | muestra el nombre de cada buffer y de su archivo correspondiente. |
| 623 | 615 | ||
| 624 | CUALQUIER texto que vea en una ventana de Emacs siempre es parte de un | 616 | Algunos buffers no corresponden a un archivo. El buffer llamado |
| 625 | buffer. Algunos buffers no corresponden a un archivo. Por ejemplo, | 617 | "*Buffer List*", que contiene la lista de buffers que ha creado con |
| 626 | el buffer llamado "*Buffer List*" no tiene ningún archivo. Es el | 618 | C-x C-b, no tiene archivo. Este buffer TUTORIAL.es al principio no |
| 627 | buffer que contiene la lista de buffers que ha creado con C-x C-b. El | 619 | tenía archivo, pero ahora ya sí, porque en la sección anterior tecleó |
| 628 | buffer llamado "*Messages*" tampoco tiene un archivo correspondiente; | 620 | C-x C-s y lo guardó en un archivo. |
| 629 | contiene los mensajes que han aparecido en la línea de abajo durante | 621 | |
| 630 | su sesión de Emacs. | 622 | El buffer llamado "*Messages*" tampoco tiene un archivo |
| 623 | correspondiente. Este buffer contiene los mensajes que han aparecido | ||
| 624 | en 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 | |||
| 669 | hecho; C-x C-c ofrece guardar cada archivo alterado antes de finalizar | 663 | hecho; C-x C-c ofrece guardar cada archivo alterado antes de finalizar |
| 670 | Emacs.) | 664 | Emacs.) |
| 671 | 665 | ||
| 672 | C-z es el comando para salir de Emacs *temporalmente*: para que pueda | 666 | Si está utilizando una pantalla gráfica, no necesita ningún comando |
| 673 | regresar a la misma sesión de Emacs después. | 667 | especial para cambiar de Emacs a otra aplicación. Puede hacerlo con |
| 668 | el ratón, o mediante el gestor de ventanas. Sin embargo, si está | ||
| 669 | usando una terminal que solo puede mostrar una aplicación a la vez, | ||
| 670 | tendrá que "suspender" Emacs para poder acceder a otros programas. | ||
| 674 | 671 | ||
| 675 | En sistemas que lo permiten C-z "suspende" Emacs; esto es, se regresa | 672 | C-z es el comando para salir de Emacs *temporalmente*: para que pueda |
| 676 | al intérprete de comandos pero no se destruye Emacs. En los | 673 | regresar a la misma sesión de Emacs después. Cuando Emacs está |
| 674 | ejecutándose en una terminal, C-z "suspende" Emacs; esto es, se | ||
| 675 | regresa al intérprete de comandos pero no se destruye Emacs. En los | ||
| 677 | intérpretes de comandos más comunes, puede reanudar Emacs con el | 676 | intérpretes de comandos más comunes, puede reanudar Emacs con el |
| 678 | comando `fg' o con `%emacs'. | 677 | comando `fg' o con `%emacs'. |
| 679 | 678 | ||
| 680 | En sistemas que no implementen el suspendido, C-z crea un | ||
| 681 | subintérprete que corre bajo Emacs para darle la opción de correr | ||
| 682 | otros programas y regresar a Emacs después; esto en realidad no "sale" | ||
| 683 | de Emacs. En este caso, el comando `exit' del intérprete es la vía | ||
| 684 | usual para regresar a Emacs desde éste. | ||
| 685 | |||
| 686 | El momento para usar C-x C-c es cuando está listo para salir del | 679 | El momento para usar C-x C-c es cuando está listo para salir del |
| 687 | sistema. Es además el paso correcto para salir de un Emacs llamado | 680 | sistema. Es además el paso correcto para salir de un Emacs llamado |
| 688 | bajo programas de manejo de correo y diversas otras utilidades, puesto | 681 | bajo programas de gestión de correo y otras utilidades diversas. |
| 689 | que ellos no saben cómo lidiar con la suspensión de Emacs. En | ||
| 690 | circunstancias normales, si no va a salir, es mejor suspender | ||
| 691 | Emacs con C-z en lugar de salir de él. | ||
| 692 | 682 | ||
| 693 | Existen varios comandos C-x. Aquí hay una lista de los que ha | 683 | Existen muchos comandos C-x. He aquí la lista de los que ya ha |
| 694 | aprendido: | 684 | aprendido: |
| 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 | ||
| 703 | Los comandos eXtendidos por nombre son comandos que se utilizan aún | 695 | Los comandos eXtendidos por nombre son comandos que se utilizan aún |
| 704 | con menos frecuencia, o únicamente en ciertos modos. Un ejemplo es el | 696 | con menos frecuencia, o únicamente en ciertos modos. Un ejemplo es el |
| 705 | comando replace-string, el cual globalmente substituye una cadena de | 697 | comando replace-string, el cual substituye globalmente una cadena de |
| 706 | caracteres por otra. Cuando teclea M-x, Emacs le pregunta al | 698 | caracteres por otra. Cuando teclea M-x, Emacs le pregunta al final de |
| 707 | final de la pantalla con M-x y debe escribir el nombre del | 699 | la pantalla con M-x y debe escribir el nombre del comando; en este |
| 708 | comando; en este caso "replace-string". Solo teclee "repl s<TAB>" y | 700 | caso "replace-string". Solo teclee "repl s<TAB>" y Emacs completará |
| 709 | Emacs completará el nombre. Finalice el nombre del comando con | 701 | el nombre. (<TAB> es la tecla del tabulador, que habitualmenté está |
| 710 | <Return>. | 702 | situada sobre la tecla de bloquear mayúsculas o la de shift, en el |
| 703 | lado izquierdo del teclado.) Para aceptar el comando y ejecutarlo, | ||
| 704 | pulse <Return>. | ||
| 711 | 705 | ||
| 712 | El comando replace-string requiere dos argumentos: la cadena de | 706 | El comando replace-string requiere dos argumentos: la cadena de |
| 713 | caracteres a reemplazar, y la cadena de caracteres para reemplazarla. | 707 | caracteres 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 |
| 734 | la vía normal, Emacs borra su archivo de auto guardado. | 728 | la vía normal, Emacs borra su archivo de auto guardado. |
| 735 | 729 | ||
| 736 | Si la computadora falla, puede recuperar su edición de auto | 730 | Si la computadora falla, puede recuperar su edición de auto guardado |
| 737 | guardado encontrando el archivo normal (el archivo que estuvo | 731 | encontrando el archivo normal (el archivo que estuvo editando, no el |
| 738 | editando, no el archivo de auto guardar) y entonces tecleando M-x | 732 | archivo de auto guardar) y entonces tecleando M-x recover-file |
| 739 | recover file<Return>. Cuando le pregunte por la confirmación, teclee | 733 | <Return>. Cuando le pregunte por la confirmación, teclee yes<Return> |
| 740 | yes<Return> para ir y recuperar la información del auto guardado. | 734 | para 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 | |||
| 754 | La línea inmediatamente encima del área de eco recibe el nombre de | 748 | La 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 | ||
| 759 | Esta línea da información útil acerca del estado de Emacs y del texto | 753 | Esta línea da información útil acerca del estado de Emacs y del texto |
| 760 | que está editando. | 754 | que está editando. |
| 761 | 755 | ||
| 762 | Ya sabe qué significa el nombre del archivo: es el archivo que usted | 756 | Ya sabe qué significa el nombre del archivo: es el archivo que usted |
| 763 | ha encontrado. -NN%-- indica su posición actual en el texto; esto | 757 | ha encontrado. NN% indica su posición actual en el texto; esto |
| 764 | significa que NN por ciento del texto está encima de la parte superior | 758 | significa que NN por ciento del texto está encima de la parte superior |
| 765 | de la pantalla. Si el principio del archivo está en la pantalla, éste | 759 | de la pantalla. Si el principio del archivo está en la pantalla, éste |
| 766 | dirá --Top-- en vez de --00%--. Si el final del texto está en la | 760 | dirá "Top" en vez de " 0%". Si el final del texto está en la |
| 767 | pantalla, dirá --Bot--. Si está mirando un texto tan pequeño que cabe | 761 | pantalla, dirá "Bot". Si está mirando un texto tan pequeño que cabe |
| 768 | en la pantalla, el modo de línea dirá --All--. | 762 | entero en la pantalla, el modo de línea dirá "All". |
| 769 | 763 | ||
| 770 | La L y los dígitos indican la posición de otra forma: ellos dan el | 764 | La L y los dígitos señalan la posición de otra forma: indican el |
| 771 | número de línea actual del punto. | 765 | número de línea actual del punto. |
| 772 | 766 | ||
| 773 | Los asteriscos cerca del frente significan que usted ha hecho cambios | 767 | Los 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 | ||
| 796 | Si va a editar un texto de algún lenguaje humano, como este archivo, | 790 | Si va a editar un texto de algún lenguaje humano, como este archivo, |
| 797 | debería usar el modo de texto. | 791 | debería usar el modo de texto. |
| 798 | >> Teclee M-x text mode<Return>. | 792 | |
| 793 | >> Teclee M-x text-mode <Return>. | ||
| 799 | 794 | ||
| 800 | No se preocupe, ninguno de los comandos de Emacs que ha aprendido | 795 | No se preocupe, ninguno de los comandos de Emacs que ha aprendido |
| 801 | cambia de manera significativa. Pero puede observar que M-f y M-b | 796 | cambia de manera significativa. Pero puede observar que M-f y M-b |
| @@ -805,20 +800,20 @@ de palabras. | |||
| 805 | 800 | ||
| 806 | Los modos mayores normalmente hacen cambios sutiles como el anterior: | 801 | Los modos mayores normalmente hacen cambios sutiles como el anterior: |
| 807 | la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor, | 802 | la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor, |
| 808 | pero funcionan un poco diferente. | 803 | pero funcionan de forma un poco diferente. |
| 809 | 804 | ||
| 810 | Para ver documentación en el modo mayor actual, teclee C-h m. | 805 | Para 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 | ||
| 820 | Los modos mayores son llamados así porque también hay modos menores. | 815 | Los modos mayores se llaman así porque también hay modos menores. Los |
| 821 | Los modos menores no son alternativas para los modos mayores, solo | 816 | modos menores no son alternativas para los modos mayores, solo |
| 822 | modificaciones menores de éstos. Cada modo menor puede ser activado o | 817 | modificaciones menores de éstos. Cada modo menor puede ser activado o |
| 823 | desactivado por sí mismo, independiente de todos los otros modos | 818 | desactivado por sí mismo, independiente de todos los otros modos |
| 824 | menores, e independiente de su modo mayor. Por tanto, puede no usar | 819 | menores, 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 | |||
| 830 | rompe la línea entre palabras automáticamente siempre que inserte | 825 | rompe la línea entre palabras automáticamente siempre que inserte |
| 831 | texto y la línea sea demasiado ancha. | 826 | texto y la línea sea demasiado ancha. |
| 832 | 827 | ||
| 833 | Puede activar el modo Auto Fill al hacer M-x auto fill mode<Return>. | 828 | Puede activar el modo Auto Fill al hacer M-x auto-fill-mode <Return>. |
| 834 | Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x | 829 | Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x |
| 835 | auto fill mode<Return>. Si el modo está desactivado, este comando lo | 830 | auto-fill-mode <Return>. Si el modo está desactivado, este comando lo |
| 836 | activa, y si el modo está activado, este comando lo desactiva. | 831 | activa, y si el modo está activado, este comando lo desactiva. |
| 837 | Decimos que el comando "cambia el modo". | 832 | Decimos 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 | ||
| 864 | Emacs puede hacer búsquedas de cadenas (grupos de caracteres o | 859 | Emacs puede hacer búsquedas de cadenas (una "cadena" es un grupo de |
| 865 | palabras contiguos) hacia adelante a través del texto o hacia atrás en | 860 | caracteres contiguos) hacia adelante a través del texto o hacia atrás |
| 866 | el mismo. La búsqueda de una cadena es un comando de movimiento de | 861 | en el mismo. La búsqueda de una cadena es un comando de movimiento de |
| 867 | cursor; mueve el cursor al próximo lugar donde esa cadena aparece. | 862 | cursor; mueve el cursor al próximo lugar donde esa cadena aparece. |
| 868 | 863 | ||
| 869 | El comando de búsqueda de Emacs es diferente a los comandos de | 864 | El comando de búsqueda de Emacs es "incremental". Esto significa que |
| 870 | búsqueda de los demás editores, en que es "incremental". Esto | 865 | la búsqueda ocurre mientras teclea la cadena para buscarla. |
| 871 | significa que la búsqueda ocurre mientras teclea la cadena para | ||
| 872 | buscarla. | ||
| 873 | 866 | ||
| 874 | El comando para iniciar una búsqueda es C-s para búsqueda hacia | 867 | El comando para iniciar una búsqueda es C-s para búsqueda hacia |
| 875 | adelante, y C-r para la búsqueda hacia atrás. ¡PERO ESPERE! No los | 868 | adelante, 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 | |||
| 895 | tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual | 888 | tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual |
| 896 | está fallando ("failing"). C-g también termina la búsqueda. | 889 | está fallando ("failing"). C-g también termina la búsqueda. |
| 897 | 890 | ||
| 898 | NOTA: En algunos sistemas, teclear C-s dejará inmóvil la pantalla y no | 891 | Si se encuentra en medio de una búsqueda incremental y teclea <DEL>, |
| 899 | podrá ver más respuesta de Emacs. Esto indica que una | 892 | la búsqueda "vuelve" a un punto anterior. Si teclea <DEL> justo |
| 900 | "característica" del sistema operativo llamada "control de flujo" está | 893 | después de teclear C-s para avanzar hasta la siguiente ocurrencia de |
| 901 | interceptando el C-s y no permitiéndole llegar hasta Emacs. Para | 894 | la cadena buscada, el cursor retrocede a una ocurrencia previa. Si no |
| 902 | descongelar la pantalla, teclee C-q. Luego consulte la sección | 895 | hay ocurrencias previas, <DEL> borra el último carácter de la cadena |
| 903 | "Entrada Espontánea para Búsqueda Incremental" en el manual de Emacs | 896 | buscada. Por ejemplo, suponga que ha tecleado "c", para buscar la |
| 904 | para consejos de cómo tratar con esta "característica". | 897 | primera ocurrencia de "c". Ahora, si teclea "u", el cursor se moverá |
| 905 | 898 | a la primera ocurrencia de "cu". Ahora teclee <DEL>. Esto borra la | |
| 906 | Si 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 | 900 | de "c". |
| 908 | y la búsqueda vuelve al sitio anterior de la búsqueda. Por ejemplo, | ||
| 909 | suponga que ha tecleado "c", para buscar la primera ocurrencia de "c". | ||
| 910 | Ahora, si teclea "u", el cursor se moverá a la primera ocurrencia de | ||
| 911 | "cu". Ahora teclee <Delback>. Esto borra la "u" de la cadena | ||
| 912 | buscada, y el cursor vuelve a la primera ocurrencia de "c". | ||
| 913 | 901 | ||
| 914 | Si está en medio de una búsqueda y teclea un carácter control o meta | 902 | Si 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 |
| 916 | una búsqueda, tales como C-s y C-r), la búsqueda termina. | 904 | una búsqueda, tales como C-s y C-r), la búsqueda termina. |
| 917 | 905 | ||
| 918 | El C-s inicia una exploración que busca alguna ocurrencia de la cadena | 906 | C-s inicia una exploración que busca alguna ocurrencia de la cadena |
| 919 | buscada DESPUÉS de la posición actual del cursor. Si quiere buscar | 907 | buscada DESPUÉS de la posición actual del cursor. Si quiere buscar |
| 920 | algo anterior en el texto, teclee en cambio C-r. Todo lo que hemos | 908 | algo anterior en el texto, teclee en cambio C-r. Todo lo que hemos |
| 921 | dicho sobre C-s también se aplica a C-r, excepto que la dirección de | 909 | dicho 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 | ||
| 928 | Una de las características agradables de Emacs es que se puede mostrar | 916 | Una de las características agradables de Emacs es que se puede mostrar |
| 929 | más de una ventana en la pantalla al mismo tiempo. | 917 | más de una ventana en la pantalla al mismo tiempo. (Note que Emacs |
| 918 | usa el término "marcos", descrito en la siguiente sección, para | ||
| 919 | referirse a lo que otras aplicaciones llaman "ventanas". El manual de | ||
| 920 | Emacs 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 | ||
| 950 | Puede continuar usando C-x o para cambiar entre las ventanas. Cada | 940 | Puede continuar usando C-x o para cambiar entre las ventanas. La |
| 951 | ventana tiene su propia posición del cursor, pero únicamente una | 941 | "ventana seleccionada", donde tiene lugar casi toda la edición, es la |
| 952 | ventana actual muestra el cursor. Todos los comandos de edición | 942 | que tiene un cursor muy visible que parpadea cuando usted no está |
| 953 | comunes se aplican a la ventana en que está el cursor. Llamaremos | 943 | tecleando. Las otras ventanas tienen sus propia posición del cursor; |
| 954 | esto la "ventana seleccionada". | 944 | si está ejecutando Emacs en una pantalla gráfica, esos cursores se |
| 945 | muestran como rectángulos vacíos que no parpadean. | ||
| 955 | 946 | ||
| 956 | El comando C-M-v es muy útil cuando está editando un texto en una | 947 | El comando C-M-v es muy útil cuando está editando un texto en una |
| 957 | ventana y usando la otra ventana como referencia. Puede mantener el | 948 | ventana y usando la otra ventana como referencia. Sin moverse de la |
| 958 | cursor siempre en la ventana donde está editando, y avanzar a la otra | 949 | ventana seleccionada, puede desplazar el texto de la otra ventana con |
| 959 | ventana secuencialmente con C-M-v. | 950 | C-M-v. |
| 960 | 951 | ||
| 961 | C-M-v es un ejemplo de un carácter CONTROL-META. Si tiene una tecla | 952 | C-M-v es un ejemplo de un carácter CONTROL-META. Si tiene una tecla |
| 962 | META real, puede teclear C-M-v pulsando a la vez CONTROL y META | 953 | META (o Alt), puede teclear C-M-v pulsando a la vez CONTROL y META |
| 963 | mientras teclea v. No importa qué tecla "vaya primero", CONTROL o | 954 | mientras teclea v. No importa qué tecla "vaya primero", CONTROL o |
| 964 | META, porque las dos teclas actúan modificando los caracteres que | 955 | META, porque las dos teclas actúan modificando los caracteres que |
| 965 | teclea. | 956 | teclea. |
| 966 | 957 | ||
| 967 | Si no tiene una tecla META real, y en vez de eso usa ESC, el orden sí | 958 | Si no tiene una tecla META, y en vez de eso usa ESC, el orden sí |
| 968 | importa: debe teclear ESC seguido de Control-v, porque Control-ESC v | 959 | importa: debe teclear ESC seguido de Control-v, porque Control-ESC v |
| 969 | no funcionará. Esto es porque ESC es un carácter que tiene valor por | 960 | no funcionará. Esto es porque ESC es un carácter que tiene valor por |
| 970 | sí mismo, no es una tecla modificadora. | 961 | sí 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 | |||
| 989 | Emacs puede crear también múltiples "marcos". Marco es como | ||
| 990 | denominamos a un grupo de ventanas, junto con sus menus, barras de | ||
| 991 | desplazamiento, áreas de eco, etc. En entornos gráficos, lo que Emacs | ||
| 992 | denomina "marco" es lo que otras aplicaciones llaman "ventana". En | ||
| 993 | entornos gráficos, es posible mostrar varios marcos al mismo tiempo. | ||
| 994 | En 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 | |||
| 999 | En el nuevo marco puede hacer todo lo que hacía en el marco original. | ||
| 1000 | El primer marco no tiene nada de especial. | ||
| 1001 | |||
| 1002 | >> Teclee M-x delete-frame <Return>. | ||
| 1003 | Esto destruye el marco seleccionado. | ||
| 1004 | |||
| 1005 | También puede destruir un marco mediante el método normal que ofrezca | ||
| 1006 | el entorno gráfico (a menudo, pinchando con el ratón en un botón | ||
| 1007 | etiquetado como "X" en alguna de las esquinas superiores del marco). | ||
| 1008 | Si al hacer eso destruye el último marco de Emacs, la aplicación | ||
| 1009 | termina. | ||
| 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 | |||
| 1024 | Control-h, que es llamado "el carácter de Ayuda (Help)". | 1041 | Control-h, que es llamado "el carácter de Ayuda (Help)". |
| 1025 | 1042 | ||
| 1026 | Para usar las funciones de ayuda, teclee el carácter C-h, y luego un | 1043 | Para usar las funciones de ayuda, teclee el carácter C-h, y luego un |
| 1027 | carácter decidiendo qué tipo de ayuda quiere. Si está REALMENTE | 1044 | carácter que especifica qué tipo de ayuda quiere. Si está REALMENTE |
| 1028 | perdido teclee C-h ? y Emacs le dirá qué tipo de ayuda puede | 1045 | perdido teclee C-h ? y Emacs le dirá qué tipo de ayuda puede |
| 1029 | ofrecerle. Si ha tecleado C-h y decide que no quiere ninguna ayuda, | 1046 | ofrecerle. Si ha tecleado C-h y decide que no quiere ninguna ayuda, |
| 1030 | teclee C-g para cancelarlo. | 1047 | teclee 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, |
| 1033 | Realmente no deberían hacer esto como una política para todos los | 1050 | intente teclear la tecla F1 o, en su lugar, M-x help <Return>.) |
| 1034 | usuarios, así que tiene argumentos para quejarse al administrador del | ||
| 1035 | sistema. Mientras tanto, si C-h no muestra un mensaje de ayuda en el | ||
| 1036 | final de la pantalla, intente teclear la tecla F1 o, en su lugar, M-x | ||
| 1037 | help <Return>). | ||
| 1038 | 1051 | ||
| 1039 | La función de AYUDA más básica es C-h c. Teclee C-h, el carácter c y | 1052 | La función de AYUDA más básica es C-h c. Teclee C-h, el carácter c y |
| 1040 | un carácter de comando o secuencia de comando; Emacs le mostrará | 1053 | un carácter de comando o secuencia de comando; Emacs le mostrará |
| 1041 | una descripción muy breve del comando. | 1054 | una 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 | ||
| 1048 | Esto le dice el "nombre de la función". Los nombres de función se | 1061 | Esto le dice el "nombre de la función". Ya que los nombres de las |
| 1049 | usan principalmente para adecuar y extender Emacs. Pero ya que los | 1062 | funciones se eligen para indicar lo que hace el comando, pueden servir |
| 1050 | nombres de las funciones se eligen para indicar lo que el comando | 1063 | como una breve documentación: suficiente para recordarle los comandos |
| 1051 | hace, también pueden servir como una breve documentación: suficiente | 1064 | que ha aprendido. |
| 1052 | para recordarle los comandos que ha aprendido. | ||
| 1053 | 1065 | ||
| 1054 | Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene | 1066 | Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene |
| 1055 | las teclas META o EDIT o ALT) <ESC>v también están permitidos después | 1067 | las teclas META o EDIT o ALT) <ESC>v también están permitidos después |
| @@ -1062,22 +1074,23 @@ C-h c. | |||
| 1062 | 1074 | ||
| 1063 | Esto muestra la documentación de la función, al igual que el nombre, | 1075 | Esto muestra la documentación de la función, al igual que el nombre, |
| 1064 | en una ventana de Emacs. Cuando haya terminado de leer el resultado, | 1076 | en una ventana de Emacs. Cuando haya terminado de leer el resultado, |
| 1065 | teclee C-x 1 para deshacerse del texto de ayuda. No tiene que hacer | 1077 | teclee C-x 1 para deshacerse de la ventana. No tiene que hacer esto |
| 1066 | esto ahora. Puede hacer algunas ediciones mientras se refiere | 1078 | ahora. Puede hacer algunas ediciones mientras se refiere al texto de |
| 1067 | al texto de ayuda, y entonces teclear C-x 1. | 1079 | ayuda, y entonces teclear C-x 1. |
| 1068 | 1080 | ||
| 1069 | Aquí hay algunas otras opciones útiles de C-h: | 1081 | Aquí 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 | ||
| 1078 | Un comando similar, C-h v, muestra la documentación de variables cuyos | 1090 | Un comando similar, C-h v, muestra documentación de las variables, |
| 1079 | valores pueda poner para adecuar el comportamiento de Emacs. Necesita | 1091 | incluyendo los valores que pueda poner para adaptar el comportamiento |
| 1080 | teclear el nombre de la variable cuando Emacs pregunte por ella. | 1092 | de Emacs. Deberá teclear el nombre de la variable cuando Emacs |
| 1093 | pregunte 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 | ||
| 1091 | Esto muestra en otra ventana una lista de todos los comandos M-x con | 1104 | Esto muestra en otra ventana una lista de todos los comandos M-x con |
| 1092 | la palabra "file" en sus nombres. Verá comandos de caracteres como | 1105 | la 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 | ||
| 1115 | Puede aprender más de Emacs leyendo su manual, ya sea como libro o en | 1128 | Puede aprender más acerca de Emacs leyendo su manual, ya sea como |
| 1116 | línea en el Info (use el menú Ayuda--"Help"--o teclee F10 h r). Dos | 1129 | libro o en el propio Emacs (use el menú Ayuda, "Help", o teclee C-h |
| 1117 | características que pueden gustarle son la completación, que ahorra | 1130 | r). Dos características que pueden gustarle son la completación, que |
| 1118 | teclear, y dired, que simplifica el manejo de archivos. | 1131 | ahorra teclear, y dired, que simplifica el manejo de archivos. |
| 1119 | 1132 | ||
| 1120 | La completación es una manera de ahorrar teclear innecesariamente. | 1133 | La completación es una manera de ahorrar teclear innecesariamente. |
| 1121 | Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear | 1134 | Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear |
| 1122 | C-x b *M<Tab> y emacs encontrará el resto del nombre del buffer tan | 1135 | C-x b *M<Tab> y emacs encontrará el resto del nombre del buffer tan |
| 1123 | lejos como pueda determinar de lo que ya haya tecleado. La | 1136 | lejos como pueda determinar de lo que ya haya tecleado. La |
| 1124 | completación es descrita en el Info del manual de Emacs en el nodo | 1137 | completación también funciona con nombres de comandos y de archivos. |
| 1125 | llamado "Completation". | 1138 | La completación se describe en el Info del manual de Emacs en el nodo |
| 1139 | llamado "Completion". | ||
| 1126 | 1140 | ||
| 1127 | Dired le permite listar los archivos en un directorio (y opcionalmente | 1141 | Dired le permite listar los archivos en un directorio (y opcionalmente |
| 1128 | sus subdirectorios), moverse alrededor de esa lista, visitar, | 1142 | sus subdirectorios), moverse alrededor de esa lista, visitar, |
| 1129 | renombrar, borrar y aparte de eso operar en los archivos. Dired está | 1143 | renombrar, borrar y aparte de eso operar en los archivos. Dired está |
| 1130 | descrito en el Info en el manual de Emacs en el nodo llamado "Dired". | 1144 | descrito en el manual de Emacs en el nodo llamado "Dired". |
| 1131 | 1145 | ||
| 1132 | El manual también describe otras características de Emacs. | 1146 | El 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 | ||
| 1138 | Recuerde, para salir permanentemente de Emacs use C-x C-c. Para salir | 1152 | Para salir permanentemente de Emacs use C-x C-c. |
| 1139 | temporalmente a un intérprete de comandos, de forma que puede volver a | ||
| 1140 | Emacs después, use C-z. | ||
| 1141 | 1153 | ||
| 1142 | Este tutorial intenta ser comprensible para todos los usuarios nuevos, | 1154 | Este tutorial intenta ser comprensible para todos los usuarios nuevos, |
| 1143 | así que si encuentra algo que no esté claro, no se siente y se culpe a | 1155 | así que si encuentra algo que no esté claro, no se quede parado |
| 1144 | sí mismo: ¡Quéjese! | 1156 | culpá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: | |||
| 1174 | La versión en español ha sido actualizada por: | 1186 | La 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 | ||
| 1178 | Por favor, en caso de duda, sólo es válido el original en inglés de la | 1191 | Por favor, en caso de duda, sólo es válido el original en inglés de la |
| 1179 | siguiente nota de derechos de reproducción (que puede encontrar en el | 1192 | siguiente 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 | ||
| 214 | HAVE_GETOPT_H = HAVE_GETOPT_H | 214 | HAVE_GETOPT_H = HAVE_GETOPT_H |
| 215 | INCLUDE_NEXT = include_next | 215 | INCLUDE_NEXT = include_next |
| 216 | PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header | ||
| 217 | PRAGMA_COLUMNS = | 216 | PRAGMA_COLUMNS = |
| 218 | NEXT_GETOPT_H = <getopt.h> | 217 | NEXT_GETOPT_H = <getopt.h> |
| 219 | ARG_NONNULL_H = ../build-aux/snippet/arg-nonnull.h | 218 | ARG_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 @@ | |||
| 1 | 2012-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 | |||
| 6 | 2012-02-07 Michael Albinus <michael.albinus@gmx.de> | ||
| 7 | |||
| 8 | * notifications.el (notifications-on-closed-signal): Make `reason' | ||
| 9 | optional. (Bug#10744) | ||
| 10 | |||
| 11 | 2012-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 | |||
| 20 | 2012-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 | |||
| 28 | 2012-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 | |||
| 38 | 2012-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 | |||
| 1 | 2012-02-05 Andreas Schwab <schwab@linux-m68k.org> | 49 | 2012-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 | ||
| 6 | 2012-02-05 Chong Yidong <cyd@gnu.org> | 54 | 2012-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 | ||
| 10 | 2012-02-05 Glenn Morris <rgm@gnu.org> | 61 | 2012-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. |
| 1628 | You can enter one or more words separated by spaces, | ||
| 1629 | or 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. |
| 203 | SYMBOL is the variable name; it should not be quoted. | ||
| 204 | STANDARD is an expression specifying the variable's standard | ||
| 205 | value. It should not be quoted. It is evaluated once by | ||
| 206 | `defcustom', and the value is assigned to SYMBOL if the variable | ||
| 207 | is unbound. The expression itself is also stored, so that | ||
| 208 | Customize can re-evaluate it later to get the standard value. | ||
| 203 | DOC is the variable documentation. | 209 | DOC is the variable documentation. |
| 204 | 210 | ||
| 205 | Neither SYMBOL nor VALUE need to be quoted. | ||
| 206 | If SYMBOL is not already bound, initialize it to VALUE. | ||
| 207 | The remaining arguments should have the form | 211 | The 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 | |||
| 90 | MODE (you can override this with the :variable keyword, see below). | 90 | MODE (you can override this with the :variable keyword, see below). |
| 91 | DOC is the documentation for the mode toggle command. | 91 | DOC is the documentation for the mode toggle command. |
| 92 | 92 | ||
| 93 | The defined mode command takes one optional (prefix) argument. | ||
| 94 | Interactively with no prefix argument it toggles the mode. | ||
| 95 | With a prefix argument, it enables the mode if the argument is | ||
| 96 | positive and otherwise disables it. When called from Lisp, it | ||
| 97 | enables the mode if the argument is omitted or nil, and toggles | ||
| 98 | the mode if the argument is `toggle'. If DOC is nil this | ||
| 99 | function adds a basic doc-string stating these facts. | ||
| 100 | |||
| 93 | Optional INIT-VALUE is the initial value of the mode's variable. | 101 | Optional INIT-VALUE is the initial value of the mode's variable. |
| 94 | Optional LIGHTER is displayed in the modeline when the mode is on. | 102 | Optional LIGHTER is displayed in the modeline when the mode is on. |
| 95 | Optional KEYMAP is the default keymap bound to the mode keymap. | 103 | Optional 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. |
| 243 | With a prefix argument ARG, enable %s if ARG is | 251 | With a prefix argument ARG, enable %s if ARG is |
| 244 | positive, and disable it otherwise. If called from Lisp, enable | 252 | positive, and disable it otherwise. If called from Lisp, enable |
| 245 | the mode if ARG is omitted or nil. | 253 | the 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 @@ | |||
| 1 | 2012-02-07 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * gnus-sum.el (gnus-summary-show-thread): Revert last two changes. | ||
| 4 | |||
| 5 | 2012-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 | |||
| 21 | 2012-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 | |||
| 26 | 2012-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 | |||
| 31 | 2012-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 | |||
| 36 | 2012-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 | |||
| 1 | 2012-02-05 Lars Ingebrigtsen <larsi@gnus.org> | 41 | 2012-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. |
| 7354 | The state which existed when entering the ephemeral is reset." | 7356 | The 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. |
| 272 | The values are bound by MIN and MAX. | 273 | The values are bound by MIN and MAX. |
| 273 | If FIXED is t, then VAL1 will not be touched." | 274 | If 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. | ||
| 144 | DOM 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. |
| 688 | This should be a list of symbols, each of which has the same | 688 | This should be a list of symbols, each of which has the same |
| 689 | names as one of the format tags used internally by ImageMagick; | 689 | name as one of the format tags used internally by ImageMagick; |
| 690 | see `imagemagick-types'. Entries in this list are excluded from | 690 | see `imagemagick-types'. Entries in this list are excluded from |
| 691 | being registered by `imagemagick-register-types'. | 691 | being registered by `imagemagick-register-types', so if you change |
| 692 | this variable you must do so before you call that function. | ||
| 692 | 693 | ||
| 693 | If Emacs is compiled without ImageMagick, this variable has no effect." | 694 | If 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. |
| 2717 | Also, 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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-01-12 Glenn Morris <rgm@gnu.org> | 17 | 2012-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 | ||
| 215 | considered \"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 | |||
| 119 | than the one returned initially by `url-retrieve'. In this case, it sets this | 119 | than the one returned initially by `url-retrieve'. In this case, it sets this |
| 120 | variable in the original buffer as a forwarding pointer.") | 120 | variable 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. |
| 1992 | Normally, trailing spaces within the editing field are truncated. | ||
| 1993 | But 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 |
| @@ -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(?). | ||
| 402 | echo "Making links to \`nt'" | 401 | echo "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 | ||
| 409 | echo "Making links to \`nt/inc' and its subdirectories" | 408 | echo "Making links to \`nt/inc' and its subdirectories" |
| 410 | for f in `find nt/inc -type f -name '[a-z]*.h'`; do | 409 | for 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 @@ | |||
| 1 | 2012-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 | |||
| 6 | 2012-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 | |||
| 1 | 2012-02-04 Eli Zaretskii <eliz@gnu.org> | 19 | 2012-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 | |||
| 289 | USER_LIBS := $(patsubst %,-l%,$(USER_LIBS)) | 289 | USER_LIBS := $(patsubst %,-l%,$(USER_LIBS)) |
| 290 | endif | 290 | endif |
| 291 | 291 | ||
| 292 | PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header | ||
| 293 | |||
| 292 | ifeq "$(ARCH)" "i386" | 294 | ifeq "$(ARCH)" "i386" |
| 293 | ifdef NOOPT | 295 | ifdef NOOPT |
| 294 | ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN) | 296 | ARCH_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: | |||
| 257 | install-shortcuts: | 257 | install-shortcuts: |
| 258 | "$(INSTALL_DIR)/bin/addpm" -q | 258 | "$(INSTALL_DIR)/bin/addpm" -q |
| 259 | 259 | ||
| 260 | dist: install-bin | 260 | maybe-copy-distfiles: maybe-copy-distfiles-$(SHELLTYPE) |
| 261 | mkdir $(TMP_DIST_DIR) | 261 | |
| 262 | maybe-copy-distfiles-CMD: doit | ||
| 263 | @if not $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin | ||
| 264 | |||
| 265 | maybe-copy-distfiles-SH: doit | ||
| 266 | @if [ ! $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" ] ; then \ | ||
| 267 | $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin | ||
| 268 | fi | ||
| 269 | |||
| 270 | create-tmp-dist-dir: | ||
| 271 | mkdir "$(TMP_DIST_DIR)" | ||
| 272 | # Also create bin directory for dist files. | ||
| 273 | mkdir "$(TMP_DIST_DIR)/bin" | ||
| 274 | |||
| 275 | dist: 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 | |||
| 203 | D = d | 203 | D = d |
| 204 | !endif | 204 | !endif |
| 205 | 205 | ||
| 206 | # gcc-specific pragma (ignore for MSVC) | ||
| 207 | PRAGMA_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 @@ | |||
| 1 | 2012-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 | |||
| 7 | 2012-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 | |||
| 15 | 2012-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 | |||
| 1 | 2012-02-04 Andreas Schwab <schwab@linux-m68k.org> | 20 | 2012-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 | ||
| @@ -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 | ||
| 504 | static void | 504 | static void |
| 505 | store_function_docstring (Lisp_Object fun, EMACS_INT offset) | 505 | store_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, | |||
| 7986 | Each entry in this list is a symbol named after an ImageMagick format | 7983 | Each entry in this list is a symbol named after an ImageMagick format |
| 7987 | tag. See the ImageMagick manual for a list of ImageMagick formats and | 7984 | tag. See the ImageMagick manual for a list of ImageMagick formats and |
| 7988 | their descriptions (http://www.imagemagick.org/script/formats.php). | 7985 | their descriptions (http://www.imagemagick.org/script/formats.php). |
| 7986 | You can also try the shell command: `identify -list format'. | ||
| 7989 | 7987 | ||
| 7990 | Note that ImageMagick recognizes many file-types that Emacs does not | 7988 | Note that ImageMagick recognizes many file-types that Emacs does not |
| 7991 | recognize as images, such as C. See `imagemagick-types-inhibit'. */) | 7989 | recognize 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. | |||
| 8958 | The function `clear-image-cache' disregards this variable. */); | 8956 | The 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. |
| 8961 | The 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 | ||