Ver Fonte

ob-lilypond: Code cleanup

* lisp/ob-lilypond.el (org-babel-lilypond-OSX-ly-path,
  org-babel-lilypond-OSX-pdf-path, org-babel-lilypond-OSX-midi-path,
  org-babel-lilypond-nix-ly-path, org-babel-lilypond-nix-pdf-path,
  org-babel-lilypond-nix-midi-path, org-babel-lilypond-w32-ly-path,
  org-babel-lilypond-w32-pdf-path, org-babel-lilypond-w32-midi-path,
  org-babel-lilypond-determine-ly-path,
  org-babel-lilypond-determine-pdf-path,
  org-babel-lilypond-determine-midi-path): Remove.
  (org-babel-lilypond-ly-command, org-babel-lilypond-midi-command,
  org-babel-lilypond-pdf-command): Replacement for removed variables
  and functions.  Adapt all calls to the removed functions to use
  these variables instead.
  (org-babel-lilypond-commands): New defcustom for setting up
  the *-command variables.  Keep different defaults for different
  systems as the original code did to avoid tripping up unsuspecting
  users.
  (org-babel-lilypond-execute-tangled-ly,
  org-babel-lilypond-check-for-compile-error): Revert conditions to
  avoid superfluous forms.  Remove unused return values.
* testing/lisp/test-ob-lilypond.el: Do test for new variables and
  replace removed function calls with the appropriate variable
  content.  Exercise the new defcustom thoroughly.
Achim Gratz há 10 anos atrás
pai
commit
64821bd967
2 ficheiros alterados com 134 adições e 131 exclusões
  1. 53 69
      lisp/ob-lilypond.el
  2. 81 62
      testing/lisp/test-ob-lilypond.el

+ 53 - 69
lisp/ob-lilypond.el

@@ -62,18 +62,38 @@ org-babel-lilypond-play-midi-post-tangle determines whether to automate the
 playing of the resultant midi file.  If the value is nil,
 playing of the resultant midi file.  If the value is nil,
 the midi file is not automatically played.  Default value is t")
 the midi file is not automatically played.  Default value is t")
 
 
-(defvar org-babel-lilypond-OSX-ly-path
-  "/Applications/lilypond.app/Contents/Resources/bin/lilypond")
-(defvar org-babel-lilypond-OSX-pdf-path "open")
-(defvar org-babel-lilypond-OSX-midi-path "open")
-
-(defvar org-babel-lilypond-nix-ly-path "/usr/bin/lilypond")
-(defvar org-babel-lilypond-nix-pdf-path "evince")
-(defvar org-babel-lilypond-nix-midi-path "timidity")
-
-(defvar org-babel-lilypond-w32-ly-path "lilypond")
-(defvar org-babel-lilypond-w32-pdf-path "")
-(defvar org-babel-lilypond-w32-midi-path "")
+(defconst org-babel-lilypond-ly-command
+  "Command to execute lilypond on your system.")
+(defconst org-babel-lilypond-pdf-command
+  "Command to show a PDF file on your system.")
+(defconst org-babel-lilypond-midi-command
+  "Command to play a MIDI file on your system.")
+(defcustom org-babel-lilypond-commands
+  (cond
+   ((eq system-type 'darwin)
+    '("/Applications/lilypond.app/Contents/Resources/bin/lilypond" "open" "open"))
+   ((eq system-type 'windows-nt)
+    '("lilypond" "" ""))
+   (t
+    '("lilypond" "xdg-open" "xdg-open")))
+  "Commands to run lilypond and view or play the results.
+These should be executables that take a filename as an argument.
+On some system it is possible to specify the filename directly
+and the viewer or player will be determined from the file type;
+you can leave the string empty on this case."
+  :group 'org-babel
+  :type '(list
+	  (string :tag "Lilypond   ")
+	  (string :tag "PDF Viewer ")
+	  (string :tag "MIDI Player"))
+  :version "24.3"
+  :package-version '(Org . "8.2.7")
+  :set
+  (lambda (symbol value)
+    (setq
+     org-babel-lilypond-ly-command   (nth 0 value)
+     org-babel-lilypond-pdf-command  (nth 1 value)
+     org-babel-lilypond-midi-command (nth 2 value))))
 
 
 (defvar org-babel-lilypond-gen-png nil
 (defvar org-babel-lilypond-gen-png nil
   "Image generation (png) can be turned on by default by setting
   "Image generation (png) can be turned on by default by setting
@@ -150,7 +170,7 @@ specific arguments to =org-babel-tangle="
       (insert (org-babel-expand-body:generic body params)))
       (insert (org-babel-expand-body:generic body params)))
     (org-babel-eval
     (org-babel-eval
      (concat
      (concat
-      (org-babel-lilypond-determine-ly-path)
+      org-babel-lilypond-ly-command
       " -dbackend=eps "
       " -dbackend=eps "
       "-dno-gs-load-fonts "
       "-dno-gs-load-fonts "
       "-dinclude-eps-fonts "
       "-dinclude-eps-fonts "
@@ -177,29 +197,27 @@ If error in compilation, attempt to mark the error in lilypond org file"
                             (buffer-file-name) ".lilypond"))
                             (buffer-file-name) ".lilypond"))
           (org-babel-lilypond-temp-file (org-babel-lilypond-switch-extension
           (org-babel-lilypond-temp-file (org-babel-lilypond-switch-extension
                          (buffer-file-name) ".ly")))
                          (buffer-file-name) ".ly")))
-      (if (file-exists-p org-babel-lilypond-tangled-file)
-          (progn
-            (when (file-exists-p org-babel-lilypond-temp-file)
-              (delete-file org-babel-lilypond-temp-file))
-            (rename-file org-babel-lilypond-tangled-file
-                         org-babel-lilypond-temp-file))
-        (error "Error: Tangle Failed!") t)
+      (if (not (file-exists-p org-babel-lilypond-tangled-file))
+	  (error "Error: Tangle Failed!")
+	(when (file-exists-p org-babel-lilypond-temp-file)
+	  (delete-file org-babel-lilypond-temp-file))
+	(rename-file org-babel-lilypond-tangled-file
+		     org-babel-lilypond-temp-file))
       (switch-to-buffer-other-window "*lilypond*")
       (switch-to-buffer-other-window "*lilypond*")
       (erase-buffer)
       (erase-buffer)
       (org-babel-lilypond-compile-lilyfile org-babel-lilypond-temp-file)
       (org-babel-lilypond-compile-lilyfile org-babel-lilypond-temp-file)
       (goto-char (point-min))
       (goto-char (point-min))
-      (if (not (org-babel-lilypond-check-for-compile-error org-babel-lilypond-temp-file))
-          (progn
-            (other-window -1)
-            (org-babel-lilypond-attempt-to-open-pdf org-babel-lilypond-temp-file)
-            (org-babel-lilypond-attempt-to-play-midi org-babel-lilypond-temp-file))
-        (error "Error in Compilation!")))) nil)
+      (if (org-babel-lilypond-check-for-compile-error org-babel-lilypond-temp-file)
+	  (error "Error in Compilation!")
+	(other-window -1)
+	(org-babel-lilypond-attempt-to-open-pdf org-babel-lilypond-temp-file)
+	(org-babel-lilypond-attempt-to-play-midi org-babel-lilypond-temp-file)))))
 
 
 (defun org-babel-lilypond-compile-lilyfile (file-name &optional test)
 (defun org-babel-lilypond-compile-lilyfile (file-name &optional test)
   "Compile lilypond file and check for compile errors
   "Compile lilypond file and check for compile errors
 FILE-NAME is full path to lilypond (.ly) file"
 FILE-NAME is full path to lilypond (.ly) file"
   (message "Compiling LilyPond...")
   (message "Compiling LilyPond...")
-  (let ((arg-1 (org-babel-lilypond-determine-ly-path)) ;program
+  (let ((arg-1 org-babel-lilypond-ly-command) ;program
         (arg-2 nil)                    ;infile
         (arg-2 nil)                    ;infile
         (arg-3 "*lilypond*")           ;buffer
         (arg-3 "*lilypond*")           ;buffer
 	(arg-4 t)                      ;display
 	(arg-4 t)                      ;display
@@ -225,11 +243,10 @@ FILE-NAME is full path to lilypond file.
 If TEST is t just return nil if no error found, and pass
 If TEST is t just return nil if no error found, and pass
 nil as file-name since it is unused in this context"
 nil as file-name since it is unused in this context"
   (let ((is-error (search-forward "error:" nil t)))
   (let ((is-error (search-forward "error:" nil t)))
-    (if (not test)
-        (if (not is-error)
-            nil
-          (org-babel-lilypond-process-compile-error file-name))
-      is-error)))
+    (if test
+	is-error
+      (when is-error
+	(org-babel-lilypond-process-compile-error file-name)))))
 
 
 (defun org-babel-lilypond-process-compile-error (file-name)
 (defun org-babel-lilypond-process-compile-error (file-name)
   "Process the compilation error that has occurred.
   "Process the compilation error that has occurred.
@@ -300,13 +317,13 @@ If TEST is non-nil, the shell command is returned and is not run"
     (let ((pdf-file (org-babel-lilypond-switch-extension file-name ".pdf")))
     (let ((pdf-file (org-babel-lilypond-switch-extension file-name ".pdf")))
       (if (file-exists-p pdf-file)
       (if (file-exists-p pdf-file)
           (let ((cmd-string
           (let ((cmd-string
-                 (concat (org-babel-lilypond-determine-pdf-path) " " pdf-file)))
+                 (concat org-babel-lilypond-pdf-command " " pdf-file)))
             (if test
             (if test
                 cmd-string
                 cmd-string
 	      (start-process
 	      (start-process
 	       "\"Audition pdf\""
 	       "\"Audition pdf\""
 	       "*lilypond*"
 	       "*lilypond*"
-	       (org-babel-lilypond-determine-pdf-path)
+	       org-babel-lilypond-pdf-command
 	       pdf-file)))
 	       pdf-file)))
 	(message  "No pdf file generated so can't display!")))))
 	(message  "No pdf file generated so can't display!")))))
 
 
@@ -318,49 +335,16 @@ If TEST is non-nil, the shell command is returned and is not run"
     (let ((midi-file (org-babel-lilypond-switch-extension file-name ".midi")))
     (let ((midi-file (org-babel-lilypond-switch-extension file-name ".midi")))
       (if (file-exists-p midi-file)
       (if (file-exists-p midi-file)
           (let ((cmd-string
           (let ((cmd-string
-                 (concat (org-babel-lilypond-determine-midi-path) " " midi-file)))
+                 (concat org-babel-lilypond-midi-command " " midi-file)))
             (if test
             (if test
                 cmd-string
                 cmd-string
               (start-process
               (start-process
                "\"Audition midi\""
                "\"Audition midi\""
                "*lilypond*"
                "*lilypond*"
-               (org-babel-lilypond-determine-midi-path)
+               org-babel-lilypond-midi-command
                midi-file)))
                midi-file)))
         (message "No midi file generated so can't play!")))))
         (message "No midi file generated so can't play!")))))
 
 
-(defun org-babel-lilypond-determine-ly-path (&optional test)
-  "Return correct path to ly binary depending on OS
-If TEST is non-nil, it contains a simulation of the OS for test purposes"
-  (let ((sys-type
-         (or test system-type)))
-    (cond ((string= sys-type  "darwin")
-           org-babel-lilypond-OSX-ly-path)
-          ((string= sys-type "windows-nt")
-           org-babel-lilypond-w32-ly-path)
-          (t org-babel-lilypond-nix-ly-path))))
-
-(defun org-babel-lilypond-determine-pdf-path (&optional test)
-  "Return correct path to pdf viewer depending on OS
-If TEST is non-nil, it contains a simulation of the OS for test purposes"
-  (let ((sys-type
-         (or test system-type)))
-    (cond ((string= sys-type  "darwin")
-           org-babel-lilypond-OSX-pdf-path)
-          ((string= sys-type "windows-nt")
-           org-babel-lilypond-w32-pdf-path)
-          (t org-babel-lilypond-nix-pdf-path))))
-
-(defun org-babel-lilypond-determine-midi-path (&optional test)
-  "Return correct path to midi player depending on OS
-If TEST is non-nil, it contains a simulation of the OS for test purposes"
-  (let ((sys-type
-         (or test test system-type)))
-    (cond ((string= sys-type  "darwin")
-           org-babel-lilypond-OSX-midi-path)
-          ((string= sys-type "windows-nt")
-           org-babel-lilypond-w32-midi-path)
-          (t org-babel-lilypond-nix-midi-path))))
-
 (defun org-babel-lilypond-toggle-midi-play ()
 (defun org-babel-lilypond-toggle-midi-play ()
   "Toggle whether midi will be played following a successful compilation."
   "Toggle whether midi will be played following a successful compilation."
   (interactive)
   (interactive)

+ 81 - 62
testing/lisp/test-ob-lilypond.el

@@ -52,7 +52,7 @@
 
 
 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
   (should (equal
   (should (equal
-           `(,(org-babel-lilypond-determine-ly-path)    ;program
+           `(,org-babel-lilypond-ly-command    ;program
              nil                        ;infile
              nil                        ;infile
              "*lilypond*"               ;buffer
              "*lilypond*"               ;buffer
              t                          ;display
              t                          ;display
@@ -74,41 +74,84 @@
 (ert-deftest ob-lilypond/ly-play-midi-post-tangle ()
 (ert-deftest ob-lilypond/ly-play-midi-post-tangle ()
   (should (boundp 'org-babel-lilypond-play-midi-post-tangle)))
   (should (boundp 'org-babel-lilypond-play-midi-post-tangle)))
 
 
-(ert-deftest ob-lilypond/ly-OSX-ly-path ()
-  (should (boundp 'org-babel-lilypond-OSX-ly-path))
-  (should (stringp org-babel-lilypond-OSX-ly-path)))
-
-(ert-deftest ob-lilypond/ly-OSX-pdf-path ()
-  (should (boundp 'org-babel-lilypond-OSX-pdf-path))
-  (should (stringp org-babel-lilypond-OSX-pdf-path)))
-
-(ert-deftest ob-lilypond/ly-OSX-midi-path ()
-  (should (boundp 'org-babel-lilypond-OSX-midi-path))
-  (should (stringp org-babel-lilypond-OSX-midi-path)))
-
-(ert-deftest ob-lilypond/ly-nix-ly-path ()
-  (should (boundp 'org-babel-lilypond-nix-ly-path))
-  (should (stringp org-babel-lilypond-nix-ly-path)))
-
-(ert-deftest ob-lilypond/ly-nix-pdf-path ()
-  (should (boundp 'org-babel-lilypond-nix-pdf-path))
-  (should (stringp org-babel-lilypond-nix-pdf-path)))
-
-(ert-deftest ob-lilypond/ly-nix-midi-path ()
-  (should (boundp 'org-babel-lilypond-nix-midi-path))
-  (should (stringp org-babel-lilypond-nix-midi-path)))
-
-(ert-deftest ob-lilypond/ly-w32-ly-path ()
-  (should (boundp 'org-babel-lilypond-w32-ly-path))
-  (should (stringp org-babel-lilypond-w32-ly-path)))
-
-(ert-deftest ob-lilypond/ly-w32-pdf-path ()
-  (should (boundp 'org-babel-lilypond-w32-pdf-path))
-  (should (stringp org-babel-lilypond-w32-pdf-path)))
-
-(ert-deftest ob-lilypond/ly-w32-midi-path ()
-  (should (boundp 'org-babel-lilypond-w32-midi-path))
-  (should (stringp org-babel-lilypond-w32-midi-path)))
+(ert-deftest ob-lilypond/ly-command-ly/bound ()
+  (should (boundp 'org-babel-lilypond-ly-command)))
+(ert-deftest ob-lilypond/ly-command-ly/stringp ()
+  (should (stringp org-babel-lilypond-ly-command)))
+(ert-deftest ob-lilypond/ly-command-pdf/bound ()
+  (should (boundp 'org-babel-lilypond-pdf-command)))
+(ert-deftest ob-lilypond/ly-command-pdf/stringp ()
+  (should (stringp org-babel-lilypond-pdf-command)))
+(ert-deftest ob-lilypond/ly-command-midi/bound ()
+  (should (boundp 'org-babel-lilypond-midi-command)))
+(ert-deftest ob-lilypond/ly-command-midi/stringp ()
+  (should (stringp org-babel-lilypond-midi-command)))
+(ert-deftest ob-lilypond/ly-commands/darwin ()
+  (let ((system-type 'darwin)
+	org-babel-lilypond-ly-command
+	org-babel-lilypond-pdf-command
+	org-babel-lilypond-midi-command)
+    (custom-reevaluate-setting 'org-babel-lilypond-commands)
+    (should (equal
+	     (list
+	      org-babel-lilypond-ly-command
+	      org-babel-lilypond-pdf-command
+	      org-babel-lilypond-midi-command)
+	     (list
+	      "/Applications/lilypond.app/Contents/Resources/bin/lilypond"
+	      "open"
+	      "open"))))
+  (custom-reevaluate-setting 'org-babel-lilypond-commands))
+(ert-deftest ob-lilypond/ly-commands/windows-nt ()
+  (let ((system-type 'windows-nt)
+	org-babel-lilypond-ly-command
+	org-babel-lilypond-pdf-command
+	org-babel-lilypond-midi-command)
+    (custom-reevaluate-setting 'org-babel-lilypond-commands)
+    (should (equal
+	     (list
+	      org-babel-lilypond-ly-command
+	      org-babel-lilypond-pdf-command
+	      org-babel-lilypond-midi-command)
+	     (list
+	      "lilypond"
+	      ""
+	      ""))))
+  (custom-reevaluate-setting 'org-babel-lilypond-commands))
+(ert-deftest ob-lilypond/ly-commands/other ()
+  (let ((system-type 'other)
+	org-babel-lilypond-ly-command
+	org-babel-lilypond-pdf-command
+	org-babel-lilypond-midi-command)
+    (custom-reevaluate-setting 'org-babel-lilypond-commands)
+    (should (equal
+	     (list
+	      org-babel-lilypond-ly-command
+	      org-babel-lilypond-pdf-command
+	      org-babel-lilypond-midi-command)
+	     (list
+	      "lilypond"
+	      "xdg-open"
+	      "xdg-open"))))
+  (custom-reevaluate-setting 'org-babel-lilypond-commands))
+
+(ert-deftest ob-lilypond/ly-commands/customize ()
+  (let ((system-type 'other)
+	org-babel-lilypond-ly-command
+	org-babel-lilypond-pdf-command
+	org-babel-lilypond-midi-command)
+    (custom-initialize-reset 'org-babel-lilypond-commands
+			     '(list "nonsense" "bla" "fasel"))
+    (should (equal
+	     (list
+	      org-babel-lilypond-ly-command
+	      org-babel-lilypond-pdf-command
+	      org-babel-lilypond-midi-command)
+	     (list
+	      "nonsense"
+	      "bla"
+	      "fasel"))))
+  (custom-reevaluate-setting 'org-babel-lilypond-commands))
 
 
 (ert-deftest ob-lilypond/ly-gen-png ()
 (ert-deftest ob-lilypond/ly-gen-png ()
   (should (boundp 'org-babel-lilypond-gen-png)))
   (should (boundp 'org-babel-lilypond-gen-png)))
@@ -222,7 +265,7 @@
       (write-file pdf-file))
       (write-file pdf-file))
     (should (equal
     (should (equal
              (concat
              (concat
-              (org-babel-lilypond-determine-pdf-path) " " pdf-file)
+              org-babel-lilypond-pdf-command " " pdf-file)
              (org-babel-lilypond-attempt-to-open-pdf org-babel-lilypond-file t)))
              (org-babel-lilypond-attempt-to-open-pdf org-babel-lilypond-file t)))
     (delete-file pdf-file)
     (delete-file pdf-file)
     (kill-buffer (file-name-nondirectory pdf-file))
     (kill-buffer (file-name-nondirectory pdf-file))
@@ -245,7 +288,7 @@
       (write-file midi-file))
       (write-file midi-file))
     (should (equal
     (should (equal
              (concat
              (concat
-              (org-babel-lilypond-determine-midi-path) " " midi-file)
+              org-babel-lilypond-midi-command " " midi-file)
              (org-babel-lilypond-attempt-to-play-midi org-babel-lilypond-file t)))
              (org-babel-lilypond-attempt-to-play-midi org-babel-lilypond-file t)))
     (delete-file midi-file)
     (delete-file midi-file)
     (kill-buffer (file-name-nondirectory midi-file))
     (kill-buffer (file-name-nondirectory midi-file))
@@ -254,30 +297,6 @@
              (org-babel-lilypond-attempt-to-play-midi midi-file)))
              (org-babel-lilypond-attempt-to-play-midi midi-file)))
     (setq org-babel-lilypond-play-midi-post-tangle post-tangle)))
     (setq org-babel-lilypond-play-midi-post-tangle post-tangle)))
 
 
-(ert-deftest ob-lilypond/ly-determine-ly-path ()
-  (should (equal org-babel-lilypond-OSX-ly-path
-                 (org-babel-lilypond-determine-ly-path "darwin")))
-  (should (equal org-babel-lilypond-w32-ly-path
-                 (org-babel-lilypond-determine-ly-path "windows-nt")))
-  (should (equal org-babel-lilypond-nix-ly-path
-                 (org-babel-lilypond-determine-ly-path "nix"))))
-
-(ert-deftest ob-lilypond/ly-determine-pdf-path ()
-  (should (equal org-babel-lilypond-OSX-pdf-path
-                 (org-babel-lilypond-determine-pdf-path "darwin")))
-  (should (equal org-babel-lilypond-w32-pdf-path
-                 (org-babel-lilypond-determine-pdf-path "windows-nt")))
-  (should (equal org-babel-lilypond-nix-pdf-path
-                 (org-babel-lilypond-determine-pdf-path "nix"))))
-
-(ert-deftest ob-lilypond/ly-determine-midi-path ()
-  (should (equal org-babel-lilypond-OSX-midi-path
-                 (org-babel-lilypond-determine-midi-path "darwin")))
-  (should (equal org-babel-lilypond-w32-midi-path
-                 (org-babel-lilypond-determine-midi-path "windows-nt")))
-  (should (equal org-babel-lilypond-nix-midi-path
-                 (org-babel-lilypond-determine-midi-path "nix"))))
-
 (ert-deftest ob-lilypond/ly-toggle-midi-play-toggles-flag ()
 (ert-deftest ob-lilypond/ly-toggle-midi-play-toggles-flag ()
   (if org-babel-lilypond-play-midi-post-tangle
   (if org-babel-lilypond-play-midi-post-tangle
       (progn
       (progn