help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: creating a sub-menu


From: ken
Subject: Re: creating a sub-menu
Date: Tue, 12 Mar 2013 03:38:09 -0400
User-agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130219 Thunderbird/17.0.3

On 03/07/2013 09:14 AM Stephen Berman wrote:
On Tue, 05 Mar 2013 17:39:01 -0500 ken <gebser@mousecar.com> wrote:

Trying to create a sub-menu under "Edit".  Got part of the way there, but
still missing something.

(define-key menu-bar-edit-menu [insert-xascii-chars]
   '(menu-item "Insert non-ASCII characters" xascii

    (xascii  "\C-xaa"   "ä"        "ä` (ä)"          ("ä"))
    (xascii  "\C-xaA"   "Ä"        "Ä` (Ä)"          ("Ä"))
    (xascii  "\C-xao"   "ö"        "ö` (ö)"          ("ö"))
    (xascii  "\C-xaO"   "Ö"        "Ö` (Ö)"          ("Ö"))
    (xascii  "\C-xau"   "ü"        "ü` (ü)"          ("ü"))
    (xascii  "\C-xaU"   "Ü"        "Ü` (Ü)"          ("Ü"))
    (xascii  "\C-xas"   "ß"        "ß` (ß)"          ("ß"))
    (xascii  "\C-xa<"   "«"        "«` («)"          ("«"))
    (xascii  "\C-xa>"   "»"        "»` (»)"          ("»"))))

Above yields error:
Debugger entered--Lisp error: (wrong-type-argument arrayp xascii)

When I evaluate it in a recent Emacs build from the bzr trunk, I get no
error.  But instead of adding a submenu to the Edit menu, it just adds
the entry "Insert non-ASCII characters" (when I click on that entry, it
tries to execute the xascii command, and since I have that, I get "Lisp
error: (void-function xascii)").  If you want a submenu, then instead of
a command name, the third item in your menu-item list should be a
(variable whose value is a) keymap defining the menu items of the
submenu, e.g., something like the following:

(defun kg-insert-ä ()
   (interactive)
   (insert "ä"))

(defun kg-insert-Ä ()
   (interactive)
   (insert "Ä"))

(defvar xascii-menu
   (let ((menu (make-sparse-keymap "Insert non-ASCII characters")))
     (define-key menu [kg-insert-Ä]
       '(menu-item "Insert `Ä'" kg-insert-Ä :keys "C-x a A"))
     (define-key menu [kg-insert-ä]
       '(menu-item "Insert `ä'" kg-insert-ä :keys "C-x a a"))
     menu))

(define-key menu-bar-edit-menu [xascii-menu]
   `(menu-item "Insert non-ASCII characters" ,xascii-menu))

Steve Berman

Thanks, Steve,

I tried this code and it is definitely progress over mine in that it displays menu items under the "Insert non-ASCII characters" heading. However, those non-ASCII characters (e.g., `Ä' and `ä') don't display in the menu under that heading properly; probably owing to the menu subsystem of the emacs frame not handling utf-8... or 8-bit characters of any kind. Secondly, the key combos (e.g., C-xaA and C-xaa) remain undefined.

But you've advanced the code over what I had and I appreciate that very much. The bit of explanation you provide is also helpful. Together with the bits in the Elisp Manual and other sources on the web, the total picture on adding a sub-menu into an existing menu heading is starting to come together, though still I'm far from being able to articulate it the way I want and would need in order to be helpful to anyone else. So I'll work on it more in whatever spare moments I have. I'm sure I'll get it eventually.

Thanks again,
ken




reply via email to

[Prev in Thread] Current Thread [Next in Thread]