1.0 Document id
1.1 What this document is not
1.2 What is this document?
2.0 The basic coding suggestions
2.1 Major rule1 -- comment as much as possible
2.2 Major rule2 -- maintenance comes first
2.3 Major rule3 -- don't spare variables
2.4 Major rule4 -- document your functions and variables well
2.5 Major rule5 -- don't use tricks
2.6 Major rule6 -- use byte compiler to check leaks
2.7 Use the error function.
2.8 Make function as general as possible
3.0 Coding style issues
3.1 Function's variable definitions
3.2 Let with initialised empty values
3.3 There are alternatives to `progn'
4.0 Using global variables
4.1 Thoughts on globals
4.2 Globals and emacs lisp packages
4.3 Aliasing to globals -- summary
4.4 Aliasing to globals -- counter arguments
4.5 Referring to global variable
4.6 Maintenance and deferring to global
4.7 Deferring to global, caution
5.0 The 'let' forms in function
5.1 Using only one let form inside function
5.2 Let form and initialising variables
6.0 Function call arguments and return values
6.1 Using separate return value 'ret'
6.2 Calling functions: passing non-nil
7.0 Interactive functions and message display control
7.1 Take one, lack of verbosity control
7.2 Take two, some verbosity control
7.3 Take three, full control of verbositiness
7.4 Using call-interactively isn't always the solution.
8.0 Overriding functions
8.1 What is that?
8.2 Using the eval-after-load hook trick
8.3 Using advice.el to replace functions
9.0 Using macros
9.1 Macros introduction
9.2 A note on lisp and "forward declarations"
9.3 Macros and autoloading
9.4 Coding defmacros and name space problem
9.5 Macro or defun
9.6 Expanding macros
9.7 Macro demonstration -- tutorial
9.8 Macro demonstration -- code
9.9 Nesting macros
9.10 Code: nesting macros, complex example
9.11 Using macros to create functions
9.12 How to read the macros
10.0 Using lambda notation -- some thoughts
10.1 Clarification
10.2 Motivation to not to use lambdas all the time
10.3 Putting lambdas into hooks
11.0 Keeping your code organised
11.1 Use function separation dash lines
11.2 Add autoload statements
12.0 About lisp symbol naming
12.1 Don't use your initials
12.2 Use prefix my for private symbols
12.3 Naming variables differently?
12.4 Separate naming of variables
13.0 Lisp code notes
13.1 Call-interactively
13.2 Condition-case vs. unwind-protect ?
13.3 Dolist
13.4 Narrow-to-region -- don't use it always
13.5 Obarray: length and efficiency
14.0 Optimizing and byte compiler tips
14.1 Use eq instead of =
14.2 About setq and set
14.3 About let in Emacs
14.4 Make lambda to run code faster
14.5 Deleting and inserting in buffer is slow
14.6 Byte compiler options
14.7 Byte compiler warnings -- how to get rid of them
14.8 Inlining and byte compiler
14.9 Inlining an interactive function, danger ahead
15.0 Profiling
15.1 Test envinronment
15.2 Elp foreword
15.3 Using elp for timing -- repeat test several times
15.4 Byte compilation note
15.5 Byte compiler can optimise smartly
16.0 Profiling results
16.1 Refence functions
16.2 How to get first element?
16.3 How to access last element?
16.4 Which loop method is faster?
16.5 Adding to list fast
16.6 How to copy a alist fast
16.7 Let: is using let* slower than let
16.8 Let: or function arg list
16.9 Variables: count of them
16.10 Variables: using let or setq
16.11 Variables: many *setq* commands
16.12 If and cond, which is faster one?
16.13 Concat and format commands
16.14 Using *if* before running run-hooks
16.15 Returning boolean or *data* from function
16.16 Calling length or using len variable
17.0 Xemacs and Emacs compatibility
17.1 About compatibility
17.2 Overlay and extent compatibility
17.3 Portable Menus
17.4 List of simple incompatibilities.
17.5 Hash table compatibility
17.6 Character handling changes