فهرست منبع

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 10 سال پیش
والد
کامیت
64821bd967
2فایلهای تغییر یافته به همراه134 افزوده شده و 131 حذف شده
  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,
 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
   "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)))
     (org-babel-eval
      (concat
-      (org-babel-lilypond-determine-ly-path)
+      org-babel-lilypond-ly-command
       " -dbackend=eps "
       "-dno-gs-load-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"))
           (org-babel-lilypond-temp-file (org-babel-lilypond-switch-extension
                          (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*")
       (erase-buffer)
       (org-babel-lilypond-compile-lilyfile org-babel-lilypond-temp-file)
       (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)
   "Compile lilypond file and check for compile errors
 FILE-NAME is full path to lilypond (.ly) file"
   (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-3 "*lilypond*")           ;buffer
 	(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
 nil as file-name since it is unused in this context"
   (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)
   "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")))
       (if (file-exists-p pdf-file)
           (let ((cmd-string
-                 (concat (org-babel-lilypond-determine-pdf-path) " " pdf-file)))
+                 (concat org-babel-lilypond-pdf-command " " pdf-file)))
             (if test
                 cmd-string
 	      (start-process
 	       "\"Audition pdf\""
 	       "*lilypond*"
-	       (org-babel-lilypond-determine-pdf-path)
+	       org-babel-lilypond-pdf-command
 	       pdf-file)))
 	(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")))
       (if (file-exists-p midi-file)
           (let ((cmd-string
-                 (concat (org-babel-lilypond-determine-midi-path) " " midi-file)))
+                 (concat org-babel-lilypond-midi-command " " midi-file)))
             (if test
                 cmd-string
               (start-process
                "\"Audition midi\""
                "*lilypond*"
-               (org-babel-lilypond-determine-midi-path)
+               org-babel-lilypond-midi-command
                midi-file)))
         (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 ()
   "Toggle whether midi will be played following a successful compilation."
   (interactive)

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

@@ -52,7 +52,7 @@
 
 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
   (should (equal
-           `(,(org-babel-lilypond-determine-ly-path)    ;program
+           `(,org-babel-lilypond-ly-command    ;program
              nil                        ;infile
              "*lilypond*"               ;buffer
              t                          ;display
@@ -74,41 +74,84 @@
 (ert-deftest ob-lilypond/ly-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 ()
   (should (boundp 'org-babel-lilypond-gen-png)))
@@ -222,7 +265,7 @@
       (write-file pdf-file))
     (should (equal
              (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)))
     (delete-file pdf-file)
     (kill-buffer (file-name-nondirectory pdf-file))
@@ -245,7 +288,7 @@
       (write-file midi-file))
     (should (equal
              (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)))
     (delete-file midi-file)
     (kill-buffer (file-name-nondirectory midi-file))
@@ -254,30 +297,6 @@
              (org-babel-lilypond-attempt-to-play-midi midi-file)))
     (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 ()
   (if org-babel-lilypond-play-midi-post-tangle
       (progn