[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: 2016-04-18 Emacs News
From: |
Drew Adams |
Subject: |
RE: 2016-04-18 Emacs News |
Date: |
Mon, 18 Apr 2016 09:19:43 -0700 (PDT) |
> 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.
(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.