diff options
| author | Kenichi Handa | 2014-01-13 08:26:08 +0900 |
|---|---|---|
| committer | Kenichi Handa | 2014-01-13 08:26:08 +0900 |
| commit | 1a0778b078b9ffaa68e1ae0d4b26de147872b421 (patch) | |
| tree | 993d3a684b6c08a7cdd98fd8827ddd058931ebc9 | |
| parent | 67671fb1dcbfd46ddee7e753d6f545d25821d445 (diff) | |
| parent | b30dee657df010645703150248a33f3e22a002d2 (diff) | |
| download | emacs-1a0778b078b9ffaa68e1ae0d4b26de147872b421.tar.gz emacs-1a0778b078b9ffaa68e1ae0d4b26de147872b421.zip | |
merge trunk
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | README | 5 | ||||
| -rw-r--r-- | doc/man/ChangeLog | 4 | ||||
| -rw-r--r-- | doc/man/emacs.1 | 3 | ||||
| -rw-r--r-- | doc/misc/ChangeLog | 22 | ||||
| -rw-r--r-- | doc/misc/efaq.texi | 18 | ||||
| -rw-r--r-- | doc/misc/eieio.texi | 41 | ||||
| -rw-r--r-- | doc/misc/eww.texi | 8 | ||||
| -rw-r--r-- | doc/misc/tramp.texi | 247 | ||||
| -rw-r--r-- | etc/COOKIES | 157 | ||||
| -rw-r--r-- | etc/ChangeLog | 15 | ||||
| -rw-r--r-- | etc/INTERVIEW | 442 | ||||
| -rw-r--r-- | etc/MAILINGLISTS | 261 | ||||
| -rw-r--r-- | etc/MOTIVATION | 179 | ||||
| -rw-r--r-- | etc/NEWS | 15 | ||||
| -rw-r--r-- | etc/SERVICE | 11 | ||||
| -rw-r--r-- | etc/copying.paper | 819 | ||||
| -rw-r--r-- | lisp/ChangeLog | 42 | ||||
| -rw-r--r-- | lisp/dired-x.el | 2 | ||||
| -rw-r--r-- | lisp/dired.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/eldoc.el | 54 | ||||
| -rw-r--r-- | lisp/emacs-lisp/generic.el | 4 | ||||
| -rw-r--r-- | lisp/mouse-drag.el | 2 | ||||
| -rw-r--r-- | lisp/net/eww.el | 4 | ||||
| -rw-r--r-- | lisp/org/org-list.el | 2 | ||||
| -rw-r--r-- | lisp/org/ox.el | 2 | ||||
| -rw-r--r-- | lisp/play/bubbles.el | 40 | ||||
| -rw-r--r-- | lisp/progmodes/octave.el | 8 | ||||
| -rw-r--r-- | lisp/progmodes/sh-script.el | 2 | ||||
| -rw-r--r-- | lisp/simple.el | 1 | ||||
| -rw-r--r-- | lisp/version.el | 80 | ||||
| -rw-r--r-- | nt/ChangeLog | 5 | ||||
| -rw-r--r-- | nt/inc/sys/stat.h | 7 |
33 files changed, 363 insertions, 2147 deletions
| @@ -1,8 +1,6 @@ | |||
| 1 | 2014-01-11 Eric S. Raymond <esr@thyrsus.com> | 1 | 2014-01-12 Glenn Morris <rgm@gnu.org> |
| 2 | 2 | ||
| 3 | * celibacy.1, sex.6, condom.1, echo.msg: Deleted at RMS's | 3 | * README: Replace reference to etc/MAILINGLISTS. |
| 4 | suggestion. Not lost to posterity as they are part of the | ||
| 5 | widely distributed funny-manpages collection. | ||
| 6 | 4 | ||
| 7 | 2014-01-11 Fabrice Popineau <fabrice.popineau@gmail.com> | 5 | 2014-01-11 Fabrice Popineau <fabrice.popineau@gmail.com> |
| 8 | 6 | ||
| @@ -24,8 +24,9 @@ list bug-gnu-emacs@gnu.org. If possible, use M-x report-emacs-bug. | |||
| 24 | See the "Bugs" section of the Emacs manual for more information on how | 24 | See the "Bugs" section of the Emacs manual for more information on how |
| 25 | to report bugs. (The file `BUGS' in this directory explains how you | 25 | to report bugs. (The file `BUGS' in this directory explains how you |
| 26 | can find and read that section using the Info files that come with | 26 | can find and read that section using the Info files that come with |
| 27 | Emacs.) See `etc/MAILINGLISTS' for more information on mailing lists | 27 | Emacs.) For a list of mailing lists related to Emacs, see |
| 28 | relating to GNU packages. | 28 | <http://savannah.gnu.org/mail/?group=emacs>. For the complete |
| 29 | list of GNU mailing lists, see <http://lists.gnu.org/>. | ||
| 29 | 30 | ||
| 30 | The `etc' subdirectory contains several other files, named in capital | 31 | The `etc' subdirectory contains several other files, named in capital |
| 31 | letters, which you might consider looking at when installing GNU | 32 | letters, which you might consider looking at when installing GNU |
diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog index 37f765db00f..34ecda837ef 100644 --- a/doc/man/ChangeLog +++ b/doc/man/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2014-01-12 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * emacs.1: Replace reference to etc/MAILINGLISTS. | ||
| 4 | |||
| 1 | 2014-01-09 Glenn Morris <rgm@gnu.org> | 5 | 2014-01-09 Glenn Morris <rgm@gnu.org> |
| 2 | 6 | ||
| 3 | * emacs.1: Refer to online service directory rather than etc/SERVICE. | 7 | * emacs.1: Refer to online service directory rather than etc/SERVICE. |
diff --git a/doc/man/emacs.1 b/doc/man/emacs.1 index bd568a2e9da..04475d35da7 100644 --- a/doc/man/emacs.1 +++ b/doc/man/emacs.1 | |||
| @@ -598,8 +598,7 @@ For personal assistance, consult the service directory at | |||
| 598 | <http://www.fsf.org/resources/service/> for a list of people who offer it. | 598 | <http://www.fsf.org/resources/service/> for a list of people who offer it. |
| 599 | 599 | ||
| 600 | Please do not send anything but bug reports to this mailing list. | 600 | Please do not send anything but bug reports to this mailing list. |
| 601 | For more information about Emacs mailing lists, see the | 601 | For other Emacs lists, see <http://savannah.gnu.org/mail/?group=emacs>. |
| 602 | file /usr/local/share/emacs/$VERSION/etc/MAILINGLISTS. | ||
| 603 | . | 602 | . |
| 604 | . | 603 | . |
| 605 | .SH UNRESTRICTIONS | 604 | .SH UNRESTRICTIONS |
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 722d11c70f2..2718c59cf25 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog | |||
| @@ -1,3 +1,25 @@ | |||
| 1 | 2014-01-12 Michael Albinus <michael.albinus@gmx.de> | ||
| 2 | |||
| 3 | * tramp.texi (all): Doc fix according to GNU Coding Standards. | ||
| 4 | Use "file name" instead of "filename" or "path". Use "host" | ||
| 5 | instead of "machine". | ||
| 6 | |||
| 7 | 2014-01-12 David Engster <deng@randomsample.de> | ||
| 8 | |||
| 9 | * eieio.texi (Introduction): `class-of' is obsolete. | ||
| 10 | (Predicates, Basic Methods): Adapt function names to namespace | ||
| 11 | cleanup. | ||
| 12 | |||
| 13 | 2014-01-12 Xue Fuqiao <xfq.free@gmail.com> | ||
| 14 | |||
| 15 | * eww.texi (Basics): Use "directory" instead of "path" (Bug#16419). | ||
| 16 | |||
| 17 | 2014-01-12 Glenn Morris <rgm@gnu.org> | ||
| 18 | |||
| 19 | * efaq.texi (Guidelines for newsgroup postings) | ||
| 20 | (Informational files for Emacs): | ||
| 21 | Remove references to etc/MAILINGLISTS, etc/INTERVIEW. | ||
| 22 | |||
| 1 | 2014-01-10 Stefan Monnier <monnier@iro.umontreal.ca> | 23 | 2014-01-10 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 24 | ||
| 3 | * cl.texi (Function Bindings): Fix incorrect description of cl-let. | 25 | * cl.texi (Function Bindings): Fix incorrect description of cl-let. |
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index aaca5d6f0c1..c54423e887e 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi | |||
| @@ -392,12 +392,9 @@ recipients the same freedom that you enjoyed. | |||
| 392 | @cindex Posting messages to newsgroups | 392 | @cindex Posting messages to newsgroups |
| 393 | 393 | ||
| 394 | @cindex GNU mailing lists | 394 | @cindex GNU mailing lists |
| 395 | The file @file{etc/MAILINGLISTS} describes the purpose of each GNU | 395 | The Emacs mailing lists are described at |
| 396 | mailing list (@pxref{Informational files for Emacs}). For those lists | 396 | @uref{http://savannah.gnu.org/mail/?group=emacs, the Emacs Savannah |
| 397 | which are gatewayed with newsgroups, it lists both the newsgroup name | 397 | page}. Some of them are gatewayed to newsgroups. |
| 398 | and the mailing list address. The Emacs mailing lists are also | ||
| 399 | described at @uref{http://savannah.gnu.org/mail/?group=emacs, the Emacs | ||
| 400 | Savannah page}. | ||
| 401 | 398 | ||
| 402 | The newsgroup @uref{news:comp.emacs} is for discussion of Emacs programs | 399 | The newsgroup @uref{news:comp.emacs} is for discussion of Emacs programs |
| 403 | in general. The newsgroup @uref{news:gnu.emacs.help} is specifically | 400 | in general. The newsgroup @uref{news:gnu.emacs.help} is specifically |
| @@ -865,9 +862,7 @@ You can get Tkinfo at | |||
| 865 | @cindex @file{COPYING}, description of file | 862 | @cindex @file{COPYING}, description of file |
| 866 | @cindex @file{DISTRIB}, description of file | 863 | @cindex @file{DISTRIB}, description of file |
| 867 | @cindex @file{GNU}, description of file | 864 | @cindex @file{GNU}, description of file |
| 868 | @cindex @file{INTERVIEW}, description of file | ||
| 869 | @cindex @file{MACHINES}, description of file | 865 | @cindex @file{MACHINES}, description of file |
| 870 | @cindex @file{MAILINGLISTS}, description of file | ||
| 871 | @cindex @file{NEWS}, description of file | 866 | @cindex @file{NEWS}, description of file |
| 872 | 867 | ||
| 873 | This isn't a frequently asked question, but it should be! A variety of | 868 | This isn't a frequently asked question, but it should be! A variety of |
| @@ -891,16 +886,9 @@ Emacs Availability Information | |||
| 891 | @item GNU | 886 | @item GNU |
| 892 | The GNU Manifesto | 887 | The GNU Manifesto |
| 893 | 888 | ||
| 894 | @item INTERVIEW | ||
| 895 | Richard Stallman discusses his public-domain UNIX-compatible software | ||
| 896 | system with BYTE editors | ||
| 897 | |||
| 898 | @item MACHINES | 889 | @item MACHINES |
| 899 | Status of Emacs on Various Machines and Systems | 890 | Status of Emacs on Various Machines and Systems |
| 900 | 891 | ||
| 901 | @item MAILINGLISTS | ||
| 902 | GNU Project Electronic Mailing Lists | ||
| 903 | |||
| 904 | @item NEWS | 892 | @item NEWS |
| 905 | Emacs news, a history of recent user-visible changes | 893 | Emacs news, a history of recent user-visible changes |
| 906 | 894 | ||
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 36c9eee9caf..427c10c160e 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi | |||
| @@ -223,10 +223,9 @@ first argument, and this one must be an @eieio{} type. | |||
| 223 | @item Support for metaclasses | 223 | @item Support for metaclasses |
| 224 | There is just one default metaclass, @code{eieio-default-superclass}, | 224 | There is just one default metaclass, @code{eieio-default-superclass}, |
| 225 | and you cannot define your own. The @code{:metaclass} tag in | 225 | and you cannot define your own. The @code{:metaclass} tag in |
| 226 | @code{defclass} is ignored. Also, functions like `class-of' and | 226 | @code{defclass} is ignored. Also, functions like `find-class', which |
| 227 | `find-class', which should return instances of the metaclass, behave | 227 | should return instances of the metaclass, behave differently in |
| 228 | differently in @eieio{} in that they return symbols or plain structures | 228 | @eieio{} in that they return symbols or plain structures instead. |
| 229 | instead. | ||
| 230 | 229 | ||
| 231 | @item EQL specialization | 230 | @item EQL specialization |
| 232 | EIEIO does not support it. | 231 | EIEIO does not support it. |
| @@ -1065,7 +1064,7 @@ make a slot unbound. | |||
| 1065 | @var{object} can be an instance or a class. | 1064 | @var{object} can be an instance or a class. |
| 1066 | @end defun | 1065 | @end defun |
| 1067 | 1066 | ||
| 1068 | @defun class-name class | 1067 | @defun eieio-class-name class |
| 1069 | Return a string of the form @samp{#<class myclassname>} which should look | 1068 | Return a string of the form @samp{#<class myclassname>} which should look |
| 1070 | similar to other Lisp objects like buffers and processes. Printing a | 1069 | similar to other Lisp objects like buffers and processes. Printing a |
| 1071 | class results only in a symbol. | 1070 | class results only in a symbol. |
| @@ -1089,7 +1088,7 @@ constructor is a function used to create new instances of | |||
| 1089 | without knowing what it is. This is not a part of CLOS. | 1088 | without knowing what it is. This is not a part of CLOS. |
| 1090 | @end defun | 1089 | @end defun |
| 1091 | 1090 | ||
| 1092 | @defun object-name obj | 1091 | @defun eieio-object-name obj |
| 1093 | Return a string of the form @samp{#<object-class myobjname>} for @var{obj}. | 1092 | Return a string of the form @samp{#<object-class myobjname>} for @var{obj}. |
| 1094 | This should look like Lisp symbols from other parts of Emacs such as | 1093 | This should look like Lisp symbols from other parts of Emacs such as |
| 1095 | buffers and processes, and is shorter and cleaner than printing the | 1094 | buffers and processes, and is shorter and cleaner than printing the |
| @@ -1098,43 +1097,39 @@ and object's print form, as this allows the object to add extra display | |||
| 1098 | information into the symbol. | 1097 | information into the symbol. |
| 1099 | @end defun | 1098 | @end defun |
| 1100 | 1099 | ||
| 1101 | @defun object-class obj | 1100 | @defun eieio-object-class obj |
| 1102 | Returns the class symbol from @var{obj}. | 1101 | Returns the class symbol from @var{obj}. |
| 1103 | @end defun | 1102 | @end defun |
| 1104 | 1103 | ||
| 1105 | @defun class-of obj | 1104 | @defun eieio--object-class obj |
| 1106 | CLOS symbol which does the same thing as @code{object-class} | 1105 | Same as @code{eieio-object-class} except this is a macro, and no |
| 1107 | @end defun | ||
| 1108 | |||
| 1109 | @defun object-class-fast obj | ||
| 1110 | Same as @code{object-class} except this is a macro, and no | ||
| 1111 | type-checking is performed. | 1106 | type-checking is performed. |
| 1112 | @end defun | 1107 | @end defun |
| 1113 | 1108 | ||
| 1114 | @defun object-class-name obj | 1109 | @defun eieio-object-class-name obj |
| 1115 | Returns the symbol of @var{obj}'s class. | 1110 | Returns the symbol of @var{obj}'s class. |
| 1116 | @end defun | 1111 | @end defun |
| 1117 | 1112 | ||
| 1118 | @defun class-parents class | 1113 | @defun eieio-class-parents class |
| 1119 | Returns the direct parents class of @var{class}. Returns @code{nil} if | 1114 | Returns the direct parents class of @var{class}. Returns @code{nil} if |
| 1120 | it is a superclass. | 1115 | it is a superclass. |
| 1121 | @end defun | 1116 | @end defun |
| 1122 | 1117 | ||
| 1123 | @defun class-parents-fast class | 1118 | @defun eieio-class-parents-fast class |
| 1124 | Just like @code{class-parent} except it is a macro and no type checking | 1119 | Just like @code{eieio-class-parents} except it is a macro and no type checking |
| 1125 | is performed. | 1120 | is performed. |
| 1126 | @end defun | 1121 | @end defun |
| 1127 | 1122 | ||
| 1128 | @defun class-parent class | 1123 | @defun eieio-class-parent class |
| 1129 | Deprecated function which returns the first parent of @var{class}. | 1124 | Deprecated function which returns the first parent of @var{class}. |
| 1130 | @end defun | 1125 | @end defun |
| 1131 | 1126 | ||
| 1132 | @defun class-children class | 1127 | @defun eieio-class-children class |
| 1133 | Return the list of classes inheriting from @var{class}. | 1128 | Return the list of classes inheriting from @var{class}. |
| 1134 | @end defun | 1129 | @end defun |
| 1135 | 1130 | ||
| 1136 | @defun class-children-fast class | 1131 | @defun eieio-class-children-fast class |
| 1137 | Just like @code{class-children}, but with no checks. | 1132 | Just like @code{eieio-class-children}, but with no checks. |
| 1138 | @end defun | 1133 | @end defun |
| 1139 | 1134 | ||
| 1140 | @defun same-class-p obj class | 1135 | @defun same-class-p obj class |
| @@ -1676,9 +1671,9 @@ sure to call @dfn{call-next-method} first and modify the returned object. | |||
| 1676 | 1671 | ||
| 1677 | @defun object-print this &rest strings | 1672 | @defun object-print this &rest strings |
| 1678 | @anchor{object-print} | 1673 | @anchor{object-print} |
| 1679 | Pretty printer for object @var{this}. Call function @dfn{object-name} with @var{strings}. | 1674 | Pretty printer for object @var{this}. Call function @dfn{eieio-object-name} with @var{strings}. |
| 1680 | The default method for printing object @var{this} is to use the | 1675 | The default method for printing object @var{this} is to use the |
| 1681 | function @dfn{object-name}. | 1676 | function @dfn{eieio-object-name}. |
| 1682 | 1677 | ||
| 1683 | It is sometimes useful to put a summary of the object into the | 1678 | It is sometimes useful to put a summary of the object into the |
| 1684 | default #<notation> string when using eieio browsing tools. | 1679 | default #<notation> string when using eieio browsing tools. |
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index b84de7509da..6fc344d8465 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi | |||
| @@ -83,8 +83,8 @@ However a GNU Emacs with @code{libxml2} support is required. | |||
| 83 | If the input doesn't look like a URL or domain name the web will be | 83 | If the input doesn't look like a URL or domain name the web will be |
| 84 | searched via @code{eww-search-prefix}. The default search engine is | 84 | searched via @code{eww-search-prefix}. The default search engine is |
| 85 | @url{https://duckduckgo.com, DuckDuckGo}. If you want to open a file | 85 | @url{https://duckduckgo.com, DuckDuckGo}. If you want to open a file |
| 86 | either prefix the path with @code{file://} or use the command @kbd{M-x | 86 | either prefix the file name with @code{file://} or use the command |
| 87 | eww-open-file}. | 87 | @kbd{M-x eww-open-file}. |
| 88 | 88 | ||
| 89 | @findex eww-quit | 89 | @findex eww-quit |
| 90 | @findex eww-reload | 90 | @findex eww-reload |
| @@ -99,12 +99,12 @@ web page hit @kbd{g} (@code{eww-reload}). Pressing @kbd{w} | |||
| 99 | (@code{eww-copy-page-url}) will copy the current URL to the kill ring. | 99 | (@code{eww-copy-page-url}) will copy the current URL to the kill ring. |
| 100 | 100 | ||
| 101 | @findex eww-download | 101 | @findex eww-download |
| 102 | @vindex eww-download-path | 102 | @vindex eww-download-directory |
| 103 | @kindex d | 103 | @kindex d |
| 104 | @cindex Download | 104 | @cindex Download |
| 105 | A URL under the point can be downloaded with @kbd{d} | 105 | A URL under the point can be downloaded with @kbd{d} |
| 106 | (@code{eww-download}). The file will be written to the directory | 106 | (@code{eww-download}). The file will be written to the directory |
| 107 | specified in @code{eww-download-path} (Default: @file{~/Downloads/}). | 107 | specified in @code{eww-download-directory} (Default: @file{~/Downloads/}). |
| 108 | 108 | ||
| 109 | @findex eww-back-url | 109 | @findex eww-back-url |
| 110 | @findex eww-forward-url | 110 | @findex eww-forward-url |
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index dfe57689e5e..b3057c255fc 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | @include trampver.texi | 18 | @include trampver.texi |
| 19 | 19 | ||
| 20 | @c Macro for formatting a filename according to the respective syntax. | 20 | @c Macro for formatting a file name according to the respective syntax. |
| 21 | @c xxx and yyy are auxiliary macros in order to omit leading and | 21 | @c xxx and yyy are auxiliary macros in order to omit leading and |
| 22 | @c trailing whitespace. Not very elegant, but I don't know it better. | 22 | @c trailing whitespace. Not very elegant, but I don't know it better. |
| 23 | 23 | ||
| @@ -198,7 +198,7 @@ Installing @value{tramp} with your @value{emacsname} | |||
| 198 | 198 | ||
| 199 | Configuring @value{tramp} for use | 199 | Configuring @value{tramp} for use |
| 200 | 200 | ||
| 201 | * Connection types:: Types of connections made to remote machines. | 201 | * Connection types:: Types of connections made to remote hosts. |
| 202 | * Inline methods:: Inline methods. | 202 | * Inline methods:: Inline methods. |
| 203 | * External methods:: External methods. | 203 | * External methods:: External methods. |
| 204 | @ifset emacsgvfs | 204 | @ifset emacsgvfs |
| @@ -217,7 +217,7 @@ Configuring @value{tramp} for use | |||
| 217 | * Connection caching:: Reusing connection related information. | 217 | * Connection caching:: Reusing connection related information. |
| 218 | * Predefined connection information:: | 218 | * Predefined connection information:: |
| 219 | Setting own connection related information. | 219 | Setting own connection related information. |
| 220 | * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine. | 220 | * Remote Programs:: How @value{tramp} finds and uses programs on the remote host. |
| 221 | * Remote shell setup:: Remote shell setup hints. | 221 | * Remote shell setup:: Remote shell setup hints. |
| 222 | * Android shell setup:: Android shell setup hints. | 222 | * Android shell setup:: Android shell setup hints. |
| 223 | * Auto-save and Backup:: Auto-save and Backup. | 223 | * Auto-save and Backup:: Auto-save and Backup. |
| @@ -225,8 +225,8 @@ Configuring @value{tramp} for use | |||
| 225 | 225 | ||
| 226 | Using @value{tramp} | 226 | Using @value{tramp} |
| 227 | 227 | ||
| 228 | * Filename Syntax:: @value{tramp} filename conventions. | 228 | * File name Syntax:: @value{tramp} file name conventions. |
| 229 | * Filename completion:: Filename completion. | 229 | * File name completion:: File name completion. |
| 230 | * Ad-hoc multi-hops:: Declaring multiple hops in the file name. | 230 | * Ad-hoc multi-hops:: Declaring multiple hops in the file name. |
| 231 | * Remote processes:: Integration with other @value{emacsname} packages. | 231 | * Remote processes:: Integration with other @value{emacsname} packages. |
| 232 | * Cleanup remote connections:: Cleanup remote connections. | 232 | * Cleanup remote connections:: Cleanup remote connections. |
| @@ -247,18 +247,18 @@ How file names, directories and localnames are mangled and managed | |||
| 247 | @cindex overview | 247 | @cindex overview |
| 248 | 248 | ||
| 249 | After the installation of @value{tramp} into your @value{emacsname}, you | 249 | After the installation of @value{tramp} into your @value{emacsname}, you |
| 250 | will be able to access files on remote machines as though they were | 250 | will be able to access files on remote hosts as though they were |
| 251 | local. Access to the remote file system for editing files, version | 251 | local. Access to the remote file system for editing files, version |
| 252 | control, and @code{dired} are transparently enabled. | 252 | control, and @code{dired} are transparently enabled. |
| 253 | 253 | ||
| 254 | Your access to the remote machine can be with the @command{rsh}, | 254 | Your access to the remote host can be with the @command{rsh}, |
| 255 | @command{rlogin}, @command{telnet} programs or with any similar | 255 | @command{rlogin}, @command{telnet} programs or with any similar |
| 256 | connection method. This connection must pass @acronym{ASCII} | 256 | connection method. This connection must pass @acronym{ASCII} |
| 257 | successfully to be usable but need not be 8-bit clean. | 257 | successfully to be usable but need not be 8-bit clean. |
| 258 | 258 | ||
| 259 | The package provides support for @command{ssh} connections out of the | 259 | The package provides support for @command{ssh} connections out of the |
| 260 | box, one of the more common uses of the package. This allows | 260 | box, one of the more common uses of the package. This allows |
| 261 | relatively secure access to machines, especially if @command{ftp} | 261 | relatively secure access to hosts, especially if @command{ftp} |
| 262 | access is disabled. | 262 | access is disabled. |
| 263 | 263 | ||
| 264 | Under Windows, @value{tramp} is integrated with the PuTTY package, | 264 | Under Windows, @value{tramp} is integrated with the PuTTY package, |
| @@ -267,11 +267,11 @@ using the @command{plink} program. | |||
| 267 | The majority of activity carried out by @value{tramp} requires only that | 267 | The majority of activity carried out by @value{tramp} requires only that |
| 268 | the remote login is possible and is carried out at the terminal. In | 268 | the remote login is possible and is carried out at the terminal. In |
| 269 | order to access remote files @value{tramp} needs to transfer their content | 269 | order to access remote files @value{tramp} needs to transfer their content |
| 270 | to the local machine temporarily. | 270 | to the local host temporarily. |
| 271 | 271 | ||
| 272 | @value{tramp} can transfer files between the machines in a variety of ways. | 272 | @value{tramp} can transfer files between the hosts in a variety of ways. |
| 273 | The details are easy to select, depending on your needs and the | 273 | The details are easy to select, depending on your needs and the |
| 274 | machines in question. | 274 | hosts in question. |
| 275 | 275 | ||
| 276 | The fastest transfer methods for large files rely on a remote file | 276 | The fastest transfer methods for large files rely on a remote file |
| 277 | transfer package such as @command{rcp}, @command{scp}, @command{rsync} | 277 | transfer package such as @command{rcp}, @command{scp}, @command{rsync} |
| @@ -280,7 +280,7 @@ or (under Windows) @command{pscp}. | |||
| 280 | If the remote copy methods are not suitable for you, @value{tramp} also | 280 | If the remote copy methods are not suitable for you, @value{tramp} also |
| 281 | supports the use of encoded transfers directly through the shell. | 281 | supports the use of encoded transfers directly through the shell. |
| 282 | This requires that the @command{mimencode} or @command{uuencode} tools | 282 | This requires that the @command{mimencode} or @command{uuencode} tools |
| 283 | are available on the remote machine. These methods are generally | 283 | are available on the remote host. These methods are generally |
| 284 | faster for small files. | 284 | faster for small files. |
| 285 | 285 | ||
| 286 | @value{tramp} is still under active development and any problems you encounter, | 286 | @value{tramp} is still under active development and any problems you encounter, |
| @@ -351,7 +351,7 @@ shell prompt, and a few other things. | |||
| 351 | @item | 351 | @item |
| 352 | Now the remote shell is up and it good working order. Remember, what | 352 | Now the remote shell is up and it good working order. Remember, what |
| 353 | was supposed to happen is that @value{tramp} tries to find out what files exist | 353 | was supposed to happen is that @value{tramp} tries to find out what files exist |
| 354 | on the remote host so that it can do filename completion. | 354 | on the remote host so that it can do file name completion. |
| 355 | 355 | ||
| 356 | So, @value{tramp} basically issues @command{cd} and @command{ls} commands and | 356 | So, @value{tramp} basically issues @command{cd} and @command{ls} commands and |
| 357 | also sometimes @command{echo} with globbing. Another command that is | 357 | also sometimes @command{echo} with globbing. Another command that is |
| @@ -360,7 +360,7 @@ directory or the like. The output of each command is parsed for the | |||
| 360 | necessary operation. | 360 | necessary operation. |
| 361 | 361 | ||
| 362 | @item | 362 | @item |
| 363 | Suppose you are finished with filename completion, have entered @kbd{C-x | 363 | Suppose you are finished with file name completion, have entered @kbd{C-x |
| 364 | C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to | 364 | C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to |
| 365 | transfer the file contents from the remote host to the local host so | 365 | transfer the file contents from the remote host to the local host so |
| 366 | that you can edit them. | 366 | that you can edit them. |
| @@ -470,7 +470,7 @@ many more methods for getting a remote shell and for transferring the | |||
| 470 | file contents were added. Support for VC was added. | 470 | file contents were added. Support for VC was added. |
| 471 | 471 | ||
| 472 | After that, there were added the multi-hop methods in April 2000 and | 472 | After that, there were added the multi-hop methods in April 2000 and |
| 473 | the unification of @value{tramp} and Ange-FTP filenames in July 2002. | 473 | the unification of @value{tramp} and Ange-FTP file names in July 2002. |
| 474 | In July 2004, multi-hop methods have been replaced by proxy hosts. | 474 | In July 2004, multi-hop methods have been replaced by proxy hosts. |
| 475 | Running commands on remote hosts was introduced in December 2005. | 475 | Running commands on remote hosts was introduced in December 2005. |
| 476 | @ifset emacsgw | 476 | @ifset emacsgw |
| @@ -508,8 +508,8 @@ the first release including @value{tramp} was Emacs 22.1. | |||
| 508 | @value{tramp} is (normally) fully functional when it is initially | 508 | @value{tramp} is (normally) fully functional when it is initially |
| 509 | installed. It is initially configured to use the @command{scp} | 509 | installed. It is initially configured to use the @command{scp} |
| 510 | program to connect to the remote host. So in the easiest case, you | 510 | program to connect to the remote host. So in the easiest case, you |
| 511 | just type @kbd{C-x C-f} and then enter the filename | 511 | just type @kbd{C-x C-f} and then enter the file name |
| 512 | @file{@trampfn{, user, machine, /path/to.file}}. | 512 | @file{@trampfn{, user, host, /path/to.file}}. |
| 513 | 513 | ||
| 514 | On some hosts, there are problems with opening a connection. These are | 514 | On some hosts, there are problems with opening a connection. These are |
| 515 | related to the behavior of the remote shell. See @xref{Remote shell | 515 | related to the behavior of the remote shell. See @xref{Remote shell |
| @@ -518,7 +518,7 @@ setup}, for details on this. | |||
| 518 | If you do not wish to use these commands to connect to the remote | 518 | If you do not wish to use these commands to connect to the remote |
| 519 | host, you should change the default connection and transfer method | 519 | host, you should change the default connection and transfer method |
| 520 | that @value{tramp} uses. There are several different methods that @value{tramp} | 520 | that @value{tramp} uses. There are several different methods that @value{tramp} |
| 521 | can use to connect to remote machines and transfer files | 521 | can use to connect to remote hosts and transfer files |
| 522 | (@pxref{Connection types}). | 522 | (@pxref{Connection types}). |
| 523 | 523 | ||
| 524 | If you don't know which method is right for you, see @xref{Default | 524 | If you don't know which method is right for you, see @xref{Default |
| @@ -526,7 +526,7 @@ Method}. | |||
| 526 | 526 | ||
| 527 | 527 | ||
| 528 | @menu | 528 | @menu |
| 529 | * Connection types:: Types of connections made to remote machines. | 529 | * Connection types:: Types of connections made to remote hosts. |
| 530 | * Inline methods:: Inline methods. | 530 | * Inline methods:: Inline methods. |
| 531 | * External methods:: External methods. | 531 | * External methods:: External methods. |
| 532 | @ifset emacsgvfs | 532 | @ifset emacsgvfs |
| @@ -548,7 +548,7 @@ Method}. | |||
| 548 | * Connection caching:: Reusing connection related information. | 548 | * Connection caching:: Reusing connection related information. |
| 549 | * Predefined connection information:: | 549 | * Predefined connection information:: |
| 550 | Setting own connection related information. | 550 | Setting own connection related information. |
| 551 | * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine. | 551 | * Remote Programs:: How @value{tramp} finds and uses programs on the remote host. |
| 552 | * Remote shell setup:: Remote shell setup hints. | 552 | * Remote shell setup:: Remote shell setup hints. |
| 553 | * Android shell setup:: Android shell setup hints. | 553 | * Android shell setup:: Android shell setup hints. |
| 554 | * Auto-save and Backup:: Auto-save and Backup. | 554 | * Auto-save and Backup:: Auto-save and Backup. |
| @@ -557,17 +557,17 @@ Method}. | |||
| 557 | 557 | ||
| 558 | 558 | ||
| 559 | @node Connection types | 559 | @node Connection types |
| 560 | @section Types of connections made to remote machines | 560 | @section Types of connections made to remote hosts |
| 561 | @cindex connection types, overview | 561 | @cindex connection types, overview |
| 562 | 562 | ||
| 563 | There are two basic types of transfer methods, each with its own | 563 | There are two basic types of transfer methods, each with its own |
| 564 | advantages and limitations. Both types of connection make use of a | 564 | advantages and limitations. Both types of connection make use of a |
| 565 | remote shell access program such as @command{rsh}, @command{ssh} or | 565 | remote shell access program such as @command{rsh}, @command{ssh} or |
| 566 | @command{telnet} to connect to the remote machine. | 566 | @command{telnet} to connect to the remote host. |
| 567 | 567 | ||
| 568 | This connection is used to perform many of the operations that @value{tramp} | 568 | This connection is used to perform many of the operations that @value{tramp} |
| 569 | requires to make the remote file system transparently accessible from | 569 | requires to make the remote file system transparently accessible from |
| 570 | the local machine. It is only when visiting files that the methods | 570 | the local host. It is only when visiting files that the methods |
| 571 | differ. | 571 | differ. |
| 572 | 572 | ||
| 573 | @cindex inline methods | 573 | @cindex inline methods |
| @@ -575,9 +575,9 @@ differ. | |||
| 575 | @cindex methods, inline | 575 | @cindex methods, inline |
| 576 | @cindex methods, external | 576 | @cindex methods, external |
| 577 | Loading or saving a remote file requires that the content of the file | 577 | Loading or saving a remote file requires that the content of the file |
| 578 | be transferred between the two machines. The content of the file can | 578 | be transferred between the two hosts. The content of the file can |
| 579 | be transferred using one of two methods: the @dfn{inline method} over | 579 | be transferred using one of two methods: the @dfn{inline method} over |
| 580 | the same connection used to log in to the remote machine, or the | 580 | the same connection used to log in to the remote host, or the |
| 581 | @dfn{external method} through another connection using a remote copy | 581 | @dfn{external method} through another connection using a remote copy |
| 582 | program such as @command{rcp}, @command{scp} or @command{rsync}. | 582 | program such as @command{rcp}, @command{scp} or @command{rsync}. |
| 583 | 583 | ||
| @@ -607,12 +607,12 @@ action. | |||
| 607 | The inline methods in @value{tramp} are quite powerful and can work in | 607 | The inline methods in @value{tramp} are quite powerful and can work in |
| 608 | situations where you cannot use an external transfer program to connect. | 608 | situations where you cannot use an external transfer program to connect. |
| 609 | Inline methods are the only methods that work when connecting to the | 609 | Inline methods are the only methods that work when connecting to the |
| 610 | remote machine via telnet. (There are also strange inline methods which | 610 | remote host via telnet. (There are also strange inline methods which |
| 611 | allow you to transfer files between @emph{user identities} rather than | 611 | allow you to transfer files between @emph{user identities} rather than |
| 612 | hosts, see below.) | 612 | hosts, see below.) |
| 613 | 613 | ||
| 614 | These methods depend on the existence of a suitable encoding and | 614 | These methods depend on the existence of a suitable encoding and |
| 615 | decoding command on remote machine. Locally, @value{tramp} may be able to | 615 | decoding command on remote host. Locally, @value{tramp} may be able to |
| 616 | use features of @value{emacsname} to decode and encode the files or | 616 | use features of @value{emacsname} to decode and encode the files or |
| 617 | it may require access to external commands to perform that task. | 617 | it may require access to external commands to perform that task. |
| 618 | 618 | ||
| @@ -789,11 +789,11 @@ fair trade-off between both approaches. | |||
| 789 | @cindex rsh (with rcp method) | 789 | @cindex rsh (with rcp method) |
| 790 | 790 | ||
| 791 | This method uses the @command{rsh} and @command{rcp} commands to connect | 791 | This method uses the @command{rsh} and @command{rcp} commands to connect |
| 792 | to the remote machine and transfer files. This is probably the fastest | 792 | to the remote host and transfer files. This is probably the fastest |
| 793 | connection method available. | 793 | connection method available. |
| 794 | 794 | ||
| 795 | The alternative method @option{remcp} uses the @command{remsh} and | 795 | The alternative method @option{remcp} uses the @command{remsh} and |
| 796 | @command{rcp} commands. It should be applied on machines where | 796 | @command{rcp} commands. It should be applied on hosts where |
| 797 | @command{remsh} is used instead of @command{rsh}. | 797 | @command{remsh} is used instead of @command{rsh}. |
| 798 | 798 | ||
| 799 | 799 | ||
| @@ -804,8 +804,8 @@ The alternative method @option{remcp} uses the @command{remsh} and | |||
| 804 | @cindex ssh (with scp method) | 804 | @cindex ssh (with scp method) |
| 805 | 805 | ||
| 806 | Using @command{ssh} to connect to the remote host and @command{scp} to | 806 | Using @command{ssh} to connect to the remote host and @command{scp} to |
| 807 | transfer files between the machines is the best method for securely | 807 | transfer files between the hosts is the best method for securely |
| 808 | connecting to a remote machine and accessing files. | 808 | connecting to a remote host and accessing files. |
| 809 | 809 | ||
| 810 | The performance of this option is also quite good. It may be slower than | 810 | The performance of this option is also quite good. It may be slower than |
| 811 | the inline methods when you often open and close small files however. | 811 | the inline methods when you often open and close small files however. |
| @@ -843,7 +843,7 @@ This method supports the @samp{-p} argument. | |||
| 843 | @cindex ssh (with rsync method) | 843 | @cindex ssh (with rsync method) |
| 844 | 844 | ||
| 845 | Using the @command{ssh} command to connect securely to the remote | 845 | Using the @command{ssh} command to connect securely to the remote |
| 846 | machine and the @command{rsync} command to transfer files is almost | 846 | host and the @command{rsync} command to transfer files is almost |
| 847 | identical to the @option{scp} method. | 847 | identical to the @option{scp} method. |
| 848 | 848 | ||
| 849 | While @command{rsync} performs much better than @command{scp} when | 849 | While @command{rsync} performs much better than @command{scp} when |
| @@ -945,7 +945,7 @@ anyway. | |||
| 945 | This is not a native @value{tramp} method. Instead, it forwards all | 945 | This is not a native @value{tramp} method. Instead, it forwards all |
| 946 | requests to @value{ftppackagename}. | 946 | requests to @value{ftppackagename}. |
| 947 | @ifset xemacs | 947 | @ifset xemacs |
| 948 | This works only for unified filenames, see @ref{Issues}. | 948 | This works only for unified file names, see @ref{Issues}. |
| 949 | @end ifset | 949 | @end ifset |
| 950 | 950 | ||
| 951 | 951 | ||
| @@ -974,15 +974,15 @@ For authorization, MS Windows uses both a user name and a domain name. | |||
| 974 | Because of this, the @value{tramp} syntax has been extended: you can | 974 | Because of this, the @value{tramp} syntax has been extended: you can |
| 975 | specify a user name which looks like @code{user%domain} (the real user | 975 | specify a user name which looks like @code{user%domain} (the real user |
| 976 | name, then a percent sign, then the domain name). So, to connect to | 976 | name, then a percent sign, then the domain name). So, to connect to |
| 977 | the machine @code{melancholia} as user @code{daniel} of the domain | 977 | the host @code{melancholia} as user @code{daniel} of the domain |
| 978 | @code{BIZARRE}, and edit @file{.emacs} in the home directory (share | 978 | @code{BIZARRE}, and edit @file{.emacs} in the home directory (share |
| 979 | @code{daniel$}) I would specify the filename @file{@trampfn{smb, | 979 | @code{daniel$}) I would specify the file name @file{@trampfn{smb, |
| 980 | daniel%BIZARRE, melancholia, /daniel$$/.emacs}}. | 980 | daniel%BIZARRE, melancholia, /daniel$$/.emacs}}. |
| 981 | 981 | ||
| 982 | Depending on the Windows domain configuration, a Windows user might be | 982 | Depending on the Windows domain configuration, a Windows user might be |
| 983 | considered as domain user per default. In order to connect as local | 983 | considered as domain user per default. In order to connect as local |
| 984 | user, the WINS name of that machine must be given as domain name. | 984 | user, the WINS name of that host must be given as domain name. |
| 985 | Usually, it is the machine name in capital letters. In the example | 985 | Usually, it is the host name in capital letters. In the example |
| 986 | above, the local user @code{daniel} would be specified as | 986 | above, the local user @code{daniel} would be specified as |
| 987 | @file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}. | 987 | @file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}. |
| 988 | 988 | ||
| @@ -1156,7 +1156,7 @@ example, the following two lines specify to use the @option{ssh} | |||
| 1156 | method for all user names matching @samp{john} and the @option{rsync} | 1156 | method for all user names matching @samp{john} and the @option{rsync} |
| 1157 | method for all host names matching @samp{lily}. The third line | 1157 | method for all host names matching @samp{lily}. The third line |
| 1158 | specifies to use the @option{su} method for the user @samp{root} on | 1158 | specifies to use the @option{su} method for the user @samp{root} on |
| 1159 | the machine @samp{localhost}. | 1159 | the host @samp{localhost}. |
| 1160 | 1160 | ||
| 1161 | @lisp | 1161 | @lisp |
| 1162 | (add-to-list 'tramp-default-method-alist '("" "john" "ssh")) | 1162 | (add-to-list 'tramp-default-method-alist '("" "john" "ssh")) |
| @@ -1180,9 +1180,9 @@ environment you will use them in and, especially when used over the | |||
| 1180 | Internet, the security implications of your preferred method. | 1180 | Internet, the security implications of your preferred method. |
| 1181 | 1181 | ||
| 1182 | The @option{rsh} and @option{telnet} methods send your password as | 1182 | The @option{rsh} and @option{telnet} methods send your password as |
| 1183 | plain text as you log in to the remote machine, as well as | 1183 | plain text as you log in to the remote host, as well as |
| 1184 | transferring the files in such a way that the content can easily be | 1184 | transferring the files in such a way that the content can easily be |
| 1185 | read from other machines. | 1185 | read from other hosts. |
| 1186 | 1186 | ||
| 1187 | If you need to connect to remote systems that are accessible from the | 1187 | If you need to connect to remote systems that are accessible from the |
| 1188 | Internet, you should give serious thought to using @option{ssh} based | 1188 | Internet, you should give serious thought to using @option{ssh} based |
| @@ -1207,7 +1207,7 @@ want to edit mostly small files. And if you access large text files, | |||
| 1207 | compression (driven by @var{tramp-inline-compress-start-size}) shall | 1207 | compression (driven by @var{tramp-inline-compress-start-size}) shall |
| 1208 | still result in good performance. | 1208 | still result in good performance. |
| 1209 | 1209 | ||
| 1210 | I guess that these days, most people can access a remote machine by | 1210 | I guess that these days, most people can access a remote host by |
| 1211 | using @command{ssh}. So I suggest that you use the @option{ssh} | 1211 | using @command{ssh}. So I suggest that you use the @option{ssh} |
| 1212 | method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost, | 1212 | method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost, |
| 1213 | /etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other | 1213 | /etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other |
| @@ -1359,7 +1359,7 @@ file name located on a remote target matching @var{user}@@@var{host}. | |||
| 1359 | @var{host} and @var{user} are regular expressions or @code{nil}, which | 1359 | @var{host} and @var{user} are regular expressions or @code{nil}, which |
| 1360 | is interpreted as a regular expression which always matches. | 1360 | is interpreted as a regular expression which always matches. |
| 1361 | 1361 | ||
| 1362 | @var{proxy} must be a Tramp filename which localname part is ignored. | 1362 | @var{proxy} must be a Tramp file name which localname part is ignored. |
| 1363 | Method and user name on @var{proxy} are optional, which is interpreted | 1363 | Method and user name on @var{proxy} are optional, which is interpreted |
| 1364 | with the default values. | 1364 | with the default values. |
| 1365 | @ifset emacsgw | 1365 | @ifset emacsgw |
| @@ -1500,7 +1500,7 @@ variable, accessible with @kbd{C-h v tramp-methods @key{RET}}. | |||
| 1500 | 1500 | ||
| 1501 | The variable @code{tramp-completion-function-alist} is intended to | 1501 | The variable @code{tramp-completion-function-alist} is intended to |
| 1502 | customize which files are taken into account for user and host name | 1502 | customize which files are taken into account for user and host name |
| 1503 | completion (@pxref{Filename completion}). For every method, it keeps | 1503 | completion (@pxref{File name completion}). For every method, it keeps |
| 1504 | a set of configuration files, accompanied by a Lisp function able to | 1504 | a set of configuration files, accompanied by a Lisp function able to |
| 1505 | parse that file. Entries in @code{tramp-completion-function-alist} | 1505 | parse that file. Entries in @code{tramp-completion-function-alist} |
| 1506 | have the form (@var{method} @var{pair1} @var{pair2} ...). | 1506 | have the form (@var{method} @var{pair1} @var{pair2} ...). |
| @@ -1763,7 +1763,7 @@ connection at will. Since there is no reliable test for this, | |||
| 1763 | 1763 | ||
| 1764 | 1764 | ||
| 1765 | @node Remote Programs | 1765 | @node Remote Programs |
| 1766 | @section How @value{tramp} finds and uses programs on the remote machine | 1766 | @section How @value{tramp} finds and uses programs on the remote host |
| 1767 | 1767 | ||
| 1768 | @value{tramp} depends on a number of programs on the remote host in order to | 1768 | @value{tramp} depends on a number of programs on the remote host in order to |
| 1769 | function, including @command{ls}, @command{test}, @command{find} and | 1769 | function, including @command{ls}, @command{test}, @command{find} and |
| @@ -1782,14 +1782,14 @@ remote file access. | |||
| 1782 | @vindex tramp-default-remote-path | 1782 | @vindex tramp-default-remote-path |
| 1783 | @vindex tramp-own-remote-path | 1783 | @vindex tramp-own-remote-path |
| 1784 | @defopt tramp-remote-path | 1784 | @defopt tramp-remote-path |
| 1785 | When @value{tramp} connects to the remote machine, it searches for the | 1785 | When @value{tramp} connects to the remote host, it searches for the |
| 1786 | programs that it can use. The variable @code{tramp-remote-path} | 1786 | programs that it can use. The variable @code{tramp-remote-path} |
| 1787 | controls the directories searched on the remote machine. | 1787 | controls the directories searched on the remote host. |
| 1788 | 1788 | ||
| 1789 | By default, this is set to a reasonable set of defaults for most | 1789 | By default, this is set to a reasonable set of defaults for most |
| 1790 | machines. The symbol @code{tramp-default-remote-path} is a place | 1790 | hosts. The symbol @code{tramp-default-remote-path} is a place |
| 1791 | holder, it is replaced by the list of directories received via the | 1791 | holder, it is replaced by the list of directories received via the |
| 1792 | command @command{getconf PATH} on your remote machine. For example, | 1792 | command @command{getconf PATH} on your remote host. For example, |
| 1793 | on Debian GNU/Linux this is @file{/bin:/usr/bin}, whereas on Solaris | 1793 | on Debian GNU/Linux this is @file{/bin:/usr/bin}, whereas on Solaris |
| 1794 | this is @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}. | 1794 | this is @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}. |
| 1795 | It is recommended to apply this symbol on top of | 1795 | It is recommended to apply this symbol on top of |
| @@ -2067,7 +2067,7 @@ fi | |||
| 2067 | Android devices use a restricted shell. They can be accessed via the | 2067 | Android devices use a restricted shell. They can be accessed via the |
| 2068 | @option{adb} method. However, this restricts the access to a USB | 2068 | @option{adb} method. However, this restricts the access to a USB |
| 2069 | connection, and it requires the installation of the Android SDK on the | 2069 | connection, and it requires the installation of the Android SDK on the |
| 2070 | local machine. | 2070 | local host. |
| 2071 | 2071 | ||
| 2072 | When an @command{sshd} process runs on the Android device, like | 2072 | When an @command{sshd} process runs on the Android device, like |
| 2073 | provided by the @code{SSHDroid} app, any @option{ssh}-based method can | 2073 | provided by the @code{SSHDroid} app, any @option{ssh}-based method can |
| @@ -2293,7 +2293,7 @@ This section needs a lot of work! Please help. | |||
| 2293 | @cindex sshx method with Cygwin | 2293 | @cindex sshx method with Cygwin |
| 2294 | The recent Cygwin installation of @command{ssh} works only with a | 2294 | The recent Cygwin installation of @command{ssh} works only with a |
| 2295 | Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x | 2295 | Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x |
| 2296 | eshell}, and starting @kbd{ssh test.machine}. The problem is evident | 2296 | eshell}, and starting @kbd{ssh test.host}. The problem is evident |
| 2297 | if you see a message like this: | 2297 | if you see a message like this: |
| 2298 | 2298 | ||
| 2299 | @example | 2299 | @example |
| @@ -2309,12 +2309,12 @@ can find information about setting up Cygwin in their FAQ at | |||
| 2309 | @cindex scpx method with Cygwin | 2309 | @cindex scpx method with Cygwin |
| 2310 | If you wish to use the @option{scpx} connection method, then you might | 2310 | If you wish to use the @option{scpx} connection method, then you might |
| 2311 | have the problem that @value{emacsname} calls @command{scp} with a | 2311 | have the problem that @value{emacsname} calls @command{scp} with a |
| 2312 | Windows filename such as @code{c:/foo}. The Cygwin version of | 2312 | Windows file name such as @code{c:/foo}. The Cygwin version of |
| 2313 | @command{scp} does not know about Windows filenames and interprets | 2313 | @command{scp} does not know about Windows file names and interprets |
| 2314 | this as a remote filename on the host @code{c}. | 2314 | this as a remote file name on the host @code{c}. |
| 2315 | 2315 | ||
| 2316 | One possible workaround is to write a wrapper script for @option{scp} | 2316 | One possible workaround is to write a wrapper script for @option{scp} |
| 2317 | which converts the Windows filename to a Cygwinized filename. | 2317 | which converts the Windows file name to a Cygwinized file name. |
| 2318 | 2318 | ||
| 2319 | @cindex Cygwin and ssh-agent | 2319 | @cindex Cygwin and ssh-agent |
| 2320 | @cindex SSH_AUTH_SOCK and @value{emacsname} on Windows | 2320 | @cindex SSH_AUTH_SOCK and @value{emacsname} on Windows |
| @@ -2338,7 +2338,7 @@ know anything at all about Windows@dots{} | |||
| 2338 | @cindex using @value{tramp} | 2338 | @cindex using @value{tramp} |
| 2339 | 2339 | ||
| 2340 | Once you have installed @value{tramp} it will operate fairly | 2340 | Once you have installed @value{tramp} it will operate fairly |
| 2341 | transparently. You will be able to access files on any remote machine | 2341 | transparently. You will be able to access files on any remote host |
| 2342 | that you can log in to as though they were local. | 2342 | that you can log in to as though they were local. |
| 2343 | 2343 | ||
| 2344 | Files are specified to @value{tramp} using a formalized syntax specifying the | 2344 | Files are specified to @value{tramp} using a formalized syntax specifying the |
| @@ -2357,52 +2357,52 @@ minute when a connection needs to be opened. Maybe after half a | |||
| 2357 | minute you have already forgotten that you hit that key! | 2357 | minute you have already forgotten that you hit that key! |
| 2358 | 2358 | ||
| 2359 | @menu | 2359 | @menu |
| 2360 | * Filename Syntax:: @value{tramp} filename conventions. | 2360 | * File name Syntax:: @value{tramp} file name conventions. |
| 2361 | * Filename completion:: Filename completion. | 2361 | * File name completion:: File name completion. |
| 2362 | * Ad-hoc multi-hops:: Declaring multiple hops in the file name. | 2362 | * Ad-hoc multi-hops:: Declaring multiple hops in the file name. |
| 2363 | * Remote processes:: Integration with other @value{emacsname} packages. | 2363 | * Remote processes:: Integration with other @value{emacsname} packages. |
| 2364 | * Cleanup remote connections:: Cleanup remote connections. | 2364 | * Cleanup remote connections:: Cleanup remote connections. |
| 2365 | @end menu | 2365 | @end menu |
| 2366 | 2366 | ||
| 2367 | 2367 | ||
| 2368 | @node Filename Syntax | 2368 | @node File name Syntax |
| 2369 | @section @value{tramp} filename conventions | 2369 | @section @value{tramp} file name conventions |
| 2370 | @cindex filename syntax | 2370 | @cindex file name syntax |
| 2371 | @cindex filename examples | 2371 | @cindex file name examples |
| 2372 | 2372 | ||
| 2373 | To access the file @var{localname} on the remote machine @var{machine} | 2373 | To access the file @var{localname} on the remote host @var{host} |
| 2374 | you would specify the filename @file{@trampfn{, , machine, | 2374 | you would specify the file name @file{@trampfn{, , host, |
| 2375 | localname}}. This will connect to @var{machine} and transfer the file | 2375 | localname}}. This will connect to @var{host} and transfer the file |
| 2376 | using the default method. @xref{Default Method}. | 2376 | using the default method. @xref{Default Method}. |
| 2377 | 2377 | ||
| 2378 | Some examples of @value{tramp} filenames are shown below. | 2378 | Some examples of @value{tramp} file names are shown below. |
| 2379 | 2379 | ||
| 2380 | @table @file | 2380 | @table @file |
| 2381 | @item @value{prefix}melancholia@value{postfix}.emacs | 2381 | @item @value{prefix}melancholia@value{postfix}.emacs |
| 2382 | Edit the file @file{.emacs} in your home directory on the machine | 2382 | Edit the file @file{.emacs} in your home directory on the host |
| 2383 | @code{melancholia}. | 2383 | @code{melancholia}. |
| 2384 | 2384 | ||
| 2385 | @item @value{prefix}melancholia.danann.net@value{postfix}.emacs | 2385 | @item @value{prefix}melancholia.danann.net@value{postfix}.emacs |
| 2386 | This edits the same file, using the fully qualified domain name of | 2386 | This edits the same file, using the fully qualified domain name of |
| 2387 | the machine. | 2387 | the host. |
| 2388 | 2388 | ||
| 2389 | @item @value{prefix}melancholia@value{postfix}~/.emacs | 2389 | @item @value{prefix}melancholia@value{postfix}~/.emacs |
| 2390 | This also edits the same file; the @file{~} is expanded to your | 2390 | This also edits the same file; the @file{~} is expanded to your |
| 2391 | home directory on the remote machine, just like it is locally. | 2391 | home directory on the remote host, just like it is locally. |
| 2392 | 2392 | ||
| 2393 | @item @value{prefix}melancholia@value{postfix}~daniel/.emacs | 2393 | @item @value{prefix}melancholia@value{postfix}~daniel/.emacs |
| 2394 | This edits the file @file{.emacs} in the home directory of the user | 2394 | This edits the file @file{.emacs} in the home directory of the user |
| 2395 | @code{daniel} on the machine @code{melancholia}. The @file{~<user>} | 2395 | @code{daniel} on the host @code{melancholia}. The @file{~<user>} |
| 2396 | construct is expanded to the home directory of that user on the remote | 2396 | construct is expanded to the home directory of that user on the remote |
| 2397 | machine. | 2397 | host. |
| 2398 | 2398 | ||
| 2399 | @item @value{prefix}melancholia@value{postfix}/etc/squid.conf | 2399 | @item @value{prefix}melancholia@value{postfix}/etc/squid.conf |
| 2400 | This edits the file @file{/etc/squid.conf} on the machine | 2400 | This edits the file @file{/etc/squid.conf} on the host |
| 2401 | @code{melancholia}. | 2401 | @code{melancholia}. |
| 2402 | 2402 | ||
| 2403 | @end table | 2403 | @end table |
| 2404 | 2404 | ||
| 2405 | @var{machine} can also be an IPv4 or IPv6 address, like in | 2405 | @var{host} can also be an IPv4 or IPv6 address, like in |
| 2406 | @file{@trampfn{, , 127.0.0.1, .emacs}} or @file{@trampfn{, , | 2406 | @file{@trampfn{, , 127.0.0.1, .emacs}} or @file{@trampfn{, , |
| 2407 | @value{ipv6prefix}::1@value{ipv6postfix}, .emacs}}. | 2407 | @value{ipv6prefix}::1@value{ipv6postfix}, .emacs}}. |
| 2408 | @ifset emacs | 2408 | @ifset emacs |
| @@ -2413,17 +2413,17 @@ brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}. | |||
| 2413 | Unless you specify a different name to use, @value{tramp} will use the | 2413 | Unless you specify a different name to use, @value{tramp} will use the |
| 2414 | current local user name as the remote user name to log in with. If you | 2414 | current local user name as the remote user name to log in with. If you |
| 2415 | need to log in as a different user, you can specify the user name as | 2415 | need to log in as a different user, you can specify the user name as |
| 2416 | part of the filename. | 2416 | part of the file name. |
| 2417 | 2417 | ||
| 2418 | To log in to the remote machine as a specific user, you use the syntax | 2418 | To log in to the remote host as a specific user, you use the syntax |
| 2419 | @file{@trampfn{, user, machine, path/to.file}}. That means that | 2419 | @file{@trampfn{, user, host, path/to.file}}. That means that |
| 2420 | connecting to @code{melancholia} as @code{daniel} and editing | 2420 | connecting to @code{melancholia} as @code{daniel} and editing |
| 2421 | @file{.emacs} in your home directory you would specify | 2421 | @file{.emacs} in your home directory you would specify |
| 2422 | @file{@trampfn{, daniel, melancholia, .emacs}}. | 2422 | @file{@trampfn{, daniel, melancholia, .emacs}}. |
| 2423 | 2423 | ||
| 2424 | It is also possible to specify other file transfer methods | 2424 | It is also possible to specify other file transfer methods |
| 2425 | (@pxref{Inline methods}, @pxref{External methods}) as part of the | 2425 | (@pxref{Inline methods}, @pxref{External methods}) as part of the |
| 2426 | filename. | 2426 | file name. |
| 2427 | @ifset emacs | 2427 | @ifset emacs |
| 2428 | This is done by putting the method before the user and host name, as | 2428 | This is done by putting the method before the user and host name, as |
| 2429 | in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the | 2429 | in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the |
| @@ -2434,15 +2434,15 @@ This is done by replacing the initial @file{@value{prefix}} with | |||
| 2434 | @file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing | 2434 | @file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing |
| 2435 | slash!). | 2435 | slash!). |
| 2436 | @end ifset | 2436 | @end ifset |
| 2437 | The user, machine and file specification remain the same. | 2437 | The user, host and file specification remain the same. |
| 2438 | 2438 | ||
| 2439 | So, to connect to the machine @code{melancholia} as @code{daniel}, | 2439 | So, to connect to the host @code{melancholia} as @code{daniel}, |
| 2440 | using the @option{ssh} method to transfer files, and edit | 2440 | using the @option{ssh} method to transfer files, and edit |
| 2441 | @file{.emacs} in my home directory I would specify the filename | 2441 | @file{.emacs} in my home directory I would specify the file name |
| 2442 | @file{@trampfn{ssh, daniel, melancholia, .emacs}}. | 2442 | @file{@trampfn{ssh, daniel, melancholia, .emacs}}. |
| 2443 | 2443 | ||
| 2444 | @ifset emacs | 2444 | @ifset emacs |
| 2445 | A remote filename containing a host name only, which is equal to a | 2445 | A remote file name containing a host name only, which is equal to a |
| 2446 | method name, is not allowed. If such a host name is used, it must | 2446 | method name, is not allowed. If such a host name is used, it must |
| 2447 | always be preceded by an explicit method name, like | 2447 | always be preceded by an explicit method name, like |
| 2448 | @file{@value{prefix}ssh@value{postfixhop}ssh@value{postfix}}. | 2448 | @file{@value{prefix}ssh@value{postfixhop}ssh@value{postfix}}. |
| @@ -2454,13 +2454,13 @@ by adding @file{#<port>} to the host name, like in @file{@trampfn{ssh, | |||
| 2454 | daniel, melancholia#42, .emacs}}. | 2454 | daniel, melancholia#42, .emacs}}. |
| 2455 | 2455 | ||
| 2456 | 2456 | ||
| 2457 | @node Filename completion | 2457 | @node File name completion |
| 2458 | @section Filename completion | 2458 | @section File name completion |
| 2459 | @cindex filename completion | 2459 | @cindex file name completion |
| 2460 | 2460 | ||
| 2461 | Filename completion works with @value{tramp} for completion of method | 2461 | File name completion works with @value{tramp} for completion of method |
| 2462 | names, of user names and of machine names as well as for completion of | 2462 | names, of user names and of host names as well as for completion of |
| 2463 | file names on remote machines. | 2463 | file names on remote hosts. |
| 2464 | @ifset emacs | 2464 | @ifset emacs |
| 2465 | In order to enable this, partial completion must be activated in your | 2465 | In order to enable this, partial completion must be activated in your |
| 2466 | @file{.emacs}. | 2466 | @file{.emacs}. |
| @@ -2488,8 +2488,7 @@ If you, for example, type @kbd{C-x C-f @value{prefix}t | |||
| 2488 | @samp{@value{prefixhop}telnet@value{postfixhop}} | 2488 | @samp{@value{prefixhop}telnet@value{postfixhop}} |
| 2489 | is a possible completion for the respective method, | 2489 | is a possible completion for the respective method, |
| 2490 | @ifset emacs | 2490 | @ifset emacs |
| 2491 | @samp{tmp/} stands for the directory @file{/tmp} on your local | 2491 | @samp{tmp/} stands for the directory @file{/tmp} on your local host, |
| 2492 | machine, | ||
| 2493 | @end ifset | 2492 | @end ifset |
| 2494 | and @samp{@value{prefixhop}toto@value{postfix}} | 2493 | and @samp{@value{prefixhop}toto@value{postfix}} |
| 2495 | might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts} | 2494 | might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts} |
| @@ -2497,7 +2496,7 @@ file (given you're using default method @option{ssh}). | |||
| 2497 | 2496 | ||
| 2498 | If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to | 2497 | If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to |
| 2499 | @samp{@value{prefix}telnet@value{postfixhop}}. | 2498 | @samp{@value{prefix}telnet@value{postfixhop}}. |
| 2500 | Next @kbd{@key{TAB}} brings you all machine names @value{tramp} detects in | 2499 | Next @kbd{@key{TAB}} brings you all host names @value{tramp} detects in |
| 2501 | your @file{/etc/hosts} file, let's say | 2500 | your @file{/etc/hosts} file, let's say |
| 2502 | 2501 | ||
| 2503 | @example | 2502 | @example |
| @@ -2509,21 +2508,21 @@ your @file{/etc/hosts} file, let's say | |||
| 2509 | @end multitable | 2508 | @end multitable |
| 2510 | @end example | 2509 | @end example |
| 2511 | 2510 | ||
| 2512 | Now you can choose the desired machine, and you can continue to | 2511 | Now you can choose the desired host, and you can continue to |
| 2513 | complete file names on that machine. | 2512 | complete file names on that host. |
| 2514 | 2513 | ||
| 2515 | If the configuration files (@pxref{Customizing Completion}), which | 2514 | If the configuration files (@pxref{Customizing Completion}), which |
| 2516 | @value{tramp} uses for analysis of completion, offer user names, those user | 2515 | @value{tramp} uses for analysis of completion, offer user names, those user |
| 2517 | names will be taken into account as well. | 2516 | names will be taken into account as well. |
| 2518 | 2517 | ||
| 2519 | Remote machines which have been visited in the past and kept | 2518 | Remote hosts which have been visited in the past and kept |
| 2520 | persistently (@pxref{Connection caching}) will be offered too. | 2519 | persistently (@pxref{Connection caching}) will be offered too. |
| 2521 | 2520 | ||
| 2522 | Once the remote machine identification is completed, it comes to | 2521 | Once the remote host identification is completed, it comes to |
| 2523 | filename completion on the remote host. This works pretty much like | 2522 | file name completion on the remote host. This works pretty much like |
| 2524 | for files on the local host, with the exception that minibuffer | 2523 | for files on the local host, with the exception that minibuffer |
| 2525 | killing via a double-slash works only on the filename part, except | 2524 | killing via a double-slash works only on the file name part, except |
| 2526 | that filename part starts with @file{//}. | 2525 | that file name part starts with @file{//}. |
| 2527 | @ifset emacs | 2526 | @ifset emacs |
| 2528 | A triple-slash stands for the default behavior. | 2527 | A triple-slash stands for the default behavior. |
| 2529 | @end ifset | 2528 | @end ifset |
| @@ -2557,14 +2556,14 @@ Example: | |||
| 2557 | 2556 | ||
| 2558 | A remote directory might have changed its contents out of | 2557 | A remote directory might have changed its contents out of |
| 2559 | @value{emacsname} control, for example by creation or deletion of | 2558 | @value{emacsname} control, for example by creation or deletion of |
| 2560 | files by other processes. Therefore, during filename completion, the | 2559 | files by other processes. Therefore, during file name completion, the |
| 2561 | remote directory contents are reread regularly in order to detect such | 2560 | remote directory contents are reread regularly in order to detect such |
| 2562 | changes, which would be invisible otherwise (@pxref{Connection caching}). | 2561 | changes, which would be invisible otherwise (@pxref{Connection caching}). |
| 2563 | 2562 | ||
| 2564 | @defopt tramp-completion-reread-directory-timeout | 2563 | @defopt tramp-completion-reread-directory-timeout |
| 2565 | This variable defines the number of seconds since last remote command | 2564 | This variable defines the number of seconds since last remote command |
| 2566 | before rereading a directory contents. A value of 0 would require an | 2565 | before rereading a directory contents. A value of 0 would require an |
| 2567 | immediate reread during filename completion, @code{nil} means to use | 2566 | immediate reread during file name completion, @code{nil} means to use |
| 2568 | always cached values for the directory contents. | 2567 | always cached values for the directory contents. |
| 2569 | @end defopt | 2568 | @end defopt |
| 2570 | 2569 | ||
| @@ -2632,7 +2631,7 @@ host when the variable @code{default-directory} is remote: | |||
| 2632 | @ifset emacsgvfs | 2631 | @ifset emacsgvfs |
| 2633 | If the remote host is mounted via GVFS (see @ref{GVFS based methods}), | 2632 | If the remote host is mounted via GVFS (see @ref{GVFS based methods}), |
| 2634 | the remote filesystem is mounted locally. Therefore, there are no | 2633 | the remote filesystem is mounted locally. Therefore, there are no |
| 2635 | remote processes; all processes run still locally on your machine with | 2634 | remote processes; all processes run still locally on your host with |
| 2636 | an adapted @code{default-directory}. This section does not apply for | 2635 | an adapted @code{default-directory}. This section does not apply for |
| 2637 | such connection methods. | 2636 | such connection methods. |
| 2638 | @end ifset | 2637 | @end ifset |
| @@ -2645,7 +2644,7 @@ integrated. Integration of further packages is planned, any help for | |||
| 2645 | this is welcome! | 2644 | this is welcome! |
| 2646 | 2645 | ||
| 2647 | When your program is not found in the default search path | 2646 | When your program is not found in the default search path |
| 2648 | @value{tramp} sets on the remote machine, you should either use an | 2647 | @value{tramp} sets on the remote host, you should either use an |
| 2649 | absolute path, or extend @code{tramp-remote-path} (see @ref{Remote | 2648 | absolute path, or extend @code{tramp-remote-path} (see @ref{Remote |
| 2650 | Programs}): | 2649 | Programs}): |
| 2651 | 2650 | ||
| @@ -2713,18 +2712,18 @@ that host. | |||
| 2713 | 2712 | ||
| 2714 | Calling @kbd{M-x shell} in a buffer related to a remote host runs the | 2713 | Calling @kbd{M-x shell} in a buffer related to a remote host runs the |
| 2715 | local shell as defined in @option{shell-file-name}. This might be | 2714 | local shell as defined in @option{shell-file-name}. This might be |
| 2716 | also a valid path name for a shell to be applied on the remote host, | 2715 | also a valid file name for a shell to be applied on the remote host, |
| 2717 | but it will fail at least when your local and remote hosts belong to | 2716 | but it will fail at least when your local and remote hosts belong to |
| 2718 | different system types, like @samp{windows-nt} and @samp{gnu/linux}. | 2717 | different system types, like @samp{windows-nt} and @samp{gnu/linux}. |
| 2719 | 2718 | ||
| 2720 | You must set the variable @option{explicit-shell-file-name} to the | 2719 | You must set the variable @option{explicit-shell-file-name} to the |
| 2721 | shell path name on the remote host, in order to start that shell on | 2720 | shell file name on the remote host, in order to start that shell on |
| 2722 | the remote host. | 2721 | the remote host. |
| 2723 | 2722 | ||
| 2724 | @ifset emacs | 2723 | @ifset emacs |
| 2725 | Starting with Emacs 24 this won't be necessary, if you call | 2724 | Starting with Emacs 24 this won't be necessary, if you call |
| 2726 | @code{shell} interactively. You will be asked for the remote shell | 2725 | @code{shell} interactively. You will be asked for the remote shell |
| 2727 | path, if you are on a remote buffer, and if | 2726 | file name, if you are on a remote buffer, and if |
| 2728 | @option{explicit-shell-file-name} is equal to @code{nil}. | 2727 | @option{explicit-shell-file-name} is equal to @code{nil}. |
| 2729 | @end ifset | 2728 | @end ifset |
| 2730 | 2729 | ||
| @@ -2924,7 +2923,7 @@ the @value{tramp} Mail Subscription Page}. | |||
| 2924 | @ifset emacs | 2923 | @ifset emacs |
| 2925 | @ifset installchapter | 2924 | @ifset installchapter |
| 2926 | Before sending a bug report, you could check whether @value{tramp} | 2925 | Before sending a bug report, you could check whether @value{tramp} |
| 2927 | works at all. Run the test suite on your local machine, @ref{Testing}. | 2926 | works at all. Run the test suite on your local host, @ref{Testing}. |
| 2928 | @end ifset | 2927 | @end ifset |
| 2929 | @end ifset | 2928 | @end ifset |
| 2930 | 2929 | ||
| @@ -2935,7 +2934,7 @@ of your system and @value{tramp} version. | |||
| 2935 | 2934 | ||
| 2936 | When submitting a bug report, please try to describe in excruciating | 2935 | When submitting a bug report, please try to describe in excruciating |
| 2937 | detail the steps required to reproduce the problem, the setup of the | 2936 | detail the steps required to reproduce the problem, the setup of the |
| 2938 | remote machine and any special conditions that exist. You should also | 2937 | remote host and any special conditions that exist. You should also |
| 2939 | check that your problem is not described already in @xref{Frequently | 2938 | check that your problem is not described already in @xref{Frequently |
| 2940 | Asked Questions}. | 2939 | Asked Questions}. |
| 2941 | 2940 | ||
| @@ -3009,7 +3008,7 @@ information about remote hosts is kept in the file specified in | |||
| 3009 | confident that files on remote hosts are not changed out of | 3008 | confident that files on remote hosts are not changed out of |
| 3010 | @value{emacsname}' control, set @code{remote-file-name-inhibit-cache} | 3009 | @value{emacsname}' control, set @code{remote-file-name-inhibit-cache} |
| 3011 | to @code{nil}. Set also @code{tramp-completion-reread-directory-timeout} | 3010 | to @code{nil}. Set also @code{tramp-completion-reread-directory-timeout} |
| 3012 | to @code{nil}, @ref{Filename completion}. | 3011 | to @code{nil}, @ref{File name completion}. |
| 3013 | 3012 | ||
| 3014 | Disable version control. If you access remote files which are not | 3013 | Disable version control. If you access remote files which are not |
| 3015 | under version control, a lot of check operations can be avoided by | 3014 | under version control, a lot of check operations can be avoided by |
| @@ -3037,7 +3036,7 @@ reasons heading the bug mailing list: | |||
| 3037 | @item | 3036 | @item |
| 3038 | Unknown characters in the prompt | 3037 | Unknown characters in the prompt |
| 3039 | 3038 | ||
| 3040 | @value{tramp} needs to recognize the prompt on the remote machine | 3039 | @value{tramp} needs to recognize the prompt on the remote host |
| 3041 | after execution any command. This is not possible when the prompt | 3040 | after execution any command. This is not possible when the prompt |
| 3042 | contains unknown characters like escape sequences for coloring. This | 3041 | contains unknown characters like escape sequences for coloring. This |
| 3043 | should be avoided on the remote side. @xref{Remote shell setup}. for | 3042 | should be avoided on the remote side. @xref{Remote shell setup}. for |
| @@ -3069,7 +3068,7 @@ incidentally) doesn't work with WinSSHD due to strange prompt settings. | |||
| 3069 | @item | 3068 | @item |
| 3070 | Echoed characters after login | 3069 | Echoed characters after login |
| 3071 | 3070 | ||
| 3072 | When the remote machine opens an echoing shell, there might be control | 3071 | When the remote host opens an echoing shell, there might be control |
| 3073 | characters in the welcome message. @value{tramp} tries to suppress | 3072 | characters in the welcome message. @value{tramp} tries to suppress |
| 3074 | such echoes via the @command{stty -echo} command, but sometimes this | 3073 | such echoes via the @command{stty -echo} command, but sometimes this |
| 3075 | command is not reached, because the echoed output has confused | 3074 | command is not reached, because the echoed output has confused |
| @@ -3167,7 +3166,7 @@ your @file{~/.ssh/config}: | |||
| 3167 | @item | 3166 | @item |
| 3168 | File name completion does not work with @value{tramp} | 3167 | File name completion does not work with @value{tramp} |
| 3169 | 3168 | ||
| 3170 | When you log in to the remote machine, do you see the output of | 3169 | When you log in to the remote host, do you see the output of |
| 3171 | @command{ls} in color? If so, this may be the cause of your problems. | 3170 | @command{ls} in color? If so, this may be the cause of your problems. |
| 3172 | 3171 | ||
| 3173 | @command{ls} outputs @acronym{ANSI} escape sequences that your terminal | 3172 | @command{ls} outputs @acronym{ANSI} escape sequences that your terminal |
| @@ -3175,12 +3174,12 @@ emulator interprets to set the colors. These escape sequences will | |||
| 3175 | confuse @value{tramp} however. | 3174 | confuse @value{tramp} however. |
| 3176 | 3175 | ||
| 3177 | In your @file{.bashrc}, @file{.profile} or equivalent on the remote | 3176 | In your @file{.bashrc}, @file{.profile} or equivalent on the remote |
| 3178 | machine you probably have an alias configured that adds the option | 3177 | host you probably have an alias configured that adds the option |
| 3179 | @option{--color=yes} or @option{--color=auto}. | 3178 | @option{--color=yes} or @option{--color=auto}. |
| 3180 | 3179 | ||
| 3181 | You should remove that alias and ensure that a new login @emph{does not} | 3180 | You should remove that alias and ensure that a new login @emph{does not} |
| 3182 | display the output of @command{ls} in color. If you still cannot use | 3181 | display the output of @command{ls} in color. If you still cannot use |
| 3183 | filename completion, report a bug to the @value{tramp} developers. | 3182 | file name completion, report a bug to the @value{tramp} developers. |
| 3184 | 3183 | ||
| 3185 | 3184 | ||
| 3186 | @item | 3185 | @item |
| @@ -3726,7 +3725,7 @@ names. As such, the lisp functions @code{file-name-directory} and | |||
| 3726 | package. | 3725 | package. |
| 3727 | 3726 | ||
| 3728 | Their replacements are reasonably simplistic in their approach. They | 3727 | Their replacements are reasonably simplistic in their approach. They |
| 3729 | dissect the filename, call the original handler on the localname and | 3728 | dissect the file name, call the original handler on the localname and |
| 3730 | then rebuild the @value{tramp} file name with the result. | 3729 | then rebuild the @value{tramp} file name with the result. |
| 3731 | 3730 | ||
| 3732 | This allows the platform specific hacks in the original handlers to take | 3731 | This allows the platform specific hacks in the original handlers to take |
| @@ -3736,19 +3735,19 @@ effect while preserving the @value{tramp} file name information. | |||
| 3736 | @ifset emacs | 3735 | @ifset emacs |
| 3737 | @node External packages | 3736 | @node External packages |
| 3738 | @section Integration with external Lisp packages | 3737 | @section Integration with external Lisp packages |
| 3739 | @subsection Filename completion. | 3738 | @subsection File name completion. |
| 3740 | 3739 | ||
| 3741 | While reading filenames in the minibuffer, @value{tramp} must decide | 3740 | While reading file names in the minibuffer, @value{tramp} must decide |
| 3742 | whether it completes possible incomplete filenames, or not. Imagine | 3741 | whether it completes possible incomplete file names, or not. Imagine |
| 3743 | there is the following situation: You have typed @kbd{C-x C-f | 3742 | there is the following situation: You have typed @kbd{C-x C-f |
| 3744 | @value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot | 3743 | @value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot |
| 3745 | know, whether @option{ssh} is a method or a host name. It checks | 3744 | know, whether @option{ssh} is a method or a host name. It checks |
| 3746 | therefore the last input character you have typed. If this is | 3745 | therefore the last input character you have typed. If this is |
| 3747 | @key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are | 3746 | @key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are |
| 3748 | still in filename completion, and it does not connect to the possible | 3747 | still in file name completion, and it does not connect to the possible |
| 3749 | remote host @option{ssh}. | 3748 | remote host @option{ssh}. |
| 3750 | 3749 | ||
| 3751 | External packages, which use other characters for completing filenames | 3750 | External packages, which use other characters for completing file names |
| 3752 | in the minibuffer, must signal this to @value{tramp}. For this case, | 3751 | in the minibuffer, must signal this to @value{tramp}. For this case, |
| 3753 | the variable @code{non-essential} can be bound temporarily to | 3752 | the variable @code{non-essential} can be bound temporarily to |
| 3754 | a non-@code{nil} value. | 3753 | a non-@code{nil} value. |
| @@ -3891,16 +3890,16 @@ printed and deleted. | |||
| 3891 | But I have decided that this is too fragile to reliably work, so on some | 3890 | But I have decided that this is too fragile to reliably work, so on some |
| 3892 | systems you'll have to do without the uuencode methods. | 3891 | systems you'll have to do without the uuencode methods. |
| 3893 | 3892 | ||
| 3894 | @item The @value{tramp} filename syntax differs between Emacs and XEmacs. | 3893 | @item The @value{tramp} file name syntax differs between Emacs and XEmacs. |
| 3895 | 3894 | ||
| 3896 | The Emacs maintainers wish to use a unified filename syntax for | 3895 | The Emacs maintainers wish to use a unified file name syntax for |
| 3897 | Ange-FTP and @value{tramp} so that users don't have to learn a new | 3896 | Ange-FTP and @value{tramp} so that users don't have to learn a new |
| 3898 | syntax. It is sufficient to learn some extensions to the old syntax. | 3897 | syntax. It is sufficient to learn some extensions to the old syntax. |
| 3899 | 3898 | ||
| 3900 | For the XEmacs maintainers, the problems caused from using a unified | 3899 | For the XEmacs maintainers, the problems caused from using a unified |
| 3901 | filename syntax are greater than the gains. The XEmacs package system | 3900 | file name syntax are greater than the gains. The XEmacs package system |
| 3902 | uses EFS for downloading new packages. So, obviously, EFS has to be | 3901 | uses EFS for downloading new packages. So, obviously, EFS has to be |
| 3903 | installed from the start. If the filenames were unified, @value{tramp} | 3902 | installed from the start. If the file names were unified, @value{tramp} |
| 3904 | would have to be installed from the start, too. | 3903 | would have to be installed from the start, too. |
| 3905 | 3904 | ||
| 3906 | @ifset xemacs | 3905 | @ifset xemacs |
| @@ -3917,12 +3916,12 @@ The autoload of the @value{emacsname} @value{tramp} package must be | |||
| 3917 | disabled. This can be achieved by setting file permissions @code{000} | 3916 | disabled. This can be achieved by setting file permissions @code{000} |
| 3918 | to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}. | 3917 | to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}. |
| 3919 | 3918 | ||
| 3920 | In case of unified filenames, all @value{emacsname} download sites are | 3919 | In case of unified file names, all @value{emacsname} download sites are |
| 3921 | added to @code{tramp-default-method-alist} with default method | 3920 | added to @code{tramp-default-method-alist} with default method |
| 3922 | @option{ftp} @xref{Default Method}. These settings shouldn't be | 3921 | @option{ftp} @xref{Default Method}. These settings shouldn't be |
| 3923 | touched for proper working of the @value{emacsname} package system. | 3922 | touched for proper working of the @value{emacsname} package system. |
| 3924 | 3923 | ||
| 3925 | The syntax for unified filenames is described in the @value{tramp} manual | 3924 | The syntax for unified file names is described in the @value{tramp} manual |
| 3926 | for @value{emacsothername}. | 3925 | for @value{emacsothername}. |
| 3927 | @end ifset | 3926 | @end ifset |
| 3928 | @end itemize | 3927 | @end itemize |
| @@ -3955,7 +3954,5 @@ for @value{emacsothername}. | |||
| 3955 | @c shells. | 3954 | @c shells. |
| 3956 | @c * Explain how tramp.el works in principle: open a shell on a remote | 3955 | @c * Explain how tramp.el works in principle: open a shell on a remote |
| 3957 | @c host and then send commands to it. | 3956 | @c host and then send commands to it. |
| 3958 | @c * Use `filename' resp. `file name' consistently. | ||
| 3959 | @c * Use `host' resp. `machine' consistently. | ||
| 3960 | @c * Consistent small or capitalized words especially in menus. | 3957 | @c * Consistent small or capitalized words especially in menus. |
| 3961 | @c * Make a unique declaration of @trampfn. | 3958 | @c * Make a unique declaration of @trampfn. |
diff --git a/etc/COOKIES b/etc/COOKIES deleted file mode 100644 index 1d8c0955d42..00000000000 --- a/etc/COOKIES +++ /dev/null | |||
| @@ -1,157 +0,0 @@ | |||
| 1 | [Someone sent this in from California, and we decided to extend | ||
| 2 | our campaign against information hoarding to recipes as well | ||
| 3 | as software. (Recipes are the closest thing, not involving computers, | ||
| 4 | to software.) | ||
| 5 | |||
| 6 | The story appears to be a myth, according to the Chicago Tribune, | ||
| 7 | which says that Mrs Fields Cookies hoards the information completely. | ||
| 8 | Therefore, this recipe can be thought of as a compatible replacement. | ||
| 9 | We have reports that the cookies it makes are pretty good.] | ||
| 10 | |||
| 11 | Someone at PG&E called the Mrs. Fields Cookie office | ||
| 12 | and requested the recipe for her cookies. They asked | ||
| 13 | her for her charge card number, and she gave it to them | ||
| 14 | thinking the cost would be $15 to $25. It turned out | ||
| 15 | to be $200! | ||
| 16 | |||
| 17 | Therefore, this person is giving the recipe to anyone | ||
| 18 | and everyone she knows (and doesn't know) so that | ||
| 19 | someone can get use of her $200. Anyway, just keep | ||
| 20 | passing it on. | ||
| 21 | |||
| 22 | Cream together: 2 cups butter | ||
| 23 | 2 cups sugar | ||
| 24 | 2 cups brown sugar | ||
| 25 | |||
| 26 | Add: 4 eggs | ||
| 27 | 2 tsp. vanilla | ||
| 28 | |||
| 29 | Mix together in | ||
| 30 | separate bowl: 4 cups flour | ||
| 31 | 5 cups oatmeal (put small | ||
| 32 | amounts of oatmeal in blender until it turns to | ||
| 33 | powder. Measure out 5 cups of oatmeal and only | ||
| 34 | "powderize" that, NOT 5 cups "powderized" oatmeal) | ||
| 35 | |||
| 36 | 1 tsp salt | ||
| 37 | 2 tsp baking powder | ||
| 38 | 2 tsp baking soda | ||
| 39 | |||
| 40 | Mix: All of the above | ||
| 41 | |||
| 42 | Add: 24 oz. bag of chocolate chips and | ||
| 43 | 1 finely grated 8 oz Hershey bar (plain) | ||
| 44 | |||
| 45 | Add: 3 cups chopped nuts (any kind) | ||
| 46 | |||
| 47 | Bake on greased cookie sheet (make golf ball sized balls) and | ||
| 48 | bake about two inches apart. Bake at 350 degrees for 8 - 10 | ||
| 49 | minutes. DO NOT OVERBAKE. Makes 112. | ||
| 50 | |||
| 51 | From: ucdavis!lll-lcc!hplabs!parcvax!bane@ucbvax.berkeley.edu (John R. Bane) | ||
| 52 | Subject: Re: free cookie foundation? | ||
| 53 | |||
| 54 | Hi! I "stole" your very expensive cookie recipe off the net. If you | ||
| 55 | want to send me your SnailMail address, I'll be glad to send you a | ||
| 56 | dollar (I would like to suggest this to the net, but I think there is | ||
| 57 | some netiquette rule against asking for money - or is that only money | ||
| 58 | for oneself?) to help defray the cost (it's not much, but if EVERYone | ||
| 59 | who took the recipe sent you a dollar, it would help). | ||
| 60 | |||
| 61 | Here also is another cookie recipe which I'm very fond of. | ||
| 62 | |||
| 63 | Makes 6-8 dozen | ||
| 64 | Bake at 375 degrees for ~10 min. | ||
| 65 | |||
| 66 | Cream together: | ||
| 67 | |||
| 68 | 1 cup shortening (I use Weight Watcher's Reduced Calorie Margarine!) | ||
| 69 | 1/4 cup peanut butter (I recommend the non-sugared kind) | ||
| 70 | 1/2 cup sugar | ||
| 71 | 1/2 cup brown sugar | ||
| 72 | 2 eggs | ||
| 73 | 1 teaspoon vanilla | ||
| 74 | |||
| 75 | Add: | ||
| 76 | |||
| 77 | 1/2 cup flour | ||
| 78 | 1 teaspoon soda | ||
| 79 | 1/2 teaspoon salt | ||
| 80 | 2 cups rolled oats (I use the 5-min variety) | ||
| 81 | 1-2 cups chocolate chips (I use 2 cups semi-sweet - ummmm!) | ||
| 82 | 1 cup nuts (I use pecan pieces - don't get them crushed, or the extra | ||
| 83 | oil will make greasy cookies) | ||
| 84 | 1 cup shredded or flaked coconut | ||
| 85 | |||
| 86 | (The nuts were listed as optional and I added the coconut myself, but | ||
| 87 | I really love them there! You could also add things like m&m's, or | ||
| 88 | raisins (I don't care for raisins in cookies, but you might). I've | ||
| 89 | always wanted to try banana chips.) | ||
| 90 | |||
| 91 | Mix well. Drop by teaspoonfuls on greased cookie sheet (I use pam). | ||
| 92 | Bake at 375 degrees for approx. 10 min. | ||
| 93 | |||
| 94 | My aunt found this recipe in an Amish book called something like | ||
| 95 | "Eating Well When The Whole World Is Starving," and although I thought | ||
| 96 | a cookie recipe was a bit odd for a book like that, they are about the | ||
| 97 | healthiest a cookie is ever likely to get. | ||
| 98 | |||
| 99 | They are also very easy to make (no blending, sifting, rolling, etc.) | ||
| 100 | and extremely delicious. I get rave reviews and recipe requests whenever | ||
| 101 | I make them. | ||
| 102 | |||
| 103 | - rene | ||
| 104 | |||
| 105 | Chocolate Chip Cookies - Glamorous, crunchy, rich with chocolate bits & nuts. | ||
| 106 | |||
| 107 | Also known as "Toll House" Cookies ... from Kenneth and Ruth Wakefield's | ||
| 108 | charming New England Toll House on the outskirts of Whitman, Massachusetts. | ||
| 109 | These cookies were first introduced to American homemakers in 1939 through | ||
| 110 | our series of radio talks on "Famous Foods From Famous Eating Places." | ||
| 111 | |||
| 112 | Mix Thoroughly : | ||
| 113 | 2/3 cup soft shortening ( part butter ) | ||
| 114 | 1/2 cup granulated sugar | ||
| 115 | 1/2 cup brown sugar ( packed ) | ||
| 116 | 1 egg | ||
| 117 | 1 tsp vanilla | ||
| 118 | |||
| 119 | Sift together and stir in : | ||
| 120 | 1-1/2 cups sifted flour (*) | ||
| 121 | 1/2 tsp soda | ||
| 122 | 1/2 tsp salt | ||
| 123 | |||
| 124 | Stir in : | ||
| 125 | 1/2 cup cut-up nuts | ||
| 126 | 6 oz package of semi-sweet chocolate pieces ( about 1-1/4 cups ) | ||
| 127 | |||
| 128 | |||
| 129 | (*) for a softer, more rounded cookie, use 1-3/4 cups sifted flour. | ||
| 130 | |||
| 131 | |||
| 132 | Drop rounded teaspoonfuls about 2" apart on ungreased baking sheet. Bake until | ||
| 133 | delicately browned ... cookies should still be soft. Cool slightly before you | ||
| 134 | remove them from the baking sheet. | ||
| 135 | |||
| 136 | Temperature: 375 F. ( modern oven ) | ||
| 137 | Time: bake 8 - 10 minutes | ||
| 138 | Amount: 4 - 5 dozen 2" cookies | ||
| 139 | |||
| 140 | |||
| 141 | ===== | ||
| 142 | |||
| 143 | Personal comments : | ||
| 144 | |||
| 145 | I find it tastes better with a mixture of shortening and butter, as they say. | ||
| 146 | |||
| 147 | You don't need << all >> of that sugar, and it can be whatever color you want. | ||
| 148 | |||
| 149 | The nuts are optional. Feel free to play with the recipe. I put oatmeal in it, | ||
| 150 | reducing flour accordingly, and sometimes cinnamon. | ||
| 151 | |||
| 152 | I also find it useful to grease the cookie sheets. | ||
| 153 | |||
| 154 | I think I'm going to go bake some now ... | ||
| 155 | |||
| 156 | -- richard | ||
| 157 | |||
diff --git a/etc/ChangeLog b/etc/ChangeLog index 7af5d65092f..a6f51d04ae2 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,18 @@ | |||
| 1 | 2014-01-12 David Engster <deng@randomsample.de> | ||
| 2 | |||
| 3 | * NEWS: Add missing renames to EIEIO section. Also, no functions | ||
| 4 | were removed but only made obsolete. Class field accessors were | ||
| 5 | always purely internal, so remove that remark. Add markup. | ||
| 6 | |||
| 7 | 2014-01-11 Eric S. Raymond <esr@thyrsus.com> | ||
| 8 | |||
| 9 | * celibacy.1, sex.6, condom.1, echo.msg: Deleted at RMS's | ||
| 10 | suggestion. Not lost to posterity as they are part of the | ||
| 11 | widely distributed funny-manpages collection. | ||
| 12 | |||
| 13 | * COOKIES, copying.paper, INTERVIEW, MAILINGLISTS, MOTIVATION, | ||
| 14 | * SERVICE: More deletions suggested by RMS. | ||
| 15 | |||
| 1 | 2014-01-10 Glenn Morris <rgm@gnu.org> | 16 | 2014-01-10 Glenn Morris <rgm@gnu.org> |
| 2 | 17 | ||
| 3 | * ORDERS: Replace contents with pointer to emacs.info, mark obsolete. | 18 | * ORDERS: Replace contents with pointer to emacs.info, mark obsolete. |
diff --git a/etc/INTERVIEW b/etc/INTERVIEW deleted file mode 100644 index 4e109ba49dd..00000000000 --- a/etc/INTERVIEW +++ /dev/null | |||
| @@ -1,442 +0,0 @@ | |||
| 1 | |||
| 2 | GNU'S NOT UNIX | ||
| 3 | |||
| 4 | Conducted by David Betz and Jon Edwards | ||
| 5 | |||
| 6 | Richard Stallman discusses his public-domain | ||
| 7 | UNIX-compatible software system | ||
| 8 | with BYTE editors | ||
| 9 | (July 1986) | ||
| 10 | |||
| 11 | Copyright (C) 1986 Richard Stallman. Permission is granted to make and | ||
| 12 | distribute copies of this article as long as the copyright and this notice | ||
| 13 | appear on all copies. | ||
| 14 | |||
| 15 | Richard Stallman has undertaken probably the most ambitious free software | ||
| 16 | development project to date, the GNU system. In his GNU Manifesto, | ||
| 17 | published in the March 1985 issue of Dr. Dobb's Journal, Stallman described | ||
| 18 | GNU as a "complete Unix-compatible software system which I am writing so | ||
| 19 | that I can give it away free to everyone who can use it... Once GNU is | ||
| 20 | written, everyone will be able to obtain good system software free, just | ||
| 21 | like air." (GNU is an acronym for GNU's Not UNIX; the "G" is pronounced.) | ||
| 22 | |||
| 23 | Stallman is widely known as the author of EMACS, a powerful text editor | ||
| 24 | that he developed at the MIT Artificial Intelligence Laboratory. It is no | ||
| 25 | coincidence that the first piece of software produced as part of the GNU | ||
| 26 | project was a new implementation of EMACS. GNU EMACS has already achieved a | ||
| 27 | reputation as one of the best implementations of EMACS currently available | ||
| 28 | at any price. | ||
| 29 | |||
| 30 | BYTE: We read your GNU Manifesto in the March 1985 issue of Dr. Dobb's. | ||
| 31 | What has happened since? Was that really the beginning, and how have you | ||
| 32 | progressed since then? | ||
| 33 | |||
| 34 | Stallman: The publication in Dr. Dobb's wasn't the beginning of the | ||
| 35 | project. I wrote the GNU Manifesto when I was getting ready to start the | ||
| 36 | project, as a proposal to ask computer manufacturers for funding. They | ||
| 37 | didn't want to get involved, and I decided that rather than spend my time | ||
| 38 | trying to pursue funds, I ought to spend it writing code. The manifesto was | ||
| 39 | published about a year and a half after I had written it, when I had barely | ||
| 40 | begun distributing the GNU EMACS. Since that time, in addition to making | ||
| 41 | GNU EMACS more complete and making it run on many more computers, I have | ||
| 42 | nearly finished the optimizing C compiler and all the other software that | ||
| 43 | is needed for running C programs. This includes a source-level debugger | ||
| 44 | that has many features that the other source-level debuggers on UNIX don't | ||
| 45 | have. For example, it has convenience variables within the debugger so you | ||
| 46 | can save values, and it also has a history of all the values that you have | ||
| 47 | printed out, making it tremendously easier to chase around list structures. | ||
| 48 | |||
| 49 | BYTE: You have finished an editor that is now widely distributed and you | ||
| 50 | are about to finish the compiler. | ||
| 51 | |||
| 52 | Stallman: I expect that it will be finished this October. | ||
| 53 | |||
| 54 | BYTE: What about the kernel? | ||
| 55 | |||
| 56 | Stallman: I'm currently planning to start with the kernel that was written | ||
| 57 | at MIT and was released to the public recently with the idea that I would | ||
| 58 | use it. This kernel is called TRIX; it's based on remote procedure call. I | ||
| 59 | still need to add compatibility for a lot of the features of UNIX which it | ||
| 60 | doesn't have currently. I haven't started to work on that yet. I'm | ||
| 61 | finishing the compiler before I go to work on the kernel. I am also going | ||
| 62 | to have to rewrite the file system. I intend to make it failsafe just by | ||
| 63 | having it write blocks in the proper order so that the disk structure is | ||
| 64 | always consistent. Then I want to add version numbers. I have a complicated | ||
| 65 | scheme to reconcile version numbers with the way people usually use UNIX. | ||
| 66 | You have to be able to specify filenames without version numbers, but you | ||
| 67 | also have to be able to specify them with explicit version numbers, and | ||
| 68 | these both need to work with ordinary UNIX programs that have not been | ||
| 69 | modified in any way to deal with the existence of this feature. I think I | ||
| 70 | have a scheme for doing this, and only trying it will show me whether it | ||
| 71 | really does the job. | ||
| 72 | |||
| 73 | BYTE: Do you have a brief description you can give us as to how GNU as a | ||
| 74 | system will be superior to other systems? We know that one of your goals is | ||
| 75 | to produce something that is compatible with UNIX. But at least in the area | ||
| 76 | of file systems you have already said that you are going to go beyond UNIX | ||
| 77 | and produce something that is better. | ||
| 78 | |||
| 79 | Stallman: The C compiler will produce better code and run faster. The | ||
| 80 | debugger is better. With each piece I may or may not find a way to improve | ||
| 81 | it. But there is no one answer to this question. To some extent I am | ||
| 82 | getting the benefit of reimplementation, which makes many systems much | ||
| 83 | better. To some extent it's because I have been in the field a long time | ||
| 84 | and worked on many other systems. I therefore have many ideas to bring to | ||
| 85 | bear. One way in which it will be better is that practically everything in | ||
| 86 | the system will work on files of any size, on lines of any size, with any | ||
| 87 | characters appearing in them. The UNIX system is very bad in that regard. | ||
| 88 | It's not anything new as a principle of software engineering that you | ||
| 89 | shouldn't have arbitrary limits. But it just was the standard practice in | ||
| 90 | writing UNIX to put those in all the time, possibly just because they were | ||
| 91 | writing it for a very small computer. The only limit in the GNU system is | ||
| 92 | when your program runs out of memory because it tried to work on too much | ||
| 93 | data and there is no place to keep it all. | ||
| 94 | |||
| 95 | BYTE: And that isn't likely to be hit if you've got virtual memory. You may | ||
| 96 | just take forever to come up with the solution. | ||
| 97 | |||
| 98 | Stallman: Actually these limits tend to hit in a time long before you take | ||
| 99 | forever to come up with the solution. | ||
| 100 | |||
| 101 | BYTE: Can you say something about what types of machines and environments | ||
| 102 | GNU EMACS in particular has been made to run under? It's now running on | ||
| 103 | VAXes; has it migrated in any form to personal computers? | ||
| 104 | |||
| 105 | Stallman: I'm not sure what you mean by personal computers. For example, is | ||
| 106 | a Sun a personal computer? GNU EMACS requires at least a megabyte of | ||
| 107 | available memory and preferably more. It is normally used on machines that | ||
| 108 | have virtual memory. Except for various technical problems in a few C | ||
| 109 | compilers, almost any machine with virtual memory and running a fairly | ||
| 110 | recent version of UNIX will run GNU EMACS, and most of them currently do. | ||
| 111 | |||
| 112 | BYTE: Has anyone tried to port it to Ataris or Macintoshes? | ||
| 113 | |||
| 114 | Stallman: The Atari 1040ST still doesn't have quite enough memory. The next | ||
| 115 | Atari machine, I expect, will run it. I also think that future Ataris will | ||
| 116 | have some forms of memory mapping. Of course, I am not designing the | ||
| 117 | software to run on the kinds of computers that are prevalent today. I knew | ||
| 118 | when I started this project it was going to take a few years. I therefore | ||
| 119 | decided that I didn't want to make a worse system by taking on the | ||
| 120 | additional challenge of making it run in the currently constrained | ||
| 121 | environment. So instead I decided I'm going to write it in the way that | ||
| 122 | seems the most natural and best. I am confident that in a couple of years | ||
| 123 | machines of sufficient size will be prevalent. In fact, increases in memory | ||
| 124 | size are happening so fast it surprises me how slow most of the people are | ||
| 125 | to put in virtual memory; I think it is totally essential. | ||
| 126 | |||
| 127 | BYTE: I think people don't really view it as being necessary for | ||
| 128 | single-user machines. | ||
| 129 | |||
| 130 | Stallman: They don't understand that single user doesn't mean single | ||
| 131 | program. Certainly for any UNIX-like system it's important to be able to | ||
| 132 | run lots of different processes at the same time even if there is only one | ||
| 133 | of you. You could run GNU EMACS on a nonvirtual-memory machine with enough | ||
| 134 | memory, but you couldn't run the rest of the GNU system very well or a UNIX | ||
| 135 | system very well. | ||
| 136 | |||
| 137 | BYTE: How much of LISP is present in GNU EMACS? It occurred to me that it | ||
| 138 | may be useful to use that as a tool for learning LISP. | ||
| 139 | |||
| 140 | Stallman: You can certainly do that. GNU EMACS contains a complete, | ||
| 141 | although not very powerful, LISP system. It's powerful enough for writing | ||
| 142 | editor commands. It's not comparable with, say, a Common LISP System, | ||
| 143 | something you could really use for system programming, but it has all the | ||
| 144 | things that LISP needs to have. | ||
| 145 | |||
| 146 | BYTE: Do you have any predictions about when you would be likely to | ||
| 147 | distribute a workable environment in which, if we put it on our machines or | ||
| 148 | workstations, we could actually get reasonable work done without using | ||
| 149 | anything other than code that you distribute? | ||
| 150 | |||
| 151 | Stallman: It's really hard to say. That could happen in a year, but of | ||
| 152 | course it could take longer. It could also conceivably take less, but | ||
| 153 | that's not too likely anymore. I think I'll have the compiler finished in a | ||
| 154 | month or two. The only other large piece of work I really have to do is in | ||
| 155 | the kernel. I first predicted GNU would take something like two years, but | ||
| 156 | it has now been two and a half years and I'm still not finished. Part of | ||
| 157 | the reason for the delay is that I spent a lot of time working on one | ||
| 158 | compiler that turned out to be a dead end. I had to rewrite it completely. | ||
| 159 | Another reason is that I spent so much time on GNU EMACS. I originally | ||
| 160 | thought I wouldn't have to do that at all. | ||
| 161 | |||
| 162 | BYTE: Tell us about your distribution scheme. | ||
| 163 | |||
| 164 | Stallman: I don't put software or manuals in the public domain, and the | ||
| 165 | reason is that I want to make sure that all the users get the freedom to | ||
| 166 | share. I don't want anyone making an improved version of a program I wrote | ||
| 167 | and distributing it as proprietary. I don't want that to ever be able to | ||
| 168 | happen. I want to encourage the free improvements to these programs, and | ||
| 169 | the best way to do that is to take away any temptation for a person to make | ||
| 170 | improvements nonfree. Yes, a few of them will refrain from making | ||
| 171 | improvements, but a lot of others will make the same improvements and | ||
| 172 | they'll make them free. | ||
| 173 | |||
| 174 | BYTE: And how do you go about guaranteeing that? | ||
| 175 | |||
| 176 | Stallman: I do this by copyrighting the programs and putting on a notice | ||
| 177 | giving people explicit permission to copy the programs and change them but | ||
| 178 | only on the condition that they distribute under the same terms that I | ||
| 179 | used, if at all. You don't have to distribute the changes you make to any | ||
| 180 | of my programs--you can just do it for yourself, and you don't have to give | ||
| 181 | it to anyone or tell anyone. But if you do give it to someone else, you | ||
| 182 | have to do it under the same terms that I use. | ||
| 183 | |||
| 184 | BYTE: Do you obtain any rights over the executable code derived from the C | ||
| 185 | compiler? | ||
| 186 | |||
| 187 | Stallman: The copyright law doesn't give me copyright on output from the | ||
| 188 | compiler, so it doesn't give me a way to say anything about that, and in | ||
| 189 | fact I don't try to. I don't sympathize with people developing proprietary | ||
| 190 | products with any compiler, but it doesn't seem especially useful to try to | ||
| 191 | stop them from developing them with this compiler, so I am not going to. | ||
| 192 | |||
| 193 | BYTE: Do your restrictions apply if people take pieces of your code to | ||
| 194 | produce other things as well? | ||
| 195 | |||
| 196 | Stallman: Yes, if they incorporate with changes any sizable piece. If it | ||
| 197 | were two lines of code, that's nothing; copyright doesn't apply to that. | ||
| 198 | Essentially, I have chosen these conditions so that first there is a | ||
| 199 | copyright, which is what all the software hoarders use to stop everybody | ||
| 200 | from doing anything, and then I add a notice giving up part of those | ||
| 201 | rights. So the conditions talk only about the things that copyright applies | ||
| 202 | to. I don't believe that the reason you should obey these conditions is | ||
| 203 | because of the law. The reason you should obey is because an upright person | ||
| 204 | when he distributes software encourages other people to share it further. | ||
| 205 | |||
| 206 | BYTE: In a sense you are enticing people into this mode of thinking by | ||
| 207 | providing all of these interesting tools that they can use but only if they | ||
| 208 | buy into your philosophy. | ||
| 209 | |||
| 210 | Stallman: Yes. You could also see it as using the legal system that | ||
| 211 | software hoarders have set up against them. I'm using it to protect the | ||
| 212 | public from them. | ||
| 213 | |||
| 214 | BYTE: Given that manufacturers haven't wanted to fund the project, who do | ||
| 215 | you think will use the GNU system when it is done? | ||
| 216 | |||
| 217 | Stallman: I have no idea, but it is not an important question. My purpose | ||
| 218 | is to make it possible for people to reject the chains that come with | ||
| 219 | proprietary software. I know that there are people who want to do that. | ||
| 220 | Now, there may be others who don't care, but they are not my concern. I | ||
| 221 | feel a bit sad for them and for the people that they influence. Right now a | ||
| 222 | person who perceives the unpleasantness of the terms of proprietary | ||
| 223 | software feels that he is stuck and has no alternative except not to use a | ||
| 224 | computer. Well, I am going to give him a comfortable alternative. | ||
| 225 | Other people may use the GNU system simply because it is technically | ||
| 226 | superior. For example, my C compiler is producing about as good a code as I | ||
| 227 | have seen from any C compiler. And GNU EMACS is generally regarded as being | ||
| 228 | far superior to the commercial competition. And GNU EMACS was not funded by | ||
| 229 | anyone either, but everyone is using it. I therefore think that many people | ||
| 230 | will use the rest of the GNU system because of its technical advantages. | ||
| 231 | But I would be doing a GNU system even if I didn't know how to make it | ||
| 232 | technically better because I want it to be socially better. The GNU project | ||
| 233 | is really a social project. It uses technical means to make a change in | ||
| 234 | society. | ||
| 235 | |||
| 236 | BYTE: Then it is fairly important to you that people adopt GNU. It is not | ||
| 237 | just an academic exercise to produce this software to give it away to | ||
| 238 | people. You hope it will change the way the software industry operates. | ||
| 239 | |||
| 240 | Stallman: Yes. Some people say no one will ever use it because it doesn't | ||
| 241 | have some attractive corporate logo on it, and other people say that they | ||
| 242 | think it is tremendously important and everyone's going to want to use it. | ||
| 243 | I have no way of knowing what is really going to happen. I don't know any | ||
| 244 | other way to try to change the ugliness of the field that I find myself in, | ||
| 245 | so this is what I have to do. | ||
| 246 | |||
| 247 | BYTE: Can you address the implications? You obviously feel that this is an | ||
| 248 | important political and social statement. | ||
| 249 | |||
| 250 | Stallman: It is a change. I'm trying to change the way people approach | ||
| 251 | knowledge and information in general. I think that to try to own knowledge, | ||
| 252 | to try to control whether people are allowed to use it, or to try to stop | ||
| 253 | other people from sharing it, is sabotage. It is an activity that benefits | ||
| 254 | the person that does it at the cost of impoverishing all of society. One | ||
| 255 | person gains one dollar by destroying two dollars' worth of wealth. I think | ||
| 256 | a person with a conscience wouldn't do that sort of thing except perhaps if | ||
| 257 | he would otherwise die. And of course the people who do this are fairly | ||
| 258 | rich; I can only conclude that they are unscrupulous. I would like to see | ||
| 259 | people get rewards for writing free software and for encouraging other | ||
| 260 | people to use it. I don't want to see people get rewards for writing | ||
| 261 | proprietary software because that is not really a contribution to society. | ||
| 262 | The principle of capitalism is the idea that people manage to make money by | ||
| 263 | producing things and thereby are encouraged to do what is useful, | ||
| 264 | automatically, so to speak. But that doesn't work when it comes to owning | ||
| 265 | knowledge. They are encouraged to do not really what's useful, and what | ||
| 266 | really is useful is not encouraged. I think it is important to say that | ||
| 267 | information is different from material objects like cars and loaves of | ||
| 268 | bread because people can copy it and share it on their own and, if nobody | ||
| 269 | attempts to stop them, they can change it and make it better for | ||
| 270 | themselves. That is a useful thing for people to do. This isn't true of | ||
| 271 | loaves of bread. If you have one loaf of bread and you want another, you | ||
| 272 | can't just put your loaf of bread into a bread copier. you can't make | ||
| 273 | another one except by going through all the steps that were used to make | ||
| 274 | the first one. It therefore is irrelevant whether people are permitted to | ||
| 275 | copy it--it's impossible. | ||
| 276 | Books were printed only on printing presses until recently. It was | ||
| 277 | possible to make a copy yourself by hand, but it wasn't practical because | ||
| 278 | it took so much more work than using a printing press. And it produced | ||
| 279 | something so much less attractive that, for all intents and purposes, you | ||
| 280 | could act as if it were impossible to make books except by mass producing | ||
| 281 | them. And therefore copyright didn't really take any freedom away from the | ||
| 282 | reading public. There wasn't anything that a book purchaser could do that | ||
| 283 | was forbidden by copyright. | ||
| 284 | But this isn't true for computer programs. It's also not true for tape | ||
| 285 | cassettes. It's partly false now for books, but it is still true that for | ||
| 286 | most books it is more expensive and certainly a lot more work to Xerox them | ||
| 287 | than to buy a copy, and the result is still less attractive. Right now we | ||
| 288 | are in a period where the situation that made copyright harmless and | ||
| 289 | acceptable is changing to a situation where copyright will become | ||
| 290 | destructive and intolerable. So the people who are slandered as "pirates" | ||
| 291 | are in fact the people who are trying to do something useful that they have | ||
| 292 | been forbidden to do. The copyright laws are entirely designed to help | ||
| 293 | people take complete control over the use of some information for their own | ||
| 294 | good. But they aren't designed to help people who want to make sure that | ||
| 295 | the information is accessible to the public and stop others from depriving | ||
| 296 | the public. I think that the law should recognize a class of works that are | ||
| 297 | owned by the public, which is different from public domain in the same | ||
| 298 | sense that a public park is different from something found in a garbage | ||
| 299 | can. It's not there for anybody to take away, it's there for everyone to | ||
| 300 | use but for no one to impede. Anybody in the public who finds himself being | ||
| 301 | deprived of the derivative work of something owned by the public should be | ||
| 302 | able to sue about it. | ||
| 303 | |||
| 304 | BYTE: But aren't pirates interested in getting copies of programs because | ||
| 305 | they want to use those programs, not because they want to use that | ||
| 306 | knowledge to produce something better? | ||
| 307 | |||
| 308 | Stallman: I don't see that that's the important distinction. More people | ||
| 309 | using a program means that the program contributes more to society. You | ||
| 310 | have a loaf of bread that could be eaten either once or a million times. | ||
| 311 | |||
| 312 | BYTE: Some users buy commercial software to obtain support. How does your | ||
| 313 | distribution scheme provide support? | ||
| 314 | |||
| 315 | Stallman: I suspect that those users are misled and are not thinking | ||
| 316 | clearly. It is certainly useful to have support, but when they start | ||
| 317 | thinking about how that has something to do with selling software or with | ||
| 318 | the software being proprietary, at that point they are confusing | ||
| 319 | themselves. There is no guarantee that proprietary software will receive | ||
| 320 | good support. Simply because sellers say that they provide support, that | ||
| 321 | doesn't mean it will be any good. And they may go out of business. In fact, | ||
| 322 | people think that GNU EMACS has better support than commercial EMACSes. One | ||
| 323 | of the reasons is that I'm probably a better hacker than the people who | ||
| 324 | wrote the other EMACSes, but the other reason is that everyone has sources | ||
| 325 | and there are so many people interested in figuring out how to do things | ||
| 326 | with it that you don't have to get your support from me. Even just the free | ||
| 327 | support that consists of my fixing bugs people report to me and | ||
| 328 | incorporating that in the next release has given people a good level of | ||
| 329 | support. You can always hire somebody to solve a problem for you, and when | ||
| 330 | the software is free you have a competitive market for the support. You can | ||
| 331 | hire anybody. I distribute a service list with EMACS, a list of people's | ||
| 332 | names and phone numbers and what they charge to provide support. | ||
| 333 | |||
| 334 | BYTE: Do you collect their bug fixes? | ||
| 335 | |||
| 336 | Stallman: Well, they send them to me. I asked all the people who wanted to | ||
| 337 | be listed to promise that they would never ask any of their customers to | ||
| 338 | keep secret whatever they were told or any changes they were given to the | ||
| 339 | GNU software as part of that support. | ||
| 340 | |||
| 341 | BYTE: So you can't have people competing to provide support based on their | ||
| 342 | knowing the solution to some problem that somebody else doesn't know. | ||
| 343 | |||
| 344 | Stallman: No. They can compete based on their being clever and more likely | ||
| 345 | to find the solution to your problem, or their already understanding more | ||
| 346 | of the common problems, or knowing better how to explain to you what you | ||
| 347 | should do. These are all ways they can compete. They can try to do better, | ||
| 348 | but they cannot actively impede their competitors. | ||
| 349 | |||
| 350 | BYTE: I suppose it's like buying a car. You're not forced to go back to the | ||
| 351 | original manufacturer for support or continued maintenance. | ||
| 352 | |||
| 353 | Stallman: Or buying a house--what would it be like if the only person who | ||
| 354 | could ever fix problems with your house was the contractor who built it | ||
| 355 | originally? That is the kind of imposition that's involved in proprietary | ||
| 356 | software. People tell me about a problem that happens in UNIX. Because | ||
| 357 | manufacturers sell improved versions of UNIX, they tend to collect fixes | ||
| 358 | and not give them out except in binaries. The result is that the bugs don't | ||
| 359 | really get fixed. | ||
| 360 | |||
| 361 | BYTE: They're all duplicating effort trying to solve bugs independently. | ||
| 362 | |||
| 363 | Stallman: Yes. Here is another point that helps put the problem of | ||
| 364 | proprietary information in a social perspective. Think about the liability | ||
| 365 | insurance crisis. In order to get any compensation from society, an injured | ||
| 366 | person has to hire a lawyer and split the money with that lawyer. This is a | ||
| 367 | stupid and inefficient way of helping out people who are victims of | ||
| 368 | accidents. And consider all the time that people put into hustling to take | ||
| 369 | business away from their competition. Think of the pens that are packaged | ||
| 370 | in large cardboard packages that cost more than the pen--just to make sure | ||
| 371 | that the pen isn't stolen. Wouldn't it be better if we just put free pens | ||
| 372 | on every street corner? And think of all the toll booths that impede the | ||
| 373 | flow of traffic. It's a gigantic social phenomenon. People find ways of | ||
| 374 | getting money by impeding society. Once they can impede society, they can | ||
| 375 | be paid to leave people alone. The waste inherent in owning information | ||
| 376 | will become more and more important and will ultimately make the difference | ||
| 377 | between the utopia in which nobody really has to work for a living because | ||
| 378 | it's all done by robots and a world just like ours where everyone spends | ||
| 379 | much time replicating what the next fellow is doing. | ||
| 380 | |||
| 381 | BYTE: Like typing in copyright notices on the software. | ||
| 382 | |||
| 383 | Stallman: More like policing everyone to make sure that they don't have | ||
| 384 | forbidden copies of anything and duplicating all the work people have | ||
| 385 | already done because it is proprietary. | ||
| 386 | |||
| 387 | BYTE: A cynic might wonder how you earn your living. | ||
| 388 | |||
| 389 | Stallman: From consulting. When I do consulting, I always reserve the right | ||
| 390 | to give away what I wrote for the consulting job. Also, I could be making | ||
| 391 | my living by mailing copies of the free software that I wrote and some that | ||
| 392 | other people wrote. Lots of people send in $150 for GNU EMACS, but now this | ||
| 393 | money goes to the Free Software Foundation that I started. The foundation | ||
| 394 | doesn't pay me a salary because it would be a conflict of interest. | ||
| 395 | Instead, it hires other people to work on GNU. As long as I can go on | ||
| 396 | making a living by consulting I think that's the best way. | ||
| 397 | |||
| 398 | BYTE: What is currently included in the official GNU distribution tape? | ||
| 399 | |||
| 400 | Stallman: Right now the tape contains GNU EMACS (one version fits all | ||
| 401 | computers); Bison, a program that replaces YACC; MIT Scheme, which is | ||
| 402 | Professor Sussman's super-simplified dialect of LISP; and Hack, a | ||
| 403 | dungeon-exploring game similar to Rogue. | ||
| 404 | |||
| 405 | BYTE: Does the printed manual come with the tape as well? | ||
| 406 | |||
| 407 | Stallman: No. Printed manuals cost $15 each or copy them yourself. Copy | ||
| 408 | this interview and share it, too. | ||
| 409 | |||
| 410 | BYTE: How can you get a copy of that? | ||
| 411 | |||
| 412 | Stallman: Write to the Free Software Foundation, 675 Massachusetts Ave., | ||
| 413 | Cambridge, MA 02139. | ||
| 414 | |||
| 415 | [As of April 2005, this address is: | ||
| 416 | Free Software Foundation | ||
| 417 | 51 Franklin Street, Fifth Floor | ||
| 418 | Boston, MA 02110-1301, USA | ||
| 419 | Voice: +1-617-542-5942 | ||
| 420 | Fax: +1-617-542-2652 | ||
| 421 | ] | ||
| 422 | |||
| 423 | BYTE: What are you going to do when you are done with the GNU system? | ||
| 424 | |||
| 425 | Stallman: I'm not sure. Sometimes I think that what I'll go on to do is the | ||
| 426 | same thing in other areas of software. | ||
| 427 | |||
| 428 | BYTE: So this is just the first of a whole series of assaults on the | ||
| 429 | software industry? | ||
| 430 | |||
| 431 | Stallman: I hope so. But perhaps what I'll do is just live a life of ease | ||
| 432 | working a little bit of the time just to live. I don't have to live | ||
| 433 | expensively. The rest of the time I can find interesting people to hang | ||
| 434 | around with or learn to do things that I don't know how to do. | ||
| 435 | |||
| 436 | Editorial Note: BYTE holds the right to provide this interview on BIX but | ||
| 437 | will not interfere with its distribution. | ||
| 438 | |||
| 439 | Richard Stallman, 545 Technology Square, Room 703, Cambridge, MA 02139. | ||
| 440 | Copyright (C) 1986 Richard Stallman. Permission is granted to make and | ||
| 441 | distribute copies of this article as long as the copyright and this notice | ||
| 442 | appear on all copies. | ||
diff --git a/etc/MAILINGLISTS b/etc/MAILINGLISTS deleted file mode 100644 index 0d5ce9bf6ce..00000000000 --- a/etc/MAILINGLISTS +++ /dev/null | |||
| @@ -1,261 +0,0 @@ | |||
| 1 | GNU Project Electronic Mailing Lists and gnUSENET Newsgroups | ||
| 2 | Last Updated 2006-06-03 | ||
| 3 | |||
| 4 | Please report improvements to: gnu@gnu.org | ||
| 5 | |||
| 6 | See the end of this file for copyright notice and copying conditions | ||
| 7 | |||
| 8 | * Mailing list archives | ||
| 9 | |||
| 10 | The GNU mailing lists are archived at http://lists.gnu.org. | ||
| 11 | |||
| 12 | * Some GNU mailing lists are also distributed as USENET news groups | ||
| 13 | |||
| 14 | Certain GNU mailing lists are gated both ways with the gnu.all | ||
| 15 | newsgroups at uunet. You can tell which they are, because the names | ||
| 16 | correspond. For instance, bug-gnu-emacs corresponds to gnu.emacs.bug; | ||
| 17 | info-gnu-emacs, to gnu.emacs.announce; help-gnu-emacs, to | ||
| 18 | gnu.emacs.help; gnu-emacs-sources, to gnu.emacs.sources. Replacing | ||
| 19 | `emacs' with some other program in those four examples shows you | ||
| 20 | the whole pattern. | ||
| 21 | |||
| 22 | * How to subscribe to and report bugs in mailing lists | ||
| 23 | |||
| 24 | Send requests to be added or removed, to help-gnu-emacs-request (or | ||
| 25 | info-gnu-request, bug-gdb-request, etc.), NOT to info-gnu-emacs (or | ||
| 26 | info-gnu, etc.). Most <LIST_NAME>-request addresses are now handled | ||
| 27 | automagically by GNU Mailman. | ||
| 28 | |||
| 29 | If you need to report problems to a human, send mail to gnu@gnu.org | ||
| 30 | explaining the problem. | ||
| 31 | |||
| 32 | Many of the GNU mailing lists are very large and are received by many | ||
| 33 | people. | ||
| 34 | |||
| 35 | If a message you mail to a list is returned from a MAILER-DAEMON (often | ||
| 36 | with the line: | ||
| 37 | ----- Transcript of session follows ----- | ||
| 38 | don't resend the message to the list. All this return means is that | ||
| 39 | your original message failed to reach a few addresses on the list. Such | ||
| 40 | messages are NEVER a reason to resend a piece of mail a 2nd time. This | ||
| 41 | just bothers all (less the few delivery failures (which will probably | ||
| 42 | just fail again!)) of the readers of the list with a message they have | ||
| 43 | already seen. It also wastes computer and network resources. | ||
| 44 | |||
| 45 | It is appropriate to send these to the -request address for a list, and | ||
| 46 | ask them to check the problem out. | ||
| 47 | |||
| 48 | * Send Specific Requests for Information to: gnu@gnu.org | ||
| 49 | |||
| 50 | Specific requests for information about obtaining GNU software, or GNU | ||
| 51 | activities in Cambridge and elsewhere can be directed to: | ||
| 52 | gnu@gnu.org | ||
| 53 | |||
| 54 | * General Information about all lists | ||
| 55 | |||
| 56 | Do not send very large files to mailing lists; instead put then on a web | ||
| 57 | page and announce the URL. Good bug reports are short. | ||
| 58 | See section '* General Information about bug-* lists and ...' for | ||
| 59 | further details. | ||
| 60 | |||
| 61 | The GNU mailing lists and newsgroups, like the GNU project itself, exist | ||
| 62 | to promote the freedom to share software. So don't use these lists to | ||
| 63 | promote or recommend non-free software or documentation, like | ||
| 64 | proprietary books on GNU software. (Using them to post ordering | ||
| 65 | information is the ultimate faux pas.) If there is no free program to | ||
| 66 | do a certain task, then somebody should write one! Similarly, free | ||
| 67 | documentation that is inadequate should be improved--a way in which | ||
| 68 | non-programmers can make a valuable contribution. See also the article | ||
| 69 | at <URL:http://www.gnu.org/philosophy/free-doc.html>. | ||
| 70 | |||
| 71 | * General Information about info-* lists | ||
| 72 | |||
| 73 | These lists and their newsgroups are meant for important announcements. | ||
| 74 | Since the GNU project uses software development as a means for social | ||
| 75 | change, the announcements may be technical or political. | ||
| 76 | |||
| 77 | Most GNU projects info-* lists (and their corresponding gnu.*.announce | ||
| 78 | newsgroups) are moderated to keep their content significant and | ||
| 79 | relevant. If you have a bug to report, send it to the bug-* list. If | ||
| 80 | you need help on something else and the help-* list exists, ask it. | ||
| 81 | |||
| 82 | See section '* General Information about all lists'. | ||
| 83 | |||
| 84 | * General Information about help-* lists | ||
| 85 | |||
| 86 | These lists (and their newsgroups) exist for anyone to ask questions | ||
| 87 | about the GNU software that the list deals with. The lists are read by | ||
| 88 | people who are willing to take the time to help other users. | ||
| 89 | |||
| 90 | When you answer the questions that people ask on the help-* lists, keep | ||
| 91 | in mind that you shouldn't answer by promoting a proprietary program as | ||
| 92 | a solution. The only real solutions are the ones all the readers can | ||
| 93 | share. | ||
| 94 | |||
| 95 | If a program crashes, or if you build it following the standard | ||
| 96 | procedure on a system on which it is supposed to work and it does not | ||
| 97 | work at all, or if an command does not behave as it is documented to | ||
| 98 | behave, this is a bug. Don't send bug reports to a help-* list; mail | ||
| 99 | them to the bug-* list instead. | ||
| 100 | |||
| 101 | See section '* General Information about all lists'. | ||
| 102 | |||
| 103 | * General Information about bug-* lists and reporting program bugs | ||
| 104 | |||
| 105 | If you think something is a bug in a program, it might be one; or, it | ||
| 106 | might be a misunderstanding or even a feature. Before beginning to | ||
| 107 | report bugs, please read the section ``Reporting Bugs'' in | ||
| 108 | the GNU Emacs reference manual (or node Bugs in Emacs's | ||
| 109 | built-in Info system) for a discussion of how and when to send in bug | ||
| 110 | reports. For GNU programs other than GNU Emacs, also consult their | ||
| 111 | documentation for their bug reporting procedures. Always include the | ||
| 112 | version number of the GNU program, as well as the operating system and | ||
| 113 | machine the program was ran on (if the program doesn't have a version | ||
| 114 | number, send the date of the latest entry in the file ChangeLog). For | ||
| 115 | GNU Emacs bugs, type "M-x emacs-version". A debugger backtrace of any | ||
| 116 | core dump can also be useful. Be careful to separate out hypothesis | ||
| 117 | from fact! For bugs in GNU Emacs lisp, set variable debug-on-error to | ||
| 118 | t, and re-enter the command(s) that cause the error message; Emacs will | ||
| 119 | pop up a debug buffer if something is wrong; please include a copy of | ||
| 120 | the buffer in your bug report. Please also try to make your bug report | ||
| 121 | as short as possible; distill the problem to as few lines of code and/or | ||
| 122 | input as possible. GNU maintainers give priority to the shortest, high | ||
| 123 | quality bug reports. | ||
| 124 | |||
| 125 | Please don't send in a patch without a test case to illustrate the | ||
| 126 | problem the patch is supposed to fix. Sometimes the patches aren't | ||
| 127 | correct or aren't the best way to do the job, and without a test case | ||
| 128 | there is no way to debug an alternate fix. | ||
| 129 | |||
| 130 | The purpose of reporting a bug is to enable the bug to be fixed for the | ||
| 131 | sake of the whole community of users. You may or may not receive a | ||
| 132 | response; the maintainers will send one if that helps them find or | ||
| 133 | verify a fix. Most GNU maintainers are volunteers and all are | ||
| 134 | overworked; they don't have time to help individuals and still fix the | ||
| 135 | bugs and make the improvements that everyone wants. If you want help | ||
| 136 | for yourself in particular, you may have to hire someone. The GNU | ||
| 137 | project maintains a list of people providing such services. It is | ||
| 138 | found at <URL:http://www.fsf.org/resources/service>. | ||
| 139 | |||
| 140 | Anything addressed to the implementers and maintainers of a GNU program | ||
| 141 | via a bug-* list, should NOT be sent to the corresponding info-* or | ||
| 142 | help-* list. | ||
| 143 | |||
| 144 | Please DON'T post your bug reports on the gnu.*.bug newsgroups! Mail | ||
| 145 | them to bug-*@gnu.org instead! At first sight, it seems to make no | ||
| 146 | difference: anything sent to one will be propagated to the other; but: | ||
| 147 | - if you post on the newsgroup, the information about how to | ||
| 148 | reach you is lost in the message that goes on the mailing list. It | ||
| 149 | can be very important to know how to reach you, if there is anything | ||
| 150 | in the bug report that we don't understand; | ||
| 151 | - bug reports reach the GNU maintainers quickest when they are | ||
| 152 | sent to the bug-* mailing list submittal address; | ||
| 153 | - mail is much more reliable then netnews; and | ||
| 154 | - if the internet mailers can't get your bug report delivered, | ||
| 155 | they almost always send you an error message, so you can find another | ||
| 156 | way to get the bug report in. When netnews fails to get your message | ||
| 157 | delivered to the maintainers, you'll never know about it and the | ||
| 158 | maintainers will never see the bug report. | ||
| 159 | |||
| 160 | And please DON'T post your GNU bug reports to comp.* or other gnu.* | ||
| 161 | newsgroups, they never make it to the GNU maintainers at all. Please | ||
| 162 | mail them to bug-*@gnu.org instead! | ||
| 163 | |||
| 164 | * Some special lists that don't fit the usual patterns of help-, bug- and info- | ||
| 165 | |||
| 166 | ** info-gnu-request@gnu.org to subscribe to info-gnu | ||
| 167 | |||
| 168 | gnUSENET newsgroup: gnu.announce | ||
| 169 | Send announcements to: info-gnu@gnu.org | ||
| 170 | |||
| 171 | This list distributes progress reports on the GNU Project. It is also | ||
| 172 | used by the GNU Project to ask people for various kinds of help. It is | ||
| 173 | moderated and NOT for general discussion. | ||
| 174 | |||
| 175 | ** gnu-misc-discuss-request@gnu.org to subscribe to gnu-misc-discuss | ||
| 176 | |||
| 177 | gnUSENET newsgroup: gnu.misc.discuss | ||
| 178 | Send contributions to: gnu-misc-discuss@gnu.org | ||
| 179 | |||
| 180 | This list is for serious discussion of free software, the GNU Project, | ||
| 181 | the GNU Manifesto, and their implications. It's THE place for | ||
| 182 | discussion that is not appropriate in the other GNU mailing lists and | ||
| 183 | gnUSENET newsgroups. | ||
| 184 | |||
| 185 | Flaming is out of place. Tit-for-tat is not welcome. Repetition | ||
| 186 | should not occur. | ||
| 187 | |||
| 188 | Good READING and writing are expected. Before posting, wait a while, | ||
| 189 | cool off, and think. | ||
| 190 | |||
| 191 | Don't use this group for complaints and bug reports about GNU software! | ||
| 192 | The maintainers of the package you are using probably don't read this | ||
| 193 | group; they won't see your complaint. Use the appropriate bug-reporting | ||
| 194 | mailing list instead, so that people who can do something about the | ||
| 195 | problem will see it. Likewise, use the help- list for technical | ||
| 196 | questions. | ||
| 197 | |||
| 198 | Don't trust pronouncements made on gnu-misc-discuss about what GNU is, | ||
| 199 | what FSF position is, what the GNU General Public License is, etc., | ||
| 200 | unless they are made by someone you know is well connected with GNU and | ||
| 201 | are sure the message is not forged. | ||
| 202 | |||
| 203 | USENET and gnUSENET readers are expected to have read ALL the articles | ||
| 204 | in news.announce.newusers before posting. | ||
| 205 | |||
| 206 | Remember, "GNUs Not Unix" and "gnUSENET is Not USENET". We have | ||
| 207 | higher standards! | ||
| 208 | |||
| 209 | ** gnu-emacs-sources-request@gnu.org to subscribe to gnu-emacs-sources | ||
| 210 | |||
| 211 | gnUSENET newsgroup: gnu.emacs.sources | ||
| 212 | GNU Emacs source code to: gnu-emacs-sources@gnu.org | ||
| 213 | |||
| 214 | This list/newsgroup will be for the posting, by their authors, of Emacs | ||
| 215 | Lisp and C sources and patches that improve GNU Emacs. Its contents | ||
| 216 | will be reviewed by the FSF for inclusion in future releases of GNU | ||
| 217 | Emacs. | ||
| 218 | |||
| 219 | Please do NOT discuss or request source code here. Use | ||
| 220 | help-gnu-emacs/gnu.emacs.help for those purposes. This allows the | ||
| 221 | automatic archiving of sources posted to this list/newsgroup. | ||
| 222 | |||
| 223 | Please do NOT post such sources to any other GNU mailing list (e.g | ||
| 224 | help-gnu-emacs) or gnUSENET newsgroups (e.g. gnu.emacs.help). It's up | ||
| 225 | to each poster to decide whether to cross-post to any non-gnUSENET | ||
| 226 | newsgroup (e.g. comp.emacs). | ||
| 227 | |||
| 228 | Please do NOT announce that you have posted source code to | ||
| 229 | gnu.emacs.sources to any other GNU mailing list (e.g. help-gnu-emacs) or | ||
| 230 | gnUSENET newsgroups (e.g. gnu.emacs.help). People who want to keep up | ||
| 231 | with sources will read this list/newsgroup. It's up to each poster to | ||
| 232 | decide whether to announce a gnu.emacs.sources article in any | ||
| 233 | non-gnUSENET newsgroup (e.g. comp.emacs). | ||
| 234 | |||
| 235 | If source or patches that were previously posted or a simple fix is | ||
| 236 | requested in help-gnu-emacs, please mail it to the requester. Do NOT | ||
| 237 | repost it. If you also want something that is requested, send mail to | ||
| 238 | the requester asking him to forward it to you. This kind of traffic is | ||
| 239 | best handled by e-mail, not by a broadcast medium that reaches millions | ||
| 240 | of sites. | ||
| 241 | |||
| 242 | If the requested source is very long, send mail offering to | ||
| 243 | send it. This prevents the requester from getting many redundant copies | ||
| 244 | and saves network bandwidth. | ||
| 245 | |||
| 246 | Local variables: | ||
| 247 | mode: outline | ||
| 248 | fill-column: 72 | ||
| 249 | End: | ||
| 250 | |||
| 251 | Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc. | ||
| 252 | |||
| 253 | Permission is hereby granted, free of charge, to any person obtaining | ||
| 254 | a copy of this file, to deal in the file without restriction, including | ||
| 255 | without limitation the rights to use, copy, modify, merge, publish, | ||
| 256 | distribute, sublicense, and/or sell copies of the file, and to | ||
| 257 | permit persons to whom the file is furnished to do so, subject to | ||
| 258 | the following condition: | ||
| 259 | |||
| 260 | The above copyright notice and this permission notice shall be | ||
| 261 | included in all copies or substantial portions of the file. | ||
diff --git a/etc/MOTIVATION b/etc/MOTIVATION deleted file mode 100644 index 50194925f13..00000000000 --- a/etc/MOTIVATION +++ /dev/null | |||
| @@ -1,179 +0,0 @@ | |||
| 1 | STUDIES FIND REWARD OFTEN NO MOTIVATOR | ||
| 2 | |||
| 3 | Creativity and intrinsic interest diminish if task is done for gain | ||
| 4 | |||
| 5 | By Alfie Kohn | ||
| 6 | Special to the Boston Globe | ||
| 7 | [reprinted with permission of the author | ||
| 8 | from the Monday 19 January 1987 Boston Globe] | ||
| 9 | |||
| 10 | Verbatim copying and distribution is permitted in any medium | ||
| 11 | provided this notice is preserved. | ||
| 12 | |||
| 13 | In the laboratory, rats get Rice Krispies. In the classroom the top | ||
| 14 | students get A's, and in the factory or office the best workers get | ||
| 15 | raises. It's an article of faith for most of us that rewards promote | ||
| 16 | better performance. | ||
| 17 | |||
| 18 | But a growing body of research suggests that this law is not nearly as | ||
| 19 | ironclad as was once thought. Psychologists have been finding that | ||
| 20 | rewards can lower performance levels, especially when the performance | ||
| 21 | involves creativity. | ||
| 22 | |||
| 23 | A related series of studies shows that intrinsic interest in a task - | ||
| 24 | the sense that something is worth doing for its own sake - typically | ||
| 25 | declines when someone is rewarded for doing it. | ||
| 26 | |||
| 27 | If a reward - money, awards, praise, or winning a contest - comes to | ||
| 28 | be seen as the reason one is engaging in an activity, that activity | ||
| 29 | will be viewed as less enjoyable in its own right. | ||
| 30 | |||
| 31 | With the exception of some behaviorists who doubt the very existence | ||
| 32 | of intrinsic motivation, these conclusions are now widely accepted | ||
| 33 | among psychologists. Taken together, they suggest we may unwittingly | ||
| 34 | be squelching interest and discouraging innovation among workers, | ||
| 35 | students and artists. | ||
| 36 | |||
| 37 | The recognition that rewards can have counter-productive effects is | ||
| 38 | based on a variety of studies, which have come up with such findings | ||
| 39 | as these: Young children who are rewarded for drawing are less likely | ||
| 40 | to draw on their own that are children who draw just for the fun of | ||
| 41 | it. Teenagers offered rewards for playing word games enjoy the games | ||
| 42 | less and do not do as well as those who play with no rewards. | ||
| 43 | Employees who are praised for meeting a manager's expectations suffer | ||
| 44 | a drop in motivation. | ||
| 45 | |||
| 46 | Much of the research on creativity and motivation has been performed | ||
| 47 | by Theresa Amabile, associate professor of psychology at Brandeis | ||
| 48 | University. In a paper published early last year on her most recent | ||
| 49 | study, she reported on experiments involving elementary school and | ||
| 50 | college students. Both groups were asked to make "silly" collages. | ||
| 51 | The young children were also asked to invent stories. | ||
| 52 | |||
| 53 | The least-creative projects, as rated by several teachers, were done | ||
| 54 | by those students who had contracted for rewards. "It may be that | ||
| 55 | commissioned work will, in general, be less creative than work that is | ||
| 56 | done out of pure interest," Amabile said. | ||
| 57 | |||
| 58 | In 1985, Amabile asked 72 creative writers at Brandeis and at Boston | ||
| 59 | University to write poetry. Some students then were given a list of | ||
| 60 | extrinsic (external) reasons for writing, such as impressing teachers, | ||
| 61 | making money and getting into graduate school, and were asked to think | ||
| 62 | about their own writing with respect to these reasons. Others were | ||
| 63 | given a list of intrinsic reasons: the enjoyment of playing with | ||
| 64 | words, satisfaction from self-expression, and so forth. A third group | ||
| 65 | was not given any list. All were then asked to do more writing. | ||
| 66 | |||
| 67 | The results were clear. Students given the extrinsic reasons not only | ||
| 68 | wrote less creatively than the others, as judged by 12 independent | ||
| 69 | poets, but the quality of their work dropped significantly. Rewards, | ||
| 70 | Amabile says, have this destructive effect primarily with creative | ||
| 71 | tasks, including higher-level problem-solving. "The more complex the | ||
| 72 | activity, the more it's hurt by extrinsic reward," she said. | ||
| 73 | |||
| 74 | But other research shows that artists are by no means the only ones | ||
| 75 | affected. | ||
| 76 | |||
| 77 | In one study, girls in the fifth and sixth grades tutored younger | ||
| 78 | children much less effectively if they were promised free movie | ||
| 79 | tickets for teaching well. The study, by James Gabarino, now | ||
| 80 | president of Chicago's Erikson Institute for Advanced Studies in Child | ||
| 81 | Development, showed that tutors working for the reward took longer to | ||
| 82 | communicate ideas, got frustrated more easily, and did a poorer job in | ||
| 83 | the end than those who were not rewarded. | ||
| 84 | |||
| 85 | Such findings call into question the widespread belief that money is | ||
| 86 | an effective and even necessary way to motivate people. They also | ||
| 87 | challenge the behaviorist assumption that any activity is more likely | ||
| 88 | to occur if it is rewarded. Amabile says her research "definitely | ||
| 89 | refutes the notion that creativity can be operantly conditioned." | ||
| 90 | |||
| 91 | But Kenneth McGraw, associate professor of psychology at the | ||
| 92 | University of Mississippi, cautions that this does not mean | ||
| 93 | behaviorism itself has been invalidated. "The basic principles of | ||
| 94 | reinforcement and rewards certainly work, but in a restricted context" | ||
| 95 | - restricted, that is, to tasks that are not especially interesting. | ||
| 96 | |||
| 97 | Researchers offer several explanations for their surprising findings | ||
| 98 | about rewards and performance. | ||
| 99 | |||
| 100 | First, rewards encourage people to focus narrowly on a task, to do it | ||
| 101 | as quickly as possible and to take few risks. "If they feel that | ||
| 102 | 'this is something I have to get through to get the prize,' they're | ||
| 103 | going to be less creative," Amabile said. | ||
| 104 | |||
| 105 | Second, people come to see themselves as being controlled by the | ||
| 106 | reward. They feel less autonomous, and this may interfere with | ||
| 107 | performance. "To the extent one's experience of being | ||
| 108 | self-determined is limited," said Richard Ryan, associate psychology | ||
| 109 | professor at the University of Rochester, "one's creativity will be | ||
| 110 | reduced as well." | ||
| 111 | |||
| 112 | Finally, extrinsic rewards can erode intrinsic interest. People who | ||
| 113 | see themselves as working for money, approval or competitive success | ||
| 114 | find their tasks less pleasurable, and therefore do not do them as | ||
| 115 | well. | ||
| 116 | |||
| 117 | The last explanation reflects 15 years of work by Ryan's mentor at the | ||
| 118 | University of Rochester, Edward Deci. In 1971, Deci showed that | ||
| 119 | "money may work to buy off one's intrinsic motivation for an activity" | ||
| 120 | on a long-term basis. Ten years later, Deci and his colleagues | ||
| 121 | demonstrated that trying to best others has the same effect. Students | ||
| 122 | who competed to solve a puzzle quickly were less likely than those who | ||
| 123 | were not competing to keep working at it once the experiment was over. | ||
| 124 | |||
| 125 | Control plays role | ||
| 126 | |||
| 127 | There is general agreement, however, that not all rewards have the | ||
| 128 | same effect. Offering a flat fee for participating in an experiment - | ||
| 129 | similar to an hourly wage in the workplace - usually does not reduce | ||
| 130 | intrinsic motivation. It is only when the rewards are based on | ||
| 131 | performing a given task or doing a good job at it - analogous to | ||
| 132 | piece-rate payment and bonuses, respectively - that the problem | ||
| 133 | develops. | ||
| 134 | |||
| 135 | The key, then, lies in how a reward is experienced. If we come to | ||
| 136 | view ourselves as working to get something, we will no longer find | ||
| 137 | that activity worth doing in its own right. | ||
| 138 | |||
| 139 | There is an old joke that nicely illustrates the principle. An | ||
| 140 | elderly man, harassed by the taunts of neighborhood children, finally | ||
| 141 | devises a scheme. He offered to pay each child a dollar if they would | ||
| 142 | all return Tuesday and yell their insults again. They did so eagerly | ||
| 143 | and received the money, but he told them he could only pay 25 cents on | ||
| 144 | Wednesday. When they returned, insulted him again and collected their | ||
| 145 | quarters, he informed them that Thursday's rate would be just a penny. | ||
| 146 | "Forget it," they said - and never taunted him again. | ||
| 147 | |||
| 148 | Means to and end | ||
| 149 | |||
| 150 | In a 1982 study, Stanford psychologist Mark L. Lepper showed that any | ||
| 151 | task, no matter how enjoyable it once seemed, would be devalued if it | ||
| 152 | were presented as a means rather than an end. He told a group of | ||
| 153 | preschoolers they could not engage in one activity they liked until | ||
| 154 | they first took part in another. Although they had enjoyed both | ||
| 155 | activities equally, the children came to dislike the task that was a | ||
| 156 | prerequisite for the other. | ||
| 157 | |||
| 158 | It should not be surprising that when verbal feedback is experienced | ||
| 159 | as controlling, the effect on motivation can be similar to that of | ||
| 160 | payment. In a study of corporate employees, Ryan found that those who | ||
| 161 | were told, "Good, you're doing as you /should/" were "significantly | ||
| 162 | less intrinsically motivated than those who received feedback | ||
| 163 | informationally." | ||
| 164 | |||
| 165 | There's a difference, Ryan says, between saying, "I'm giving you this | ||
| 166 | reward because I recognize the value of your work" and "You're getting | ||
| 167 | this reward because you've lived up to my standards." | ||
| 168 | |||
| 169 | A different but related set of problems exists in the case of | ||
| 170 | creativity. Artists must make a living, of course, but Amabile | ||
| 171 | emphasizes that "the negative impact on creativity of working for | ||
| 172 | rewards can be minimized" by playing down the significance of these | ||
| 173 | rewards and trying not to use them in a controlling way. Creative | ||
| 174 | work, the research suggests, cannot be forced, but only allowed to | ||
| 175 | happen. | ||
| 176 | |||
| 177 | /Alfie Kohn, a Cambridge, MA writer, is the author of "No Contest: The | ||
| 178 | Case Against Competition," recently published by Houghton Mifflin Co., | ||
| 179 | Boston, MA. ISBN 0-395-39387-6. / | ||
| @@ -1230,25 +1230,25 @@ and setting the current frame of a multi-frame image. | |||
| 1230 | 1230 | ||
| 1231 | ** EIEIO | 1231 | ** EIEIO |
| 1232 | 1232 | ||
| 1233 | +++ | ||
| 1233 | *** Namespace cleanup by obsolete-aliasing functions to use `eieio-' prefix. | 1234 | *** Namespace cleanup by obsolete-aliasing functions to use `eieio-' prefix. |
| 1234 | **** object-name -> eieio-object-name | 1235 | **** object-name -> eieio-object-name |
| 1235 | **** object-class -> eieio-object-class | 1236 | **** object-class -> eieio-object-class |
| 1236 | **** object-class-fast -> eieio--object-class | 1237 | **** object-class-fast -> eieio--object-class |
| 1238 | **** object-class-name -> eieio-object-class-name | ||
| 1237 | **** object-name-string -> eieio-object-name-string | 1239 | **** object-name-string -> eieio-object-name-string |
| 1238 | **** object-num-slots -> eieio--object-num-slots | 1240 | **** object-num-slots -> eieio--object-num-slots |
| 1239 | **** object-set-name-string -> eieio-object-set-name-string | 1241 | **** object-set-name-string -> eieio-object-set-name-string |
| 1242 | **** class-of -> eieio-object-class | ||
| 1243 | **** class-name -> eieio-class-name | ||
| 1240 | **** class-parent -> eieio-class-parent | 1244 | **** class-parent -> eieio-class-parent |
| 1241 | **** class-parents -> eieio-class-parents | 1245 | **** class-parents -> eieio-class-parents |
| 1246 | **** class-parents-fast -> eieio-class-parents-fast | ||
| 1242 | **** class-children -> eieio-class-children | 1247 | **** class-children -> eieio-class-children |
| 1243 | **** class-num-slots -> eieio--class-num-slots | 1248 | **** class-num-slots -> eieio--class-num-slots |
| 1244 | **** class-precedence-list -> eieio-class-precedence-list | 1249 | **** class-precedence-list -> eieio-class-precedence-list |
| 1245 | **** All generated class-* and object-* field accessors are now | 1250 | **** class-direct-subclasses -> eieio-class-children |
| 1246 | prefixed with `eieio-' as well. | 1251 | **** class-direct-superclasses -> eieio-class-parents |
| 1247 | |||
| 1248 | *** Obsoleted functions: | ||
| 1249 | **** class-of | ||
| 1250 | **** class-direct-subclasses | ||
| 1251 | **** class-direct-superclasses | ||
| 1252 | 1252 | ||
| 1253 | ** Changes in encoding and decoding of text | 1253 | ** Changes in encoding and decoding of text |
| 1254 | 1254 | ||
| @@ -1295,6 +1295,7 @@ regular file with contents being what would have been in the symlink. | |||
| 1295 | +++ | 1295 | +++ |
| 1296 | ** New functions `group-gid' and `group-real-gid'. | 1296 | ** New functions `group-gid' and `group-real-gid'. |
| 1297 | 1297 | ||
| 1298 | --- | ||
| 1298 | ** The spelling of the rx.el category `chinese-two-byte' has been | 1299 | ** The spelling of the rx.el category `chinese-two-byte' has been |
| 1299 | corrected (the first 'e' was missing). | 1300 | corrected (the first 'e' was missing). |
| 1300 | 1301 | ||
diff --git a/etc/SERVICE b/etc/SERVICE deleted file mode 100644 index eed62ea60aa..00000000000 --- a/etc/SERVICE +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | GNU Service Directory | ||
| 2 | --------------------- | ||
| 3 | |||
| 4 | Please see <http://www.fsf.org/resources/service/> for a list of | ||
| 5 | people who have asked to be listed as offering support services for | ||
| 6 | GNU software, including GNU Emacs, for a fee or in some cases at no | ||
| 7 | charge. | ||
| 8 | |||
| 9 | Note added January 2014: | ||
| 10 | This file is obsolete and will be removed in future. | ||
| 11 | Please update any links to use the above URL. | ||
diff --git a/etc/copying.paper b/etc/copying.paper deleted file mode 100644 index e0a478aed06..00000000000 --- a/etc/copying.paper +++ /dev/null | |||
| @@ -1,819 +0,0 @@ | |||
| 1 | (For more information about the GNU project and free software, | ||
| 2 | look at the files `GNU', `COPYING', and `DISTRIB', in the same | ||
| 3 | directory as this file.) | ||
| 4 | |||
| 5 | |||
| 6 | Why Software Should Be Free | ||
| 7 | |||
| 8 | by Richard Stallman | ||
| 9 | |||
| 10 | (Version of April 24, 1992) | ||
| 11 | |||
| 12 | Copyright (C) 1991, 1992, Free Software Foundation, Inc. | ||
| 13 | Verbatim copying and redistribution is permitted | ||
| 14 | without royalty; alteration is not permitted. | ||
| 15 | |||
| 16 | Introduction | ||
| 17 | ************ | ||
| 18 | |||
| 19 | The existence of software inevitably raises the question of how | ||
| 20 | decisions about its use should be made. For example, suppose one | ||
| 21 | individual who has a copy of a program meets another who would like a | ||
| 22 | copy. It is possible for them to copy the program; who should decide | ||
| 23 | whether this is done? The individuals involved? Or another party, | ||
| 24 | called the "owner"? | ||
| 25 | |||
| 26 | Software developers typically consider these questions on the | ||
| 27 | assumption that the criterion for the answer is to maximize developers' | ||
| 28 | profits. The political power of business has led to the government | ||
| 29 | adoption of both this criterion and the answer proposed by the | ||
| 30 | developers: that the program has an owner, typically a corporation | ||
| 31 | associated with its development. | ||
| 32 | |||
| 33 | I would like to consider the same question using a different | ||
| 34 | criterion: the prosperity and freedom of the public in general. | ||
| 35 | |||
| 36 | This answer cannot be decided by current law--the law should conform | ||
| 37 | to ethics, not the other way around. Nor does current practice decide | ||
| 38 | this question, although it may suggest possible answers. The only way | ||
| 39 | to judge is to see who is helped and who is hurt by recognizing owners | ||
| 40 | of software, why, and how much. In other words, we should perform a | ||
| 41 | cost-benefit analysis on behalf of society as a whole, taking account of | ||
| 42 | individual freedom as well as production of material goods. | ||
| 43 | |||
| 44 | In this essay, I will describe the effects of having owners, and show | ||
| 45 | that the results are detrimental. My conclusion is that programmers | ||
| 46 | have the duty to encourage others to share, redistribute, study and | ||
| 47 | improve the software we write: in other words, to write "free" | ||
| 48 | software.(1) | ||
| 49 | |||
| 50 | How Owners Justify Their Power | ||
| 51 | ****************************** | ||
| 52 | |||
| 53 | Those who benefit from the current system where programs are property | ||
| 54 | offer two arguments in support of their claims to own programs: the | ||
| 55 | emotional argument and the economic argument. | ||
| 56 | |||
| 57 | The emotional argument goes like this: "I put my sweat, my heart, my | ||
| 58 | soul into this program. It comes from *me*, it's *mine*!" | ||
| 59 | |||
| 60 | This argument does not require serious refutation. The feeling of | ||
| 61 | attachment is one that programmers can cultivate when it suits them; it | ||
| 62 | is not inevitable. Consider, for example, how willingly the same | ||
| 63 | programmers usually sign over all rights to a large corporation for a | ||
| 64 | salary; the emotional attachment mysteriously vanishes. By contrast, | ||
| 65 | consider the great artists and artisans of medieval times, who didn't | ||
| 66 | even sign their names to their work. To them, the name of the artist | ||
| 67 | was not important. What mattered was that the work was done--and the | ||
| 68 | purpose it would serve. This view prevailed for hundreds of years. | ||
| 69 | |||
| 70 | The economic argument goes like this: "I want to get rich (usually | ||
| 71 | described inaccurately as `making a living'), and if you don't allow me | ||
| 72 | to get rich by programming, then I won't program. Everyone else is like | ||
| 73 | me, so nobody will ever program. And then you'll be stuck with no | ||
| 74 | programs at all!" This threat is usually veiled as friendly advice | ||
| 75 | from the wise. | ||
| 76 | |||
| 77 | I'll explain later why this threat is a bluff. First I want to | ||
| 78 | address an implicit assumption that is more visible in another | ||
| 79 | formulation of the argument. | ||
| 80 | |||
| 81 | This formulation starts by comparing the social utility of a | ||
| 82 | proprietary program with that of no program, and then concludes that | ||
| 83 | proprietary software development is, on the whole, beneficial, and | ||
| 84 | should be encouraged. The fallacy here is in comparing only two | ||
| 85 | outcomes--proprietary software vs. no software--and assuming there are | ||
| 86 | no other possibilities. | ||
| 87 | |||
| 88 | Given a system of intellectual property, software development is | ||
| 89 | usually linked with the existence of an owner who controls the | ||
| 90 | software's use. As long as this linkage exists, we are often faced | ||
| 91 | with the choice of proprietary software or none. However, this linkage | ||
| 92 | is not inherent or inevitable; it is a consequence of the specific | ||
| 93 | social/legal policy decision that we are questioning: the decision to | ||
| 94 | have owners. To formulate the choice as between proprietary software | ||
| 95 | vs. no software is begging the question. | ||
| 96 | |||
| 97 | The Argument against Having Owners | ||
| 98 | ********************************** | ||
| 99 | |||
| 100 | The question at hand is, "Should development of software be linked | ||
| 101 | with having owners to restrict the use of it?" | ||
| 102 | |||
| 103 | In order to decide this, we have to judge the effect on society of | ||
| 104 | each of those two activities *independently*: the effect of developing | ||
| 105 | the software (regardless of its terms of distribution), and the effect | ||
| 106 | of restricting its use (assuming the software has been developed). If | ||
| 107 | one of these activities is helpful and the other is harmful, we would be | ||
| 108 | better off dropping the linkage and doing only the helpful one. | ||
| 109 | |||
| 110 | To put it another way, if restricting the distribution of a program | ||
| 111 | already developed is harmful to society overall, then an ethical | ||
| 112 | software developer will reject the option of doing so. | ||
| 113 | |||
| 114 | To determine the effect of restricting sharing, we need to compare | ||
| 115 | the value to society of a restricted (i.e., proprietary) program with | ||
| 116 | that of the same program, available to everyone. This means comparing | ||
| 117 | two possible worlds. | ||
| 118 | |||
| 119 | This analysis also addresses the simple counterargument sometimes | ||
| 120 | made that "the benefit to the neighbor of giving him or her a copy of a | ||
| 121 | program is cancelled by the harm done to the owner." This | ||
| 122 | counterargument assumes that the harm and the benefit are equal in | ||
| 123 | magnitude. The analysis involves comparing these magnitudes, and shows | ||
| 124 | that the benefit is much greater. | ||
| 125 | |||
| 126 | To elucidate this argument, let's apply it in another area: road | ||
| 127 | construction. | ||
| 128 | |||
| 129 | It would be possible to fund the construction of all roads with | ||
| 130 | tolls. This would entail having toll booths at all street corners. | ||
| 131 | Such a system would provide a great incentive to improve roads. It | ||
| 132 | would also have the virtue of causing the users of any given road to | ||
| 133 | pay for that road. However, a toll booth is an artificial obstruction | ||
| 134 | to smooth driving--artificial, because it is not a consequence of how | ||
| 135 | roads or cars work. | ||
| 136 | |||
| 137 | Comparing free roads and toll roads by their usefulness, we find that | ||
| 138 | (all else being equal) roads without toll booths are cheaper to | ||
| 139 | construct, cheaper to run, safer, and more efficient to use.(2) In a | ||
| 140 | poor country, tolls may make the roads unavailable to many citizens. | ||
| 141 | The roads without toll booths thus offer more benefit to society at | ||
| 142 | less cost; they are preferable for society. Therefore, society should | ||
| 143 | choose to fund roads in another way, not by means of toll booths. Use | ||
| 144 | of roads, once built, should be free. | ||
| 145 | |||
| 146 | When the advocates of toll booths propose them as *merely* a way of | ||
| 147 | raising funds, they distort the choice that is available. Toll booths | ||
| 148 | do raise funds, but they do something else as well: in effect, they | ||
| 149 | degrade the road. The toll road is not as good as the free road; giving | ||
| 150 | us more or technically superior roads may not be an improvement if this | ||
| 151 | means substituting toll roads for free roads. | ||
| 152 | |||
| 153 | Of course, the construction of a free road does cost money, which the | ||
| 154 | public must somehow pay. However, this does not imply the inevitability | ||
| 155 | of toll booths. We who must in either case pay will get more value for | ||
| 156 | our money by buying a free road. | ||
| 157 | |||
| 158 | I am not saying that a toll road is worse than no road at all. That | ||
| 159 | would be true if the toll were so great that hardly anyone used the | ||
| 160 | road--but this is an unlikely policy for a toll collector. However, as | ||
| 161 | long as the toll booths cause significant waste and inconvenience, it is | ||
| 162 | better to raise the funds in a less obstructive fashion. | ||
| 163 | |||
| 164 | To apply the same argument to software development, I will now show | ||
| 165 | that having "toll booths" for useful software programs costs society | ||
| 166 | dearly: it makes the programs more expensive to construct, more | ||
| 167 | expensive to distribute, and less satisfying and efficient to use. It | ||
| 168 | will follow that program construction should be encouraged in some other | ||
| 169 | way. Then I will go on to explain other methods of encouraging and (to | ||
| 170 | the extent actually necessary) funding software development. | ||
| 171 | |||
| 172 | The Harm Done by Obstructing Software | ||
| 173 | ===================================== | ||
| 174 | |||
| 175 | Consider for a moment that a program has been developed, and any | ||
| 176 | necessary payments for its development have been made; now society must | ||
| 177 | choose either to make it proprietary or allow free sharing and use. | ||
| 178 | Assume that the existence of the program and its availability is a | ||
| 179 | desirable thing.(3) | ||
| 180 | |||
| 181 | Restrictions on the distribution and modification of the program | ||
| 182 | cannot facilitate its use. They can only interfere. So the effect can | ||
| 183 | only be negative. But how much? And what kind? | ||
| 184 | |||
| 185 | Three different levels of material harm come from such obstruction: | ||
| 186 | |||
| 187 | * Fewer people use the program. | ||
| 188 | |||
| 189 | * None of the users can adapt or fix the program. | ||
| 190 | |||
| 191 | * Other developers cannot learn from the program, or base new work | ||
| 192 | on it. | ||
| 193 | |||
| 194 | Each level of material harm has a concomitant form of psychosocial | ||
| 195 | harm. This refers to the effect that people's decisions have on their | ||
| 196 | subsequent feelings, attitudes and predispositions. These changes in | ||
| 197 | people's ways of thinking will then have a further effect on their | ||
| 198 | relationships with their fellow citizens, and can have material | ||
| 199 | consequences. | ||
| 200 | |||
| 201 | The three levels of material harm waste part of the value that the | ||
| 202 | program could contribute, but they cannot reduce it to zero. If they | ||
| 203 | waste nearly all the value of the program, then writing the program | ||
| 204 | harms society by at most the effort that went into writing the program. | ||
| 205 | Arguably a program that is profitable to sell must provide some net | ||
| 206 | direct material benefit. | ||
| 207 | |||
| 208 | However, taking account of the concomitant psychosocial harm, there | ||
| 209 | is no limit to the harm that proprietary software development can do. | ||
| 210 | |||
| 211 | Obstructing Use of Programs | ||
| 212 | =========================== | ||
| 213 | |||
| 214 | The first level of harm impedes the simple use of a program. A copy | ||
| 215 | of a program has nearly zero marginal cost (and you can pay this cost by | ||
| 216 | doing the work yourself), so in a free market, it would have nearly zero | ||
| 217 | price. A license fee is a significant disincentive to use the program. | ||
| 218 | If a widely-useful program is proprietary, far fewer people will use it. | ||
| 219 | |||
| 220 | It is easy to show that the total contribution of a program to | ||
| 221 | society is reduced by assigning an owner to it. Each potential user of | ||
| 222 | the program, faced with the need to pay to use it, may choose to pay, | ||
| 223 | or may forego use of the program. When a user chooses to pay, this is a | ||
| 224 | zero-sum transfer of wealth between two parties. But each time someone | ||
| 225 | chooses to forego use of the program, this harms that person without | ||
| 226 | benefiting anyone. The sum of negative numbers and zeros must be | ||
| 227 | negative. | ||
| 228 | |||
| 229 | But this does not reduce the amount of work it takes to *develop* | ||
| 230 | the program. As a result, the efficiency of the whole process, in | ||
| 231 | delivered user satisfaction per hour of work, is reduced. | ||
| 232 | |||
| 233 | This reflects a crucial difference between copies of programs and | ||
| 234 | cars, chairs, or sandwiches. There is no copying machine for material | ||
| 235 | objects outside of science fiction. But programs are easy to copy; | ||
| 236 | anyone can produce as many copies as are wanted, with very little | ||
| 237 | effort. This isn't true for material objects because matter is | ||
| 238 | conserved: each new copy has to be built from raw materials in the same | ||
| 239 | way that the first copy was built. | ||
| 240 | |||
| 241 | With material objects, a disincentive to use them makes sense, | ||
| 242 | because fewer objects bought means less raw materials and work needed | ||
| 243 | to make them. It's true that there is usually also a startup cost, a | ||
| 244 | development cost, which is spread over the production run. But as long | ||
| 245 | as the marginal cost of production is significant, adding a share of the | ||
| 246 | development cost does not make a qualitative difference. And it does | ||
| 247 | not require restrictions on the freedom of ordinary users. | ||
| 248 | |||
| 249 | However, imposing a price on something that would otherwise be free | ||
| 250 | is a qualitative change. A centrally-imposed fee for software | ||
| 251 | distribution becomes a powerful disincentive. | ||
| 252 | |||
| 253 | What's more, central production as now practiced is inefficient even | ||
| 254 | as a means of delivering copies of software. This system involves | ||
| 255 | enclosing physical disks or tapes in superfluous packaging, shipping | ||
| 256 | large numbers of them around the world, and storing them for sale. This | ||
| 257 | cost is presented as an expense of doing business; in truth, it is part | ||
| 258 | of the waste caused by having owners. | ||
| 259 | |||
| 260 | Damaging Social Cohesion | ||
| 261 | ======================== | ||
| 262 | |||
| 263 | Suppose that both you and your neighbor would find it useful to run a | ||
| 264 | certain program. In ethical concern for your neighbor, you should feel | ||
| 265 | that proper handling of the situation will enable both of you to use it. | ||
| 266 | A proposal to permit only one of you to use the program, while | ||
| 267 | restraining the other, is divisive; neither you nor your neighbor should | ||
| 268 | find it acceptable. | ||
| 269 | |||
| 270 | Signing a typical software license agreement means betraying your | ||
| 271 | neighbor: "I promise to deprive my neighbor of this program so that I | ||
| 272 | can have a copy for myself." People who make such choices feel | ||
| 273 | internal psychological pressure to justify them, by downgrading the | ||
| 274 | importance of helping one's neighbors--thus public spirit suffers. | ||
| 275 | This is psychosocial harm associated with the material harm of | ||
| 276 | discouraging use of the program. | ||
| 277 | |||
| 278 | Many users unconsciously recognize the wrong of refusing to share, so | ||
| 279 | they decide to ignore the licenses and laws, and share programs anyway. | ||
| 280 | But they often feel guilty about doing so. They know that they must | ||
| 281 | break the laws in order to be good neighbors, but they still consider | ||
| 282 | the laws authoritative, and they conclude that being a good neighbor | ||
| 283 | (which they are) is naughty or shameful. That is also a kind of | ||
| 284 | psychosocial harm, but one can escape it by deciding that these licenses | ||
| 285 | and laws have no moral force. | ||
| 286 | |||
| 287 | Programmers also suffer psychosocial harm knowing that many users | ||
| 288 | will not be allowed to use their work. This leads to an attitude of | ||
| 289 | cynicism or denial. A programmer may describe enthusiastically the | ||
| 290 | work that he finds technically exciting; then when asked, "Will I be | ||
| 291 | permitted to use it?", his face falls, and he admits the answer is no. | ||
| 292 | To avoid feeling discouraged, he either ignores this fact most of the | ||
| 293 | time or adopts a cynical stance designed to minimize the importance of | ||
| 294 | it. | ||
| 295 | |||
| 296 | Since the age of Reagan, the greatest scarcity in the United States | ||
| 297 | is not technical innovation, but rather the willingness to work together | ||
| 298 | for the public good. It makes no sense to encourage the former at the | ||
| 299 | expense of the latter. | ||
| 300 | |||
| 301 | Obstructing Custom Adaptation of Programs | ||
| 302 | ========================================= | ||
| 303 | |||
| 304 | The second level of material harm is the inability to adapt programs. | ||
| 305 | The ease of modification of software is one of its great advantages over | ||
| 306 | older technology. But most commercially available software isn't | ||
| 307 | available for modification, even after you buy it. It's available for | ||
| 308 | you to take it or leave it, as a black box--that is all. | ||
| 309 | |||
| 310 | A program that you can run consists of a series of numbers whose | ||
| 311 | meaning is obscure. No one, not even a good programmer, can easily | ||
| 312 | change the numbers to make the program do something different. | ||
| 313 | |||
| 314 | Programmers normally work with the "source code" for a program, which | ||
| 315 | is written in a programming language such as Fortran or C. It uses | ||
| 316 | names to designate the data being used and the parts of the program, and | ||
| 317 | it represents operations with symbols such as `+' for addition and `-' | ||
| 318 | for subtraction. It is designed to help programmers read and change | ||
| 319 | programs. Here is an example; a program to calculate the distance | ||
| 320 | between two points in a plane: | ||
| 321 | |||
| 322 | float | ||
| 323 | distance (p0, p1) | ||
| 324 | struct point p0, p1; | ||
| 325 | { | ||
| 326 | float xdist = p1.x - p0.x; | ||
| 327 | float ydist = p1.y - p0.y; | ||
| 328 | return sqrt (xdist * xdist + ydist * ydist); | ||
| 329 | } | ||
| 330 | |||
| 331 | Here is the same program in executable form, on the computer I | ||
| 332 | normally use: | ||
| 333 | |||
| 334 | 1314258944 -232267772 -231844864 1634862 | ||
| 335 | 1411907592 -231844736 2159150 1420296208 | ||
| 336 | -234880989 -234879837 -234879966 -232295424 | ||
| 337 | 1644167167 -3214848 1090581031 1962942495 | ||
| 338 | 572518958 -803143692 1314803317 | ||
| 339 | |||
| 340 | Source code is useful (at least potentially) to every user of a | ||
| 341 | program. But most users are not allowed to have copies of the source | ||
| 342 | code. Usually the source code for a proprietary program is kept secret | ||
| 343 | by the owner, lest anybody else learn something from it. Users receive | ||
| 344 | only the files of incomprehensible numbers that the computer will | ||
| 345 | execute. This means that only the program's owner can change the | ||
| 346 | program. | ||
| 347 | |||
| 348 | A friend once told me of working as a programmer in a bank for about | ||
| 349 | six months, writing a program similar to something that was commercially | ||
| 350 | available. She believed that if she could have gotten source code for | ||
| 351 | that commercially available program, it could easily have been adapted | ||
| 352 | to their needs. The bank was willing to pay for this, but was not | ||
| 353 | permitted to--the source code was a secret. So she had to do six | ||
| 354 | months of make-work, work that counts in the GNP but was actually waste. | ||
| 355 | |||
| 356 | The MIT Artificial Intelligence lab (AI lab) received a graphics | ||
| 357 | printer as a gift from Xerox around 1977. It was run by free software | ||
| 358 | to which we added many convenient features. For example, the software | ||
| 359 | would notify a user immediately on completion of a print job. Whenever | ||
| 360 | the printer had trouble, such as a paper jam or running out of paper, | ||
| 361 | the software would immediately notify all users who had print jobs | ||
| 362 | queued. These features facilitated smooth operation. | ||
| 363 | |||
| 364 | Later Xerox gave the AI lab a newer, faster printer, one of the first | ||
| 365 | laser printers. It was driven by proprietary software that ran in a | ||
| 366 | separate dedicated computer, so we couldn't add any of our favorite | ||
| 367 | features. We could arrange to send a notification when a print job was | ||
| 368 | sent to the dedicated computer, but not when the job was actually | ||
| 369 | printed (and the delay was usually considerable). There was no way to | ||
| 370 | find out when the job was actually printed; you could only guess. And | ||
| 371 | no one was informed when there was a paper jam, so the printer often | ||
| 372 | went for an hour without being fixed. | ||
| 373 | |||
| 374 | The system programmers at the AI lab were capable of fixing such | ||
| 375 | problems, probably as capable as the original authors of the program. | ||
| 376 | Xerox was uninterested in fixing them, and chose to prevent us, so we | ||
| 377 | were forced to accept the problems. They were never fixed. | ||
| 378 | |||
| 379 | Most good programmers have experienced this frustration. The bank | ||
| 380 | could afford to solve the problem by writing a new program from | ||
| 381 | scratch, but a typical user, no matter how skilled, can only give up. | ||
| 382 | |||
| 383 | Giving up causes psychosocial harm--to the spirit of self-reliance. | ||
| 384 | It is demoralizing to live in a house that you cannot rearrange to suit | ||
| 385 | your needs. It leads to resignation and discouragement, which can | ||
| 386 | spread to affect other aspects of one's life. People who feel this way | ||
| 387 | are unhappy and do not do good work. | ||
| 388 | |||
| 389 | Imagine what it would be like if recipes were hoarded in the same | ||
| 390 | fashion as software. You might say, "How do I change this recipe to | ||
| 391 | take out the salt?", and the great chef would respond, "How dare you | ||
| 392 | insult my recipe, the child of my brain and my palate, by trying to | ||
| 393 | tamper with it? You don't have the judgment to change my recipe and | ||
| 394 | make it work right!" | ||
| 395 | |||
| 396 | "But my doctor says I'm not supposed to eat salt! What can I do? | ||
| 397 | Will you take out the salt for me?" | ||
| 398 | |||
| 399 | "I would be glad to do that; my fee is only $50,000." Since the | ||
| 400 | owner has a monopoly on changes, the fee tends to be large. "However, | ||
| 401 | right now I don't have time. I am busy with a commission to design a | ||
| 402 | new recipe for ship's biscuit for the Navy Department. I might get | ||
| 403 | around to you in about two years." | ||
| 404 | |||
| 405 | Obstructing Software Development | ||
| 406 | ================================ | ||
| 407 | |||
| 408 | The third level of material harm affects software development. | ||
| 409 | Software development used to be an evolutionary process, where a person | ||
| 410 | would take an existing program and rewrite parts of it for one new | ||
| 411 | feature, and then another person would rewrite parts to add another | ||
| 412 | feature; in some cases, this continued over a period of twenty years. | ||
| 413 | Meanwhile, parts of the program would be "cannibalized" to form the | ||
| 414 | beginnings of other programs. | ||
| 415 | |||
| 416 | The existence of owners prevents this kind of evolution, making it | ||
| 417 | necessary to start from scratch when developing a program. It also | ||
| 418 | prevents new practitioners from studying existing programs to learn | ||
| 419 | useful techniques or even how large programs can be structured. | ||
| 420 | |||
| 421 | Owners also obstruct education. I have met bright students in | ||
| 422 | computer science who have never seen the source code of a large | ||
| 423 | program. They may be good at writing small programs, but they can't | ||
| 424 | begin to learn the different skills of writing large ones if they can't | ||
| 425 | see how others have done it. | ||
| 426 | |||
| 427 | In any intellectual field, one can reach greater heights by standing | ||
| 428 | on the shoulders of others. But that is no longer generally allowed in | ||
| 429 | the software field--you can only stand on the shoulders of the other | ||
| 430 | people *in your own company*. | ||
| 431 | |||
| 432 | The associated psychosocial harm affects the spirit of scientific | ||
| 433 | cooperation, which used to be so strong that scientists would cooperate | ||
| 434 | even when their countries were at war. In this spirit, Japanese | ||
| 435 | oceanographers abandoning their lab on an island in the Pacific | ||
| 436 | carefully preserved their work for the invading U.S. Marines, and left a | ||
| 437 | note asking them to take good care of it. | ||
| 438 | |||
| 439 | Conflict for profit has destroyed what international conflict spared. | ||
| 440 | Nowadays scientists in many fields don't publish enough in their papers | ||
| 441 | to enable others to replicate the experiment. They publish only enough | ||
| 442 | to let readers marvel at how much they were able to do. This is | ||
| 443 | certainly true in computer science, where the source code for the | ||
| 444 | programs reported on is usually secret. | ||
| 445 | |||
| 446 | It Does Not Matter How Sharing Is Restricted | ||
| 447 | ============================================ | ||
| 448 | |||
| 449 | I have been discussing the effects of preventing people from copying, | ||
| 450 | changing and building on a program. I have not specified how this | ||
| 451 | obstruction is carried out, because that doesn't affect the conclusion. | ||
| 452 | Whether it is done by copy protection, or copyright, or licenses, or | ||
| 453 | encryption, or ROM cards, or hardware serial numbers, if it *succeeds* | ||
| 454 | in preventing use, it does harm. | ||
| 455 | |||
| 456 | Users do consider some of these methods more obnoxious than others. | ||
| 457 | I suggest that the methods most hated are those that accomplish their | ||
| 458 | objective. | ||
| 459 | |||
| 460 | Software Should be Free | ||
| 461 | ======================= | ||
| 462 | |||
| 463 | I have shown how ownership of a program--the power to restrict | ||
| 464 | changing or copying it--is obstructive. Its negative effects are | ||
| 465 | widespread and important. It follows that society shouldn't have | ||
| 466 | owners for programs. | ||
| 467 | |||
| 468 | Another way to understand this is that what society needs is free | ||
| 469 | software, and proprietary software is a poor substitute. Encouraging | ||
| 470 | the substitute is not a rational way to get what we need. | ||
| 471 | |||
| 472 | Vaclav Havel has advised us to "Work for something because it is | ||
| 473 | good, not just because it stands a chance to succeed." A business | ||
| 474 | making proprietary software stands a chance of success in its own narrow | ||
| 475 | terms, but it is not what is good for society. | ||
| 476 | |||
| 477 | Why People Will Develop Software | ||
| 478 | ******************************** | ||
| 479 | |||
| 480 | If we eliminate intellectual property as a means of encouraging | ||
| 481 | people to develop software, at first less software will be developed, | ||
| 482 | but that software will be more useful. It is not clear whether the | ||
| 483 | overall delivered user satisfaction will be less; but if it is, or if | ||
| 484 | we wish to increase it anyway, there are other ways to encourage | ||
| 485 | development, just as there are ways besides toll booths to raise money | ||
| 486 | for streets. Before I talk about how that can be done, first I want to | ||
| 487 | question how much artificial encouragement is truly necessary. | ||
| 488 | |||
| 489 | Programming is Fun | ||
| 490 | ================== | ||
| 491 | |||
| 492 | There are some lines of work that few will enter except for money; | ||
| 493 | road construction, for example. There are other fields of study and | ||
| 494 | art in which there is little chance to become rich, which people enter | ||
| 495 | for their fascination or their perceived value to society. Examples | ||
| 496 | include mathematical logic, classical music, and archaeology; and | ||
| 497 | political organizing among working people. People compete, more sadly | ||
| 498 | than bitterly, for the few funded positions available, none of which is | ||
| 499 | funded very well. They may even pay for the chance to work in the | ||
| 500 | field, if they can afford to. | ||
| 501 | |||
| 502 | Such a field can transform itself overnight if it begins to offer the | ||
| 503 | possibility of getting rich. When one worker gets rich, others demand | ||
| 504 | the same opportunity. Soon all may demand large sums of money for doing | ||
| 505 | what they used to do for pleasure. When another couple of years go by, | ||
| 506 | everyone connected with the field will deride the idea that work would | ||
| 507 | be done in the field without large financial returns. They will advise | ||
| 508 | social planners to ensure that these returns are possible, prescribing | ||
| 509 | special privileges, powers and monopolies as necessary to do so. | ||
| 510 | |||
| 511 | This change happened in the field of computer programming in the past | ||
| 512 | decade. Fifteen years ago, there were articles on "computer | ||
| 513 | addiction": users were "onlining" and had hundred-dollar-a-week habits. | ||
| 514 | It was generally understood that people frequently loved programming | ||
| 515 | enough to break up their marriages. Today, it is generally understood | ||
| 516 | that no one would program except for a high rate of pay. People have | ||
| 517 | forgotten what they knew fifteen years ago. | ||
| 518 | |||
| 519 | When it is true at a given time that most people will work in a | ||
| 520 | certain field only for high pay, it need not remain true. The dynamic | ||
| 521 | of change can run in reverse, if society provides an impetus. If we | ||
| 522 | take away the possibility of great wealth, then after a while, when the | ||
| 523 | people have readjusted their attitudes, they will once again be eager | ||
| 524 | to work in the field for the joy of accomplishment. | ||
| 525 | |||
| 526 | The question, "How can we pay programmers?", becomes an easier | ||
| 527 | question when we realize that it's not a matter of paying them a | ||
| 528 | fortune. A mere living is easier to raise. | ||
| 529 | |||
| 530 | Funding Free Software | ||
| 531 | ===================== | ||
| 532 | |||
| 533 | Institutions that pay programmers do not have to be software houses. | ||
| 534 | Many other institutions already exist which can do this. | ||
| 535 | |||
| 536 | Hardware manufacturers find it essential to support software | ||
| 537 | development even if they cannot control the use of the software. In | ||
| 538 | 1970, much of their software was free because they did not consider | ||
| 539 | restricting it. Today, their increasing willingness to join | ||
| 540 | consortiums shows their realization that owning the software is not | ||
| 541 | what is really important for them. | ||
| 542 | |||
| 543 | Universities conduct many programming projects. Today, they often | ||
| 544 | sell the results, but in the 1970s, they did not. Is there any doubt | ||
| 545 | that universities would develop free software if they were not allowed | ||
| 546 | to sell software? These projects could be supported by the same | ||
| 547 | government contracts and grants which now support proprietary software | ||
| 548 | development. | ||
| 549 | |||
| 550 | It is common today for university researchers to get grants to | ||
| 551 | develop a system, develop it nearly to the point of completion and call | ||
| 552 | that "finished", and then start companies where they really finish the | ||
| 553 | project and make it usable. Sometimes they declare the unfinished | ||
| 554 | version "free"; if they are thoroughly corrupt, they instead get an | ||
| 555 | exclusive license from the university. This is not a secret; it is | ||
| 556 | openly admitted by everyone concerned. Yet if the researchers were not | ||
| 557 | exposed to the temptation to do these things, they would still do their | ||
| 558 | research. | ||
| 559 | |||
| 560 | Programmers writing free software can make their living by selling | ||
| 561 | services related to the software. I have been hired to port the GNU C | ||
| 562 | compiler to new hardware, and to make user-interface extensions to GNU | ||
| 563 | Emacs. (I offer these improvements to the public once they are done.) | ||
| 564 | I also teach classes for which I am paid. | ||
| 565 | |||
| 566 | I am not alone in working this way; there is now a successful, | ||
| 567 | growing corporation which does no other kind of work. Several other | ||
| 568 | companies also provide commercial support for the free software of the | ||
| 569 | GNU system. This is the beginning of the independent software support | ||
| 570 | industry-an industry that could become quite large if free software | ||
| 571 | becomes prevalent. It provides users with an option generally | ||
| 572 | unavailable for proprietary software, except to the very wealthy. | ||
| 573 | |||
| 574 | New institutions such as the Free Software Foundation can also fund | ||
| 575 | programmers. Most of the foundation's funds come from users buying | ||
| 576 | tapes through the mail. The software on the tapes is free, which means | ||
| 577 | that every user has the freedom to copy it and change it, but many | ||
| 578 | nonetheless pay to get copies. (Recall that "free software" refers to | ||
| 579 | freedom, not to price.) Some users order tapes who already have a copy, | ||
| 580 | as a way of making a contribution they feel we deserve. The Foundation | ||
| 581 | also receives sizable donations from computer manufacturers. | ||
| 582 | |||
| 583 | The Free Software Foundation is a charity, and its income is spent on | ||
| 584 | hiring as many programmers as possible. If it had been set up as a | ||
| 585 | business, distributing the same free software to the public for the same | ||
| 586 | fee, it would now provide a very good living for its founder. | ||
| 587 | |||
| 588 | Because the Foundation is a charity, programmers often work for the | ||
| 589 | Foundation for half of what they could make elsewhere. They do this | ||
| 590 | because we are free of bureaucracy, and because they feel satisfaction | ||
| 591 | in knowing that their work will not be obstructed from use. Most of | ||
| 592 | all, they do it because programming is fun. In addition, volunteers | ||
| 593 | have written many useful programs for us. (Recently even technical | ||
| 594 | writers have begun to volunteer.) | ||
| 595 | |||
| 596 | This confirms that programming is among the most fascinating of all | ||
| 597 | fields, along with music and art. We don't have to fear that no one | ||
| 598 | will want to program. | ||
| 599 | |||
| 600 | What Do Users Owe to Developers? | ||
| 601 | ================================ | ||
| 602 | |||
| 603 | There is a good reason for users of software to feel a moral | ||
| 604 | obligation to contribute to its support. Developers of free software | ||
| 605 | are contributing to the users' activities, and it is both fair and in | ||
| 606 | the long term interest of the users to give them funds to continue. | ||
| 607 | |||
| 608 | However, this does not apply to proprietary software developers, | ||
| 609 | since obstructionism deserves a punishment rather than a reward. | ||
| 610 | |||
| 611 | We thus have a paradox: the developer of useful software is entitled | ||
| 612 | to the support of the users, but any attempt to turn this moral | ||
| 613 | obligation into a requirement destroys the basis for the obligation. A | ||
| 614 | developer can either deserve a reward or demand it, but not both. | ||
| 615 | |||
| 616 | I believe that an ethical developer faced with this paradox must act | ||
| 617 | so as to deserve the reward, but should also entreat the users for | ||
| 618 | voluntary donations. Eventually the users will learn to support | ||
| 619 | developers without coercion, just as they have learned to support public | ||
| 620 | radio and television stations. | ||
| 621 | |||
| 622 | What Is Software Productivity? | ||
| 623 | ****************************** | ||
| 624 | |||
| 625 | If software were free, there would still be programmers, but perhaps | ||
| 626 | fewer of them. Would this be bad for society? | ||
| 627 | |||
| 628 | Not necessarily. Today the advanced nations have fewer farmers than | ||
| 629 | in 1900, but we do not think this is bad for society, because the few | ||
| 630 | deliver more food to the consumers than the many used to do. We call | ||
| 631 | this improved productivity. Free software would require far fewer | ||
| 632 | programmers to satisfy the demand, because of increased software | ||
| 633 | productivity at all levels: | ||
| 634 | |||
| 635 | * Wider use of each program that is developed. | ||
| 636 | |||
| 637 | * The ability to adapt existing programs for customization instead | ||
| 638 | of starting from scratch. | ||
| 639 | |||
| 640 | * Better education of programmers. | ||
| 641 | |||
| 642 | * The elimination of duplicate development effort. | ||
| 643 | |||
| 644 | Those who object to cooperation because it would result in the | ||
| 645 | employment of fewer programmers, are actually objecting to increased | ||
| 646 | productivity. Yet these people usually accept the widely-held belief | ||
| 647 | that the software industry needs increased productivity. How is this? | ||
| 648 | |||
| 649 | "Software productivity" can mean two different things: the overall | ||
| 650 | productivity of all software development, or the productivity of | ||
| 651 | individual projects. Overall productivity is what society would like to | ||
| 652 | improve, and the most straightforward way to do this is to eliminate the | ||
| 653 | artificial obstacles to cooperation which reduce it. But researchers | ||
| 654 | who study the field of "software productivity" focus only on the | ||
| 655 | second, limited, sense of the term, where improvement requires difficult | ||
| 656 | technological advances. | ||
| 657 | |||
| 658 | Is Competition Inevitable? | ||
| 659 | ************************** | ||
| 660 | |||
| 661 | Is it inevitable that people will try to compete, to surpass their | ||
| 662 | rivals in society? Perhaps it is. But competition itself is not | ||
| 663 | harmful; the harmful thing is *combat*. | ||
| 664 | |||
| 665 | There are many ways to compete. Competition can consist of trying to | ||
| 666 | achieve ever more, to outdo what others have done. For example, in the | ||
| 667 | old days, there was competition among programming wizards--competition | ||
| 668 | for who could make the computer do the most amazing thing, or for who | ||
| 669 | could make the shortest or fastest program for a given task. This kind | ||
| 670 | of competition can benefit everyone, *as long as* the spirit of good | ||
| 671 | sportsmanship is maintained. | ||
| 672 | |||
| 673 | Constructive competition is enough competition to motivate people to | ||
| 674 | great efforts. A number of people are competing to be the first to have | ||
| 675 | visited all the countries on Earth; some even spend fortunes trying to | ||
| 676 | do this. But they do not bribe ship captains to strand their rivals on | ||
| 677 | desert islands. They are content to let the best person win. | ||
| 678 | |||
| 679 | Competition becomes combat when the competitors begin trying to | ||
| 680 | impede each other instead of advancing themselves--when "Let the best | ||
| 681 | person win" gives way to "Let me win, best or not." Proprietary | ||
| 682 | software is harmful, not because it is a form of competition, but | ||
| 683 | because it is a form of combat among the citizens of our society. | ||
| 684 | |||
| 685 | Competition in business is not necessarily combat. For example, when | ||
| 686 | two grocery stores compete, their entire effort is to improve their own | ||
| 687 | operations, not to sabotage the rival. But this does not demonstrate a | ||
| 688 | special commitment to business ethics; rather, there is little scope for | ||
| 689 | combat in this line of business short of physical violence. Not all | ||
| 690 | areas of business share this characteristic. Withholding information | ||
| 691 | that could help everyone advance is a form of combat. | ||
| 692 | |||
| 693 | Business ideology does not prepare people to resist the temptation to | ||
| 694 | combat the competition. Some forms of combat have been made banned with | ||
| 695 | anti-trust laws, truth in advertising laws, and so on, but rather than | ||
| 696 | generalizing this to a principled rejection of combat in general, | ||
| 697 | executives invent other forms of combat which are not specifically | ||
| 698 | prohibited. Society's resources are squandered on the economic | ||
| 699 | equivalent of factional civil war. | ||
| 700 | |||
| 701 | "Why Don't You Move to Russia?" | ||
| 702 | ******************************* | ||
| 703 | |||
| 704 | In the United States, any advocate of other than the most extreme | ||
| 705 | form of laissez-faire selfishness has often heard this accusation. For | ||
| 706 | example, it is leveled against the supporters of a national health care | ||
| 707 | system, such as is found in all the other industrialized nations of the | ||
| 708 | free world. It is leveled against the advocates of public support for | ||
| 709 | the arts, also universal in advanced nations. The idea that citizens | ||
| 710 | have any obligation to the public good is identified in America with | ||
| 711 | Communism. But how similar are these ideas? | ||
| 712 | |||
| 713 | Communism as was practiced in the Soviet Union was a system of | ||
| 714 | central control where all activity was regimented, supposedly for the | ||
| 715 | common good, but actually for the sake of the members of the Communist | ||
| 716 | party. And where copying equipment was closely guarded to prevent | ||
| 717 | illegal copying. | ||
| 718 | |||
| 719 | The American system of intellectual property exercises central | ||
| 720 | control over distribution of a program, and guards copying equipment | ||
| 721 | with automatic copying protection schemes to prevent illegal copying. | ||
| 722 | |||
| 723 | By contrast, I am working to build a system where people are free to | ||
| 724 | decide their own actions; in particular, free to help their neighbors, | ||
| 725 | and free to alter and improve the tools which they use in their daily | ||
| 726 | lives. A system based on voluntary cooperation, and decentralization. | ||
| 727 | |||
| 728 | Thus, if we are to judge views by their resemblance to Russian | ||
| 729 | Communism, it is the software owners who are the Communists. | ||
| 730 | |||
| 731 | The Question of Premises | ||
| 732 | ************************ | ||
| 733 | |||
| 734 | I make the assumption in this paper that a user of software is no | ||
| 735 | less important than an author, or even an author's employer. In other | ||
| 736 | words, their interests and needs have equal weight, when we decide | ||
| 737 | which course of action is best. | ||
| 738 | |||
| 739 | This premise is not universally accepted. Many maintain that an | ||
| 740 | author's employer is fundamentally more important than anyone else. | ||
| 741 | They say, for example, that the purpose of having owners of software is | ||
| 742 | to give the author's employer the advantage he deserves--regardless of | ||
| 743 | how this may affect the public. | ||
| 744 | |||
| 745 | It is no use trying to prove or disprove these premises. Proof | ||
| 746 | requires shared premises. So most of what I have to say is addressed | ||
| 747 | only to those who share the premises I use, or at least are interested | ||
| 748 | in what their consequences are. For those who believe that the owners | ||
| 749 | are more important than everyone else, this paper is simply irrelevant. | ||
| 750 | |||
| 751 | But why would a large number of Americans accept a premise which | ||
| 752 | elevates certain people in importance above everyone else? Partly | ||
| 753 | because of the belief that this premise is part of the legal traditions | ||
| 754 | of American society. Some people feel that doubting the premise means | ||
| 755 | challenging the basis of society. | ||
| 756 | |||
| 757 | It is important for these people to know that this premise is not | ||
| 758 | part of our legal tradition. It never has been. | ||
| 759 | |||
| 760 | Thus, the Constitution says that the purpose of copyright is to | ||
| 761 | "promote the progress of science and the useful arts." The Supreme | ||
| 762 | Court has elaborated on this, stating in `Fox Film vs. Doyal' that "The | ||
| 763 | sole interest of the United States and the primary object in conferring | ||
| 764 | the [copyright] monopoly lie in the general benefits derived by the | ||
| 765 | public from the labors of authors." | ||
| 766 | |||
| 767 | We are not required to agree with the Constitution or the Supreme | ||
| 768 | Court. (At one time, they both condoned slavery.) So their positions | ||
| 769 | do not disprove the owner supremacy premise. But I hope that the | ||
| 770 | awareness that this is a radical right-wing assumption rather than a | ||
| 771 | traditionally recognized one will weaken its appeal. | ||
| 772 | |||
| 773 | Conclusion | ||
| 774 | ********** | ||
| 775 | |||
| 776 | We like to think that our society encourages helping your neighbor; | ||
| 777 | but each time we reward someone for obstructionism, or admire them for | ||
| 778 | the wealth they have gained in this way, we are sending the opposite | ||
| 779 | message. | ||
| 780 | |||
| 781 | Software hoarding is one form of our general willingness to disregard | ||
| 782 | the welfare of society for personal gain. We can trace this disregard | ||
| 783 | from Ronald Reagan to Jim Bakker, from Ivan Boesky to Exxon, from | ||
| 784 | failing banks to failing schools. We can measure it with the size of | ||
| 785 | the homeless population and the prison population. The antisocial | ||
| 786 | spirit feeds on itself, because the more we see that other people will | ||
| 787 | not help us, the more it seems futile to help them. Thus society decays | ||
| 788 | into a jungle. | ||
| 789 | |||
| 790 | If we don't want to live in a jungle, we must change our attitudes. | ||
| 791 | We must start sending the message that a good citizen is one who | ||
| 792 | cooperates when appropriate, not one who is successful at taking from | ||
| 793 | others. I hope that the free software movement will contribute to | ||
| 794 | this: at least in one area, we will replace the jungle with a more | ||
| 795 | efficient system which encourages and runs on voluntary cooperation. | ||
| 796 | |||
| 797 | ---------- Footnotes ---------- | ||
| 798 | |||
| 799 | (1) The word "free" in "free software" refers to freedom, not to | ||
| 800 | price; the price paid for a copy of a free program may be zero, or | ||
| 801 | small, or (rarely) quite large. | ||
| 802 | |||
| 803 | (2) The issues of pollution and traffic congestion do not alter | ||
| 804 | this conclusion. If we wish to make driving more expensive to | ||
| 805 | discourage driving in general, it is disadvantageous to do this using | ||
| 806 | toll booths, which contribute to both pollution and congestion. A tax | ||
| 807 | on gasoline is much better. Likewise, a desire to enhance safety by | ||
| 808 | limiting maximum speed is not relevant; a free access road enhances the | ||
| 809 | average speed by avoiding stops and delays, for any given speed limit. | ||
| 810 | |||
| 811 | (3) One might regard a particular computer program as a harmful | ||
| 812 | thing that should not be available at all, like the Lotus Marketplace | ||
| 813 | database of personal information, which was withdrawn from sale due to | ||
| 814 | public disapproval. Most of what I say does not apply to this case, | ||
| 815 | but it makes little sense to argue for having an owner on the grounds | ||
| 816 | that the owner will make the program less available. The owner will | ||
| 817 | not make it *completely* unavailable, as one would wish in the case of | ||
| 818 | a program whose use is considered destructive. | ||
| 819 | |||
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5647c86053e..d113d60af83 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,5 +1,45 @@ | |||
| 1 | 2014-01-12 Xue Fuqiao <xfq.free@gmail.com> | ||
| 2 | |||
| 3 | * net/eww.el (eww-download-directory): Rename from | ||
| 4 | `eww-download-path' (Bug#16419). | ||
| 5 | |||
| 6 | 2014-01-12 Leo Liu <sdl.web@gmail.com> | ||
| 7 | |||
| 8 | * dired-x.el (dired-mode-map): Fix last change. | ||
| 9 | |||
| 10 | * emacs-lisp/eldoc.el (eldoc-mode): Add hook locally. | ||
| 11 | |||
| 12 | 2014-01-12 Paul Eggert <eggert@cs.ucla.edu> | ||
| 13 | |||
| 14 | Spelling fixes. | ||
| 15 | * emacs-lisp/generic.el (generic--normalize-comments): | ||
| 16 | Rename from generic--normalise-comments. All uses changed. | ||
| 17 | * play/bubbles.el (bubbles--neighborhood-score): | ||
| 18 | (bubbles--mark-direct-neighbors, bubbles--mark-neighborhood) | ||
| 19 | (bubbles--neighborhood-available) | ||
| 20 | (bubbles--update-neighborhood-score): | ||
| 21 | Rename from names with 'neighbourhood'. All uses changed. | ||
| 22 | |||
| 23 | 2014-01-12 Leo Liu <sdl.web@gmail.com> | ||
| 24 | |||
| 25 | Re-implement the feature of showing eldoc info after editing. | ||
| 26 | * emacs-lisp/eldoc.el (eldoc-post-insert-mode): Remove. | ||
| 27 | (eldoc-edit-message-commands): New function. | ||
| 28 | (eldoc-print-after-edit): New variable. | ||
| 29 | (eldoc-pre-command-refresh-echo-area): Emit message only by | ||
| 30 | eldoc-message-commands. | ||
| 31 | (eldoc-mode): Restrict eldoc-message-commands to editing commands | ||
| 32 | if eldoc-print-after-edit is set. (Bug#16346) | ||
| 33 | |||
| 34 | * progmodes/octave.el (octave-mode-menu): Adapt to change in | ||
| 35 | eldoc. | ||
| 36 | |||
| 1 | 2014-01-11 Eric S. Raymond <esr@thyrsus.com> | 37 | 2014-01-11 Eric S. Raymond <esr@thyrsus.com> |
| 2 | 38 | ||
| 39 | * version.el (emacs-repository-get-version): Enhance so the | ||
| 40 | function works correctly in either a Bazaar or Git repo. The | ||
| 41 | Bazaar case can be discarded after the repo transition. | ||
| 42 | |||
| 3 | * play/meese.el: It's 2014 and Ed Meese is justly forgotten. Goes | 43 | * play/meese.el: It's 2014 and Ed Meese is justly forgotten. Goes |
| 4 | with removal of the joke manpages from /etc. | 44 | with removal of the joke manpages from /etc. |
| 5 | 45 | ||
| @@ -243,7 +283,7 @@ | |||
| 243 | 2014-01-06 Leo Liu <sdl.web@gmail.com> | 283 | 2014-01-06 Leo Liu <sdl.web@gmail.com> |
| 244 | 284 | ||
| 245 | * dired-x.el (dired-mode-map): Rebind dired-omit-mode to C-x M-o | 285 | * dired-x.el (dired-mode-map): Rebind dired-omit-mode to C-x M-o |
| 246 | to avoid shadowning global key. (Bug#16354) | 286 | to avoid shadowing global key. (Bug#16354) |
| 247 | 287 | ||
| 248 | 2014-01-06 Daniel Colascione <dancol@dancol.org> | 288 | 2014-01-06 Daniel Colascione <dancol@dancol.org> |
| 249 | 289 | ||
diff --git a/lisp/dired-x.el b/lisp/dired-x.el index a1ee1fa2e07..947de7cd9f8 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el | |||
| @@ -241,7 +241,7 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used." | |||
| 241 | 241 | ||
| 242 | ;;; KEY BINDINGS. | 242 | ;;; KEY BINDINGS. |
| 243 | 243 | ||
| 244 | (define-key dired-mode-map "\C-c\M-o" 'dired-omit-mode) | 244 | (define-key dired-mode-map "\C-x\M-o" 'dired-omit-mode) |
| 245 | (define-key dired-mode-map "*O" 'dired-mark-omitted) | 245 | (define-key dired-mode-map "*O" 'dired-mark-omitted) |
| 246 | (define-key dired-mode-map "\M-(" 'dired-mark-sexp) | 246 | (define-key dired-mode-map "\M-(" 'dired-mark-sexp) |
| 247 | (define-key dired-mode-map "*(" 'dired-mark-sexp) | 247 | (define-key dired-mode-map "*(" 'dired-mark-sexp) |
diff --git a/lisp/dired.el b/lisp/dired.el index 571e0d25be1..a30f34bc43a 100644 --- a/lisp/dired.el +++ b/lisp/dired.el | |||
| @@ -4353,7 +4353,7 @@ instead. | |||
| 4353 | 4353 | ||
| 4354 | ;;;*** | 4354 | ;;;*** |
| 4355 | 4355 | ||
| 4356 | ;;;### (autoloads nil "dired-x" "dired-x.el" "fe5dbf515419da3b9907f32e5d4311fa") | 4356 | ;;;### (autoloads nil "dired-x" "dired-x.el" "291bc6e869bf72c900604c45d40f45ed") |
| 4357 | ;;; Generated autoloads from dired-x.el | 4357 | ;;; Generated autoloads from dired-x.el |
| 4358 | 4358 | ||
| 4359 | (autoload 'dired-jump "dired-x" "\ | 4359 | (autoload 'dired-jump "dired-x" "\ |
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 8bd9ebc1e63..fa1574b0a88 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | ;;; eldoc.el --- show function arglist or variable docstring in echo area | 1 | ;;; eldoc.el --- show function arglist or variable docstring in echo area -*- lexical-binding: t; -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1996-2014 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1996-2014 Free Software Foundation, Inc. |
| 4 | 4 | ||
| @@ -62,6 +62,12 @@ If this variable is set to 0, no idle time is required." | |||
| 62 | :type 'number | 62 | :type 'number |
| 63 | :group 'eldoc) | 63 | :group 'eldoc) |
| 64 | 64 | ||
| 65 | (defcustom eldoc-print-after-edit nil | ||
| 66 | "If non-nil eldoc info is only shown when editing. | ||
| 67 | Changing the value requires toggling `eldoc-mode'." | ||
| 68 | :type 'boolean | ||
| 69 | :group 'eldoc) | ||
| 70 | |||
| 65 | ;;;###autoload | 71 | ;;;###autoload |
| 66 | (defcustom eldoc-minor-mode-string (purecopy " ElDoc") | 72 | (defcustom eldoc-minor-mode-string (purecopy " ElDoc") |
| 67 | "String to display in mode line when ElDoc Mode is enabled; nil for none." | 73 | "String to display in mode line when ElDoc Mode is enabled; nil for none." |
| @@ -150,6 +156,16 @@ This is used to determine if `eldoc-idle-delay' is changed by the user.") | |||
| 150 | "The function used by `eldoc-message' to display messages. | 156 | "The function used by `eldoc-message' to display messages. |
| 151 | It should receive the same arguments as `message'.") | 157 | It should receive the same arguments as `message'.") |
| 152 | 158 | ||
| 159 | (defun eldoc-edit-message-commands () | ||
| 160 | (let ((cmds (make-vector 31 0)) | ||
| 161 | (re (regexp-opt '("delete" "insert" "edit" "electric" "newline")))) | ||
| 162 | (mapatoms (lambda (s) | ||
| 163 | (and (commandp s) | ||
| 164 | (string-match-p re (symbol-name s)) | ||
| 165 | (intern (symbol-name s) cmds))) | ||
| 166 | obarray) | ||
| 167 | cmds)) | ||
| 168 | |||
| 153 | 169 | ||
| 154 | ;;;###autoload | 170 | ;;;###autoload |
| 155 | (define-minor-mode eldoc-mode | 171 | (define-minor-mode eldoc-mode |
| @@ -168,25 +184,13 @@ expression point is on." | |||
| 168 | (setq eldoc-last-message nil) | 184 | (setq eldoc-last-message nil) |
| 169 | (if eldoc-mode | 185 | (if eldoc-mode |
| 170 | (progn | 186 | (progn |
| 187 | (when eldoc-print-after-edit | ||
| 188 | (setq-local eldoc-message-commands (eldoc-edit-message-commands))) | ||
| 171 | (add-hook 'post-command-hook 'eldoc-schedule-timer nil t) | 189 | (add-hook 'post-command-hook 'eldoc-schedule-timer nil t) |
| 172 | (add-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t)) | 190 | (add-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area nil t)) |
| 173 | (remove-hook 'post-command-hook 'eldoc-schedule-timer) | 191 | (kill-local-variable 'eldoc-message-commands) |
| 174 | (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area))) | 192 | (remove-hook 'post-command-hook 'eldoc-schedule-timer t) |
| 175 | 193 | (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t))) | |
| 176 | ;;;###autoload | ||
| 177 | (define-minor-mode eldoc-post-insert-mode nil | ||
| 178 | :group 'eldoc :lighter (:eval (if eldoc-mode "" | ||
| 179 | (concat eldoc-minor-mode-string "|i"))) | ||
| 180 | (setq eldoc-last-message nil) | ||
| 181 | (let ((prn-info (lambda () | ||
| 182 | (unless eldoc-mode | ||
| 183 | (eldoc-print-current-symbol-info))))) | ||
| 184 | (if eldoc-post-insert-mode | ||
| 185 | (add-hook 'post-self-insert-hook prn-info nil t) | ||
| 186 | (remove-hook 'post-self-insert-hook prn-info t)))) | ||
| 187 | |||
| 188 | ;; FIXME: This changes Emacs's behavior when the file is loaded! | ||
| 189 | (add-hook 'eval-expression-minibuffer-setup-hook 'eldoc-post-insert-mode) | ||
| 190 | 194 | ||
| 191 | ;;;###autoload | 195 | ;;;###autoload |
| 192 | (defun turn-on-eldoc-mode () | 196 | (defun turn-on-eldoc-mode () |
| @@ -264,8 +268,10 @@ Otherwise work like `message'." | |||
| 264 | ;; This doesn't seem to be required for Emacs 19.28 and earlier. | 268 | ;; This doesn't seem to be required for Emacs 19.28 and earlier. |
| 265 | (defun eldoc-pre-command-refresh-echo-area () | 269 | (defun eldoc-pre-command-refresh-echo-area () |
| 266 | (and eldoc-last-message | 270 | (and eldoc-last-message |
| 267 | (if (eldoc-display-message-no-interference-p) | 271 | (if (and (eldoc-display-message-no-interference-p) |
| 268 | (eldoc-message eldoc-last-message) | 272 | (symbolp this-command) |
| 273 | (intern-soft (symbol-name this-command) eldoc-message-commands)) | ||
| 274 | (eldoc-message eldoc-last-message) | ||
| 269 | (setq eldoc-last-message nil)))) | 275 | (setq eldoc-last-message nil)))) |
| 270 | 276 | ||
| 271 | ;; Decide whether now is a good time to display a message. | 277 | ;; Decide whether now is a good time to display a message. |
| @@ -283,9 +289,7 @@ Otherwise work like `message'." | |||
| 283 | ;; Check various conditions about the current environment that might make | 289 | ;; Check various conditions about the current environment that might make |
| 284 | ;; it undesirable to print eldoc messages right this instant. | 290 | ;; it undesirable to print eldoc messages right this instant. |
| 285 | (defun eldoc-display-message-no-interference-p () | 291 | (defun eldoc-display-message-no-interference-p () |
| 286 | (and eldoc-mode | 292 | (not (or executing-kbd-macro (bound-and-true-p edebug-active)))) |
| 287 | (not executing-kbd-macro) | ||
| 288 | (not (and (boundp 'edebug-active) edebug-active)))) | ||
| 289 | 293 | ||
| 290 | 294 | ||
| 291 | ;;;###autoload | 295 | ;;;###autoload |
| @@ -309,7 +313,7 @@ Emacs Lisp mode) that support ElDoc.") | |||
| 309 | ;; This is run from post-command-hook or some idle timer thing, | 313 | ;; This is run from post-command-hook or some idle timer thing, |
| 310 | ;; so we need to be careful that errors aren't ignored. | 314 | ;; so we need to be careful that errors aren't ignored. |
| 311 | (with-demoted-errors "eldoc error: %s" | 315 | (with-demoted-errors "eldoc error: %s" |
| 312 | (and (or (eldoc-display-message-p) eldoc-post-insert-mode) | 316 | (and (eldoc-display-message-p) |
| 313 | (if eldoc-documentation-function | 317 | (if eldoc-documentation-function |
| 314 | (eldoc-message (funcall eldoc-documentation-function)) | 318 | (eldoc-message (funcall eldoc-documentation-function)) |
| 315 | (let* ((current-symbol (eldoc-current-symbol)) | 319 | (let* ((current-symbol (eldoc-current-symbol)) |
diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el index 146219885da..02c30aad55f 100644 --- a/lisp/emacs-lisp/generic.el +++ b/lisp/emacs-lisp/generic.el | |||
| @@ -224,7 +224,7 @@ Some generic modes are defined in `generic-x.el'." | |||
| 224 | 224 | ||
| 225 | ;;; Comment Functionality | 225 | ;;; Comment Functionality |
| 226 | 226 | ||
| 227 | (defun generic--normalise-comments (comment-list) | 227 | (defun generic--normalize-comments (comment-list) |
| 228 | (let ((normalized '())) | 228 | (let ((normalized '())) |
| 229 | (dolist (start comment-list) | 229 | (dolist (start comment-list) |
| 230 | (let (end) | 230 | (let (end) |
| @@ -300,7 +300,7 @@ Some generic modes are defined in `generic-x.el'." | |||
| 300 | (defun generic-mode-set-comments (comment-list) | 300 | (defun generic-mode-set-comments (comment-list) |
| 301 | "Set up comment functionality for generic mode." | 301 | "Set up comment functionality for generic mode." |
| 302 | (let ((st (make-syntax-table)) | 302 | (let ((st (make-syntax-table)) |
| 303 | (comment-list (generic--normalise-comments comment-list))) | 303 | (comment-list (generic--normalize-comments comment-list))) |
| 304 | (generic-set-comment-syntax st comment-list) | 304 | (generic-set-comment-syntax st comment-list) |
| 305 | (generic-set-comment-vars comment-list) | 305 | (generic-set-comment-vars comment-list) |
| 306 | (set-syntax-table st))) | 306 | (set-syntax-table st))) |
diff --git a/lisp/mouse-drag.el b/lisp/mouse-drag.el index a0115f8ea66..082c9235ff9 100644 --- a/lisp/mouse-drag.el +++ b/lisp/mouse-drag.el | |||
| @@ -291,7 +291,7 @@ To test this function, evaluate: | |||
| 291 | (or (mouse-movement-p event) | 291 | (or (mouse-movement-p event) |
| 292 | (eq (car-safe event) 'switch-frame))) | 292 | (eq (car-safe event) 'switch-frame))) |
| 293 | ;; Scroll if see if we're on the edge. | 293 | ;; Scroll if see if we're on the edge. |
| 294 | ;; NEEDSWORK: should handle mouse-in-other window. | 294 | ;; FIXME: should handle mouse-in-other window. |
| 295 | (cond | 295 | (cond |
| 296 | ((not (eq start-window (posn-window end))) | 296 | ((not (eq start-window (posn-window end))) |
| 297 | t) ; wait for return to original window | 297 | t) ; wait for return to original window |
diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 38726fd7dcc..4375a31bd36 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el | |||
| @@ -50,8 +50,8 @@ | |||
| 50 | :group 'eww | 50 | :group 'eww |
| 51 | :type 'string) | 51 | :type 'string) |
| 52 | 52 | ||
| 53 | (defcustom eww-download-path "~/Downloads/" | 53 | (defcustom eww-download-directory "~/Downloads/" |
| 54 | "Path where files will downloaded." | 54 | "Directory where files will downloaded." |
| 55 | :version "24.4" | 55 | :version "24.4" |
| 56 | :group 'eww | 56 | :group 'eww |
| 57 | :type 'string) | 57 | :type 'string) |
diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el index 69ad4da60ca..d24dad28363 100644 --- a/lisp/org/org-list.el +++ b/lisp/org/org-list.el | |||
| @@ -1223,7 +1223,7 @@ some heuristics to guess the result." | |||
| 1223 | ;; When `org-blank-before-new-entry' says so, it is 1. | 1223 | ;; When `org-blank-before-new-entry' says so, it is 1. |
| 1224 | ((eq insert-blank-p t) 1) | 1224 | ((eq insert-blank-p t) 1) |
| 1225 | ;; `plain-list-item' is 'auto. Count blank lines separating | 1225 | ;; `plain-list-item' is 'auto. Count blank lines separating |
| 1226 | ;; neighbours items in list. | 1226 | ;; neighbors' items in list. |
| 1227 | (t (let ((next-p (org-list-get-next-item item struct prevs))) | 1227 | (t (let ((next-p (org-list-get-next-item item struct prevs))) |
| 1228 | (cond | 1228 | (cond |
| 1229 | ;; Is there a next item? | 1229 | ;; Is there a next item? |
diff --git a/lisp/org/ox.el b/lisp/org/ox.el index fcf6aab2069..0102523b5c7 100644 --- a/lisp/org/ox.el +++ b/lisp/org/ox.el | |||
| @@ -5093,7 +5093,7 @@ Return the new string." | |||
| 5093 | ;;;; Topology | 5093 | ;;;; Topology |
| 5094 | ;; | 5094 | ;; |
| 5095 | ;; Here are various functions to retrieve information about the | 5095 | ;; Here are various functions to retrieve information about the |
| 5096 | ;; neighbourhood of a given element or object. Neighbours of interest | 5096 | ;; neighborhood of a given element or object. Neighbors of interest |
| 5097 | ;; are direct parent (`org-export-get-parent'), parent headline | 5097 | ;; are direct parent (`org-export-get-parent'), parent headline |
| 5098 | ;; (`org-export-get-parent-headline'), first element containing an | 5098 | ;; (`org-export-get-parent-headline'), first element containing an |
| 5099 | ;; object, (`org-export-get-parent-element'), parent table | 5099 | ;; object, (`org-export-get-parent-element'), parent table |
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el index 8294d6398fe..e7f5725a0f0 100644 --- a/lisp/play/bubbles.el +++ b/lisp/play/bubbles.el | |||
| @@ -231,7 +231,7 @@ Available modes are `shift-default' and `shift-always'." | |||
| 231 | (defvar bubbles--score 0 | 231 | (defvar bubbles--score 0 |
| 232 | "Current Bubbles score.") | 232 | "Current Bubbles score.") |
| 233 | 233 | ||
| 234 | (defvar bubbles--neighbourhood-score 0 | 234 | (defvar bubbles--neighborhood-score 0 |
| 235 | "Score of active bubbles neighborhood.") | 235 | "Score of active bubbles neighborhood.") |
| 236 | 236 | ||
| 237 | (defvar bubbles--faces nil | 237 | (defvar bubbles--faces nil |
| @@ -925,7 +925,7 @@ static char * dot3d_xpm[] = { | |||
| 925 | (buffer-disable-undo) | 925 | (buffer-disable-undo) |
| 926 | (force-mode-line-update) | 926 | (force-mode-line-update) |
| 927 | (redisplay) | 927 | (redisplay) |
| 928 | (add-hook 'post-command-hook 'bubbles--mark-neighbourhood t t)) | 928 | (add-hook 'post-command-hook 'bubbles--mark-neighborhood t t)) |
| 929 | 929 | ||
| 930 | ;;;###autoload | 930 | ;;;###autoload |
| 931 | (defun bubbles () | 931 | (defun bubbles () |
| @@ -1087,7 +1087,7 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." | |||
| 1087 | (char-after (point)) | 1087 | (char-after (point)) |
| 1088 | nil))) | 1088 | nil))) |
| 1089 | 1089 | ||
| 1090 | (defun bubbles--mark-direct-neighbours (row col char) | 1090 | (defun bubbles--mark-direct-neighbors (row col char) |
| 1091 | "Mark direct neighbors of bubble at ROW COL with same CHAR." | 1091 | "Mark direct neighbors of bubble at ROW COL with same CHAR." |
| 1092 | (save-excursion | 1092 | (save-excursion |
| 1093 | (let ((count 0)) | 1093 | (let ((count 0)) |
| @@ -1097,13 +1097,13 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." | |||
| 1097 | (add-text-properties (point) (1+ (point)) | 1097 | (add-text-properties (point) (1+ (point)) |
| 1098 | '(active t face 'bubbles--highlight-face)) | 1098 | '(active t face 'bubbles--highlight-face)) |
| 1099 | (setq count (+ 1 | 1099 | (setq count (+ 1 |
| 1100 | (bubbles--mark-direct-neighbours row (1+ col) char) | 1100 | (bubbles--mark-direct-neighbors row (1+ col) char) |
| 1101 | (bubbles--mark-direct-neighbours row (1- col) char) | 1101 | (bubbles--mark-direct-neighbors row (1- col) char) |
| 1102 | (bubbles--mark-direct-neighbours (1+ row) col char) | 1102 | (bubbles--mark-direct-neighbors (1+ row) col char) |
| 1103 | (bubbles--mark-direct-neighbours (1- row) col char)))) | 1103 | (bubbles--mark-direct-neighbors (1- row) col char)))) |
| 1104 | count))) | 1104 | count))) |
| 1105 | 1105 | ||
| 1106 | (defun bubbles--mark-neighbourhood (&optional pos) | 1106 | (defun bubbles--mark-neighborhood (&optional pos) |
| 1107 | "Mark neighborhood of point. | 1107 | "Mark neighborhood of point. |
| 1108 | Use optional parameter POS instead of point if given." | 1108 | Use optional parameter POS instead of point if given." |
| 1109 | (when bubbles--playing | 1109 | (when bubbles--playing |
| @@ -1117,17 +1117,17 @@ Use optional parameter POS instead of point if given." | |||
| 1117 | '(face default active nil)) | 1117 | '(face default active nil)) |
| 1118 | (let ((count 0)) | 1118 | (let ((count 0)) |
| 1119 | (when (and row col (not (eq char (bubbles--empty-char)))) | 1119 | (when (and row col (not (eq char (bubbles--empty-char)))) |
| 1120 | (setq count (bubbles--mark-direct-neighbours row col char)) | 1120 | (setq count (bubbles--mark-direct-neighbors row col char)) |
| 1121 | (unless (> count 1) | 1121 | (unless (> count 1) |
| 1122 | (add-text-properties (point-min) (point-max) | 1122 | (add-text-properties (point-min) (point-max) |
| 1123 | '(face default active nil)) | 1123 | '(face default active nil)) |
| 1124 | (setq count 0))) | 1124 | (setq count 0))) |
| 1125 | (bubbles--update-neighbourhood-score count)) | 1125 | (bubbles--update-neighborhood-score count)) |
| 1126 | (put-text-property (point-min) (point-max) 'pointer 'arrow) | 1126 | (put-text-property (point-min) (point-max) 'pointer 'arrow) |
| 1127 | (bubbles--update-faces-or-images) | 1127 | (bubbles--update-faces-or-images) |
| 1128 | (sit-for 0))))) | 1128 | (sit-for 0))))) |
| 1129 | 1129 | ||
| 1130 | (defun bubbles--neighbourhood-available () | 1130 | (defun bubbles--neighborhood-available () |
| 1131 | "Return t if another valid neighborhood is available." | 1131 | "Return t if another valid neighborhood is available." |
| 1132 | (catch 'found | 1132 | (catch 'found |
| 1133 | (save-excursion | 1133 | (save-excursion |
| @@ -1153,20 +1153,20 @@ Use optional parameter POS instead of point if given." | |||
| 1153 | 1153 | ||
| 1154 | (defun bubbles--reset-score () | 1154 | (defun bubbles--reset-score () |
| 1155 | "Reset bubbles score." | 1155 | "Reset bubbles score." |
| 1156 | (setq bubbles--neighbourhood-score 0 | 1156 | (setq bubbles--neighborhood-score 0 |
| 1157 | bubbles--score 0) | 1157 | bubbles--score 0) |
| 1158 | (bubbles--update-score)) | 1158 | (bubbles--update-score)) |
| 1159 | 1159 | ||
| 1160 | (defun bubbles--update-score () | 1160 | (defun bubbles--update-score () |
| 1161 | "Calculate and display new bubbles score." | 1161 | "Calculate and display new bubbles score." |
| 1162 | (setq bubbles--score (+ bubbles--score bubbles--neighbourhood-score)) | 1162 | (setq bubbles--score (+ bubbles--score bubbles--neighborhood-score)) |
| 1163 | (bubbles--show-scores)) | 1163 | (bubbles--show-scores)) |
| 1164 | 1164 | ||
| 1165 | (defun bubbles--update-neighbourhood-score (size) | 1165 | (defun bubbles--update-neighborhood-score (size) |
| 1166 | "Calculate and display score of active neighborhood from its SIZE." | 1166 | "Calculate and display score of active neighborhood from its SIZE." |
| 1167 | (if (> size 1) | 1167 | (if (> size 1) |
| 1168 | (setq bubbles--neighbourhood-score (expt (- size 1) 2)) | 1168 | (setq bubbles--neighborhood-score (expt (- size 1) 2)) |
| 1169 | (setq bubbles--neighbourhood-score 0)) | 1169 | (setq bubbles--neighborhood-score 0)) |
| 1170 | (bubbles--show-scores)) | 1170 | (bubbles--show-scores)) |
| 1171 | 1171 | ||
| 1172 | (defun bubbles--show-scores () | 1172 | (defun bubbles--show-scores () |
| @@ -1177,7 +1177,7 @@ Use optional parameter POS instead of point if given." | |||
| 1177 | (let ((inhibit-read-only t) | 1177 | (let ((inhibit-read-only t) |
| 1178 | (pos (point))) | 1178 | (pos (point))) |
| 1179 | (delete-region (point) (point-max)) | 1179 | (delete-region (point) (point-max)) |
| 1180 | (insert (format "Selected: %4d\n" bubbles--neighbourhood-score)) | 1180 | (insert (format "Selected: %4d\n" bubbles--neighborhood-score)) |
| 1181 | (insert " ") | 1181 | (insert " ") |
| 1182 | (add-text-properties (1- (point)) (point) | 1182 | (add-text-properties (1- (point)) (point) |
| 1183 | (list 'intangible t 'display | 1183 | (list 'intangible t 'display |
| @@ -1216,10 +1216,10 @@ Use optional parameter POS instead of point if given." | |||
| 1216 | "Remove active bubbles region." | 1216 | "Remove active bubbles region." |
| 1217 | (interactive) | 1217 | (interactive) |
| 1218 | (when (and bubbles--playing | 1218 | (when (and bubbles--playing |
| 1219 | (> bubbles--neighbourhood-score 0)) | 1219 | (> bubbles--neighborhood-score 0)) |
| 1220 | (setq bubbles--save-data (list bubbles--score (buffer-string))) | 1220 | (setq bubbles--save-data (list bubbles--score (buffer-string))) |
| 1221 | (let ((inhibit-read-only t)) | 1221 | (let ((inhibit-read-only t)) |
| 1222 | ;; blank out current neighbourhood | 1222 | ;; blank out current neighborhood |
| 1223 | (let ((row (bubbles--row (point))) | 1223 | (let ((row (bubbles--row (point))) |
| 1224 | (col (bubbles--col (point)))) | 1224 | (col (bubbles--col (point)))) |
| 1225 | (goto-char (point-max)) | 1225 | (goto-char (point-max)) |
| @@ -1289,7 +1289,7 @@ Use optional parameter POS instead of point if given." | |||
| 1289 | (bubbles--update-faces-or-images) | 1289 | (bubbles--update-faces-or-images) |
| 1290 | (sit-for 0))) | 1290 | (sit-for 0))) |
| 1291 | (put-text-property (point-min) (point-max) 'removed nil) | 1291 | (put-text-property (point-min) (point-max) 'removed nil) |
| 1292 | (unless (bubbles--neighbourhood-available) | 1292 | (unless (bubbles--neighborhood-available) |
| 1293 | (bubbles--game-over))) | 1293 | (bubbles--game-over))) |
| 1294 | ;; undo | 1294 | ;; undo |
| 1295 | (setq buffer-undo-list '((apply bubbles-undo . nil))) | 1295 | (setq buffer-undo-list '((apply bubbles-undo . nil))) |
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index e2ef492a9ad..1378e8fdb59 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el | |||
| @@ -154,12 +154,8 @@ parenthetical grouping.") | |||
| 154 | ["Insert Function" octave-insert-defun t] | 154 | ["Insert Function" octave-insert-defun t] |
| 155 | ["Update Function File Comment" octave-update-function-file-comment t] | 155 | ["Update Function File Comment" octave-update-function-file-comment t] |
| 156 | "---" | 156 | "---" |
| 157 | ["Function Syntax Hints" (call-interactively | 157 | ["Function Syntax Hints" (eldoc-mode 'toggle) |
| 158 | (if (fboundp 'eldoc-post-insert-mode) | 158 | :style toggle :selected (bound-and-true-p eldoc-mode) |
| 159 | 'eldoc-post-insert-mode | ||
| 160 | 'eldoc-mode)) | ||
| 161 | :style toggle :selected (or (bound-and-true-p eldoc-post-insert-mode) | ||
| 162 | (bound-and-true-p eldoc-mode)) | ||
| 163 | :help "Display function signatures after typing `SPC' or `('"] | 159 | :help "Display function signatures after typing `SPC' or `('"] |
| 164 | ["Delimiter Matching" show-paren-mode | 160 | ["Delimiter Matching" show-paren-mode |
| 165 | :style toggle :selected show-paren-mode | 161 | :style toggle :selected show-paren-mode |
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 3ae9a21c3e4..daf8d299663 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el | |||
| @@ -3504,7 +3504,7 @@ so that `occur-next' and `occur-prev' will work." | |||
| 3504 | 3504 | ||
| 3505 | ;; Originally this was sh-learn-region-indent (beg end) | 3505 | ;; Originally this was sh-learn-region-indent (beg end) |
| 3506 | ;; However, in practice this was awkward so I changed it to | 3506 | ;; However, in practice this was awkward so I changed it to |
| 3507 | ;; use the whole buffer. Use narrowing if needbe. | 3507 | ;; use the whole buffer. Use narrowing if need be. |
| 3508 | (defun sh-learn-buffer-indent (&optional arg) | 3508 | (defun sh-learn-buffer-indent (&optional arg) |
| 3509 | "Learn how to indent the buffer the way it currently is. | 3509 | "Learn how to indent the buffer the way it currently is. |
| 3510 | 3510 | ||
diff --git a/lisp/simple.el b/lisp/simple.el index 5c2f3c3db1d..ae18ae65fb5 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -1387,6 +1387,7 @@ display the result of expression evaluation." | |||
| 1387 | (lambda () | 1387 | (lambda () |
| 1388 | (add-hook 'completion-at-point-functions | 1388 | (add-hook 'completion-at-point-functions |
| 1389 | #'lisp-completion-at-point nil t) | 1389 | #'lisp-completion-at-point nil t) |
| 1390 | (eldoc-mode 1) | ||
| 1390 | (run-hooks 'eval-expression-minibuffer-setup-hook)) | 1391 | (run-hooks 'eval-expression-minibuffer-setup-hook)) |
| 1391 | (read-from-minibuffer prompt initial-contents | 1392 | (read-from-minibuffer prompt initial-contents |
| 1392 | read-expression-map t | 1393 | read-expression-map t |
diff --git a/lisp/version.el b/lisp/version.el index 71e56858afa..b2557142a78 100644 --- a/lisp/version.el +++ b/lisp/version.el | |||
| @@ -145,40 +145,52 @@ maybe ask the VCS itself, if the sources appear to be under | |||
| 145 | version control. If `force', always ask. the VCS. Otherwise | 145 | version control. If `force', always ask. the VCS. Otherwise |
| 146 | only ask the VCS if we cannot find any information ourselves." | 146 | only ask the VCS if we cannot find any information ourselves." |
| 147 | (or dir (setq dir source-directory)) | 147 | (or dir (setq dir source-directory)) |
| 148 | (when (file-directory-p (expand-file-name ".bzr/branch" dir)) | 148 | (or |
| 149 | (if (eq external 'force) | 149 | ;; Bazaar case -- to be removed after transition |
| 150 | (emacs-bzr-version-bzr dir) | 150 | (when (file-directory-p (expand-file-name ".bzr/branch" dir)) |
| 151 | (let (file loc rev) | 151 | (if (eq external 'force) |
| 152 | (cond ((file-readable-p | 152 | (emacs-bzr-version-bzr dir) |
| 153 | (setq file (expand-file-name ".bzr/branch/last-revision" dir))) | 153 | (let (file loc rev) |
| 154 | (with-temp-buffer | 154 | (cond ((file-readable-p |
| 155 | (insert-file-contents file) | 155 | (setq file (expand-file-name ".bzr/branch/last-revision" dir))) |
| 156 | (goto-char (point-max)) | 156 | (with-temp-buffer |
| 157 | (if (looking-back "\n") | 157 | (insert-file-contents file) |
| 158 | (delete-char -1)) | 158 | (goto-char (point-max)) |
| 159 | (buffer-string))) | 159 | (if (looking-back "\n") |
| 160 | ;; OK, no last-revision. Is it a lightweight checkout? | 160 | (delete-char -1)) |
| 161 | ((file-readable-p | 161 | (buffer-string))) |
| 162 | (setq file (expand-file-name ".bzr/branch/location" dir))) | 162 | ;; OK, no last-revision. Is it a lightweight checkout? |
| 163 | (setq rev (emacs-bzr-version-dirstate dir)) | 163 | ((file-readable-p |
| 164 | ;; If the parent branch is local, try looking there for the rev. | 164 | (setq file (expand-file-name ".bzr/branch/location" dir))) |
| 165 | ;; Note: there is no guarantee that the parent branch's rev | 165 | (setq rev (emacs-bzr-version-dirstate dir)) |
| 166 | ;; corresponds to this branch. This branch could have | 166 | ;; If the parent branch is local, try looking there for the rev. |
| 167 | ;; been made with a specific -r revno argument, or the | 167 | ;; Note: there is no guarantee that the parent branch's rev |
| 168 | ;; parent could have been updated since this branch was created. | 168 | ;; corresponds to this branch. This branch could have |
| 169 | ;; To try and detect this, we check the dirstate revids | 169 | ;; been made with a specific -r revno argument, or the |
| 170 | ;; to see if they match. | 170 | ;; parent could have been updated since this branch was created. |
| 171 | (if (and (setq loc (with-temp-buffer | 171 | ;; To try and detect this, we check the dirstate revids |
| 172 | (insert-file-contents file) | 172 | ;; to see if they match. |
| 173 | (if (looking-at "file://\\(.*\\)") | 173 | (if (and (setq loc (with-temp-buffer |
| 174 | (match-string 1)))) | 174 | (insert-file-contents file) |
| 175 | (equal rev (emacs-bzr-version-dirstate loc))) | 175 | (if (looking-at "file://\\(.*\\)") |
| 176 | (emacs-bzr-get-version loc) | 176 | (match-string 1)))) |
| 177 | ;; If parent does not match, the best we can do without | 177 | (equal rev (emacs-bzr-version-dirstate loc))) |
| 178 | ;; calling external commands is to use the dirstate rev. | 178 | (emacs-bzr-get-version loc) |
| 179 | rev)) | 179 | ;; If parent does not match, the best we can do without |
| 180 | (external | 180 | ;; calling external commands is to use the dirstate rev. |
| 181 | (emacs-bzr-version-bzr dir))))))) | 181 | rev)) |
| 182 | (external | ||
| 183 | (emacs-bzr-version-bzr dir)))))) | ||
| 184 | ;; Git case | ||
| 185 | (when (file-directory-p (expand-file-name ".git" dir)) | ||
| 186 | (message "Waiting for git...") | ||
| 187 | (with-temp-buffer | ||
| 188 | (if (zerop | ||
| 189 | (call-process "git" nil '(t nil) nil "log" | ||
| 190 | "-1" | ||
| 191 | "--pretty=format:%N")) | ||
| 192 | (replace-regexp-in-string "\n" "" (buffer-string))))) | ||
| 193 | )) | ||
| 182 | 194 | ||
| 183 | ;; We put version info into the executable in the form that `ident' uses. | 195 | ;; We put version info into the executable in the form that `ident' uses. |
| 184 | (purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version)) | 196 | (purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version)) |
diff --git a/nt/ChangeLog b/nt/ChangeLog index 551b973b016..5605fafb5e1 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2014-01-11 Claudio Bley <claudio.bley@googlemail.com> | ||
| 2 | |||
| 3 | * inc/sys/stat.h (_WSTAT_DEFINED): Define, to avoid compilation | ||
| 4 | failures when wchar.h is included. | ||
| 5 | |||
| 1 | 2014-01-11 Fabrice Popineau <fabrice.popineau@supelec.fr> | 6 | 2014-01-11 Fabrice Popineau <fabrice.popineau@supelec.fr> |
| 2 | 7 | ||
| 3 | * inc/ms-w32.h (pthread_sigmask): Undefine if defined, for MinGW64. | 8 | * inc/ms-w32.h (pthread_sigmask): Undefine if defined, for MinGW64. |
diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h index d9a01ee112b..7dfe78a27c3 100644 --- a/nt/inc/sys/stat.h +++ b/nt/inc/sys/stat.h | |||
| @@ -141,6 +141,13 @@ extern int w32_stat_get_owner_group; | |||
| 141 | 141 | ||
| 142 | /* Prevent redefinition by other headers, e.g. wchar.h. */ | 142 | /* Prevent redefinition by other headers, e.g. wchar.h. */ |
| 143 | #define _STAT_DEFINED | 143 | #define _STAT_DEFINED |
| 144 | /* This prevents definition in MinGW's wchar.h of inline functions | ||
| 145 | that use struct _stat64i32 etc., which we don't define and don't | ||
| 146 | support in our implementation of 'stat' and 'fstat'. If we don't | ||
| 147 | prevent definition of those inline functions, any program (e.g., | ||
| 148 | test programs run by configure) that includes both wchar.h and | ||
| 149 | sys/stat.h will fail to compile. */ | ||
| 150 | #define _WSTAT_DEFINED | ||
| 144 | 151 | ||
| 145 | int __cdecl __MINGW_NOTHROW fstat (int, struct stat*); | 152 | int __cdecl __MINGW_NOTHROW fstat (int, struct stat*); |
| 146 | int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*); | 153 | int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*); |