From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Raffaele Ricciardi Newsgroups: gmane.emacs.help Subject: Re: How to delay loading of packages (when eval-after-load does notapply)? Date: Mon, 20 Aug 2012 14:39:08 +0100 Message-ID: References: <804no4c64n.fsf@somewhere.org> <80pq6pygox.fsf@somewhere.org> <80sjblk9ar.fsf@somewhere.org> <80zk5tv04z.fsf@somewhere.org> <801uj1zqg7.fsf@somewhere.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1345470020 2896 80.91.229.3 (20 Aug 2012 13:40:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 20 Aug 2012 13:40:20 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Mon Aug 20 15:40:17 2012 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1T3SDH-0004Qx-9n for geh-help-gnu-emacs@m.gmane.org; Mon, 20 Aug 2012 15:40:15 +0200 Original-Received: from localhost ([::1]:53595 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T3SDF-0000gP-N6 for geh-help-gnu-emacs@m.gmane.org; Mon, 20 Aug 2012 09:40:13 -0400 Original-Path: usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 117 Original-X-Trace: individual.net m18hncdndtA+Jtkciu/CjQlGAkRTSnOoMHF6WHW8GgrkSdul+FxbK87fglDd0wdz9M Cancel-Lock: sha1:2AgMxnSKgLGu7AsUrHn6icpFnk8= User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120713 Thunderbird/14.0 In-Reply-To: <801uj1zqg7.fsf@somewhere.org> Original-Xref: usenet.stanford.edu gnu.emacs.help:194064 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:86431 Archived-At: (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.