unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: jeff.rancier@softechnics.com (Jeffery B. Rancier)
Subject: Re: How run a command JUST on region highlighted by MOUSE?!?!
Date: Wed, 03 Sep 2003 18:04:25 -0400	[thread overview]
Message-ID: <u8yp58r6e.fsf@softechnics.com> (raw)
In-Reply-To: bf23f78f.0309021616.754e8bf5@posting.google.com

seberino@spawar.navy.mil (Christian Seberino) writes:

,----[ C-h f interactive RET ]
| interactive is a special form.
| (interactive ARGS)
| 
| Specify a way of parsing arguments for interactive use of a function.
| For example, write
|   (defun foo (arg) "Doc string" (interactive "p") ...use arg...)
| to make ARG be the prefix argument when `foo' is called as a command.
| The "call" to `interactive' is actually a declaration rather than a function;
|  it tells `call-interactively' how to read arguments
|  to pass to the function.
| When actually called, `interactive' just returns nil.
| 
| The argument of `interactive' is usually a string containing a code letter
|  followed by a prompt.  (Some code letters do not use I/O to get
|  the argument and do not need prompts.)  To prompt for multiple arguments,
|  give a code letter, its prompt, a newline, and another code letter, etc.
|  Prompts are passed to format, and may use % escapes to print the
|  arguments that have already been read.
| If the argument is not a string, it is evaluated to get a list of
|  arguments to pass to the function.
| Just `(interactive)' means pass no args when calling interactively.
| 
| Code letters available are:
| a -- Function name: symbol with a function definition.
| b -- Name of existing buffer.
| B -- Name of buffer, possibly nonexistent.
| c -- Character (no input method is used).
| C -- Command name: symbol with interactive function definition.
| d -- Value of point as number.  Does not do I/O.
| D -- Directory name.
| e -- Parametrized event (i.e., one that's a list) that invoked this command.
|      If used more than once, the Nth `e' returns the Nth parameterized event.
|      This skips events that are integers or symbols.
| f -- Existing file name.
| F -- Possibly nonexistent file name.
| i -- Ignored, i.e. always nil.  Does not do I/O.
| k -- Key sequence (downcase the last event if needed to get a definition).
| K -- Key sequence to be redefined (do not downcase the last event).
| m -- Value of mark as number.  Does not do I/O.
| M -- Any string.  Inherits the current input method.
| n -- Number read using minibuffer.
| N -- Raw prefix arg, or if none, do like code `n'.
| p -- Prefix arg converted to number.  Does not do I/O.
| P -- Prefix arg in raw form.  Does not do I/O.
| r -- Region: point and mark as 2 numeric args, smallest first.  Does no I/O.
| s -- Any string.  Does not inherit the current input method.
| S -- Any symbol.
| v -- Variable name: symbol that is user-variable-p.
| x -- Lisp expression read but not evaluated.
| X -- Lisp expression read and evaluated.
| z -- Coding system.
| Z -- Coding system, nil if no prefix arg.
| In addition, if the string begins with `*'
|  then an error is signaled if the buffer is read-only.
|  This happens before reading any arguments.
| If the string begins with `@', then Emacs searches the key sequence
|  which invoked the command for its first mouse click (or any other
|  event which specifies a window), and selects that window before
|  reading any arguments.  You may use both `@' and `*'; they are
|  processed in the order that they appear.
`----


> Kevin
>
> Thanks for your help.  I finally got a version that works!
>
>   (defun cs-py-comment-region(beg end) (interactive "r")
>     (save-restriction
>       (narrow-to-region beg end)
>       (py-comment-region beg end)
>       (delete-trailing-whitespace)))
>  
>
> What does the (interactive "r") do??? I really ONLY ever invoke my
> functions
> with key-combos that are hard wired to start the functions....e.g.
> C-ac, C-z, etc....
> Does this mean I can omit all this (interactive ..) stuff from .emacs
> everywhere???
>
> It appears that beg and end got automagically set when I dragged mouse
> over some region.
>
> It also appears that although py-comment-region did not need it's 2
> args
> without narrow-to-region part... it does now when I add the
> narrow-to-region
> part and that was the main bug.
>
> Thank goodness it works but there is a lot going on I don't understand
> here
> about how arguments get defined and (interactive..) function.  Any
> help would
> be greatly appreciated.
>
> Sincerely,
>
> Chris
>
> Kevin Rodgers <ihs_4664@yahoo.com> wrote in message news:<3F4FC986.4060602@yahoo.com>...
>> Christian Seberino wrote:
>> 
>> > I set .emacs up to run this function when I highlight a region with
>> > mouse
>> > and type C-ac.....
>> > 
>> >  (defun cs-py-comment-region() (interactive)
>> >       (narrow-to-region)
>> >       (py-comment-region)
>> >       (delete-trailing-whitespace)
>> >       (widen))
>> > 
>> > I'm getting this error message...
>> > 
>> > cs-py-comment-region: Wrong number of arguments: #<subr narrow-to-region>, 0
>> > (New file)
>> > Mark set
>> > cs-py-comment-region: Wrong number of arguments: #<subr narrow-to-region>, 0
>> > 
>> > I read Emacs LISP reference manual on narrow-to-region and it said..
>> > 
>> > Command: narrow-to-region start end
>> >     This function sets the accessible portion of the current buffer to
>> > start at start and end at end. Both arguments should be character
>> > positions.
>> > 
>> >     In an interactive call, start and end are set to the bounds of the
>> > current region (point and the mark, with the smallest first).
>> > 
>> > 
>> > I assume "interactive call" = "highlighted a region with mouse"??
>> > 
>> > It seems narrow-to-region should get the start and end point values
>> > automatically??!
>> 
>> It does when you call it interactively.  When you call it programmatically,
>> you need to specify the START and END arguments: (region-beginning) and
>> (region-end), respectively.
>> 
>> Your cs-py-comment-region function should take 2 arguments, provide a
>> way for them to be specified when it's called interactively, and pass
>> the region bounds to py-comment-region:
>> 
>> (defun cs-py-comment-region (beg end)
>>    (interactive "r")
>>    (py-comment-region beg end)
>>    ...)

-- 
Thanks,
Jeff

,----
| Jeffery B. Rancier
| 
| Softechnics
| a METTLER TOLEDO company
`----

  reply	other threads:[~2003-09-03 22:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-28 21:24 How run a command JUST on region highlighted by MOUSE?!?! Christian Seberino
2003-08-28 21:32 ` Andrew Taylor
2003-08-29 18:22   ` Christian Seberino
2003-08-29 18:34     ` Oliver Scholz
2003-09-03  0:03       ` Christian Seberino
2003-09-03  0:19       ` Christian Seberino
2003-08-29 18:56     ` Johan Bockgård
2003-08-29 21:45     ` Kevin Rodgers
2003-09-03  0:16       ` Christian Seberino
2003-09-03 22:04         ` Jeffery B. Rancier [this message]
2003-09-03 23:13         ` Kevin Rodgers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=u8yp58r6e.fsf@softechnics.com \
    --to=jeff.rancier@softechnics.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).