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

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

Re: How to delay loading of packages (when eval-after-load does notapply


From: Raffaele Ricciardi
Subject: Re: How to delay loading of packages (when eval-after-load does notapply)?
Date: Mon, 20 Aug 2012 14:39:08 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120713 Thunderbird/14.0

(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 via email to

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