-;;;;
-;;;; lilypond-mode.el --- Major mode for editing GNU LilyPond music scores
-;;;;
-;;;; source file of the GNU LilyPond music typesetter
+;;;; lilypond-mode.el -- Major mode for editing GNU LilyPond music scores
+;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
-;;;;
+;;;; Copyright (C) 1999--2011 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Changed 2001--2003 Heikki Junes <heikki.junes@hut.fi>
;;;; * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001)
;;;; * Keyboard shortcuts (12th Sep 2001)
;;;; * Inserting tags, inspired on sgml-mode (11th Oct 2001)
;;;; * Autocompletion & Info (23rd Nov 2002)
+;;;;
+;;;; LilyPond is free software: you can redistribute it and/or modify
+;;;; it under the terms of the GNU General Public License as published by
+;;;; the Free Software Foundation, either version 3 of the License, or
+;;;; (at your option) any later version.
+;;;;
+;;;; LilyPond is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
;;; Inspired on auctex
"File prefix for commands on buffer or region.")
(defvar LilyPond-master-file nil
- "Master file that Lilypond will be run on.")
+ "Master file that LilyPond will be run on.")
;; FIXME: find ``\score'' in buffers / make settable?
(defun LilyPond-get-master-file ()
(defun LilyPond-running ()
"Check the currently running LilyPond compiling jobs."
- (let ((process-names (list "lilypond" "tex" "2dvi" "2ps" "2midi"
+ (let ((process-names (list "lilypond" "tex" "2ps" "2midi"
"book" "latex"))
(running nil))
(while (setq process-name (pop process-names))
:group 'LilyPond
:type 'string)
-(defcustom LilyPond-dvi-command "xdvi"
- "Command used to display DVI files."
-
- :group 'LilyPond
- :type 'string)
-
(defcustom LilyPond-ps-command "gv --watch"
"Command used to display PS files."
;; could then be mapped to define-key and menu.
`(
("LilyPond" . (,(concat LilyPond-lilypond-command " %s") "%s" "%l" "View"))
- ("TeX" . ("tex '\\nonstopmode\\input %t'" "%t" "%d" "ViewDVI"))
- ("2Dvi" . (,(concat LilyPond-lilypond-command " -b tex %s") "%s" "%d" "LaTeX"))
("2PS" . (,(concat LilyPond-lilypond-command " -f ps %s") "%s" "%p" "ViewPS"))
("2Gnome" . (,(concat LilyPond-lilypond-command " -b gnome %s")))
;; refreshes when kicked USR1
("View" . (,(concat LilyPond-pdf-command " %f")))
("ViewPDF" . (,(concat LilyPond-pdf-command " %f")))
- ("ViewDVI" . (,(concat LilyPond-dvi-command " %d")))
("ViewPS" . (,(concat LilyPond-ps-command " %p")))
;; The following are refreshed in LilyPond-command:
(LilyPond-command (LilyPond-command-menu "LilyPond") 'LilyPond-get-master-file)
)
-(defun LilyPond-command-formatdvi ()
- "Format the dvi output of the current document."
- (interactive)
- (LilyPond-command (LilyPond-command-menu "2Dvi") 'LilyPond-get-master-file)
-)
-
(defun LilyPond-command-formatps ()
"Format the ps output of the current document."
(interactive)
(base (cadr l)))
(LilyPond-command-expand
(concat (substring string 0 b)
- dir
- base
+ (shell-quote-argument (concat dir base))
(let ((entry (assoc (substring string b e)
LilyPond-expand-alist)))
(if entry (cdr entry) ""))
(while (LilyPond-running)
(message "Starts playing midi once it is built.")
(sit-for 0 100))))))
- (if (member name (list "LilyPond" "TeX" "2Midi" "2PS" "2Dvi"
+ (if (member name (list "LilyPond" "TeX" "2Midi" "2PS"
"Book" "LaTeX"))
(if (setq jobs (LilyPond-running))
(progn
(define-key LilyPond-mode-map "\C-c\C-k" 'LilyPond-kill-jobs)
(define-key LilyPond-mode-map "\C-c\C-c" 'LilyPond-command-master)
(define-key LilyPond-mode-map "\C-cm" 'LilyPond-command-formatmidi)
- (define-key LilyPond-mode-map "\C-c\C-d" 'LilyPond-command-formatdvi)
(define-key LilyPond-mode-map "\C-c\C-f" 'LilyPond-command-formatps)
(define-key LilyPond-mode-map "\C-c\C-g" 'LilyPond-command-formatgnome)
(define-key LilyPond-mode-map "\C-c\C-s" 'LilyPond-command-view)
(define-key LilyPond-mode-map "\C-cb" 'LilyPond-what-beat)
(define-key LilyPond-mode-map "\C-cf" 'font-lock-fontify-buffer)
(define-key LilyPond-mode-map "\C-ci" 'LilyPond-insert-tag-current)
- ;; the following will should be overriden by Lilypond Quick Insert Mode
+ ;; the following will should be overridden by LilyPond Quick Insert Mode
(define-key LilyPond-mode-map "\C-cq" 'LilyPond-quick-insert-mode)
(define-key LilyPond-mode-map "\C-c;" 'LilyPond-comment-region)
(define-key LilyPond-mode-map ")" 'LilyPond-electric-close-paren)
(define-key LilyPond-mode-map "|" 'LilyPond-electric-bar)
(if (string-match "XEmacs\\|Lucid" emacs-version)
(define-key LilyPond-mode-map [iso-left-tab] 'LilyPond-autocompletion)
- (define-key LilyPond-mode-map [iso-lefttab] 'LilyPond-autocompletion))
+ (define-key LilyPond-mode-map [(shift iso-lefttab)] 'LilyPond-autocompletion))
(define-key LilyPond-mode-map "\C-c\t" 'LilyPond-info-index-search)
)
;;; Some kind of mapping which includes :keys might be more elegant
;;; Put keys to LilyPond-command-alist and fetch them from there somehow.
'([ "LilyPond" LilyPond-command-lilypond t])
- '([ "TeX" (LilyPond-command (LilyPond-command-menu "TeX") 'LilyPond-get-master-file) ])
- '([ "2Dvi" LilyPond-command-formatdvi t])
'([ "2PS" LilyPond-command-formatps t])
'([ "2Midi" LilyPond-command-formatmidi t])
'([ "Book" (LilyPond-command (LilyPond-command-menu "Book") 'LilyPond-get-master-file) ])
(defun LilyPond-menu-keywords ()
"Make Insert Tag menu.
-The Insert Tag -menu is splitted into parts if it is long enough."
+The Insert Tag -menu is split into parts if it is long enough."
(let ((li (mapcar 'LilyPond-menu-keywords-item LilyPond-menu-keywords))
(w (round (sqrt (length LilyPond-menu-keywords))))
- (splitted '())
+ (split '())
(imin 0) imax lw rw)
(while (< imin (length LilyPond-menu-keywords))
(setq imax (- (min (+ imin w) (length LilyPond-menu-keywords)) 1))
(setq lw (nth imin LilyPond-menu-keywords))
(setq rw (nth imax LilyPond-menu-keywords))
- (add-to-list 'splitted
+ (add-to-list 'split
(let ((l (list (concat (substring lw 0 (min 7 (length lw)))
" ... "
(substring rw 0 (min 7 (length rw)))))))
(add-to-list 'l (nth imin li))
(setq imin (1+ imin)))
(reverse l))))
- (if (> (length LilyPond-menu-keywords) 12) (reverse splitted) li)))
+ (if (> (length LilyPond-menu-keywords) 12) (reverse split) li)))
;;; LilyPond-mode-menu should not be interactive, via "M-x LilyPond-<Tab>"
(easy-menu-define LilyPond-mode-menu
\\{LilyPond-mode-map}
VARIABLES
-LilyPond-command-alist\t\talist from name to command
-LilyPond-dvi-command\t\tcommand to display dvi files -- bit superfluous"
+LilyPond-command-alist\t\talist from name to command"
(interactive)
;; set up local variables
(kill-all-local-variables)
;; Use Command on Region even for inactive mark (region).
(if (string-match "XEmacs\\|Lucid" emacs-version)
- (setq zmacs-regions nil)
+ (progn
+ (setq zmacs-regions nil)
+ (make-local-hook 'post-command-hook)) ; XEmacs requires
(setq mark-even-if-inactive t))
;; Context dependent syntax tables in LilyPond-mode
- (make-local-hook 'post-command-hook) ; XEmacs requires
(add-hook 'post-command-hook 'LilyPond-mode-context-set-syntax-table nil t)
;; Turn on paren-mode buffer-locally, i.e., in LilyPond-mode
(defun LilyPond-guile ()
(interactive)
(require 'ilisp)
- (guile "lilyguile" (LilyPond-command-expand (cadr (assoc "2Dvi" LilyPond-command-alist))
+ (guile "lilyguile" (LilyPond-command-expand (cadr (assoc "LilyPond" LilyPond-command-alist))
(funcall 'LilyPond-get-master-file)))
(comint-default-send (ilisp-process) "(define-module (*anonymous-ly-0*))")
(comint-default-send (ilisp-process) "(set! %load-path (cons \"/usr/share/ilisp/\" %load-path))")