summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Love <fx@gnu.org>2000-12-06 20:48:43 +0000
committerDave Love <fx@gnu.org>2000-12-06 20:48:43 +0000
commitc7a401dd1912c15056a4ad26b39887f662086bc9 (patch)
tree07f926e6e160550d884d20efad87d74134624a6d
parente7cff5504bbbbd5bab5482101c648f1ea7624ef8 (diff)
downloademacs-c7a401dd1912c15056a4ad26b39887f662086bc9.tar.gz
Why no package system.
Rationale for loading without effect. Defining compatibility aliases.
-rw-r--r--lispref/tips.texi27
1 files changed, 23 insertions, 4 deletions
diff --git a/lispref/tips.texi b/lispref/tips.texi
index 3f428009519..031f6b41166 100644
--- a/lispref/tips.texi
+++ b/lispref/tips.texi
@@ -39,9 +39,10 @@ code intended for widespread use:
@item
Since all global variables share the same name space, and all functions
share another name space, you should choose a short word to distinguish
-your program from other Lisp programs. Then take care to begin the
-names of all global variables, constants, and functions with the chosen
-prefix. This helps avoid name conflicts.
+your program from other Lisp programs.@footnote{The benefits of a Common
+Lisp-style package system are considered not to outweigh the costs.}
+Then take care to begin the names of all global variables, constants,
+and functions with the chosen prefix. This helps avoid name conflicts.
This recommendation applies even to names for traditional Lisp
primitives that are not primitives in Emacs Lisp---even to
@@ -186,6 +187,8 @@ shift key held down. These events include @kbd{S-mouse-1},
users.
@item
+@cindex mouse-2
+@cindex references, following
Special major modes used for read-only text should usually redefine
@kbd{mouse-2} and @key{RET} to trace some sort of reference in the text.
Modes such as Dired, Info, Compilation, and Occur redefine it in this
@@ -197,13 +200,29 @@ good to include a command to enable and disable the feature, Provide a
command named @code{@var{whatever}-mode} which turns the feature on or
off, and make it autoload (@pxref{Autoload}). Design the package so
that simply loading it has no visible effect---that should not enable
-the feature. Users will request the feature by invoking the command.
+the feature.@footnote{Consider that the package may be loaded
+arbitrarily by Custom for instance.} Users will request the feature by
+invoking the command.
@item
It is a bad idea to define aliases for the Emacs primitives. Use the
standard names instead.
@item
+If a package needs to define an alias or a new function for
+compatibility with some other version of Emacs, name if with the package
+prefix, not with the raw name with which it occurs in the other version.
+Here is an example from Gnus, which provides many examples of such
+compatibility issues.
+
+@example
+(defalias 'gnus-point-at-bol
+ (if (fboundp 'point-at-bol)
+ 'point-at-bol
+ 'line-beginning-position))
+@end example
+
+@item
Redefining (or advising) an Emacs primitive is discouraged. It may do
the right thing for a particular program, but there is no telling what
other programs might break as a result.