diff options
| author | Glenn Morris | 2012-12-02 17:08:31 -0800 |
|---|---|---|
| committer | Glenn Morris | 2012-12-02 17:08:31 -0800 |
| commit | c5bc2d1d0558bbaa29ef04f9bd7bef50146382ab (patch) | |
| tree | beabc46c767d32fe6cda79f0567834d5ea8225ee | |
| parent | 1bf3989cd4ebffdeeebfaaca83c6866416c3908a (diff) | |
| parent | 328dac0d42a2b395a327c0eda0ed4bbcec4f6c55 (diff) | |
| download | emacs-c5bc2d1d0558bbaa29ef04f9bd7bef50146382ab.tar.gz emacs-c5bc2d1d0558bbaa29ef04f9bd7bef50146382ab.zip | |
Merge from emacs-24; up to 2012-11-23T06:23:28Z!cyd@gnu.org
34 files changed, 526 insertions, 273 deletions
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index c90f6d4b712..ce56d3af1b0 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2012-12-03 Chong Yidong <cyd@gnu.org> | ||
| 2 | |||
| 3 | * custom.texi (Init Rebinding): kbd is now a function (Bug#13052). | ||
| 4 | |||
| 1 | 2012-12-02 Kevin Ryde <user42@zip.com.au> | 5 | 2012-12-02 Kevin Ryde <user42@zip.com.au> |
| 2 | 6 | ||
| 3 | * maintaining.texi (Tag Syntax): Mention (defvar foo) handling. | 7 | * maintaining.texi (Tag Syntax): Mention (defvar foo) handling. |
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index a614126dbc0..6ea1ad5535f 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi | |||
| @@ -1648,7 +1648,7 @@ you can specify them in your initialization file by writing Lisp code. | |||
| 1648 | 1648 | ||
| 1649 | @findex kbd | 1649 | @findex kbd |
| 1650 | There are several ways to write a key binding using Lisp. The | 1650 | There are several ways to write a key binding using Lisp. The |
| 1651 | simplest is to use the @code{kbd} macro, which converts a textual | 1651 | simplest is to use the @code{kbd} function, which converts a textual |
| 1652 | representation of a key sequence---similar to how we have written key | 1652 | representation of a key sequence---similar to how we have written key |
| 1653 | sequences in this manual---into a form that can be passed as an | 1653 | sequences in this manual---into a form that can be passed as an |
| 1654 | argument to @code{global-set-key}. For example, here's how to bind | 1654 | argument to @code{global-set-key}. For example, here's how to bind |
| @@ -1676,11 +1676,11 @@ and mouse events: | |||
| 1676 | (global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill) | 1676 | (global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill) |
| 1677 | @end example | 1677 | @end example |
| 1678 | 1678 | ||
| 1679 | Instead of using the @code{kbd} macro, you can use a Lisp string or | 1679 | Instead of using @code{kbd}, you can use a Lisp string or vector to |
| 1680 | vector to specify the key sequence. Using a string is simpler, but | 1680 | specify the key sequence. Using a string is simpler, but only works |
| 1681 | only works for @acronym{ASCII} characters and Meta-modified | 1681 | for @acronym{ASCII} characters and Meta-modified @acronym{ASCII} |
| 1682 | @acronym{ASCII} characters. For example, here's how to bind @kbd{C-x | 1682 | characters. For example, here's how to bind @kbd{C-x M-l} to |
| 1683 | M-l} to @code{make-symbolic-link} (@pxref{Misc File Ops}): | 1683 | @code{make-symbolic-link} (@pxref{Misc File Ops}): |
| 1684 | 1684 | ||
| 1685 | @example | 1685 | @example |
| 1686 | (global-set-key "\C-x\M-l" 'make-symbolic-link) | 1686 | (global-set-key "\C-x\M-l" 'make-symbolic-link) |
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a0710723ea2..d15a05fe777 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog | |||
| @@ -1,3 +1,20 @@ | |||
| 1 | 2012-12-03 Chong Yidong <cyd@gnu.org> | ||
| 2 | |||
| 3 | * symbols.texi (Symbol Properties): New node. | ||
| 4 | (Symbol Plists): Make it a subsection under Symbol Properties. | ||
| 5 | (Standard Properties): New node. | ||
| 6 | |||
| 7 | * lists.texi (Property Lists): Move here from symbols.texi. | ||
| 8 | (Plist Access): Rename from Other Plists. | ||
| 9 | |||
| 10 | * customize.texi (Variable Definitions): | ||
| 11 | * display.texi (Defining Faces): | ||
| 12 | * sequences.texi (Char-Tables): Fix xref. | ||
| 13 | |||
| 14 | * keymaps.texi (Key Sequences): kbd is now a function. | ||
| 15 | |||
| 16 | * commands.texi (Using Interactive): Fix index entry. | ||
| 17 | |||
| 1 | 2012-11-24 Paul Eggert <eggert@cs.ucla.edu> | 18 | 2012-11-24 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 19 | ||
| 3 | * doclicense.texi: Update to latest version from FSF. | 20 | * doclicense.texi: Update to latest version from FSF. |
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index c42e4b3b6dc..8806c933bf3 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi | |||
| @@ -141,10 +141,10 @@ A command may be called from Lisp programs like any other function, but | |||
| 141 | then the caller supplies the arguments and @var{arg-descriptor} has no | 141 | then the caller supplies the arguments and @var{arg-descriptor} has no |
| 142 | effect. | 142 | effect. |
| 143 | 143 | ||
| 144 | @cindex @code{interactive-form}, function property | 144 | @cindex @code{interactive-form}, symbol property |
| 145 | The @code{interactive} form must be located at top-level in the | 145 | The @code{interactive} form must be located at top-level in the |
| 146 | function body, or in the function symbol's @code{interactive-form} | 146 | function body, or in the function symbol's @code{interactive-form} |
| 147 | property (@pxref{Symbol Plists}). It has its effect because the | 147 | property (@pxref{Symbol Properties}). It has its effect because the |
| 148 | command loop looks for it before calling the function | 148 | command loop looks for it before calling the function |
| 149 | (@pxref{Interactive Call}). Once the function is called, all its body | 149 | (@pxref{Interactive Call}). Once the function is called, all its body |
| 150 | forms are executed; at this time, if the @code{interactive} form | 150 | forms are executed; at this time, if the @code{interactive} form |
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index c9d22851ed2..d85361499ba 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi | |||
| @@ -472,8 +472,8 @@ Internally, @code{defcustom} uses the symbol property | |||
| 472 | @code{saved-value} to record the value saved by the user with the | 472 | @code{saved-value} to record the value saved by the user with the |
| 473 | customization buffer, and @code{customized-value} to record the value | 473 | customization buffer, and @code{customized-value} to record the value |
| 474 | set by the user with the customization buffer, but not saved. | 474 | set by the user with the customization buffer, but not saved. |
| 475 | @xref{Property Lists}. These properties are lists, the car of which | 475 | @xref{Symbol Properties}. These properties are lists, the car of |
| 476 | is an expression that evaluates to the value. | 476 | which is an expression that evaluates to the value. |
| 477 | 477 | ||
| 478 | @defun custom-reevaluate-setting symbol | 478 | @defun custom-reevaluate-setting symbol |
| 479 | This function re-evaluates the standard value of @var{symbol}, which | 479 | This function re-evaluates the standard value of @var{symbol}, which |
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 5148c6ec22e..f1b2074f457 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi | |||
| @@ -2287,7 +2287,7 @@ terminal must match one of the @var{value}s specified for it in | |||
| 2287 | @end example | 2287 | @end example |
| 2288 | 2288 | ||
| 2289 | Internally, Emacs stores the face's default specification in its | 2289 | Internally, Emacs stores the face's default specification in its |
| 2290 | @code{face-defface-spec} symbol property (@pxref{Property Lists}). | 2290 | @code{face-defface-spec} symbol property (@pxref{Symbol Properties}). |
| 2291 | The @code{saved-face} property stores the face specification saved by | 2291 | The @code{saved-face} property stores the face specification saved by |
| 2292 | the user, using the customization buffer; the @code{customized-face} | 2292 | the user, using the customization buffer; the @code{customized-face} |
| 2293 | property stores the face specification customized for the current | 2293 | property stores the face specification customized for the current |
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 371593f7203..3980f7ac868 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi | |||
| @@ -378,6 +378,7 @@ Lists | |||
| 378 | * Modifying Lists:: Storing new pieces into an existing list. | 378 | * Modifying Lists:: Storing new pieces into an existing list. |
| 379 | * Sets And Lists:: A list can represent a finite mathematical set. | 379 | * Sets And Lists:: A list can represent a finite mathematical set. |
| 380 | * Association Lists:: A list can represent a finite relation or mapping. | 380 | * Association Lists:: A list can represent a finite relation or mapping. |
| 381 | * Property Lists:: A list of paired elements. | ||
| 381 | 382 | ||
| 382 | Modifying Existing List Structure | 383 | Modifying Existing List Structure |
| 383 | 384 | ||
| @@ -386,6 +387,12 @@ Modifying Existing List Structure | |||
| 386 | This can be used to remove or add elements. | 387 | This can be used to remove or add elements. |
| 387 | * Rearrangement:: Reordering the elements in a list; combining lists. | 388 | * Rearrangement:: Reordering the elements in a list; combining lists. |
| 388 | 389 | ||
| 390 | Property Lists | ||
| 391 | |||
| 392 | * Plists and Alists:: Comparison of the advantages of property | ||
| 393 | lists and association lists. | ||
| 394 | * Plist Access:: Accessing property lists stored elsewhere. | ||
| 395 | |||
| 389 | Sequences, Arrays, and Vectors | 396 | Sequences, Arrays, and Vectors |
| 390 | 397 | ||
| 391 | * Sequence Functions:: Functions that accept any kind of sequence. | 398 | * Sequence Functions:: Functions that accept any kind of sequence. |
| @@ -410,15 +417,13 @@ Symbols | |||
| 410 | and property lists. | 417 | and property lists. |
| 411 | * Definitions:: A definition says how a symbol will be used. | 418 | * Definitions:: A definition says how a symbol will be used. |
| 412 | * Creating Symbols:: How symbols are kept unique. | 419 | * Creating Symbols:: How symbols are kept unique. |
| 413 | * Property Lists:: Each symbol has a property list | 420 | * Symbol Properties:: Each symbol has a property list |
| 414 | for recording miscellaneous information. | 421 | for recording miscellaneous information. |
| 415 | 422 | ||
| 416 | Property Lists | 423 | Symbol Properties |
| 417 | 424 | ||
| 418 | * Plists and Alists:: Comparison of the advantages of property | 425 | * Symbol Plists:: Accessing symbol properties. |
| 419 | lists and association lists. | 426 | * Standard Properties:: Standard meanings of symbol properties. |
| 420 | * Symbol Plists:: Functions to access symbols' property lists. | ||
| 421 | * Other Plists:: Accessing property lists stored elsewhere. | ||
| 422 | 427 | ||
| 423 | Evaluation | 428 | Evaluation |
| 424 | 429 | ||
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index d01ecba4bed..d9eddcee669 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi | |||
| @@ -75,8 +75,8 @@ the vector @code{[?\C-x ?l]} represents the key sequence @kbd{C-x l}. | |||
| 75 | For examples of key sequences written in string and vector | 75 | For examples of key sequences written in string and vector |
| 76 | representations, @ref{Init Rebinding,,, emacs, The GNU Emacs Manual}. | 76 | representations, @ref{Init Rebinding,,, emacs, The GNU Emacs Manual}. |
| 77 | 77 | ||
| 78 | @defmac kbd keyseq-text | 78 | @defun kbd keyseq-text |
| 79 | This macro converts the text @var{keyseq-text} (a string constant) | 79 | This function converts the text @var{keyseq-text} (a string constant) |
| 80 | into a key sequence (a string or vector constant). The contents of | 80 | into a key sequence (a string or vector constant). The contents of |
| 81 | @var{keyseq-text} should use the same syntax as in the buffer invoked | 81 | @var{keyseq-text} should use the same syntax as in the buffer invoked |
| 82 | by the @kbd{C-x C-k @key{RET}} (@code{kmacro-edit-macro}) command; in | 82 | by the @kbd{C-x C-k @key{RET}} (@code{kmacro-edit-macro}) command; in |
| @@ -97,7 +97,7 @@ Manual}. | |||
| 97 | 97 | ||
| 98 | This macro is not meant for use with arguments that vary---only | 98 | This macro is not meant for use with arguments that vary---only |
| 99 | with string constants. | 99 | with string constants. |
| 100 | @end defmac | 100 | @end defun |
| 101 | 101 | ||
| 102 | @node Keymap Basics | 102 | @node Keymap Basics |
| 103 | @section Keymap Basics | 103 | @section Keymap Basics |
| @@ -1294,8 +1294,8 @@ numeric codes for the modifier bits don't appear in compiled files. | |||
| 1294 | The functions below signal an error if @var{keymap} is not a keymap, | 1294 | The functions below signal an error if @var{keymap} is not a keymap, |
| 1295 | or if @var{key} is not a string or vector representing a key sequence. | 1295 | or if @var{key} is not a string or vector representing a key sequence. |
| 1296 | You can use event types (symbols) as shorthand for events that are | 1296 | You can use event types (symbols) as shorthand for events that are |
| 1297 | lists. The @code{kbd} macro (@pxref{Key Sequences}) is a convenient | 1297 | lists. The @code{kbd} function (@pxref{Key Sequences}) is a |
| 1298 | way to specify the key sequence. | 1298 | convenient way to specify the key sequence. |
| 1299 | 1299 | ||
| 1300 | @defun define-key keymap key binding | 1300 | @defun define-key keymap key binding |
| 1301 | This function sets the binding for @var{key} in @var{keymap}. (If | 1301 | This function sets the binding for @var{key} in @var{keymap}. (If |
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index 40e8d08f72c..1a3d85b9b35 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi | |||
| @@ -22,6 +22,7 @@ the whole list. | |||
| 22 | * Modifying Lists:: Storing new pieces into an existing list. | 22 | * Modifying Lists:: Storing new pieces into an existing list. |
| 23 | * Sets And Lists:: A list can represent a finite mathematical set. | 23 | * Sets And Lists:: A list can represent a finite mathematical set. |
| 24 | * Association Lists:: A list can represent a finite relation or mapping. | 24 | * Association Lists:: A list can represent a finite relation or mapping. |
| 25 | * Property Lists:: A list of paired elements. | ||
| 25 | @end menu | 26 | @end menu |
| 26 | 27 | ||
| 27 | @node Cons Cells | 28 | @node Cons Cells |
| @@ -1821,3 +1822,142 @@ often modifies the original list structure of @var{alist}. | |||
| 1821 | compares the @sc{cdr} of each @var{alist} association instead of the | 1822 | compares the @sc{cdr} of each @var{alist} association instead of the |
| 1822 | @sc{car}. | 1823 | @sc{car}. |
| 1823 | @end defun | 1824 | @end defun |
| 1825 | |||
| 1826 | @node Property Lists | ||
| 1827 | @section Property Lists | ||
| 1828 | @cindex property list | ||
| 1829 | @cindex plist | ||
| 1830 | |||
| 1831 | A @dfn{property list} (@dfn{plist} for short) is a list of paired | ||
| 1832 | elements. Each of the pairs associates a property name (usually a | ||
| 1833 | symbol) with a property or value. Here is an example of a property | ||
| 1834 | list: | ||
| 1835 | |||
| 1836 | @example | ||
| 1837 | (pine cones numbers (1 2 3) color "blue") | ||
| 1838 | @end example | ||
| 1839 | |||
| 1840 | @noindent | ||
| 1841 | This property list associates @code{pine} with @code{cones}, | ||
| 1842 | @code{numbers} with @code{(1 2 3)}, and @code{color} with | ||
| 1843 | @code{"blue"}. The property names and values can be any Lisp objects, | ||
| 1844 | but the names are usually symbols (as they are in this example). | ||
| 1845 | |||
| 1846 | Property lists are used in several contexts. For instance, the | ||
| 1847 | function @code{put-text-property} takes an argument which is a | ||
| 1848 | property list, specifying text properties and associated values which | ||
| 1849 | are to be applied to text in a string or buffer. @xref{Text | ||
| 1850 | Properties}. | ||
| 1851 | |||
| 1852 | Another prominent use of property lists is for storing symbol | ||
| 1853 | properties. Every symbol possesses a list of properties, used to | ||
| 1854 | record miscellaneous information about the symbol; these properties | ||
| 1855 | are stored in the form of a property list. @xref{Symbol Properties}. | ||
| 1856 | |||
| 1857 | @menu | ||
| 1858 | * Plists and Alists:: Comparison of the advantages of property | ||
| 1859 | lists and association lists. | ||
| 1860 | * Plist Access:: Accessing property lists stored elsewhere. | ||
| 1861 | @end menu | ||
| 1862 | |||
| 1863 | @node Plists and Alists | ||
| 1864 | @subsection Property Lists and Association Lists | ||
| 1865 | @cindex plist vs. alist | ||
| 1866 | @cindex alist vs. plist | ||
| 1867 | |||
| 1868 | @cindex property lists vs association lists | ||
| 1869 | Association lists (@pxref{Association Lists}) are very similar to | ||
| 1870 | property lists. In contrast to association lists, the order of the | ||
| 1871 | pairs in the property list is not significant, since the property | ||
| 1872 | names must be distinct. | ||
| 1873 | |||
| 1874 | Property lists are better than association lists for attaching | ||
| 1875 | information to various Lisp function names or variables. If your | ||
| 1876 | program keeps all such information in one association list, it will | ||
| 1877 | typically need to search that entire list each time it checks for an | ||
| 1878 | association for a particular Lisp function name or variable, which | ||
| 1879 | could be slow. By contrast, if you keep the same information in the | ||
| 1880 | property lists of the function names or variables themselves, each | ||
| 1881 | search will scan only the length of one property list, which is | ||
| 1882 | usually short. This is why the documentation for a variable is | ||
| 1883 | recorded in a property named @code{variable-documentation}. The byte | ||
| 1884 | compiler likewise uses properties to record those functions needing | ||
| 1885 | special treatment. | ||
| 1886 | |||
| 1887 | However, association lists have their own advantages. Depending on | ||
| 1888 | your application, it may be faster to add an association to the front of | ||
| 1889 | an association list than to update a property. All properties for a | ||
| 1890 | symbol are stored in the same property list, so there is a possibility | ||
| 1891 | of a conflict between different uses of a property name. (For this | ||
| 1892 | reason, it is a good idea to choose property names that are probably | ||
| 1893 | unique, such as by beginning the property name with the program's usual | ||
| 1894 | name-prefix for variables and functions.) An association list may be | ||
| 1895 | used like a stack where associations are pushed on the front of the list | ||
| 1896 | and later discarded; this is not possible with a property list. | ||
| 1897 | |||
| 1898 | @node Plist Access | ||
| 1899 | @subsection Property Lists Outside Symbols | ||
| 1900 | |||
| 1901 | The following functions can be used to manipulate property lists. | ||
| 1902 | They all compare property names using @code{eq}. | ||
| 1903 | |||
| 1904 | @defun plist-get plist property | ||
| 1905 | This returns the value of the @var{property} property stored in the | ||
| 1906 | property list @var{plist}. It accepts a malformed @var{plist} | ||
| 1907 | argument. If @var{property} is not found in the @var{plist}, it | ||
| 1908 | returns @code{nil}. For example, | ||
| 1909 | |||
| 1910 | @example | ||
| 1911 | (plist-get '(foo 4) 'foo) | ||
| 1912 | @result{} 4 | ||
| 1913 | (plist-get '(foo 4 bad) 'foo) | ||
| 1914 | @result{} 4 | ||
| 1915 | (plist-get '(foo 4 bad) 'bad) | ||
| 1916 | @result{} nil | ||
| 1917 | (plist-get '(foo 4 bad) 'bar) | ||
| 1918 | @result{} nil | ||
| 1919 | @end example | ||
| 1920 | @end defun | ||
| 1921 | |||
| 1922 | @defun plist-put plist property value | ||
| 1923 | This stores @var{value} as the value of the @var{property} property in | ||
| 1924 | the property list @var{plist}. It may modify @var{plist} destructively, | ||
| 1925 | or it may construct a new list structure without altering the old. The | ||
| 1926 | function returns the modified property list, so you can store that back | ||
| 1927 | in the place where you got @var{plist}. For example, | ||
| 1928 | |||
| 1929 | @example | ||
| 1930 | (setq my-plist '(bar t foo 4)) | ||
| 1931 | @result{} (bar t foo 4) | ||
| 1932 | (setq my-plist (plist-put my-plist 'foo 69)) | ||
| 1933 | @result{} (bar t foo 69) | ||
| 1934 | (setq my-plist (plist-put my-plist 'quux '(a))) | ||
| 1935 | @result{} (bar t foo 69 quux (a)) | ||
| 1936 | @end example | ||
| 1937 | @end defun | ||
| 1938 | |||
| 1939 | You could define @code{put} in terms of @code{plist-put} as follows: | ||
| 1940 | |||
| 1941 | @example | ||
| 1942 | (defun put (symbol prop value) | ||
| 1943 | (setplist symbol | ||
| 1944 | (plist-put (symbol-plist symbol) prop value))) | ||
| 1945 | @end example | ||
| 1946 | |||
| 1947 | @defun lax-plist-get plist property | ||
| 1948 | Like @code{plist-get} except that it compares properties | ||
| 1949 | using @code{equal} instead of @code{eq}. | ||
| 1950 | @end defun | ||
| 1951 | |||
| 1952 | @defun lax-plist-put plist property value | ||
| 1953 | Like @code{plist-put} except that it compares properties | ||
| 1954 | using @code{equal} instead of @code{eq}. | ||
| 1955 | @end defun | ||
| 1956 | |||
| 1957 | @defun plist-member plist property | ||
| 1958 | This returns non-@code{nil} if @var{plist} contains the given | ||
| 1959 | @var{property}. Unlike @code{plist-get}, this allows you to distinguish | ||
| 1960 | between a missing property and a property with the value @code{nil}. | ||
| 1961 | The value is actually the tail of @var{plist} whose @code{car} is | ||
| 1962 | @var{property}. | ||
| 1963 | @end defun | ||
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index e66f61d22d3..8bb1e9e5abf 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi | |||
| @@ -542,10 +542,10 @@ the function @code{char-table-subtype}, described below. | |||
| 542 | @item | 542 | @item |
| 543 | The subtype controls the number of @dfn{extra slots} in the | 543 | The subtype controls the number of @dfn{extra slots} in the |
| 544 | char-table. This number is specified by the subtype's | 544 | char-table. This number is specified by the subtype's |
| 545 | @code{char-table-extra-slots} symbol property, which should be an | 545 | @code{char-table-extra-slots} symbol property (@pxref{Symbol |
| 546 | integer between 0 and 10. If the subtype has no such symbol property, | 546 | Properties}), whose value should be an integer between 0 and 10. If |
| 547 | the char-table has no extra slots. @xref{Property Lists}, for | 547 | the subtype has no such symbol property, the char-table has no extra |
| 548 | information about symbol properties. | 548 | slots. |
| 549 | @end itemize | 549 | @end itemize |
| 550 | 550 | ||
| 551 | @cindex parent of char-table | 551 | @cindex parent of char-table |
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index 326c6cd4ab2..d3e5c1f1574 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi | |||
| @@ -13,8 +13,8 @@ as variables and as function names; see @ref{Variables}, and | |||
| 13 | @ref{Functions}. For the precise read syntax for symbols, see | 13 | @ref{Functions}. For the precise read syntax for symbols, see |
| 14 | @ref{Symbol Type}. | 14 | @ref{Symbol Type}. |
| 15 | 15 | ||
| 16 | You can test whether an arbitrary Lisp object is a symbol | 16 | You can test whether an arbitrary Lisp object is a symbol with |
| 17 | with @code{symbolp}: | 17 | @code{symbolp}: |
| 18 | 18 | ||
| 19 | @defun symbolp object | 19 | @defun symbolp object |
| 20 | This function returns @code{t} if @var{object} is a symbol, @code{nil} | 20 | This function returns @code{t} if @var{object} is a symbol, @code{nil} |
| @@ -26,7 +26,7 @@ otherwise. | |||
| 26 | and property lists. | 26 | and property lists. |
| 27 | * Definitions:: A definition says how a symbol will be used. | 27 | * Definitions:: A definition says how a symbol will be used. |
| 28 | * Creating Symbols:: How symbols are kept unique. | 28 | * Creating Symbols:: How symbols are kept unique. |
| 29 | * Property Lists:: Each symbol has a property list | 29 | * Symbol Properties:: Each symbol has a property list |
| 30 | for recording miscellaneous information. | 30 | for recording miscellaneous information. |
| 31 | @end menu | 31 | @end menu |
| 32 | 32 | ||
| @@ -91,7 +91,7 @@ the contents of a symbol's function cell, use the function | |||
| 91 | 91 | ||
| 92 | The property list cell normally should hold a correctly formatted | 92 | The property list cell normally should hold a correctly formatted |
| 93 | property list. To get a symbol's property list, use the function | 93 | property list. To get a symbol's property list, use the function |
| 94 | @code{symbol-plist}. @xref{Property Lists}. | 94 | @code{symbol-plist}. @xref{Symbol Properties}. |
| 95 | 95 | ||
| 96 | The function cell or the value cell may be @dfn{void}, which means | 96 | The function cell or the value cell may be @dfn{void}, which means |
| 97 | that the cell does not reference any object. (This is not the same | 97 | that the cell does not reference any object. (This is not the same |
| @@ -376,109 +376,34 @@ If @code{unintern} does delete a symbol, it returns @code{t}. Otherwise | |||
| 376 | it returns @code{nil}. | 376 | it returns @code{nil}. |
| 377 | @end defun | 377 | @end defun |
| 378 | 378 | ||
| 379 | @node Property Lists | 379 | @node Symbol Properties |
| 380 | @section Property Lists | 380 | @section Symbol Properties |
| 381 | @cindex property list | 381 | @cindex symbol property |
| 382 | @cindex plist | ||
| 383 | 382 | ||
| 384 | A @dfn{property list} (@dfn{plist} for short) is a list of paired | 383 | A symbol may possess any number of @dfn{symbol properties}, which |
| 385 | elements. Each of the pairs associates a property name (usually a | 384 | can be used to record miscellaneous information about the symbol. For |
| 386 | symbol) with a property or value. | 385 | example, when a symbol has a @code{risky-local-variable} property with |
| 386 | a non-@code{nil} value, that means the variable which the symbol names | ||
| 387 | is a risky file-local variable (@pxref{File Local Variables}). | ||
| 387 | 388 | ||
| 388 | Every symbol has a cell that stores a property list (@pxref{Symbol | 389 | Each symbol's properties and property values are stored in the |
| 389 | Components}). This property list is used to record information about | 390 | symbol's property list cell (@pxref{Symbol Components}), in the form |
| 390 | the symbol, such as its variable documentation and the name of the | 391 | of a property list (@pxref{Property Lists}). |
| 391 | file where it was defined. | ||
| 392 | |||
| 393 | Property lists can also be used in other contexts. For instance, | ||
| 394 | you can assign property lists to character positions in a string or | ||
| 395 | buffer. @xref{Text Properties}. | ||
| 396 | |||
| 397 | The property names and values in a property list can be any Lisp | ||
| 398 | objects, but the names are usually symbols. Property list functions | ||
| 399 | compare the property names using @code{eq}. Here is an example of a | ||
| 400 | property list, found on the symbol @code{progn} when the compiler is | ||
| 401 | loaded: | ||
| 402 | |||
| 403 | @example | ||
| 404 | (lisp-indent-function 0 byte-compile byte-compile-progn) | ||
| 405 | @end example | ||
| 406 | |||
| 407 | @noindent | ||
| 408 | Here @code{lisp-indent-function} and @code{byte-compile} are property | ||
| 409 | names, and the other two elements are the corresponding values. | ||
| 410 | 392 | ||
| 411 | @menu | 393 | @menu |
| 412 | * Plists and Alists:: Comparison of the advantages of property | 394 | * Symbol Plists:: Accessing symbol properties. |
| 413 | lists and association lists. | 395 | * Standard Properties:: Standard meanings of symbol properties. |
| 414 | * Symbol Plists:: Functions to access symbols' property lists. | ||
| 415 | * Other Plists:: Accessing property lists stored elsewhere. | ||
| 416 | @end menu | 396 | @end menu |
| 417 | 397 | ||
| 418 | @node Plists and Alists | ||
| 419 | @subsection Property Lists and Association Lists | ||
| 420 | @cindex plist vs. alist | ||
| 421 | @cindex alist vs. plist | ||
| 422 | |||
| 423 | @cindex property lists vs association lists | ||
| 424 | Association lists (@pxref{Association Lists}) are very similar to | ||
| 425 | property lists. In contrast to association lists, the order of the | ||
| 426 | pairs in the property list is not significant since the property names | ||
| 427 | must be distinct. | ||
| 428 | |||
| 429 | Property lists are better than association lists for attaching | ||
| 430 | information to various Lisp function names or variables. If your | ||
| 431 | program keeps all such information in one association list, it will | ||
| 432 | typically need to search that entire list each time it checks for an | ||
| 433 | association for a particular Lisp function name or variable, which | ||
| 434 | could be slow. By contrast, if you keep the same information in the | ||
| 435 | property lists of the function names or variables themselves, each | ||
| 436 | search will scan only the length of one property list, which is | ||
| 437 | usually short. This is why the documentation for a variable is | ||
| 438 | recorded in a property named @code{variable-documentation}. The byte | ||
| 439 | compiler likewise uses properties to record those functions needing | ||
| 440 | special treatment. | ||
| 441 | |||
| 442 | However, association lists have their own advantages. Depending on | ||
| 443 | your application, it may be faster to add an association to the front of | ||
| 444 | an association list than to update a property. All properties for a | ||
| 445 | symbol are stored in the same property list, so there is a possibility | ||
| 446 | of a conflict between different uses of a property name. (For this | ||
| 447 | reason, it is a good idea to choose property names that are probably | ||
| 448 | unique, such as by beginning the property name with the program's usual | ||
| 449 | name-prefix for variables and functions.) An association list may be | ||
| 450 | used like a stack where associations are pushed on the front of the list | ||
| 451 | and later discarded; this is not possible with a property list. | ||
| 452 | |||
| 453 | @node Symbol Plists | 398 | @node Symbol Plists |
| 454 | @subsection Property List Functions for Symbols | 399 | @subsection Accessing Symbol Properties |
| 455 | |||
| 456 | @defun symbol-plist symbol | ||
| 457 | This function returns the property list of @var{symbol}. | ||
| 458 | @end defun | ||
| 459 | |||
| 460 | @defun setplist symbol plist | ||
| 461 | This function sets @var{symbol}'s property list to @var{plist}. | ||
| 462 | Normally, @var{plist} should be a well-formed property list, but this is | ||
| 463 | not enforced. The return value is @var{plist}. | ||
| 464 | 400 | ||
| 465 | @example | 401 | The following functions can be used to access symbol properties. |
| 466 | (setplist 'foo '(a 1 b (2 3) c nil)) | ||
| 467 | @result{} (a 1 b (2 3) c nil) | ||
| 468 | (symbol-plist 'foo) | ||
| 469 | @result{} (a 1 b (2 3) c nil) | ||
| 470 | @end example | ||
| 471 | |||
| 472 | For symbols in special obarrays, which are not used for ordinary | ||
| 473 | purposes, it may make sense to use the property list cell in a | ||
| 474 | nonstandard fashion; in fact, the abbrev mechanism does so | ||
| 475 | (@pxref{Abbrevs}). | ||
| 476 | @end defun | ||
| 477 | 402 | ||
| 478 | @defun get symbol property | 403 | @defun get symbol property |
| 479 | This function finds the value of the property named @var{property} in | 404 | This function returns the value of the property named @var{property} |
| 480 | @var{symbol}'s property list. If there is no such property, @code{nil} | 405 | in @var{symbol}'s property list. If there is no such property, it |
| 481 | is returned. Thus, there is no distinction between a value of | 406 | returns @code{nil}. Thus, there is no distinction between a value of |
| 482 | @code{nil} and the absence of the property. | 407 | @code{nil} and the absence of the property. |
| 483 | 408 | ||
| 484 | The name @var{property} is compared with the existing property names | 409 | The name @var{property} is compared with the existing property names |
| @@ -487,12 +412,6 @@ using @code{eq}, so any object is a legitimate property. | |||
| 487 | See @code{put} for an example. | 412 | See @code{put} for an example. |
| 488 | @end defun | 413 | @end defun |
| 489 | 414 | ||
| 490 | @defun function-get symbol property | ||
| 491 | This function is identical to @code{get}, except that if @var{symbol} | ||
| 492 | is the name of a function alias, it looks in the property list of the | ||
| 493 | symbol naming the actual function. @xref{Defining Functions}. | ||
| 494 | @end defun | ||
| 495 | |||
| 496 | @defun put symbol property value | 415 | @defun put symbol property value |
| 497 | This function puts @var{value} onto @var{symbol}'s property list under | 416 | This function puts @var{value} onto @var{symbol}'s property list under |
| 498 | the property name @var{property}, replacing any previous property value. | 417 | the property name @var{property}, replacing any previous property value. |
| @@ -510,69 +429,132 @@ The @code{put} function returns @var{value}. | |||
| 510 | @end example | 429 | @end example |
| 511 | @end defun | 430 | @end defun |
| 512 | 431 | ||
| 513 | @node Other Plists | 432 | @defun symbol-plist symbol |
| 514 | @subsection Property Lists Outside Symbols | 433 | This function returns the property list of @var{symbol}. |
| 515 | |||
| 516 | These functions are useful for manipulating property lists | ||
| 517 | not stored in symbols: | ||
| 518 | |||
| 519 | @defun plist-get plist property | ||
| 520 | This returns the value of the @var{property} property stored in the | ||
| 521 | property list @var{plist}. It accepts a malformed @var{plist} | ||
| 522 | argument. If @var{property} is not found in the @var{plist}, it | ||
| 523 | returns @code{nil}. For example, | ||
| 524 | |||
| 525 | @example | ||
| 526 | (plist-get '(foo 4) 'foo) | ||
| 527 | @result{} 4 | ||
| 528 | (plist-get '(foo 4 bad) 'foo) | ||
| 529 | @result{} 4 | ||
| 530 | (plist-get '(foo 4 bad) 'bad) | ||
| 531 | @result{} nil | ||
| 532 | (plist-get '(foo 4 bad) 'bar) | ||
| 533 | @result{} nil | ||
| 534 | @end example | ||
| 535 | @end defun | ||
| 536 | |||
| 537 | @defun plist-put plist property value | ||
| 538 | This stores @var{value} as the value of the @var{property} property in | ||
| 539 | the property list @var{plist}. It may modify @var{plist} destructively, | ||
| 540 | or it may construct a new list structure without altering the old. The | ||
| 541 | function returns the modified property list, so you can store that back | ||
| 542 | in the place where you got @var{plist}. For example, | ||
| 543 | |||
| 544 | @example | ||
| 545 | (setq my-plist '(bar t foo 4)) | ||
| 546 | @result{} (bar t foo 4) | ||
| 547 | (setq my-plist (plist-put my-plist 'foo 69)) | ||
| 548 | @result{} (bar t foo 69) | ||
| 549 | (setq my-plist (plist-put my-plist 'quux '(a))) | ||
| 550 | @result{} (bar t foo 69 quux (a)) | ||
| 551 | @end example | ||
| 552 | @end defun | 434 | @end defun |
| 553 | 435 | ||
| 554 | You could define @code{put} in terms of @code{plist-put} as follows: | 436 | @defun setplist symbol plist |
| 437 | This function sets @var{symbol}'s property list to @var{plist}. | ||
| 438 | Normally, @var{plist} should be a well-formed property list, but this is | ||
| 439 | not enforced. The return value is @var{plist}. | ||
| 555 | 440 | ||
| 556 | @example | 441 | @example |
| 557 | (defun put (symbol prop value) | 442 | (setplist 'foo '(a 1 b (2 3) c nil)) |
| 558 | (setplist symbol | 443 | @result{} (a 1 b (2 3) c nil) |
| 559 | (plist-put (symbol-plist symbol) prop value))) | 444 | (symbol-plist 'foo) |
| 445 | @result{} (a 1 b (2 3) c nil) | ||
| 560 | @end example | 446 | @end example |
| 561 | 447 | ||
| 562 | @defun lax-plist-get plist property | 448 | For symbols in special obarrays, which are not used for ordinary |
| 563 | Like @code{plist-get} except that it compares properties | 449 | purposes, it may make sense to use the property list cell in a |
| 564 | using @code{equal} instead of @code{eq}. | 450 | nonstandard fashion; in fact, the abbrev mechanism does so |
| 451 | (@pxref{Abbrevs}). | ||
| 565 | @end defun | 452 | @end defun |
| 566 | 453 | ||
| 567 | @defun lax-plist-put plist property value | 454 | @defun function-get symbol property |
| 568 | Like @code{plist-put} except that it compares properties | 455 | This function is identical to @code{get}, except that if @var{symbol} |
| 569 | using @code{equal} instead of @code{eq}. | 456 | is the name of a function alias, it looks in the property list of the |
| 457 | symbol naming the actual function. @xref{Defining Functions}. | ||
| 570 | @end defun | 458 | @end defun |
| 571 | 459 | ||
| 572 | @defun plist-member plist property | 460 | @node Standard Properties |
| 573 | This returns non-@code{nil} if @var{plist} contains the given | 461 | @subsection Standard Symbol Properties |
| 574 | @var{property}. Unlike @code{plist-get}, this allows you to distinguish | 462 | |
| 575 | between a missing property and a property with the value @code{nil}. | 463 | Here, we list the symbol properties which are used for special |
| 576 | The value is actually the tail of @var{plist} whose @code{car} is | 464 | purposes in Emacs. In the following table, whenever we say ``the |
| 577 | @var{property}. | 465 | named function'', that means the function whose name is the relevant |
| 578 | @end defun | 466 | symbol; similarly for ``the named variable'' etc. |
| 467 | |||
| 468 | @table @code | ||
| 469 | @item :advertised-binding | ||
| 470 | This property value specifies the preferred key binding, when showing | ||
| 471 | documentation, for the named function. @xref{Keys in Documentation}. | ||
| 472 | |||
| 473 | @item char-table-extra-slots | ||
| 474 | The value, if non-@code{nil}, specifies the number of extra slots in | ||
| 475 | the named char-table type. @xref{Char-Tables}. | ||
| 476 | |||
| 477 | @itemx customized-face | ||
| 478 | @item face-defface-spec | ||
| 479 | @itemx saved-face | ||
| 480 | @itemx theme-face | ||
| 481 | These properties are used to record a face's standard, saved, | ||
| 482 | customized, and themed face specs. Do not set them directly; they are | ||
| 483 | managed by @code{defface} and related functions. @xref{Defining | ||
| 484 | Faces}. | ||
| 485 | |||
| 486 | @itemx customized-value | ||
| 487 | @itemx saved-value | ||
| 488 | @item standard-value | ||
| 489 | @itemx theme-value | ||
| 490 | These properties are used to record a customizable variable's standard | ||
| 491 | value, saved value, customized-but-unsaved value, and themed values. | ||
| 492 | Do not set them directly; they are managed by @code{defcustom} and | ||
| 493 | related functions. @xref{Variable Definitions}. | ||
| 494 | |||
| 495 | @item disabled | ||
| 496 | If the value is non-@code{nil}, the named function is disabled as a | ||
| 497 | command. @xref{Disabling Commands}. | ||
| 498 | |||
| 499 | @item face-documentation | ||
| 500 | The value stores the documentation string of the named face. This is | ||
| 501 | normally set automatically by @code{defface}. @xref{Defining Faces}. | ||
| 502 | |||
| 503 | @item history-length | ||
| 504 | The value, if non-@code{nil}, specifies the maximum minibuffer history | ||
| 505 | length for the named history list variable. @xref{Minibuffer | ||
| 506 | History}. | ||
| 507 | |||
| 508 | @item interactive-form | ||
| 509 | The value is an interactive form for the named function. Normally, | ||
| 510 | you should not set this directly; use the @code{interactive} special | ||
| 511 | form instead. @xref{Interactive Call}. | ||
| 512 | |||
| 513 | @item menu-enable | ||
| 514 | The value is an expression for determining whether the named menu item | ||
| 515 | should be enabled in menus. @xref{Simple Menu Items}. | ||
| 516 | |||
| 517 | @item mode-class | ||
| 518 | If the value is @code{special}, the named major mode is ``special''. | ||
| 519 | @xref{Major Mode Conventions}. | ||
| 520 | |||
| 521 | @item permanent-local | ||
| 522 | If the value is non-@code{nil}, the named variable is a buffer-local | ||
| 523 | variable whose value should not be reset when changing major modes. | ||
| 524 | @xref{Creating Buffer-Local}. | ||
| 525 | |||
| 526 | @item permanent-local-hook | ||
| 527 | If the value is non-@code{nil}, the named function should not be | ||
| 528 | deleted from the local value of a hook variable when changing major | ||
| 529 | modes. @xref{Setting Hooks}. | ||
| 530 | |||
| 531 | @item pure | ||
| 532 | This property is used internally to mark certain named functions for | ||
| 533 | byte compiler optimization. Do not set it. | ||
| 534 | |||
| 535 | @item risky-local-variable | ||
| 536 | If the value is non-@code{nil}, the named variable is considered risky | ||
| 537 | as a file-local variable. @xref{File Local Variables}. | ||
| 538 | |||
| 539 | @item safe-function | ||
| 540 | If the value is non-@code{nil}, the named function is considered | ||
| 541 | generally safe for evaluation. @xref{Function Safety}. | ||
| 542 | |||
| 543 | @item safe-local-eval-function | ||
| 544 | If the value is non-@code{nil}, the named function is safe to call in | ||
| 545 | file-local evaluation forms. @xref{File Local Variables}. | ||
| 546 | |||
| 547 | @item safe-local-variable | ||
| 548 | The value specifies a function for determining safe file-local values | ||
| 549 | for the named variable. @xref{File Local Variables}. | ||
| 550 | |||
| 551 | @item side-effect-free | ||
| 552 | A non-@code{nil} value indicates that the named function is free of | ||
| 553 | side-effects, for determining function safety (@pxref{Function | ||
| 554 | Safety}) as well as for byte compiler optimizations. Do not set it. | ||
| 555 | |||
| 556 | @item variable-documentation | ||
| 557 | If non-@code{nil}, this specifies the named vaariable's documentation | ||
| 558 | string. This is normally set automatically by @code{defvar} and | ||
| 559 | related functions. @xref{Defining Faces}. | ||
| 560 | @end table | ||
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index dfde3c45c04..2168bd5af05 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi | |||
| @@ -1423,7 +1423,6 @@ disappear after doing its job and will not interfere with the | |||
| 1423 | subsequent major mode. @xref{Hooks}. | 1423 | subsequent major mode. @xref{Hooks}. |
| 1424 | @end defvar | 1424 | @end defvar |
| 1425 | 1425 | ||
| 1426 | @c Emacs 19 feature | ||
| 1427 | @cindex permanent local variable | 1426 | @cindex permanent local variable |
| 1428 | A buffer-local variable is @dfn{permanent} if the variable name (a | 1427 | A buffer-local variable is @dfn{permanent} if the variable name (a |
| 1429 | symbol) has a @code{permanent-local} property that is non-@code{nil}. | 1428 | symbol) has a @code{permanent-local} property that is non-@code{nil}. |
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 8a067b5c100..f5e5007c58d 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2012-12-03 Michael Albinus <michael.albinus@gmx.de> | ||
| 2 | |||
| 3 | * tramp.texi (Top, Obtaining Tramp): Replace CVS by Git. | ||
| 4 | (External methods): Fix typo. | ||
| 5 | |||
| 6 | 2012-12-03 Glenn Morris <rgm@gnu.org> | ||
| 7 | |||
| 8 | * rcirc.texi (Notices): Fix typo. | ||
| 9 | |||
| 1 | 2012-11-25 Bill Wohler <wohler@newt.com> | 10 | 2012-11-25 Bill Wohler <wohler@newt.com> |
| 2 | 11 | ||
| 3 | Release MH-E manual version 8.4. | 12 | Release MH-E manual version 8.4. |
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi index 0174c3fa87f..ac97db414a4 100644 --- a/doc/misc/rcirc.texi +++ b/doc/misc/rcirc.texi | |||
| @@ -764,7 +764,7 @@ You can control which notices get omitted via the | |||
| 764 | omit away messages: | 764 | omit away messages: |
| 765 | 765 | ||
| 766 | @example | 766 | @example |
| 767 | (setq rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY)) | 767 | (setq rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY")) |
| 768 | @end example | 768 | @end example |
| 769 | 769 | ||
| 770 | @vindex rcirc-omit-threshold | 770 | @vindex rcirc-omit-threshold |
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index a983f76ffd3..020a6e55833 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | @c This is *so* much nicer :) | 7 | @c This is *so* much nicer :) |
| 8 | @footnotestyle end | 8 | @footnotestyle end |
| 9 | 9 | ||
| 10 | @c In the Tramp CVS, the version number is auto-frobbed from | 10 | @c In the Tramp repository, the version number is auto-frobbed from |
| 11 | @c configure.ac, so you should edit that file and run | 11 | @c configure.ac, so you should edit that file and run |
| 12 | @c "autoconf && ./configure" to change the version number. | 12 | @c "autoconf && ./configure" to change the version number. |
| 13 | 13 | ||
| @@ -106,7 +106,7 @@ If you're using the other Emacs flavor, you should read the | |||
| 106 | @ifhtml | 106 | @ifhtml |
| 107 | The latest release of @value{tramp} is available for | 107 | The latest release of @value{tramp} is available for |
| 108 | @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see | 108 | @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see |
| 109 | @ref{Obtaining Tramp} for more details, including the CVS server | 109 | @ref{Obtaining Tramp} for more details, including the Git server |
| 110 | details. | 110 | details. |
| 111 | 111 | ||
| 112 | @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/, | 112 | @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/, |
| @@ -377,13 +377,13 @@ includes @value{tramp} already, and there is a @value{tramp} package | |||
| 377 | for XEmacs, as well. So maybe it is easier to just use those. But if | 377 | for XEmacs, as well. So maybe it is easier to just use those. But if |
| 378 | you want the bleeding edge, read on@dots{...} | 378 | you want the bleeding edge, read on@dots{...} |
| 379 | 379 | ||
| 380 | For the especially brave, @value{tramp} is available from CVS. The CVS | 380 | For the especially brave, @value{tramp} is available from Git. The Git |
| 381 | version is the latest version of the code and may contain incomplete | 381 | version is the latest version of the code and may contain incomplete |
| 382 | features or new issues. Use these versions at your own risk. | 382 | features or new issues. Use these versions at your own risk. |
| 383 | 383 | ||
| 384 | Instructions for obtaining the latest development version of @value{tramp} | 384 | Instructions for obtaining the latest development version of @value{tramp} |
| 385 | from CVS can be found by going to the Savannah project page at the | 385 | from Git can be found by going to the Savannah project page at the |
| 386 | following URL and then clicking on the CVS link in the navigation bar | 386 | following URL and then clicking on the Git link in the navigation bar |
| 387 | at the top. | 387 | at the top. |
| 388 | 388 | ||
| 389 | @noindent | 389 | @noindent |
| @@ -394,8 +394,14 @@ Or follow the example session below: | |||
| 394 | 394 | ||
| 395 | @example | 395 | @example |
| 396 | ] @strong{cd ~/@value{emacsdir}} | 396 | ] @strong{cd ~/@value{emacsdir}} |
| 397 | ] @strong{export CVS_RSH="ssh"} | 397 | ] @strong{git clone git://git.savannah.gnu.org/tramp.git} |
| 398 | ] @strong{cvs -z3 -d:pserver:anonymous@@cvs.savannah.gnu.org:/sources/tramp co tramp} | 398 | @end example |
| 399 | |||
| 400 | @noindent | ||
| 401 | Tramp developers use instead | ||
| 402 | |||
| 403 | @example | ||
| 404 | ] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git} | ||
| 399 | @end example | 405 | @end example |
| 400 | 406 | ||
| 401 | @noindent | 407 | @noindent |
| @@ -405,12 +411,11 @@ updates from the repository by issuing the command: | |||
| 405 | 411 | ||
| 406 | @example | 412 | @example |
| 407 | ] @strong{cd ~/@value{emacsdir}/tramp} | 413 | ] @strong{cd ~/@value{emacsdir}/tramp} |
| 408 | ] @strong{export CVS_RSH="ssh"} | 414 | ] @strong{git pull} |
| 409 | ] @strong{cvs update -d} | ||
| 410 | @end example | 415 | @end example |
| 411 | 416 | ||
| 412 | @noindent | 417 | @noindent |
| 413 | Once you've got updated files from the CVS repository, you need to run | 418 | Once you've got updated files from the Git repository, you need to run |
| 414 | @command{autoconf} in order to get an up-to-date @file{configure} | 419 | @command{autoconf} in order to get an up-to-date @file{configure} |
| 415 | script: | 420 | script: |
| 416 | 421 | ||
| @@ -980,7 +985,7 @@ This works only for unified filenames, see @ref{Issues}. | |||
| 980 | @cindex method smb | 985 | @cindex method smb |
| 981 | @cindex smb method | 986 | @cindex smb method |
| 982 | 987 | ||
| 983 | This is another not natural @value{tramp} method. It uses the | 988 | This is another not native @value{tramp} method. It uses the |
| 984 | @command{smbclient} command on different Unices in order to connect to | 989 | @command{smbclient} command on different Unices in order to connect to |
| 985 | an SMB server. An SMB server might be a Samba (or CIFS) server on | 990 | an SMB server. An SMB server might be a Samba (or CIFS) server on |
| 986 | another UNIX host or, more interesting, a host running MS Windows. So | 991 | another UNIX host or, more interesting, a host running MS Windows. So |
| @@ -812,9 +812,9 @@ The function `user-variable-p' is now an obsolete alias for | |||
| 812 | 812 | ||
| 813 | +++ | 813 | +++ |
| 814 | ** The return values of `defalias', `defun' and `defmacro' have changed, | 814 | ** The return values of `defalias', `defun' and `defmacro' have changed, |
| 815 | and are now undefined. For backwards compatibility, defun and | 815 | and are now undefined. For backwards compatibility, `defun' and |
| 816 | defmacro currently return the name of the newly defined function/macro | 816 | `defmacro' currently return the name of the newly defined |
| 817 | but this should not be relied upon. | 817 | function/macro, but this should not be relied upon. |
| 818 | 818 | ||
| 819 | --- | 819 | --- |
| 820 | ** `face-spec-set' no longer sets frame-specific attributes when the | 820 | ** `face-spec-set' no longer sets frame-specific attributes when the |
| @@ -1061,6 +1061,12 @@ takes precedence over most other maps for a short while (normally one key). | |||
| 1061 | +++ | 1061 | +++ |
| 1062 | ** New macros `setq-local' and `defvar-local'. | 1062 | ** New macros `setq-local' and `defvar-local'. |
| 1063 | 1063 | ||
| 1064 | ** Changes to special forms and macros | ||
| 1065 | +++ | ||
| 1066 | *** `defun' and `defmacro' are now macros rather than special forms | ||
| 1067 | +++ | ||
| 1068 | *** `kbd' is now a function rather than a macro. | ||
| 1069 | |||
| 1064 | +++ | 1070 | +++ |
| 1065 | ** New fringe bitmap `exclamation-mark'. | 1071 | ** New fringe bitmap `exclamation-mark'. |
| 1066 | 1072 | ||
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1fd8fffa8a8..bb14f1340df 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,31 @@ | |||
| 1 | 2012-12-03 Leo Liu <sdl.web@gmail.com> | ||
| 2 | |||
| 3 | * files.el (dir-locals-read-from-file): Check file non-empty | ||
| 4 | before reading. (Bug#13038) | ||
| 5 | |||
| 6 | 2012-12-03 Glenn Morris <rgm@gnu.org> | ||
| 7 | |||
| 8 | * jka-cmpr-hook.el (jka-compr-get-compression-info): | ||
| 9 | Remove any version extension before checking filename. (Bug#13006) | ||
| 10 | (jka-compr-compression-info-list): Belated :version bump. | ||
| 11 | |||
| 12 | 2012-12-03 Chong Yidong <cyd@gnu.org> | ||
| 13 | |||
| 14 | * simple.el (transient-mark-mode): Doc fix (Bug#11523). | ||
| 15 | |||
| 16 | * buff-menu.el (Buffer-menu-delete-backwards, Buffer-menu-mode) | ||
| 17 | (buffer-menu): Doc fix (Bug#12294). | ||
| 18 | |||
| 19 | 2012-12-03 Roland Winkler <winkler@gnu.org> | ||
| 20 | |||
| 21 | * calendar/diary-lib.el (diary-header-line-format): Use keybinding | ||
| 22 | of diary-show-all-entries in the diary buffer (Bug#12994). | ||
| 23 | |||
| 24 | 2012-12-03 Michael Albinus <michael.albinus@gmx.de> | ||
| 25 | |||
| 26 | * net/tramp-sh.el (tramp-perl-encode): Use "read STDIN" instead of | ||
| 27 | "<STDIN>". This is binary safe. | ||
| 28 | |||
| 1 | 2012-12-03 Jay Belanger <jay.p.belanger@gmail.com> | 29 | 2012-12-03 Jay Belanger <jay.p.belanger@gmail.com> |
| 2 | 30 | ||
| 3 | * calc/calc-forms.el (math-absolute-from-iso-dt) | 31 | * calc/calc-forms.el (math-absolute-from-iso-dt) |
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 01035f8727d..3161973ba32 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el | |||
| @@ -204,31 +204,11 @@ commands.") | |||
| 204 | 204 | ||
| 205 | (define-derived-mode Buffer-menu-mode tabulated-list-mode "Buffer Menu" | 205 | (define-derived-mode Buffer-menu-mode tabulated-list-mode "Buffer Menu" |
| 206 | "Major mode for Buffer Menu buffers. | 206 | "Major mode for Buffer Menu buffers. |
| 207 | The Buffer Menu is invoked by the commands \\[list-buffers], \\[buffer-menu], and | 207 | The Buffer Menu is invoked by the commands \\[list-buffers], |
| 208 | \\[buffer-menu-other-window]. See `buffer-menu' for details." | 208 | \\[buffer-menu], and \\[buffer-menu-other-window]. |
| 209 | (set (make-local-variable 'buffer-stale-function) | 209 | See `buffer-menu' for a description of its contents. |
| 210 | (lambda (&optional _noconfirm) 'fast)) | ||
| 211 | (add-hook 'tabulated-list-revert-hook 'list-buffers--refresh nil t)) | ||
| 212 | |||
| 213 | (defun buffer-menu (&optional arg) | ||
| 214 | "Switch to the Buffer Menu. | ||
| 215 | By default, all buffers are listed except those whose names start | ||
| 216 | with a space (which are for internal use). With prefix argument | ||
| 217 | ARG, show only buffers that are visiting files. | ||
| 218 | |||
| 219 | The first column (denoted \"C\") shows \".\" for the buffer from | ||
| 220 | which you came. It shows \">\" for buffers you mark to be | ||
| 221 | displayed, and \"D\" for those you mark for deletion. | ||
| 222 | |||
| 223 | The \"R\" column has a \"%\" if the buffer is read-only. | ||
| 224 | The \"M\" column has a \"*\" if it is modified, or \"S\" if you | ||
| 225 | have marked it for saving. | ||
| 226 | |||
| 227 | After this come the buffer name, its size in characters, its | ||
| 228 | major mode, and the visited file name (if any). | ||
| 229 | |||
| 230 | 210 | ||
| 231 | In the Buffer Menu, the following commands are defined: | 211 | In Buffer Menu mode, the following commands are defined: |
| 232 | \\<Buffer-menu-mode-map> | 212 | \\<Buffer-menu-mode-map> |
| 233 | \\[quit-window] Remove the Buffer Menu from the display. | 213 | \\[quit-window] Remove the Buffer Menu from the display. |
| 234 | \\[Buffer-menu-this-window] Select current line's buffer in place of the buffer menu. | 214 | \\[Buffer-menu-this-window] Select current line's buffer in place of the buffer menu. |
| @@ -244,7 +224,7 @@ In the Buffer Menu, the following commands are defined: | |||
| 244 | \\[Buffer-menu-1-window] Select that buffer in full-frame window. | 224 | \\[Buffer-menu-1-window] Select that buffer in full-frame window. |
| 245 | \\[Buffer-menu-2-window] Select that buffer in one window, together with the | 225 | \\[Buffer-menu-2-window] Select that buffer in one window, together with the |
| 246 | buffer selected before this one in another window. | 226 | buffer selected before this one in another window. |
| 247 | \\[Buffer-menu-isearch-buffers] Incremental search in the marked buffers. | 227 | \\[Buffer-menu-isearch-buffers] Incremental search in the marked buffers. |
| 248 | \\[Buffer-menu-isearch-buffers-regexp] Isearch for regexp in the marked buffers. | 228 | \\[Buffer-menu-isearch-buffers-regexp] Isearch for regexp in the marked buffers. |
| 249 | \\[Buffer-menu-visit-tags-table] visit-tags-table this buffer. | 229 | \\[Buffer-menu-visit-tags-table] visit-tags-table this buffer. |
| 250 | \\[Buffer-menu-not-modified] Clear modified-flag on that buffer. | 230 | \\[Buffer-menu-not-modified] Clear modified-flag on that buffer. |
| @@ -259,6 +239,29 @@ In the Buffer Menu, the following commands are defined: | |||
| 259 | \\[revert-buffer] Update the list of buffers. | 239 | \\[revert-buffer] Update the list of buffers. |
| 260 | \\[Buffer-menu-toggle-files-only] Toggle whether the menu displays only file buffers. | 240 | \\[Buffer-menu-toggle-files-only] Toggle whether the menu displays only file buffers. |
| 261 | \\[Buffer-menu-bury] Bury the buffer listed on this line." | 241 | \\[Buffer-menu-bury] Bury the buffer listed on this line." |
| 242 | (set (make-local-variable 'buffer-stale-function) | ||
| 243 | (lambda (&optional _noconfirm) 'fast)) | ||
| 244 | (add-hook 'tabulated-list-revert-hook 'list-buffers--refresh nil t)) | ||
| 245 | |||
| 246 | (defun buffer-menu (&optional arg) | ||
| 247 | "Switch to the Buffer Menu. | ||
| 248 | By default, the Buffer Menu lists all buffers except those whose | ||
| 249 | names start with a space (which are for internal use). With | ||
| 250 | prefix argument ARG, show only buffers that are visiting files. | ||
| 251 | |||
| 252 | In the Buffer Menu, the first column (denoted \"C\") shows \".\" | ||
| 253 | for the buffer from which you came, \">\" for buffers you mark to | ||
| 254 | be displayed, and \"D\" for those you mark for deletion. | ||
| 255 | |||
| 256 | The \"R\" column has a \"%\" if the buffer is read-only. | ||
| 257 | The \"M\" column has a \"*\" if it is modified, or \"S\" if you | ||
| 258 | have marked it for saving. | ||
| 259 | |||
| 260 | The remaining columns show the buffer name, the buffer size in | ||
| 261 | characters, its major mode, and the visited file name (if any). | ||
| 262 | |||
| 263 | See `Buffer-menu-mode' for the keybindings available the Buffer | ||
| 264 | Menu." | ||
| 262 | (interactive "P") | 265 | (interactive "P") |
| 263 | (switch-to-buffer (list-buffers-noselect arg)) | 266 | (switch-to-buffer (list-buffers-noselect arg)) |
| 264 | (message | 267 | (message |
| @@ -280,7 +283,7 @@ ARG, show only buffers that are visiting files." | |||
| 280 | (defun list-buffers (&optional arg) | 283 | (defun list-buffers (&optional arg) |
| 281 | "Display a list of existing buffers. | 284 | "Display a list of existing buffers. |
| 282 | The list is displayed in a buffer named \"*Buffer List*\". | 285 | The list is displayed in a buffer named \"*Buffer List*\". |
| 283 | See `buffer-menu' for details about the Buffer Menu buffer. | 286 | See `buffer-menu' for a description of the Buffer Menu. |
| 284 | 287 | ||
| 285 | By default, all buffers are listed except those whose names start | 288 | By default, all buffers are listed except those whose names start |
| 286 | with a space (which are for internal use). With prefix argument | 289 | with a space (which are for internal use). With prefix argument |
| @@ -377,7 +380,9 @@ buffers to delete; a negative ARG means to delete backwards." | |||
| 377 | 380 | ||
| 378 | (defun Buffer-menu-delete-backwards (&optional arg) | 381 | (defun Buffer-menu-delete-backwards (&optional arg) |
| 379 | "Mark the buffer on this Buffer Menu line for deletion, and move up. | 382 | "Mark the buffer on this Buffer Menu line for deletion, and move up. |
| 380 | Prefix ARG means move that many lines." | 383 | A subsequent \\<Buffer-menu-mode-map>`\\[Buffer-menu-execute]' |
| 384 | command will delete the marked buffer. Prefix ARG means move | ||
| 385 | that many lines." | ||
| 381 | (interactive "p") | 386 | (interactive "p") |
| 382 | (Buffer-menu-delete (- (or arg 1)))) | 387 | (Buffer-menu-delete (- (or arg 1)))) |
| 383 | 388 | ||
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el index 27c6f76581c..46a7f703019 100644 --- a/lisp/calendar/diary-lib.el +++ b/lisp/calendar/diary-lib.el | |||
| @@ -444,8 +444,7 @@ The format of the header is specified by `diary-header-line-format'." | |||
| 444 | (defcustom diary-header-line-format | 444 | (defcustom diary-header-line-format |
| 445 | '(:eval (calendar-string-spread | 445 | '(:eval (calendar-string-spread |
| 446 | (list (if diary-selective-display | 446 | (list (if diary-selective-display |
| 447 | "Some text is hidden - press \"s\" in calendar \ | 447 | "Some text is hidden - press \"C-c C-s\" before edit/copy" |
| 448 | before edit/copy" | ||
| 449 | "Diary")) | 448 | "Diary")) |
| 450 | ?\s (window-width))) | 449 | ?\s (window-width))) |
| 451 | "Format of the header line displayed by `diary-simple-display'. | 450 | "Format of the header line displayed by `diary-simple-display'. |
diff --git a/lisp/files.el b/lisp/files.el index 1bb140c0562..c8a75f67820 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -3640,14 +3640,15 @@ is found. Returns the new class name." | |||
| 3640 | (condition-case err | 3640 | (condition-case err |
| 3641 | (progn | 3641 | (progn |
| 3642 | (insert-file-contents file) | 3642 | (insert-file-contents file) |
| 3643 | (let* ((dir-name (file-name-directory file)) | 3643 | (unless (zerop (buffer-size)) |
| 3644 | (class-name (intern dir-name)) | 3644 | (let* ((dir-name (file-name-directory file)) |
| 3645 | (variables (let ((read-circle nil)) | 3645 | (class-name (intern dir-name)) |
| 3646 | (read (current-buffer))))) | 3646 | (variables (let ((read-circle nil)) |
| 3647 | (dir-locals-set-class-variables class-name variables) | 3647 | (read (current-buffer))))) |
| 3648 | (dir-locals-set-directory-class dir-name class-name | 3648 | (dir-locals-set-class-variables class-name variables) |
| 3649 | (nth 5 (file-attributes file))) | 3649 | (dir-locals-set-directory-class dir-name class-name |
| 3650 | class-name)) | 3650 | (nth 5 (file-attributes file))) |
| 3651 | class-name))) | ||
| 3651 | (error (message "Error reading dir-locals: %S" err) nil))))) | 3652 | (error (message "Error reading dir-locals: %S" err) nil))))) |
| 3652 | 3653 | ||
| 3653 | (defcustom enable-remote-dir-locals nil | 3654 | (defcustom enable-remote-dir-locals nil |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index d0dfd100f44..0aef3732ad5 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2012-12-03 Andreas Schwab <schwab@linux-m68k.org> | ||
| 2 | |||
| 3 | * gnus-sum.el (gnus-summary-mode-map): Bind gnus-summary-widget-forward | ||
| 4 | to TAB, not [tab]. | ||
| 5 | (gnus-summary-article-map): Likewise. | ||
| 6 | |||
| 7 | * gnus-sync.el (gnus-sync-newsrc-offsets): Restore definition. | ||
| 8 | (gnus-sync-save): Use correct format for gnus-sync-newsrc-loader. | ||
| 9 | |||
| 1 | 2012-11-19 Katsumi Yamaoka <yamaoka@jpl.org> | 10 | 2012-11-19 Katsumi Yamaoka <yamaoka@jpl.org> |
| 2 | 11 | ||
| 3 | * message.el (message-get-reply-headers): | 12 | * message.el (message-get-reply-headers): |
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index b44b953bec6..1d4f470aea2 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -1911,7 +1911,7 @@ increase the score of each group you read." | |||
| 1911 | "a" gnus-summary-post-news | 1911 | "a" gnus-summary-post-news |
| 1912 | "x" gnus-summary-limit-to-unread | 1912 | "x" gnus-summary-limit-to-unread |
| 1913 | "s" gnus-summary-isearch-article | 1913 | "s" gnus-summary-isearch-article |
| 1914 | [tab] gnus-summary-widget-forward | 1914 | "\t" gnus-summary-widget-forward |
| 1915 | [backtab] gnus-summary-widget-backward | 1915 | [backtab] gnus-summary-widget-backward |
| 1916 | "t" gnus-summary-toggle-header | 1916 | "t" gnus-summary-toggle-header |
| 1917 | "g" gnus-summary-show-article | 1917 | "g" gnus-summary-show-article |
| @@ -2076,7 +2076,7 @@ increase the score of each group you read." | |||
| 2076 | "W" gnus-warp-to-article | 2076 | "W" gnus-warp-to-article |
| 2077 | "g" gnus-summary-show-article | 2077 | "g" gnus-summary-show-article |
| 2078 | "s" gnus-summary-isearch-article | 2078 | "s" gnus-summary-isearch-article |
| 2079 | [tab] gnus-summary-widget-forward | 2079 | "\t" gnus-summary-widget-forward |
| 2080 | [backtab] gnus-summary-widget-backward | 2080 | [backtab] gnus-summary-widget-backward |
| 2081 | "P" gnus-summary-print-article | 2081 | "P" gnus-summary-print-article |
| 2082 | "S" gnus-sticky-article | 2082 | "S" gnus-sticky-article |
diff --git a/lisp/gnus/gnus-sync.el b/lisp/gnus/gnus-sync.el index b5f8379e367..c235892a9d3 100644 --- a/lisp/gnus/gnus-sync.el +++ b/lisp/gnus/gnus-sync.el | |||
| @@ -109,6 +109,12 @@ this setting is harmless until the user chooses a sync backend." | |||
| 109 | :group 'gnus-sync | 109 | :group 'gnus-sync |
| 110 | :type '(repeat regexp)) | 110 | :type '(repeat regexp)) |
| 111 | 111 | ||
| 112 | (defcustom gnus-sync-newsrc-offsets '(2 3) | ||
| 113 | "List of per-group data to be synchronized." | ||
| 114 | :group 'gnus-sync | ||
| 115 | :type '(set (const :tag "Read ranges" 2) | ||
| 116 | (const :tag "Marks" 3))) | ||
| 117 | |||
| 112 | (defcustom gnus-sync-global-vars nil | 118 | (defcustom gnus-sync-global-vars nil |
| 113 | "List of global variables to be synchronized. | 119 | "List of global variables to be synchronized. |
| 114 | You may want to sync `gnus-newsrc-last-checked-date' but pretty | 120 | You may want to sync `gnus-newsrc-last-checked-date' but pretty |
| @@ -743,7 +749,15 @@ With a prefix, FORCE is set and all groups will be saved." | |||
| 743 | ;; entry in gnus-newsrc-alist whose group matches any of the | 749 | ;; entry in gnus-newsrc-alist whose group matches any of the |
| 744 | ;; gnus-sync-newsrc-groups | 750 | ;; gnus-sync-newsrc-groups |
| 745 | ;; TODO: keep the old contents for groups we don't have! | 751 | ;; TODO: keep the old contents for groups we don't have! |
| 746 | (let ((gnus-sync-newsrc-loader (gnus-sync-newsrc-loader-builder))) | 752 | (let ((gnus-sync-newsrc-loader |
| 753 | (loop for entry in (cdr gnus-newsrc-alist) | ||
| 754 | when (gnus-grep-in-list | ||
| 755 | (car entry) ;the group name | ||
| 756 | gnus-sync-newsrc-groups) | ||
| 757 | collect (cons (car entry) | ||
| 758 | (mapcar (lambda (offset) | ||
| 759 | (cons offset (nth offset entry))) | ||
| 760 | gnus-sync-newsrc-offsets))))) | ||
| 747 | (with-temp-file gnus-sync-backend | 761 | (with-temp-file gnus-sync-backend |
| 748 | (progn | 762 | (progn |
| 749 | (let ((coding-system-for-write gnus-ding-file-coding-system) | 763 | (let ((coding-system-for-write gnus-ding-file-coding-system) |
diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el index e4743ada045..75d1bbbad6b 100644 --- a/lisp/jka-cmpr-hook.el +++ b/lisp/jka-cmpr-hook.el | |||
| @@ -109,6 +109,7 @@ Otherwise, it is nil.") | |||
| 109 | "Return information about the compression scheme of FILENAME. | 109 | "Return information about the compression scheme of FILENAME. |
| 110 | The determination as to which compression scheme, if any, to use is | 110 | The determination as to which compression scheme, if any, to use is |
| 111 | based on the filename itself and `jka-compr-compression-info-list'." | 111 | based on the filename itself and `jka-compr-compression-info-list'." |
| 112 | (setq filename (file-name-sans-versions filename)) | ||
| 112 | (catch 'compression-info | 113 | (catch 'compression-info |
| 113 | (let ((case-fold-search nil)) | 114 | (let ((case-fold-search nil)) |
| 114 | (dolist (x jka-compr-compression-info-list) | 115 | (dolist (x jka-compr-compression-info-list) |
| @@ -191,19 +192,6 @@ options through Custom does this automatically." | |||
| 191 | 192 | ||
| 192 | ;; I have this defined so that .Z files are assumed to be in unix | 193 | ;; I have this defined so that .Z files are assumed to be in unix |
| 193 | ;; compress format; and .gz files, in gzip format, and .bz2 files in bzip fmt. | 194 | ;; compress format; and .gz files, in gzip format, and .bz2 files in bzip fmt. |
| 194 | |||
| 195 | ;; FIXME? It seems ugly that one has to add "\\(~\\|\\.~[0-9]+~\\)?" to | ||
| 196 | ;; all the regexps here, in order to match backup files etc. | ||
| 197 | ;; It's trivial to modify jka-compr-get-compression-info to match | ||
| 198 | ;; regexps against file-name-sans-versions, but this regexp is also | ||
| 199 | ;; used to build a file-name-handler-alist entry. | ||
| 200 | ;; find-file-name-handler does not use file-name-sans-versions. | ||
| 201 | ;; Perhaps it should, | ||
| 202 | ;; http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg00812.html, | ||
| 203 | ;; but it's used all over the place and there are probably other ramifications. | ||
| 204 | ;; One could modify jka-compr-build-file-regexp to add the backup regexp, | ||
| 205 | ;; but jka-compr-compression-info-list is a defcustom to which | ||
| 206 | ;; anything could be added, so it's easiest to leave things as they are. | ||
| 207 | (defcustom jka-compr-compression-info-list | 195 | (defcustom jka-compr-compression-info-list |
| 208 | ;;[regexp | 196 | ;;[regexp |
| 209 | ;; compr-message compr-prog compr-args | 197 | ;; compr-message compr-prog compr-args |
| @@ -310,6 +298,7 @@ variables. Setting this through Custom does that automatically." | |||
| 310 | (boolean :tag "Strip Extension") | 298 | (boolean :tag "Strip Extension") |
| 311 | (string :tag "Magic Bytes"))) | 299 | (string :tag "Magic Bytes"))) |
| 312 | :set 'jka-compr-set | 300 | :set 'jka-compr-set |
| 301 | :version "24.1" ; removed version extension piece | ||
| 313 | :group 'jka-compr) | 302 | :group 'jka-compr) |
| 314 | 303 | ||
| 315 | (defcustom jka-compr-mode-alist-additions | 304 | (defcustom jka-compr-mode-alist-additions |
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 07da0b3dc16..340b7ad353d 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el | |||
| @@ -813,14 +813,11 @@ my %%trans = do { | |||
| 813 | map {(substr(unpack(q(B8), chr $i++), 2, 6), $_)} | 813 | map {(substr(unpack(q(B8), chr $i++), 2, 6), $_)} |
| 814 | split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/); | 814 | split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/); |
| 815 | }; | 815 | }; |
| 816 | 816 | my $data; | |
| 817 | binmode(\\*STDIN); | ||
| 818 | 817 | ||
| 819 | # We read in chunks of 54 bytes, to generate output lines | 818 | # We read in chunks of 54 bytes, to generate output lines |
| 820 | # of 72 chars (plus end of line) | 819 | # of 72 chars (plus end of line) |
| 821 | $/ = \\54; | 820 | while (read STDIN, $data, 54) { |
| 822 | |||
| 823 | while (my $data = <STDIN>) { | ||
| 824 | my $pad = q(); | 821 | my $pad = q(); |
| 825 | 822 | ||
| 826 | # Only for the last chunk, and only if did not fill the last three-byte packet | 823 | # Only for the last chunk, and only if did not fill the last three-byte packet |
diff --git a/lisp/simple.el b/lisp/simple.el index ecd02545b41..c86f367c8a8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -4333,14 +4333,14 @@ else--for example, incremental search, \\[beginning-of-buffer], and \\[end-of-bu | |||
| 4333 | You can also deactivate the mark by typing \\[keyboard-quit] or | 4333 | You can also deactivate the mark by typing \\[keyboard-quit] or |
| 4334 | \\[keyboard-escape-quit]. | 4334 | \\[keyboard-escape-quit]. |
| 4335 | 4335 | ||
| 4336 | Many commands change their behavior when Transient Mark mode is in effect | 4336 | Many commands change their behavior when Transient Mark mode is |
| 4337 | and the mark is active, by acting on the region instead of their usual | 4337 | in effect and the mark is active, by acting on the region instead |
| 4338 | default part of the buffer's text. Examples of such commands include | 4338 | of their usual default part of the buffer's text. Examples of |
| 4339 | \\[comment-dwim], \\[flush-lines], \\[keep-lines], \ | 4339 | such commands include \\[comment-dwim], \\[flush-lines], \\[keep-lines], |
| 4340 | \\[query-replace], \\[query-replace-regexp], \\[ispell], and \\[undo]. | 4340 | \\[query-replace], \\[query-replace-regexp], \\[ispell], and \\[undo]. |
| 4341 | Invoke \\[apropos-documentation] and type \"transient\" or | 4341 | To see the documentation of commands which are sensitive to the |
| 4342 | \"mark.*active\" at the prompt, to see the documentation of | 4342 | Transient Mark mode, invoke \\[apropos-documentation] and type \"transient\" |
| 4343 | commands which are sensitive to the Transient Mark mode." | 4343 | or \"mark.*active\" at the prompt." |
| 4344 | :global t | 4344 | :global t |
| 4345 | ;; It's defined in C/cus-start, this stops the d-m-m macro defining it again. | 4345 | ;; It's defined in C/cus-start, this stops the d-m-m macro defining it again. |
| 4346 | :variable transient-mark-mode) | 4346 | :variable transient-mark-mode) |
diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 753931ae097..1fdd9316847 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2012-12-03 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * sed1v2.inp: Dump emacs.exe and copy to b-emacs.exe before | ||
| 4 | generating leim-list.el. | ||
| 5 | |||
| 1 | 2012-11-24 Ken Brown <kbrown@cornell.edu> | 6 | 2012-11-24 Ken Brown <kbrown@cornell.edu> |
| 2 | 7 | ||
| 3 | * sed2v2.inp (HAVE_MOUSE): Remove. | 8 | * sed2v2.inp (HAVE_MOUSE): Remove. |
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp index 84f24bf2c1a..0ee7510bec1 100644 --- a/msdos/sed1v2.inp +++ b/msdos/sed1v2.inp | |||
| @@ -157,6 +157,12 @@ s/^ [^ ]*move-if-change / update / | |||
| 157 | /^ echo[ ][ ]*timestamp/s/echo /djecho / | 157 | /^ echo[ ][ ]*timestamp/s/echo /djecho / |
| 158 | /^ .*djecho timestamp/a\ | 158 | /^ .*djecho timestamp/a\ |
| 159 | @rm -f gl-tmp | 159 | @rm -f gl-tmp |
| 160 | /^ cd \$(leimdir) && \$(MAKE)/i\ | ||
| 161 | $(RUN_TEMACS) -batch -l loadup dump\ | ||
| 162 | stubify emacs\ | ||
| 163 | stubedit emacs.exe minstack=2048k\ | ||
| 164 | rm -f b-emacs$(EXEEXT)\ | ||
| 165 | cp emacs$(EXEEXT) b-emacs$(EXEEXT) | ||
| 160 | /^ cd \$(leimdir) && \$(MAKE)/c\ | 166 | /^ cd \$(leimdir) && \$(MAKE)/c\ |
| 161 | $(MAKE) $(MFLAGS) -C $(leimdir) leim-list.el EMACS=$(bootstrap_exe) | 167 | $(MAKE) $(MFLAGS) -C $(leimdir) leim-list.el EMACS=$(bootstrap_exe) |
| 162 | /^ cd \$(lib) && \$(MAKE)/c\ | 168 | /^ cd \$(lib) && \$(MAKE)/c\ |
diff --git a/src/ChangeLog b/src/ChangeLog index d5794b513e6..0808dad2c93 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,25 @@ | |||
| 1 | 2012-12-03 Chong Yidong <cyd@gnu.org> | ||
| 2 | |||
| 3 | * fileio.c (Vauto_save_list_file_name): Doc fix. | ||
| 4 | |||
| 5 | 2012-12-03 Fabrice Popineau <fabrice.popineau@gmail.com> | ||
| 6 | |||
| 7 | * w32fns.c: Remove prototype of atof. | ||
| 8 | (syspage_mask): Declared DWORD_PTR, for compatibility with 64-bit | ||
| 9 | builds. | ||
| 10 | (file_dialog_callback): Declared UINT_PTR. | ||
| 11 | |||
| 12 | * w32common.h (syspage_mask): Declare DWORD_PTR, for compatibility | ||
| 13 | with 64-bit builds. | ||
| 14 | |||
| 15 | * w32.c (FILE_DEVICE_FILE_SYSTEM, METHOD_BUFFERED) | ||
| 16 | (FILE_ANY_ACCESS, CTL_CODE) [_MSC_VER]: Define only if not already | ||
| 17 | defined. | ||
| 18 | |||
| 19 | 2012-12-03 Glenn Morris <rgm@gnu.org> | ||
| 20 | |||
| 21 | * data.c (Fboundp, Fsymbol_value): Doc fix re lexical-binding. | ||
| 22 | |||
| 1 | 2012-12-02 Paul Eggert <eggert@cs.ucla.edu> | 23 | 2012-12-02 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 24 | ||
| 3 | Fix xpalloc confusion after memory is exhausted. | 25 | Fix xpalloc confusion after memory is exhausted. |
diff --git a/src/data.c b/src/data.c index 5fc6afaaa03..a72fa3e2b5f 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -506,7 +506,9 @@ DEFUN ("setcdr", Fsetcdr, Ssetcdr, 2, 2, 0, | |||
| 506 | /* Extract and set components of symbols. */ | 506 | /* Extract and set components of symbols. */ |
| 507 | 507 | ||
| 508 | DEFUN ("boundp", Fboundp, Sboundp, 1, 1, 0, | 508 | DEFUN ("boundp", Fboundp, Sboundp, 1, 1, 0, |
| 509 | doc: /* Return t if SYMBOL's value is not void. */) | 509 | doc: /* Return t if SYMBOL's value is not void. |
| 510 | Note that if `lexical-binding' is in effect, this refers to the | ||
| 511 | global value outside of any lexical scope. */) | ||
| 510 | (register Lisp_Object symbol) | 512 | (register Lisp_Object symbol) |
| 511 | { | 513 | { |
| 512 | Lisp_Object valcontents; | 514 | Lisp_Object valcontents; |
| @@ -1047,7 +1049,9 @@ find_symbol_value (Lisp_Object symbol) | |||
| 1047 | } | 1049 | } |
| 1048 | 1050 | ||
| 1049 | DEFUN ("symbol-value", Fsymbol_value, Ssymbol_value, 1, 1, 0, | 1051 | DEFUN ("symbol-value", Fsymbol_value, Ssymbol_value, 1, 1, 0, |
| 1050 | doc: /* Return SYMBOL's value. Error if that is void. */) | 1052 | doc: /* Return SYMBOL's value. Error if that is void. |
| 1053 | Note that if `lexical-binding' is in effect, this returns the | ||
| 1054 | global value outside of any lexical scope. */) | ||
| 1051 | (Lisp_Object symbol) | 1055 | (Lisp_Object symbol) |
| 1052 | { | 1056 | { |
| 1053 | Lisp_Object val; | 1057 | Lisp_Object val; |
diff --git a/src/fileio.c b/src/fileio.c index 48dbf20b88f..9edd88ca64f 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -5771,7 +5771,7 @@ This applies only to the operation `inhibit-file-name-operation'. */); | |||
| 5771 | DEFVAR_LISP ("auto-save-list-file-name", Vauto_save_list_file_name, | 5771 | DEFVAR_LISP ("auto-save-list-file-name", Vauto_save_list_file_name, |
| 5772 | doc: /* File name in which we write a list of all auto save file names. | 5772 | doc: /* File name in which we write a list of all auto save file names. |
| 5773 | This variable is initialized automatically from `auto-save-list-file-prefix' | 5773 | This variable is initialized automatically from `auto-save-list-file-prefix' |
| 5774 | shortly after Emacs reads your `.emacs' file, if you have not yet given it | 5774 | shortly after Emacs reads your init file, if you have not yet given it |
| 5775 | a non-nil value. */); | 5775 | a non-nil value. */); |
| 5776 | Vauto_save_list_file_name = Qnil; | 5776 | Vauto_save_list_file_name = Qnil; |
| 5777 | 5777 | ||
| @@ -150,10 +150,18 @@ typedef struct _REPARSE_DATA_BUFFER { | |||
| 150 | } DUMMYUNIONNAME; | 150 | } DUMMYUNIONNAME; |
| 151 | } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; | 151 | } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; |
| 152 | 152 | ||
| 153 | #ifndef FILE_DEVICE_FILE_SYSTEM | ||
| 153 | #define FILE_DEVICE_FILE_SYSTEM 9 | 154 | #define FILE_DEVICE_FILE_SYSTEM 9 |
| 155 | #endif | ||
| 156 | #ifndef METHOD_BUFFERED | ||
| 154 | #define METHOD_BUFFERED 0 | 157 | #define METHOD_BUFFERED 0 |
| 158 | #endif | ||
| 159 | #ifndef FILE_ANY_ACCESS | ||
| 155 | #define FILE_ANY_ACCESS 0x00000000 | 160 | #define FILE_ANY_ACCESS 0x00000000 |
| 161 | #endif | ||
| 162 | #ifndef CTL_CODE | ||
| 156 | #define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) | 163 | #define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) |
| 164 | #endif | ||
| 157 | #define FSCTL_GET_REPARSE_POINT \ | 165 | #define FSCTL_GET_REPARSE_POINT \ |
| 158 | CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) | 166 | CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) |
| 159 | #endif | 167 | #endif |
diff --git a/src/w32common.h b/src/w32common.h index 50724e5553c..5e9b61824ae 100644 --- a/src/w32common.h +++ b/src/w32common.h | |||
| @@ -34,7 +34,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |||
| 34 | 34 | ||
| 35 | extern SYSTEM_INFO sysinfo_cache; | 35 | extern SYSTEM_INFO sysinfo_cache; |
| 36 | extern OSVERSIONINFO osinfo_cache; | 36 | extern OSVERSIONINFO osinfo_cache; |
| 37 | extern unsigned long syspage_mask; | 37 | extern DWORD_PTR syspage_mask; |
| 38 | 38 | ||
| 39 | extern int w32_major_version; | 39 | extern int w32_major_version; |
| 40 | extern int w32_minor_version; | 40 | extern int w32_minor_version; |
diff --git a/src/w32fns.c b/src/w32fns.c index 90f5b1695ea..044c377f496 100644 --- a/src/w32fns.c +++ b/src/w32fns.c | |||
| @@ -82,7 +82,6 @@ void syms_of_w32fns (void); | |||
| 82 | void globals_of_w32fns (void); | 82 | void globals_of_w32fns (void); |
| 83 | 83 | ||
| 84 | extern void free_frame_menubar (struct frame *); | 84 | extern void free_frame_menubar (struct frame *); |
| 85 | extern double atof (const char *); | ||
| 86 | extern int w32_console_toggle_lock_key (int, Lisp_Object); | 85 | extern int w32_console_toggle_lock_key (int, Lisp_Object); |
| 87 | extern void w32_menu_display_help (HWND, HMENU, UINT, UINT); | 86 | extern void w32_menu_display_help (HWND, HMENU, UINT, UINT); |
| 88 | extern void w32_free_menu_strings (HWND); | 87 | extern void w32_free_menu_strings (HWND); |
| @@ -223,7 +222,7 @@ SYSTEM_INFO sysinfo_cache; | |||
| 223 | /* This gives us version, build, and platform identification. */ | 222 | /* This gives us version, build, and platform identification. */ |
| 224 | OSVERSIONINFO osinfo_cache; | 223 | OSVERSIONINFO osinfo_cache; |
| 225 | 224 | ||
| 226 | unsigned long syspage_mask = 0; | 225 | DWORD_PTR syspage_mask = 0; |
| 227 | 226 | ||
| 228 | /* The major and minor versions of NT. */ | 227 | /* The major and minor versions of NT. */ |
| 229 | int w32_major_version; | 228 | int w32_major_version; |
| @@ -6035,7 +6034,7 @@ typedef char guichar_t; | |||
| 6035 | read-only when "Directories" is selected in the filter. This | 6034 | read-only when "Directories" is selected in the filter. This |
| 6036 | allows us to work around the fact that the standard Open File | 6035 | allows us to work around the fact that the standard Open File |
| 6037 | dialog does not support directories. */ | 6036 | dialog does not support directories. */ |
| 6038 | static UINT CALLBACK | 6037 | static UINT_PTR CALLBACK |
| 6039 | file_dialog_callback (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) | 6038 | file_dialog_callback (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) |
| 6040 | { | 6039 | { |
| 6041 | if (msg == WM_NOTIFY) | 6040 | if (msg == WM_NOTIFY) |