[comp.emacs] Using tags and a function key

ldk@raistlin.udev.cdc.com (ld kelley x-6857) (09/21/89)

I am trying (for the first time) to bind a function to a key.
I am not having a good time :-).  The function I am trying to use
if find-tag with a numeric argument (ie: fing the next tag).  No
matter what arguments I put there, I get the message
Wrong type argument: commandp,...

I am working on a Sun3 with version 18.54 of emacs (Sun OS 4.0.3).

I have tried the following:
(define-key sun-raw-map "212z" '(find-tag nil 1 )) 
(define-key sun-raw-map "212z" '(find-tag 1))

The manual states that if you pass find-tag a numeric argument, and it
will use the last tag and continue searching.

thanks in advance,
larry



-------------------------------------------------------------------------------
Larry D. Kelley         |      Internet:  ldk@udev.cdc.com
Control Data Corporation|      uucp:      {uunet}!shamash!punjab!raistlin!ldk
4201 Lexington Ave No.  |      AT&T:	  01-612-482-2046

mdb@ESD.3Com.COM (Mark D. Baushke) (09/22/89)

On 21 Sep 89 15:49:56 GMT, ldk@raistlin.udev.cdc.com (ld kelley) said:

ldk> I am trying (for the first time) to bind a function to a key.
ldk> I am not having a good time :-).  The function I am trying to use
ldk> if find-tag with a numeric argument (ie: fing the next tag). ...

ldk> I am working on a Sun3 with version 18.54 of emacs (Sun OS 4.0.3).
[...deleted examples which failed...]

You might try the following:

(define-key sun-raw-map "212z" '(lambda () (find-tag nil t)))

ldk> -------------------------------------------------------------------------
ldk> Larry D. Kelley         |  Internet:  ldk@udev.cdc.com
ldk> Control Data Corporation|  uucp:      {uunet}!shamash!punjab!raistlin!ldk
ldk> 4201 Lexington Ave No.  |  AT&T:	   01-612-482-2046

Enjoy!
--
Mark D. Baushke
mdb@ESD.3Com.COM

ben@nsf1.mth.msu.edu (Ben Lotto) (09/22/89)

On 22 Sep 89 09:04:10 GMT,
mdb@ESD.3Com.COM (Mark D. Baushke) said:

Mark> On 21 Sep 89 15:49:56 GMT, ldk@raistlin.udev.cdc.com (ld kelley)
Mark> said:

ldk> I am trying (for the first time) to bind a function to a key.

Mark> You might try the following:

Mark> (define-key sun-raw-map "212z" '(lambda () (find-tag nil t)))

This doesn't work (at least on my emacs on my system).  I get an error
which says

  Wrong type argument: commandp, (lambda nil (find-tag nil t))

The thing that does work here is

  (defun my-find-tag-next ()
    (interactive)
    (find-tag nil t))

  (define-key sun-raw-map "212z" 'my-find-tag-next)

This is because the third argument to define-key must be nil, a command,
a string, a keymap, or a list consisting of elements of the form 
(keymap . char).
--

-B. A. Lotto  (ben@nsf1.mth.msu.edu)
Department of Mathematics/Michigan State University/East Lansing, MI  48824

guttman@mitre.org (Joshua D. Guttman) (09/23/89)

In a posting from mdb@ESD.3Com.COM (Mark D. Baushke), the all-important form
(interactive) got left out.  His example should have read:

(define-key sun-raw-map "212z" '(lambda () (interactive)(find-tag nil t)))

mdb@ESD.3Com.COM (Mark D. Baushke) (09/23/89)

>>>>> On 22 Sep 89 14:02:18 GMT, ben@nsf1.mth.msu.edu (Ben Lotto) said:

Ben> On 22 Sep 89 09:04:10 GMT,
Ben> mdb@ESD.3Com.COM (Mark D. Baushke) said:

Mark> On 21 Sep 89 15:49:56 GMT, ldk@raistlin.udev.cdc.com (ld kelley)
Mark> said:

ldk> I am trying (for the first time) to bind a function to a key.

Mark> You might try the following:

Mark> (define-key sun-raw-map "212z" '(lambda () (find-tag nil t)))

Ben> This doesn't work (at least on my emacs on my system).  I get an error
Ben> which says

Ben>   Wrong type argument: commandp, (lambda nil (find-tag nil t))

Oops, sorry about that. My previous lambda-expression example fails
because it is not interactive. From the documentation:

commandp:
[...]

Interactively callable functions include strings (treated as keyboard macros),
lambda-expressions that contain a top-level call to  interactive ,
autoload definitions made by  autoload  with non-nil fourth argument,
and some of the built-in functions of Lisp.


Ben> The thing that does work here is

Ben>   (defun my-find-tag-next ()
Ben>     (interactive)
Ben>     (find-tag nil t))

Ben>   (define-key sun-raw-map "212z" 'my-find-tag-next)

Yes. This is a reasonable alternative and it allow you to get at it
via M-x my-find-tag-next as well as binding it to more than one key.

Ben> This is because the third argument to define-key must be nil, a command,
Ben> a string, a keymap, or a list consisting of elements of the form 
Ben> (keymap . char).

The lambda form is equivalent to the body of a (defun name (args) BODY).
Had you defined your defun as

	(defun my-find-tag-next ()
	  (find-tag nil t))

you would have had the same error about a wrong type argument from
commandp.

If you did not want to use the separate function my-find-tag-next, you
should be able to use the following:

(define-key sun-raw-map "212z" '(lambda () (interactive) (find-tag nil t)))

Enjoy!
--
Mark D. Baushke
mdb@ESD.3Com.COM