[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 2016-04-18 Emacs News
From: |
Sacha Chua |
Subject: |
Re: 2016-04-18 Emacs News |
Date: |
Mon, 18 Apr 2016 12:48:58 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.92 (gnu/linux) |
Drew Adams <address@hidden> 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.