all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Michael Heerdegen <michael_heerdegen@web.de>
To: help-gnu-emacs@gnu.org
Subject: Re: replacing a function with another one
Date: Mon, 10 Mar 2014 03:18:39 +0100	[thread overview]
Message-ID: <87wqg2u77k.fsf@web.de> (raw)
In-Reply-To: 87r46anab5.fsf@yun.yagibdah.de

lee <lee@yun.yagibdah.de> writes:

> Thank you!  It seems rather complicated --- I´ll look into it tomorrow
> and try to figure it out.

Actually, it's only abstract, but quite simple.

About the original question you raised (not forgetting patterns), would
something like this do what you want:

(advice-add
 'hi-lock-write-interactive-patterns :around
 ;; also include `hi-lock-file-patterns'
 (lambda (f &rest args)
   (let ((hi-lock-interactive-patterns
	  (append hi-lock-interactive-patterns
		  hi-lock-file-patterns))))
   (apply f args)))

> 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.

I'm not sure I completely understand what you are trying to do.

Generally, you could use directory local variables for storing your
patterns, but these would of course not be automatically updated, what
you presumably want.

Nitpick: instead of activating and deactivating pieces of advice, define
a variable and use it as a flag.  The flag says whether the advice
should kick in.  In the advice's body, look at the variable and decide
what to do.

> 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 ...

Yes, that should work fine.  But you can anytime combine any number of
advices into one around advice.

Michael.




  reply	other threads:[~2014-03-10  2:18 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
2014-03-10  2:18             ` Michael Heerdegen [this message]
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=87wqg2u77k.fsf@web.de \
    --to=michael_heerdegen@web.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.