all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* confusion on keymap's forms in doc
@ 2008-10-28  6:41 Xah
  2008-10-31  3:26 ` Kevin Rodgers
  0 siblings, 1 reply; 2+ messages in thread
From: Xah @ 2008-10-28  6:41 UTC (permalink / raw
  To: help-gnu-emacs

here's something unclear to me:

According to the manual
http://xahlee.org/elisp/Format-of-Keymaps.html

quote:
«
Each keymap is a list whose CAR is the symbol `keymap'.  The remaining
elements of the list define the key bindings of the keymap.

...

   Here as an example is the local keymap for Lisp mode, a sparse
keymap.  It defines bindings for <DEL> and <TAB>, plus `C-c C-l',
`M-C-q', and `M-C-x'.

     lisp-mode-map
     =>
     (keymap
      (3 keymap
         ;; C-c C-z
         (26 . run-lisp))
      (27 keymap
          ;; `M-C-x', treated as `<ESC> C-x'
          (24 . lisp-send-defun)
          keymap
          ;; `M-C-q', treated as `<ESC> C-q'
          (17 . indent-sexp))
      ;; This part is inherited from `lisp-mode-shared-map'.
      keymap
      ;; <DEL>
      (127 . backward-delete-char-untabify)
      (27 keymap
          ;; `M-C-q', treated as `<ESC> C-q'
          (17 . indent-sexp))
      (9 . lisp-indent-line))
»

if we look at the lisp-mode-map example above, it has 5 items. (not
counting the first item “keymap”, and the third item ‘keymap’ is
probably typo orphaned from above comment line”)

If we look at the item

(3 keymap
         ;; C-c C-z
         (26 . run-lisp))

this does not seem to be one of the form specified for allowed
elements in a keymap. The doc says the following form is allowed:

«
(type . binding)
(t . binding)
char-table
string
»

Should the doc add a form “(type . keymap)”?

also, in:
http://xahlee.org/elisp/Inheritance-and-Keymaps.html
it says:

«A keymap can inherit the bindings of another keymap, which we call
the parent keymap. Such a keymap looks like this:

     (keymap bindings... . parent-keymap)
»

if i understand it correctly, when expanded, such a keymap looks like
this:

(keymap
element-1
element-2
element-3
...
element-n
symbolOfParentKeymap
)

So, effectively, such a keymap is effectively having a
symbolOfParentKeymap appended to the original keymap list. Is that
right?

  Xah
∑ http://xahlee.org/^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: confusion on keymap's forms in doc
  2008-10-28  6:41 confusion on keymap's forms in doc Xah
@ 2008-10-31  3:26 ` Kevin Rodgers
  0 siblings, 0 replies; 2+ messages in thread
From: Kevin Rodgers @ 2008-10-31  3:26 UTC (permalink / raw
  To: help-gnu-emacs

Xah wrote:
> here's something unclear to me:
> 
> According to the manual
> http://xahlee.org/elisp/Format-of-Keymaps.html
> 
> quote:
> «
> Each keymap is a list whose CAR is the symbol `keymap'.  The remaining
> elements of the list define the key bindings of the keymap.
> 
> ...
> 
>    Here as an example is the local keymap for Lisp mode, a sparse
> keymap.  It defines bindings for <DEL> and <TAB>, plus `C-c C-l',
> `M-C-q', and `M-C-x'.
> 
>      lisp-mode-map
>      =>
>      (keymap
>       (3 keymap
>          ;; C-c C-z
>          (26 . run-lisp))
>       (27 keymap
>           ;; `M-C-x', treated as `<ESC> C-x'
>           (24 . lisp-send-defun)
>           keymap
>           ;; `M-C-q', treated as `<ESC> C-q'
>           (17 . indent-sexp))
>       ;; This part is inherited from `lisp-mode-shared-map'.
>       keymap
>       ;; <DEL>
>       (127 . backward-delete-char-untabify)
>       (27 keymap
>           ;; `M-C-q', treated as `<ESC> C-q'
>           (17 . indent-sexp))
>       (9 . lisp-indent-line))
> »
> 
> if we look at the lisp-mode-map example above, it has 5 items. (not
> counting the first item “keymap”, and the third item ‘keymap’ is
> probably typo orphaned from above comment line”)

That keymap symbol is not a typo.  The actual underlying structure
is: (keymap (3 …) (27 …) . (keymap (127 …) (27 …) (9 …)))

Note the dot after the 3rd element, (27 …)

See the "Lists and Cons Cells" and "Dotted Pair Notation" nodes of the
Emacs Lisp manual.

> If we look at the item
> 
> (3 keymap
>          ;; C-c C-z
>          (26 . run-lisp))
> 
> this does not seem to be one of the form specified for allowed
> elements in a keymap. The doc says the following form is allowed:
> 
> «
> (type . binding)
> (t . binding)
> char-table
> string
> »
> 
> Should the doc add a form “(type . keymap)”?

Or change this:

`(TYPE . BINDING)'
      This specifies one binding, for events of type TYPE.  Each
      ordinary binding applies to events of a particular "event type",
      which is always a character or a symbol.  *Note Classifying
      Events::.  In this kind of binding, BINDING is a command.
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

to: In this kind of binding, BINDING is a command or a keymap.

See "Prefix Keys".

> also, in:
> http://xahlee.org/elisp/Inheritance-and-Keymaps.html
> it says:
> 
> «A keymap can inherit the bindings of another keymap, which we call
> the parent keymap. Such a keymap looks like this:
> 
>      (keymap bindings... . parent-keymap)
> »
> 
> if i understand it correctly, when expanded, such a keymap looks like
> this:
> 
> (keymap
> element-1
> element-2
> element-3
> ...
> element-n
> symbolOfParentKeymap
> )
> 
> So, effectively, such a keymap is effectively having a
> symbolOfParentKeymap appended to the original keymap list. Is that
> right?

I don't think so.  I think the actual keymap value of the symbol is
spliced into the inheriting keymap:

(keymap binding-1 binding-2 binding-3 … binding-n . (keymap …))

Note the warning a few paragraphs later:

    The proper way to construct a keymap with a parent is to use
`set-keymap-parent'; if you have code that directly constructs a keymap
with a parent, please convert the program to use `set-keymap-parent'
instead.

-- 
Kevin Rodgers
Denver, Colorado, USA





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-10-31  3:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-28  6:41 confusion on keymap's forms in doc Xah
2008-10-31  3:26 ` Kevin Rodgers

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.