lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Question about paths in point-and-click


From: Jean Abou Samra
Subject: Re: Question about paths in point-and-click
Date: Mon, 31 Oct 2022 18:04:35 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1

Le 31/10/2022 à 17:56, Jean Abou Samra a écrit :
In general, no.


Well, I spoke too fast. You can do

\version "2.23.80"

#(set!
  (@@ (lily output-ps) stencil-dispatch-alist)
  (assq-set!
   (@@ (lily output-ps) stencil-dispatch-alist)
   'grob-cause
   (lambda (offset grob)
     (if (ly:get-option 'point-and-click)
         (let* ((cause (ly:grob-property grob 'cause))
                (music-origin (if (ly:stream-event? cause)
                                  (ly:event-property cause 'origin)))
                (point-and-click (ly:get-option 'point-and-click)))
           (if (and
                (ly:input-location? music-origin)
                (cond ((boolean? point-and-click) point-and-click)
                      ((symbol? point-and-click)
                       (ly:in-event-class? cause point-and-click))
                      (else (any (lambda (t)
                                   (ly:in-event-class? cause t))
                                 point-and-click))))
               (let* ((location (ly:input-file-line-char-column music-origin))
                      (raw-file (car location))
                      (file (if (is-absolute? raw-file)
                                raw-file
                                (string-append (ly-getcwd) "/" raw-file)))
                      (x-ext (ly:grob-extent grob grob X))
                      (y-ext (ly:grob-extent grob grob Y)))

                 (if (and (< 0 (interval-length x-ext))
                          (< 0 (interval-length y-ext)))
                     (ly:format " ~4f ~4f ~4f ~4f (textedit://~a:~a:~a:~a) mark_URI\n"
                                (+ (car offset) (car x-ext))
                                (+ (cdr offset) (car y-ext))
                                (+ (car offset) (cdr x-ext))
                                (+ (cdr offset) (cdr y-ext))

                                ;; Backslashes are not valid
                                ;; file URI path separators.
;;;;;;;;;;;;;;;;(ly:string-percent-encode
                                ;;;;;;;;;;;;;;;; (ly:string-substitute "\\" "/" file))
                                "foo.ly"

                                (cadr location)
                                (caddr location)
                                (1+ (cadddr location)))
                     ""))
               ""))
         ""))))

{ c' }




Basically, tamper with the LilyPond function that outputs
these textedit:// links. In this example, I'm replacing
the file name with "foo.ly".

However, this is using undocumented variables that are explicitly
not public, so you're at your own risk -- it can and almost
certainly will break with some future version of LilyPond,
and a replacement will not be guaranteed to exist. Also, it
would need different code to work in SVG output.

If you can use a different method, that would be really preferable.

Best,
Jean





reply via email to

[Prev in Thread] Current Thread [Next in Thread]