+2005-02-27 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/lily-parser-scheme.cc (LY_DEFINE): deprecate
+ ly:set-point-and-click
+
2005-02-27 Jan Nieuwenhuizen <janneke@gnu.org>
* ps/music-drawing-routines.ps (mark_file_line): Switch Action
2005-02-27 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * Documentation/user/point-and-click.itely: update for PDF point &
+ click.
+
* scripts/lilypond-pdfpc-helper.py: new file. Invoke different
editors based on EDITOR setting.
@appendix Point and click
@cindex point and click
-@cindex source specials
-@cindex specials, source
-
-Point and click lets you find notes in the input by clicking on them in
-the Xdvi window. This makes it easier to find input that causes some
-error in the sheet music.
-
-To use it, you need the following software:
-
-@itemize @bullet
-@item a dvi viewer that supports src specials.
-
-The most obvious choice is Xdvi@footnote{KDVI also provides src
-@cindex Xdvi
-@cindex KDVI
-@cindex KDE
-specials, but does not use the kpathsea library, so it cannot find
-LilyPond font and PostScript library files.}, version 22.36 or newer.
-It is available from
-@uref{ftp://@/ftp@/.math@/.berkeley@/.edu/@/pub/@/Software/@/TeX/@/xdvi@/.tar@/.gz,
-ftp@/.math@/.berkeley@/.edu}.
-
-Most @TeX{} distributions ship with @command{xdvik}, which is always a few
-versions behind the official Xdvi. To find out which Xdvi you are
-running, try @code{xdvi -version} or @code{xdvi.bin -version}.
-@item an editor with a client/@/server interface (or a lightweight GUI
-editor):
-@cindex editor
-
-@itemize @minus
-@item
-Emacs. Emacs is an extendable text editor. It is available from
-@uref{http://@/www@/.gnu@/.org/@/software/@/emacs/}. You need version 21
-to use column location.
-
-@c move this elsewhere?
+@cindex source specials
+@cindex specials, source
+Point and click lets you find notes in the input by clicking on them
+in the PDF viewer. This makes it easier to find input that causes
+some error in the sheet music.
-@cindex Emacs
-@cindex Emacs mode
-@cindex lilypond-mode for Emacs
-@cindex syntax coloring
+When this functionality is active, LilyPond adds hyperlinks to the PDF
+file. These hyperlinks are sent to the web-browser, which opens a
+text-editor with the cursor in the right place.
-@item
-XEmacs. XEmacs is very similar to Emacs.
+To make this chain work, the following should done:
-@cindex XEmacs
+@itemize @bullet
@item
-NEdit. NEdit runs under Windows and Unix.
-It is available from @uref{http://@/www@/.nedit@/.org}.
-
-@cindex NEdit
+The PDF viewer must be configured for following hyperlinks, preferably
+using Mozilla Firefox.
-@item
-GVim. GVim is a GUI variant of VIM, the popular VI
-clone. It is available from @uref{http://@/www@/.vim@/.org}.
+For Xpdf on Unix, the following should be present in
+@file{xpdfrc}@footnote{On unix, this file is found either in
+@file{/etc} or your home directory.}
-@cindex GVim
-@cindex Vim
+@example
+urlCommand "firefox -remote 'OpenURL(%s)'"
+@end example
+@item Your web-browser must be configured for the @code{textedit}
+protocol,
-@item
-jEdit. jEdit is an editor written in Java with extensive plug-in
-support. The LilyPond plugin for jEdit comes with an DVI
-viewer, which is preconfigured for point-and-click.
+For Mozilla and Mozilla Firefox, this is done by adding following
+lines to the @file{prefs.js}@footnote{On a typical unix system, this
+file is found in your home-directory under
+@file{.mozilla/firefox/default.trn/prefs.js}.}
-@cindex jEdit
+@example
+user_pref("network.protocol-handler.app.textedit", "lilypond-pdfpc-helper");
+user_pref("network.protocol-handler.warn-external.textedit", false);
+@end example
@end itemize
-@end itemize
-
-Xdvi must be configured to find the @TeX{} fonts and music
-fonts. Refer to the Xdvi documentation for more information.
-
-To use point-and-click, add one of these lines to the top of your @file{.ly}
-file:
+The program @file{lilypond-pdfpc-helper} is a small helper program.
+It tests the environment variable @code{EDITOR} for the following
+patterns,
+@table @code
+@item emacs
+ this will invoke
@example
-#(ly:set-point-and-click 'line)
+emacsclient --no-wait +@var{line}:@var{column} @var{file}
@end example
-@cindex line-location
-
-When viewing, Control-Mousebutton@tie{}1 will take you to the originating
-spot in the @file{.ly} file. Control-Mousebutton@tie{}2 will show all
-clickable boxes.
-
-If you correct large files with point-and-click, be sure to start
-correcting at the end of the file. When you start at the top, and
-insert one line, all following locations will be off by a line.
-
-@cindex Emacs
-For using point-and-click with Emacs, add the following
-In your Emacs startup file (usually @file{~/@/.emacs}):
+@item vim
+ this will invoke
@example
-(server-start)
+gvim --remote +:@var{line}:norm@var{column} @var{file}
@end example
-Make sure that the environment variable @var{XEDITOR} is set to
+@item nedit
@example
-emacsclient --no-wait +%l %f
+ nc -noask +@var{line} @var{file}'
@end example
-@cindex @var{XEDITOR}
-If you use XEmacs instead of Emacs, insert @code{(gnuserve-start)} in
-your @file{.emacs} file, and set @code{XEDITOR} to
-@code{gnuclient -q +%l %f}.
-
-For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or
-use this argument with Xdvi's @code{-editor} option.
-
-@cindex NEdit
-For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or
-use this argument with Xdvi's @code{-editor} option.
-
-It can also make your editor jump to the exact location of the note
-you clicked. This is only supported on Emacs and VIM. Users of Emacs version
-20 must apply the patch @file{emacsclient.patch}. Users of version 21
-must apply @file{server.el.patch} (version 21.2 and earlier). At the
-top of the @code{.ly} file, replace the @code{set-point-and-click} line
-with the following line:
+@end table
+
+The environment variable @code{LYEDITOR} is used to override this. It
+contains the command line to start the editor, where @code{%(file)s},
+@code{%(column)s}, @code{%(line)s} is replaced with the file, column
+and line respectively. The setting
+
@example
-#(ly:set-point-and-click 'line-column)
+emacsclient --no-wait +%(line)s:%(column)s %(file)s
@end example
-@cindex line-column-location
-and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}. Vim
-users can set @code{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}.
+
+@noindent
+for @code{LYEDITOR} is equivalent to the standard emacsclient
+invocation.
+
-\version "2.4.0"
+\version "2.5.13"
\header {
composer = "ARTHUR GRAY"
title = "LES NÉRÉIDES"
%}
-#(ly:set-point-and-click 'line-column)
#(define (make-text-checker text)
(lambda (elt) (equal? text (ly:get-grob-property elt 'text))))
#(ly:set-option 'old-relative)
-% #(ly:set-point-and-click 'line-column)
-
instrument = "Piano"
\header {
- title = "Ständchen"
+ title = "Ständchen"
subtitle = "(Serenade)"
subsubtitle = "Leise flehen meine Lieder"
opus = "D. 957 No. 4"
footer = "Mutopia-2001/04/27-xx"
}
-\version "2.4.0"
+\version "2.5.13"
dynamicUp = \override DynamicLineSpanner #'direction = #1
dynamicRevert = \revert DynamicLineSpanner #'direction
in den stil -- len Hain her nie -- der,
Lieb -- chen, komm zu mir!
- Flüs -- ternd schlan -- ke Wip -- fel rau -- schen
+ Flüs -- ternd schlan -- ke Wip -- fel rau -- schen
in des Mon -- des Licht,
in des Mon -- des Licht;
- des Ver -- rä -- ters feind -- lich Lau -- schen
- fürch -- te, Hol -- de, nicht,
- fürch -- te, Hol -- de, nicht.
+ des Ver -- rä -- ters feind -- lich Lau -- schen
+ fürch -- te, Hol -- de, nicht,
+ fürch -- te, Hol -- de, nicht.
}
lyricVerseTwo = \lyricmode{
- Hörst die Nach -- ti -- gal -- len schla -- gen?
+ Hörst die Nach -- ti -- gal -- len schla -- gen?
ach! sie fle -- hen dich,
- mit der Tö -- ne sü -- "\ss en" Kla -- gen
- fle -- hen sie für mich.
+ mit der Tö -- ne sü -- "\ss en" Kla -- gen
+ fle -- hen sie für mich.
Sie -- ver -- "steh'n" des Bu -- sens Seh -- nen,
ken -- nen Lieb -- es -- schmerz,
ken -- nen Lieb -- es -- schmerz,
- rüh -- ren mit den Sil -- ber -- tö -- nen
+ rüh -- ren mit den Sil -- ber -- tö -- nen
jed -- es wei -- che Herz,
jed -- es wei -- che Herz.
}
lyricThrough = \lyricmode{
La\ss auch dir die Brust be -- we -- gen
- Lieb -- chen, hö -- re mich!
+ Lieb -- chen, hö -- re mich!
be -- bend harr' ich dir ent -- ge -- gen!
- komm, be -- glük -- ke mich!
- komm, be -- glük -- ke mich, __
- be -- glük -- ke mich!
+ komm, be -- glük -- ke mich!
+ komm, be -- glük -- ke mich, __
+ be -- glük -- ke mich!
}
trebleIntro = \relative c{
- r8^"\bf Mäßig"\pp <g' c>-. <c es>-. <g c>-. <c es>-. <g c>-. |
+ r8^"\bf Mäßig"\pp <g' c>-. <c es>-. <g c>-. <c es>-. <g c>-. |
r8 <as c>-. <c es>-. <as c>-. <c es>-. <as c>-. |
r8 <as c>-. <c d>-. <as c>-. <c d>-. <as c>-. |
r8 <g b>-. <b d>-. <g b>-. <b d>-. <g b>-. |
-\version "2.4.0"
-
-% #(ly:set-point-and-click 'line-column)
+\version "2.5.13"
forcedLastBreak = { \break }
-#(ly:set-point-and-click 'line-column)
-\version "2.4.0"
+\version "2.5.13"
\header {
-%% Optional helper for quick click and edit mode. May be omitted
-#(ly:set-point-and-click 'line-column)
%% A simple song in LilyPond
<<
>>
%% Optional helper for automatic updating by convert-ly. May be omitted.
-\version "2.4.0"
+\version "2.5.13"
extern String output_name_global;
extern bool be_safe_global;
extern bool be_verbose_global;
-extern bool store_locations_global;
extern bool do_internal_type_checking_global;
extern bool is_pango_format_global;
extern char const *prefix_directories[];
#include "book.hh"
#include "paper-book.hh"
-/*
- junkme?
- */
-bool store_locations_global;
-
/* Do not append `!' suffix, since 1st argument is not modified. */
LY_DEFINE (ly_set_point_and_click, "ly:set-point-and-click",
1, 0, 0, (SCM what),
- "Set the options for Point-and-click source specials output. The\n"
-"argument is a symbol. Possible options are @code{none} (no source specials), \n"
-"@code{line} and @code{line-column}")
+ "Deprecated.")
{
- /* UGH. */
- SCM val = SCM_BOOL_F;
- if (ly_symbol2scm ("line-column") == what)
- val = ly_lily_module_constant ("line-column-location");
- else if (what == ly_symbol2scm ("line"))
- val = ly_lily_module_constant ("line-location");
-
- scm_module_define (global_lily_module, ly_symbol2scm ("point-and-click"),
- val);
- store_locations_global = ly_c_procedure_p (val);
+ warning ("ly:set-point-and-click called");
return SCM_UNSPECIFIED;
}
/Rect [ llx lly urx ury ]
/Border [ 0 0 0 0 ]
- pdf-viewer (acroread) eq
- {
- /Action
+ /Action
<<
/Subtype /URI
/URI command
>>
- }
- {
- % xpdf. FIXME: gpdf, kpdf etc?
- /Action
- <<
- /Launch
- /File command
- >>
- } ifelse
/Subtype /Link
/ANN
pdfmark
(ly:input-file-line-column music-origin)
#f
))
+ (file (if location (string-append (getcwd) "/" (car location))
+ #f))
(x-ext (ly:grob-extent grob grob X))
(y-ext (ly:grob-extent grob grob Y))
)
(if location
- (format "~a ~a ~a ~a (~a:~a:~a) mark_file_line\n"
+ (format "~a ~a ~a ~a (textedit://~a:~a:~a) mark_file_line\n"
(+ (car offset) (car x-ext))
(+ (cdr offset) (car y-ext))
(+ (car offset) (cdr x-ext))
(+ (cdr offset) (cdr y-ext))
- (car location)
+ file
(cadr location)
(caddr location))
"")))
de_utf_8 (str)
except UnicodeDecodeError:
str = en_utf_8 (de_input (str)[0])[0]
+
+
+
+ str = re.sub (r"#\(ly:set-point-and-click '[a-z-]+\)", '', str)
return str
conversions.append (((2, 5, 13),
conv,
- '\\encoding: smart recode latin1..utf-8'))
+ '\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click'))
################################
import getopt
import sys
import os
+import string
version = '@TOPLEVEL_VERSION@'
################################################################
-match = re.match ('([^:]+):([^:]+):(.*)', files[0])
+
+arg = files[0]
+
+arg = re.sub ('textedit://','', arg)
+
+match = re.match ('([^:]+):([^:]+):(.*)', arg)
if not match:
sys.stderr.write (_("Not in FILE:LINE:COL format: ")
+ files[0])
command = ly_pc_editor % vars()
+print 'invoked with %s\ncalling %s\n' % (string.join (sys.argv),command)
+
status = os.system (command)
if status:
sys.stderr.write (_("Command failed: `%s' (status %d)") % (command, status) + '\n')