1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-24 07:20:37 +00:00

Why no package system.

Rationale for loading without effect.
Defining compatibility aliases.
This commit is contained in:
Dave Love 2000-12-06 20:48:43 +00:00
parent e7cff5504b
commit c7a401dd19

View File

@ -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,12 +200,28 @@ 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