all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: lee <lee@yun.yagibdah.de>
To: help-gnu-emacs@gnu.org
Subject: Re: replacing a function with another one
Date: Mon, 10 Mar 2014 01:53:34 +0100	[thread overview]
Message-ID: <87r46anab5.fsf@yun.yagibdah.de> (raw)
In-Reply-To: <87eh2b6nfm.fsf@web.de> (Michael Heerdegen's message of "Sun, 09 Mar 2014 23:02:05 +0100")

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.



  reply	other threads:[~2014-03-10  0:53 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-08 19:43 replacing a function with another one lee
2014-03-08 19:54 ` Eli Zaretskii
2014-03-09  1:17   ` lee
2014-03-08 22:30 ` Michael Heerdegen
2014-03-09 17:58   ` lee
2014-03-09 19:10     ` Michael Heerdegen
2014-03-09 20:57       ` lee
2014-03-09 22:02         ` Michael Heerdegen
2014-03-10  0:53           ` lee [this message]
2014-03-10  2:18             ` Michael Heerdegen
2014-03-10 15:29               ` lee
2014-03-11  0:03                 ` Michael Heerdegen
2014-03-11 13:34                   ` lee
2014-03-11 23:40                     ` Michael Heerdegen
2014-03-12  6:11                       ` Michael Heerdegen
2014-03-12  7:07                         ` Michael Heerdegen
2014-03-12 14:48                         ` lee
2014-03-13  7:19                           ` Michael Heerdegen
2014-03-15 19:51                             ` lee
2014-03-17 12:00                               ` Michael Heerdegen
2014-03-12 14:04                       ` lee
2014-03-12 18:26                         ` Stefan Monnier
2014-03-12  4:10                     ` Michael Heerdegen
2014-03-10 12:44             ` Stefan Monnier
2014-03-10 23:35               ` lee
2014-03-11  0:41                 ` Michael Heerdegen
2014-03-11  1:45                   ` Michael Heerdegen
2014-03-11 19:05                     ` lee
2014-03-11 22:58                       ` Michael Heerdegen
2014-03-12 15:11                         ` lee
2014-03-12 18:15                           ` Stefan Monnier
2014-03-12 21:43                             ` lee
2014-03-13  7:22                               ` Michael Heerdegen
2014-03-15 20:02                                 ` lee
2014-03-11  4:11                   ` lee
2014-03-11  5:01                     ` Michael Heerdegen
2014-03-11 14:25                       ` lee
2014-03-11 23:51                         ` Michael Heerdegen
2014-03-12 15:22                           ` lee
2014-03-13  7:33                             ` Michael Heerdegen
2014-03-13 12:29                               ` Stefan Monnier
2014-03-15 20:05                                 ` lee
2014-03-16 17:20                                   ` Stefan
2014-03-11  6:51                     ` Michael Heerdegen
2014-03-11 15:41                       ` lee
2014-03-11 23:21                         ` Michael Heerdegen
2014-03-12 17:33                           ` lee
2014-03-12 19:34                             ` Florian Beck
2014-03-12 19:51                               ` Florian Beck
2014-03-13  7:54                             ` Michael Heerdegen
2014-03-15 20:14                               ` lee
2014-03-12 12:45                         ` Stefan Monnier
2014-03-12 17:42                           ` lee
2014-03-13  2:43                             ` Jambunathan K
2014-03-15 20:17                               ` How to propose an emacs patch (Re: replacing a function with another one) lee
2014-03-16  3:21                                 ` Jambunathan K
2014-03-17  4:35                                   ` lee
2014-03-10 13:45           ` replacing a function with another one lee
2014-03-10 23:31             ` Michael Heerdegen
2014-03-12 13:16 ` Jambunathan K
2014-03-12 13:18   ` Jambunathan K
2014-03-15 20:22   ` lee

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=87r46anab5.fsf@yun.yagibdah.de \
    --to=lee@yun.yagibdah.de \
    --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.