all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Raffaele Ricciardi <rfflrccrd@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: How to delay loading of packages (when eval-after-load does notapply)?
Date: Mon, 20 Aug 2012 14:39:08 +0100	[thread overview]
Message-ID: <a9et02FcqqU1@mid.individual.net> (raw)
In-Reply-To: <801uj1zqg7.fsf@somewhere.org>

(global-set-key (kbd "C-w")
On 20/08/12 13:40, Sebastien Vauban wrote:
 > Hi Raffaele,
 >
 > "Sebastien Vauban" wrote:
 >> Raffaele Ricciardi wrote:
 >>> On 08/17/2012 01:11 PM, Sebastien Vauban wrote:
 >>>> Now, wanting to apply the same mechanism for other slow parts of 
my .emacs
 >>>> file, I'm stuck with this one[1]:
 >>>>
 >>>> --8<---------------cut here---------------start------------->8---
 >>>>      ;; add the ability to copy or cut the current line without 
marking it
 >>>>      ;; (no active region) -- idea stolen from SlickEdit
 >>>>      (defadvice kill-ring-save (before slickcopy activate compile)
 >>>>        "When called interactively with no active region, copy the 
current
 >>>>      line instead."
 >>>>        (interactive
 >>>>         (if mark-active (list (region-beginning) (region-end))
 >>>>           (message "Copied the current line")
 >>>>           (list (line-beginning-position)
 >>>>                 (line-beginning-position 2)))))
 >>>>
 >>>>      (defadvice kill-region (before slickcut activate compile)
 >>>>        "When called interactively with no active region, kill the 
current
 >>>>      line instead."
 >>>>        (interactive
 >>>>         (if mark-active (list (region-beginning) (region-end))
 >>>>           (list (line-beginning-position)
 >>>>                 (line-beginning-position 2)))))
 >>>> --8<---------------cut here---------------end--------------->8---
 >>>
 >>> See http://www.emacswiki.org/emacs/WholeLineOrRegion
 >>>
 >>> Note the use of `use-region-p' instead of 'mark-active'.
 >>
 >> I don't understand all the subtleties, except that it uses a 
function directly
 >> defined in `simple.el', but it does a great job: no noticeable delay!
 >
 > After using it for a couple of "workable" hours, I must say that the code
 > found on EmacsWiki does not work as good (at least from my point of 
view) as
 > the code above.
 >
 > Two (minor) problems found:
 >
 > - With the above code, when killing multiple subsequent lines, they 
are merged
 >    as one entry in the kill ring.
 >
 >    With the code from EW, they stay separate entries.
 >
 > - With the above code, I can paste the "copied line" wherever I want,
 >    including in the middle of a line:
 >
 >      Some *sentence                (* = position of point)
 >
 >    becomes:
 >
 >      Some YANKED TEXT*sentence
 >
 >    With the code from EW, the yanked text is inserted above the 
current line,
 >    as if point was at the beginning of line when I'm yanking.
 >
 >      Some *sentence                (* = position of point)
 >
 >    becomes:
 >
 >      YANKED TEXT
 >      *Some sentence
 >
 >    BTW, point's position is changed after yanking.
 >
 > Do you observe that as well?

I don't use those commands.  I knew about that EmacsWiki page, so I told 
you.

Well, go back to your original functions, then, after replacing 
`mark-active' with
`use-region-p'.

However, using advices is overkill for what you are trying to 
accomplish.  Since
you are looking for an improved version of existing commands, the cleanest
approach is to wrap such commands as new commands and then replace the 
existing
key bindings, like this:

(defun rr-region-or-line (&optional ^verbose)
   "Return region, or current line instead if no region is active."
   (if (use-region-p)
       (list (region-beginning) (region-end))
       (when ^verbose
         (message "Copied the current line"))
       (list (line-beginning-position)
             (line-beginning-position 2))))

(defun rr-kill-ring-save (^start ^end)
   "When called interactively with no active region, copy the current
       line instead."
   (interactive (rr-region-or-line t))
   (kill-ring-save ^start ^end))

(defun rr-kill-region (^start ^end)
   "When called interactively with no active region, kill the current
       line instead."
   (interactive (rr-region-or-line))
   (kill-region ^start ^end))


Cheers.


  reply	other threads:[~2012-08-20 13:39 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-15 19:22 How to delay loading of packages (when eval-after-load does not apply)? Sebastien Vauban
2012-08-15 19:43 ` How to delay loading of packages (when eval-after-load does notapply)? Drew Adams
     [not found] ` <mailman.7059.1345059803.855.help-gnu-emacs@gnu.org>
2012-08-17 10:07   ` Sebastien Vauban
2012-08-17 10:31     ` Raffaele Ricciardi
2012-08-17 12:11       ` Sebastien Vauban
2012-08-17 12:20         ` Raffaele Ricciardi
2012-08-17 18:33           ` Sebastien Vauban
2012-08-20 12:40             ` Sebastien Vauban
2012-08-20 13:39               ` Raffaele Ricciardi [this message]
2012-08-20 15:24                 ` Sebastien Vauban

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

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

  git send-email \
    --in-reply-to=a9et02FcqqU1@mid.individual.net \
    --to=rfflrccrd@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /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.
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.