unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stephen Berman <stephen.berman@gmx.net>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: New version of todo-mode.el (announcement + user guide)
Date: Thu, 13 Jun 2013 22:53:53 +0200	[thread overview]
Message-ID: <87txl1bula.fsf@rosalinde.fritz.box> (raw)
In-Reply-To: jwvehc6g6ng.fsf-monnier+emacs@gnu.org

On Wed, 12 Jun 2013 21:18:29 -0400 Stefan Monnier <monnier@iro.umontreal.ca> wrote:

>> Thanks for the go-ahead.  I do agree with you that a hook would be
>> better and in fact gave it some thought, but couldn't see how to do it
>> using an existing hook.  I didn't consider adding a new hook, and I'm
>> not sure I what that should be.  The problem is, after the button is
>> clicked in the Fancy Diary display, if the todo file is in a buffer, it
>> will probably be narrowed, so it has to be widened before going to the
>> position of the marker, and then it has to be narrowed again afterwards
>> to get the proper display.  So either there have to be two hooks
>> sandwiching the goto-char for the marker, or the latter has to be passed
>> to the hook function.  Neither really seems much better than the ad hoc
>> patch I posted, but it's not unlikely I'm overlooking a better
>> alternative.  If you have any ideas, I'm all ears.
>
> I think a way to do this is with a diary-goto-marker-function hook.
> The default value could be `goto-char'.  And your todo-mode can change
> it via something like:
>
>     (add-function :around diary-goto-marker-function
>                   (lambda (orig-fun &rest args)
>                     (when (derived-mode-p 'todo-mode) (widen))
>                     (apply orig-fun args)
>                     (todos-diary-goto-entry)))

Thank you for this excellent "advice" ;-).  It works very nicely --
except for one wrinkle: after loading todos.el (which requires
'diary-lib) I have to eval diary-goto-entry (or load diary-lib) again in
order for the advice to take effect.  Without doing that it's as if the
advice were not activated.  But I see nothing about activating advice in
nadvice.el.  Here's what I added to diary-lib.el:

(defvar diary-goto-location-function 'goto-char
  "Function called by `diary-goto-entry' to jump to a diary entry.
Major modes that require special handling of the source file of
the diary entry can assign a suitable function to this variable.")

(defun diary-goto-entry (button)
  "Jump to the diary entry for the BUTTON at point."
  (let* ((locator (button-get button 'locator))
         (marker (car locator))
         markbuf file)
    ;; If marker pointing to diary location is valid, use that.
    (if (and marker (setq markbuf (marker-buffer marker)))
        (progn
          (pop-to-buffer markbuf)
	  (funcall diary-goto-location-function (marker-position marker)))
      ;; Marker is invalid (eg buffer has been killed).
      (or (and (setq file (cadr locator))
               (file-exists-p file)
               (find-file-other-window file)
               (progn
                 (when (eq major-mode (default-value 'major-mode)) (diary-mode))
                 (goto-char (point-min))
                 (if (re-search-forward (format "%s.*\\(%s\\)"
                                                (regexp-quote (nth 2 locator))
                                                (regexp-quote (nth 3 locator)))
                                        nil t)
                     (funcall diary-goto-location-function (match-beginning 1)))))
          (message "Unable to locate this diary entry")))))

and here's what I added to todos-mode:

(define-derived-mode todos-mode special-mode "Todos"
  "Major mode for displaying, navigating and editing Todo lists.

\\{todos-mode-map}"
;; other initializations ...
  (add-function :around diary-goto-location-function
		(lambda (orig-fun &rest args)
		  (when (derived-mode-p 'todos-mode) (widen))
		  (apply orig-fun args)
		  (todos-diary-goto-entry))))

What am I doing wrong?

Steve Berman



  reply	other threads:[~2013-06-13 20:53 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-09 23:31 New version of todo-mode.el (announcement + user guide) Stephen Berman
2013-06-10 13:24 ` Bastien
2013-06-10 14:35   ` Stephen Berman
2013-06-10 14:49     ` Bastien
2013-06-10 20:51       ` New version of todo-mode.el (code) Stephen Berman
2013-08-30 18:31         ` Jambunathan K
2013-09-08 21:09           ` Stephen Berman
2013-06-10 14:52     ` New version of todo-mode.el (announcement + user guide) Óscar Fuentes
2013-06-10 20:52       ` Stephen Berman
2013-06-11  0:20         ` Stefan Monnier
2013-06-11 18:36           ` Stephen Berman
2013-06-11 21:48             ` Stefan Monnier
2013-06-12 21:37               ` Stephen Berman
2013-06-13  1:06                 ` Stefan Monnier
2013-06-13 20:53                   ` Stephen Berman
2013-06-12 17:28             ` Glenn Morris
2013-06-12 21:26               ` Stefan Monnier
2013-06-12 21:37               ` Stephen Berman
2013-06-13  1:18                 ` Stefan Monnier
2013-06-13 20:53                   ` Stephen Berman [this message]
2013-06-14  0:21                     ` Stefan Monnier
2013-06-14 21:37                       ` Stephen Berman
2013-06-15  0:40                         ` Glenn Morris
2013-06-15  1:49                         ` Stefan Monnier
2013-06-15 12:52                           ` Stephen Berman
2013-06-16  0:44                             ` Stefan Monnier
2013-06-16 22:52                               ` Stephen Berman
2013-06-17  0:37                                 ` Stefan Monnier
2013-06-17 19:50                                 ` Glenn Morris
2013-06-17 22:33                                   ` Stephen Berman
2013-06-12 18:30             ` Wolfgang Jenkner
2013-06-12 21:38               ` Stephen Berman
2013-06-13  1:24                 ` Wolfgang Jenkner
2013-06-13 20:54                   ` Stephen Berman
2013-06-13 10:59 ` Vitalie Spinu
2013-06-13 20:54   ` Stephen Berman
2013-08-31  3:55 ` Jambunathan K

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87txl1bula.fsf@rosalinde.fritz.box \
    --to=stephen.berman@gmx.net \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).