Applied, thanks. Martyn Jago <martyn.j...@btinternet.com> writes:
> Hi > > A patch to make ob-lilypond audition calls asynchronous (and tests). > > Best, Martyn > > > From 2e7cd607cd6dbc25edd5ff9972fbd2528d48416e Mon Sep 17 00:00:00 2001 > From: Martyn Jago <martyn.j...@btinternet.com> > Date: Sat, 10 Mar 2012 15:00:57 +0000 > Subject: [PATCH] Make auditioning of midi and pdf generations asynchronous, > and add easy pdf generation. > > * lisp/ob-lilypond.el: Make auditioning of midi and pdf asynchronous, > and add easy pdf generation in the form of `ly-gen-pdf' variable. > > * testing/lisp/test-ob-lilypond.el: Tests for above. > --- > lisp/ob-lilypond.el | 68 ++++++++++++++++++++++++++----------- > testing/lisp/test-ob-lilypond.el | 22 +++++++++++- > 2 files changed, 68 insertions(+), 22 deletions(-) > > diff --git a/lisp/ob-lilypond.el b/lisp/ob-lilypond.el > index 0dde0de..fc9a639 100644 > --- a/lisp/ob-lilypond.el > +++ b/lisp/ob-lilypond.el > @@ -3,7 +3,7 @@ > ;; Copyright (C) 2010-2012 Free Software Foundation, Inc. > > ;; Author: Martyn Jago > -;; Keywords: babel language, literate programming > +;; Keywords: babel language, literate programming, music score > ;; Homepage: https://github.com/mjago/ob-lilypond > > ;; This file is part of GNU Emacs. > @@ -23,10 +23,14 @@ > > ;;; Commentary: > > -;; Installation / usage info, and examples are available at > -;; https://github.com/mjago/ob-lilypond > +;; Installation, ob-lilypond documentation, and examples are available at > +;; http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-lilypond.html > +;; > +;; Lilypond documentation can be found at > +;; http://lilypond.org/manuals.html > > ;;; Code: > + > (require 'ob) > (require 'ob-eval) > (require 'ob-tangle) > @@ -37,9 +41,11 @@ > (add-to-list 'org-babel-tangle-lang-exts '("LilyPond" . "ly")) > > (defvar org-babel-default-header-args:lilypond '() > - "Default header arguments for js code blocks.") > + "Default header arguments for lilypond code blocks. > +NOTE: The arguments are determined at lilypond compile time. > +See (ly-set-header-args)") > > -(defconst ly-version "0.3" > +(defconst ly-version "7.6" > "The version number of the file ob-lilypond.el.") > > (defvar ly-compile-post-tangle t > @@ -86,6 +92,10 @@ LY-GEN-SVG to t") > "HTML generation can be turned on by default by setting > LY-GEN-HTML to t") > > +(defvar ly-gen-pdf nil > +"PDF generation can be turned on by default by setting > +LY-GEN-PDF to t") > + > (defvar ly-use-eps nil > "You can force the compiler to use the EPS backend by setting > LY-USE-EPS to t") > @@ -203,18 +213,20 @@ FILE-NAME is full path to lilypond (.ly) file" > (arg-2 nil) ;infile > (arg-3 "*lilypond*") ;buffer > (arg-4 t) ;display > - (arg-5 (if ly-gen-png "--png" "")) ;&rest... > - (arg-6 (if ly-gen-html "--html" "")) > - (arg-7 (if ly-use-eps "-dbackend=eps" "")) > - (arg-8 (if ly-gen-svg "-dbackend=svg" "")) > - (arg-9 (concat "--output=" (file-name-sans-extension file-name))) > - (arg-10 file-name)) > + (arg-4 t) ;display > + (arg-5 (if ly-gen-png "--png" "")) ;&rest... > + (arg-6 (if ly-gen-html "--html" "")) > + (arg-7 (if ly-gen-pdf "--pdf" "")) > + (arg-8 (if ly-use-eps "-dbackend=eps" "")) > + (arg-9 (if ly-gen-svg "-dbackend=svg" "")) > + (arg-10 (concat "--output=" (file-name-sans-extension file-name))) > + (arg-11 file-name)) > (if test > - `(,arg-1 ,arg-2 ,arg-3 ,arg-4 ,arg-5 > - ,arg-6 ,arg-7 ,arg-8 ,arg-9 ,arg-10) > + `(,arg-1 ,arg-2 ,arg-3 ,arg-4 ,arg-5 ,arg-6 > + ,arg-7 ,arg-8 ,arg-9 ,arg-10, arg-11) > (call-process > - arg-1 arg-2 arg-3 arg-4 arg-5 > - arg-6 arg-7 arg-8 arg-9 arg-10)))) > + arg-1 arg-2 arg-3 arg-4 arg-5 arg-6 > + arg-7 arg-8 arg-9 arg-10 arg-11)))) > > (defun ly-check-for-compile-error (file-name &optional test) > "Check for compile error. > @@ -307,8 +319,12 @@ If TEST is non-nil, the shell command is returned and is > not run" > (concat (ly-determine-pdf-path) " " pdf-file))) > (if test > cmd-string > - (shell-command cmd-string))) > - (message "No pdf file generated so can't display!"))))) > + (start-process > + "\"Audition pdf\"" > + "*lilypond*" > + (ly-determine-pdf-path) > + pdf-file))) > + (message "No pdf file generated so can't display!"))))) > > (defun ly-attempt-to-play-midi (file-name &optional test) > "Attempt to play the generated MIDI file > @@ -322,7 +338,11 @@ If TEST is non-nil, the shell command is returned and is > not run" > (concat (ly-determine-midi-path) " " midi-file))) > (if test > cmd-string > - (shell-command cmd-string))) > + (start-process > + "\"Audition midi\"" > + "*lilypond*" > + (ly-determine-midi-path) > + midi-file))) > (message "No midi file generated so can't play!"))))) > > (defun ly-determine-ly-path (&optional test) > @@ -399,6 +419,15 @@ If TEST is non-nil, it contains a simulation of the OS > for test purposes" > (message (concat "HTML generation has been " > (if ly-gen-html "ENABLED." "DISABLED.")))) > > +(defun ly-toggle-pdf-generation () > + "Toggle whether pdf will be generated by compilation" > + > + (interactive) > + (setq ly-gen-pdf > + (not ly-gen-pdf)) > + (message (concat "PDF generation has been " > + (if ly-gen-pdf "ENABLED." "DISABLED.")))) > + > (defun ly-toggle-arrange-mode () > "Toggle whether in Arrange mode or Basic mode" > > @@ -428,6 +457,7 @@ mode i.e. ARRANGE-MODE is t" > '((:tangle . "yes") > (:noweb . "yes") > (:results . "silent") > + (:cache . "yes") > (:comments . "yes"))) > (t > '((:results . "file") > @@ -441,6 +471,4 @@ dependent on LY-ARRANGE-MODE" > > (provide 'ob-lilypond) > > - > - > ;;; ob-lilypond.el ends here > diff --git a/testing/lisp/test-ob-lilypond.el > b/testing/lisp/test-ob-lilypond.el > index 03df6ef..b161ac6 100644 > --- a/testing/lisp/test-ob-lilypond.el > +++ b/testing/lisp/test-ob-lilypond.el > @@ -42,10 +42,10 @@ > (should (boundp 'ly-version))) > > (ert-deftest ob-lilypond/ly-version-command () > - (should (equal "ob-lilypond version 0.3" (ly-version))) > + (should (equal "ob-lilypond version 7.6" (ly-version))) > (with-temp-buffer > (ly-version t) > - (should (equal "ob-lilypond version 0.3" > + (should (equal "ob-lilypond version 7.6" > (buffer-substring (point-min) (point-max)))))) > > (ert-deftest ob-lilypond/ly-compile-lilyfile () > @@ -56,6 +56,7 @@ > t ;display > ,(if ly-gen-png "--png" "") ;&rest... > ,(if ly-gen-html "--html" "") > + ,(if ly-gen-pdf "--pdf" "") > ,(if ly-use-eps "-dbackend=eps" "") > ,(if ly-gen-svg "-dbackend=svg" "") > "--output=test-file" > @@ -116,6 +117,9 @@ > (ert-deftest ob-lilypond/ly-gen-html () > (should (boundp 'ly-gen-html))) > > +(ert-deftest ob-lilypond/ly-gen-html () > + (should (boundp 'ly-gen-pdf))) > + > (ert-deftest ob-lilypond/use-eps () > (should (boundp 'ly-use-eps))) > > @@ -296,6 +300,18 @@ > (ly-toggle-pdf-display) > (should (not ly-display-pdf-post-tangle)))) > > +(ert-deftest ob-lilypond/ly-toggle-pdf-generation-toggles-flag () > + (if ly-gen-pdf > + (progn > + (ly-toggle-pdf-generation) > + (should (not ly-gen-pdf)) > + (ly-toggle-pdf-generation) > + (should ly-gen-pdf)) > + (ly-toggle-pdf-generation) > + (should ly-gen-pdf) > + (ly-toggle-pdf-generation) > + (should (not ly-gen-pdf)))) > + > (ert-deftest ob-lilypond/ly-toggle-arrange-mode () > (if ly-arrange-mode > (progn > @@ -348,6 +364,7 @@ > (should (equal '((:tangle . "yes") > (:noweb . "yes") > (:results . "silent") > + (:cache . "yes") > (:comments . "yes")) > (ly-set-header-args t))) > (should (equal '((:results . "file") > @@ -359,6 +376,7 @@ > (should (equal '((:tangle . "yes") > (:noweb . "yes") > (:results . "silent") > + (:cache . "yes") > (:comments . "yes")) > org-babel-default-header-args:lilypond)) > (ly-set-header-args nil) -- Eric Schulte http://cs.unm.edu/~eschulte/