[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: replacing a function with another one
From: |
lee |
Subject: |
Re: replacing a function with another one |
Date: |
Mon, 10 Mar 2014 01:53:34 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
Michael Heerdegen <michael_heerdegen@web.de> writes:
> lee <lee@yun.yagibdah.de> writes:
>>
>> (defadvice hi-lock-set-file-patterns (after
>> lsl-hi-lock-set-file-patterns-advice activate)
>> (setq hi-lock-interactive-patterns (ad-get-arg 0)))
>
>> How would I do the same with add-advice (or whatever is appropriate)?
>
> (advice-add
> 'hi-lock-set-file-patterns :after
> (lambda (patterns)
> (setq hi-lock-interactive-patterns patterns)))
>
> You can also give the piece of advice a name like in defadvice:
> [...]
Thank you! It seems rather complicated --- I´ll look into it tomorrow
and try to figure it out.
>> Suddenly finding out that what I´m trying to do doesn´t work anymore
>> won´t be so great.
>
> Indeed. But if you only rely on documented behavior (docstring), the
> risk is low, since changes are backwards compatible most of the time.
/How/ the functions I´m advising do their work may change even when they
still do the same thing --- like a variable or an argument I´m using
might change or no longer be available ...
>> One change I´m thinking about is keeping the highlighting-patterns in a
>> separate buffer and applying them to several buffers. That way, you can
>> have several files that all use the same highlighting-patterns which
>> were generated on the fly, centralised for the whole project (or some
>> files of it). That´ll probably require quite a few modifications.
>
> Don't hesitate to ask when you've questions, but I think you're on a
> good way.
It´s somewhat frustrating when you have to figure out how things work
and stare at error messages that make you ask what they are supposed to
tell you --- but I´m learning :)
So far, I figured out this:
(defvar patterns-other-buffer nil)
(defvar original-buffer nil)
(defadvice hi-lock-set-file-patterns (after my-test-obtain-patterns)
(setq patterns-other-buffer (ad-get-arg 0))
(ad-deactivate 'hi-lock-set-file-patterns)
(pop-to-buffer original-buffer)
(hi-lock-set-file-patterns patterns-other-buffer))
(defadvice hi-lock-find-patterns (before hi-lock-find-other-patterns activate)
(my-test))
(defun my-test ()
(interactive)
(ad-activate 'hi-lock-set-file-patterns)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(when (re-search-forward "^// ext-fontify-defs: " nil t)
(message "found marker")
(let ((filename (thing-at-point 'filename)))
(message "filename at %d: %s/%s for buffer %s" (point) filename
(thing-at-point 'filename) (buffer-name original-buffer))
(when filename
(when (file-exists-p filename)
(setq original-buffer (current-buffer))
(find-file filename)
(set-auto-mode-0 'hi-lock-mode t))))))))
This actually works, i. e. it lets me save hi-lock-mode
highlighting-patterns to an arbitrary file and put a line like "//
ext-fontify-defs: name-of-file-with-patterns" into the file to load the
highlighting-patterns from the file the name of which is specified in
that line. The patterns are then applied.
But I don´t like this. It´s a really terrible hack.
Or is this the way to go (letting aside the two obvious glitches)?
And I would end up with two defadvices on the same function ... but as
far as I understand the documentation, that should work fine. Hm ...
--
Knowledge is volatile and fluid. Software is power.
- replacing a function with another one, lee, 2014/03/08
- Re: replacing a function with another one, Eli Zaretskii, 2014/03/08
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/08
- Re: replacing a function with another one, lee, 2014/03/09
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/09
- Re: replacing a function with another one, lee, 2014/03/09
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/09
- Re: replacing a function with another one,
lee <=
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/09
- Re: replacing a function with another one, lee, 2014/03/10
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/10
- Re: replacing a function with another one, lee, 2014/03/11
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/11
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/12
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/12
- Re: replacing a function with another one, lee, 2014/03/12
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/13
- Re: replacing a function with another one, lee, 2014/03/15