Here are conventions that you should follow when writing Emacs Lisp code intended for widespread use:
copy-list
. Believe it or not, there is more than one plausible
way to define copy-list
. Play it safe; append your name prefix
to produce a name like foo-copy-list
or mylib-copy-list
instead.
If you write a function that you think ought to be added to Emacs under
a certain name, such as twiddle-files
, don't call it by that name
in your program. Call it mylib-twiddle-files
in your program,
and send mail to `[email protected]' suggesting we add
it to Emacs. If and when we do, we can change the name easily enough.
If one prefix is insufficient, your package may use two or three
alternative common prefixes, so long as they make sense.
Separate the prefix from the rest of the symbol name with a hyphen,
`-'. This will be consistent with Emacs itself and with most Emacs
Lisp programs.
provide
in each separate
library program, at least if there is more than one entry point to the
program.
require
to make sure they are loaded.
(eval-when-compile (require 'bar))(And the library bar should contain
(provide 'bar)
,
to make the require
work.) This will cause bar to be
loaded when you byte-compile foo. Otherwise, you risk compiling
foo without the necessary macro loaded, and that would produce
compiled code that won't work right. See section Macros and Byte Compilation.
Using eval-when-compile
avoids loading bar when
the compiled version of foo is used.
framep
and frame-live-p
.
whatever-mode
which turns the feature on or
off, and make it autoload (see section 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.
next-line
or previous-line
in programs; nearly
always, forward-line
is more convenient as well as more
predictable and robust. See section Motion by Text Lines.
beginning-of-buffer
, end-of-buffer
replace-string
, replace-regexp
message
function, not princ
. See section The Echo Area.
error
(or signal
). The function error
does not return.
See section How to Signal an Error.
Do not use message
, throw
, sleep-for
,
or beep
to report errors.
edit-options
command does: switch to another buffer and let the
user switch back at will. See section Recursive Editing.
defvar
definitions for these variables.
If you bind a variable in one function, and use it or set it in another
function, the compiler warns about the latter function unless the
variable has a definition. But often these variables have short names,
and it is not clean for Lisp packages to define such variable names.
Therefore, you should rename the variable to start with the name prefix
used for the other functions and variables in your package.
indent-sexp
) using the
default indentation parameters.
;; Copyright (C) year name ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2 of ;; the License, or (at your option) any later version. ;; This program is distributed in the hope that it will be ;; useful, but WITHOUT ANY WARRANTY; without even the implied ;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ;; PURPOSE. See the GNU General Public License for more details. ;; You should have received a copy of the GNU General Public ;; License along with this program; if not, write to the Free ;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, ;; MA 02111-1307 USAIf you have signed papers to assign the copyright to the Foundation, then use `Free Software Foundation, Inc.' as name. Otherwise, use your name.
Go to the first, previous, next, last section, table of contents.