Hi All, Thanks so much for your comments! It's wonderful to have such good, detailed feedback. I appreciate this more than you know. I wrote this page a long time ago when learning Emacs lisp, so it's no surprise it may be a little out of date. I will carefully evaluate your comments and update the page soon - I'm in the middle of a job search now, so it may be a little bit. Thanks again! Sincerely, Mitch Fincher On Mon, Apr 18, 2016 at 11:48 AM, Sacha Chua wrote: > Drew Adams writes: > > >> A nice and clear summary of Emacs Lisp (Reddit) > >> http://www.fincher.org/tips/Languages/Emacs.shtml > > Hm. It's generally good to see such summaries. But > > this one is not as nice and clear as it might be, IMO. > > It is also somewhat out of date. > > Thanks for the detailed feedback, Drew! I'm looping in the author here > so that the tutorial can be updated - see Drew's notes below. > > https://www.reddit.com/r/emacs/comments/4f7q0f/a_nice_and_clear_summary_of_emacs_lisp/ > also has more comments. > > > (set 'fname "Mitch") > > > > Not a great example of what `set' is used for. If this > > were a common use case then we would need only `setq'. > > > > (setq fname "Mitch") > > > > Doesn't bring much attention to the fact that the second > > arg is evaluated and its value is used. IOW, something > > like a string, which is self-quoting, is not the best > > thing to show in such an example. > > > > (list 'a 'x "asdf" 6) => (list a x "asdf" 6) > > > > Should be => (a x "asdf" 6) - no "list". But even that > > would not bring much attention to the fact that each arg > > is evaluated. > > > > (sort '(5 3 9 27) '<) => (3 5 9 27) > > > > Well yes, but, especially if introducing this to newbies, > > the destructive nature of `sort' is really important to > > point out. > > > > (concat "I " "went to " "the woods ")=> "I went to the woods " > > > > Might be good to use some arguments that are characters > > and lists of chars - especially characters. > > > > (length "I went to the woods ")=> 20 > > > > Yes, but `string-width' is typically more appropriate for > > strings (and there is `string-bytes'). A more typical > > `length' use case would be with a list or a vector. > > > > (aref s i) > > returns the ith char (0 based) > > (aref "abcd" 2)=> 99 > > > > It's not about counting characters. `aref' is for any > > array, not just a string. Same for `aset' description. > > > > Section "Logical functions (and, or, not, eq)" does not > > say what constitutes a "true" or a "false" value. In > > particular, it does not say that non-nil is treated as > > true by most predicates (including `and', `or', and `not'). > > > > "equal takes two args and tests if the values are equal" > > > > Doesn't say what it means for two values to be "equal". > > > > Section "Function Template" is really a command-definition > > template. > > > > "Commands and functions can also have hooks. These are > > created using 'defadvice'." > > > > Kind of. But they are not called "hooks" in Emacs (e.g. > > in the doc). And `defadvice' is now deprecated, in favor > > of the new advice system. > > > > `let': "uninitialized variables may also be used... This > > creates temporary variables "c" and "d", but assigns no > > value." > > > > That is wrong - vars `c' and `d' are bound to nil. > > > > "let* ;; forces sequential execution" > > > > No, sequential (i.e., dependent) bindings. Execution of > > the body of `let' is also sequential. > > > > "if the documentation string begins with a "*", the variable > > is user definable with the M-xset-variable command" > > > > No. This behavior was (unfortunately, IMO) removed long ago. > > > > Introducing `reduce', regexps, and macros is too advanced, > > and too unexplained, for this high-level intro. It can > > erroneously give the impression of authority or expertise. > > > > It might be different if (a) these things were actually > > described/explained here and (b) there was not so much > > that is wrong or misleading in the basic stuff presented. > > > > "defunst - defunst works like defun but "inlines" the function. > > Works like "Inline" in C++." > > > > No. `defunst' does not exist in Emacs Lisp. `defsubst' > > was presumably meant. > > > > `interactive': "r - the hilighted region" > > > > No; it is the region, active (highlighted) or not. > > > > `C-h a' is not `command-apropos' but `apropos-command'. > > > > `C-h C-k' is not `Info-goto-emacs-key-command-node'. > > > > `E-!' should be `M-!' (or `ESC !'). > > > > The link to the W3 web browser is broken. And `eww' might > > be a better choice now (?). > > > > The commands bound to `C-x (', `C-x )', and `C-x e' have been > > different for years now (kmacro was introduced in Emacs 22!). > > > > In sum, again, it's good that people post such summaries, but > > they can also be harmful/misleading. If they are posted to > > a community place such as Emacs Wiki then they at least have > > a better chance of getting corrected and updated. > > > > And I really recommend _asking Emacs_ itself, including the > > manuals. There is a good intro manual to learning Emacs Lisp > > that comes with Emacs. > -- Gravity never sleeps..