X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lilypond-indent.el;h=4626646d06a7139dd40c96cb843cdf71dc8ceae9;hb=bb338ab34126b81c8561710706ccfa27bf3650e4;hp=49c6b205cd1ca722b1aa8b930373c9ba6fb7587d;hpb=3d04794b24abfd23528564bc63383662759aba80;p=lilypond.git diff --git a/lilypond-indent.el b/lilypond-indent.el index 49c6b205cd..4626646d06 100644 --- a/lilypond-indent.el +++ b/lilypond-indent.el @@ -1,8 +1,9 @@ ;;; lilypond-indent.el --- Auto-indentation for lilypond code ;;; ;;; Heikki Junes -;;; * redefine Emacs' show-paren-function and XEmacs' paren-highlight +;;; * ond-char paren matching is handled by context dependent syntax tables ;;; * match two-char slurs '\( ... \)' and '\[ ... \]' separately. +;;; * adopt Emacs' f90-comment-region ;;; Chris Jackson ;;; some code is taken from ESS (Emacs Speaks Statistics) S-mode by A.J.Rossini @@ -12,9 +13,6 @@ ;;; TODO: ;;; * currently, in bracket matching one may need a non-bracket ;;; chararacter between the bracket characters, like ( ( ) ) -;;; * in syntax-highlighting slurs are not always highlighted the right way -;;; e.g. opening slurs are found found better in "#( ( ) ( ) )" than -;;; opening slurs (defcustom LilyPond-indent-level 4 "*Indentation of lilypond statements with respect to containing block.") @@ -50,6 +48,28 @@ Compares with other text in same context.") (defcustom LilyPond-fancy-comments t "*Non-nil means distiguish between %, %%, and %%% for indentation.") +(defcustom LilyPond-comment-region "%%$" + "*String inserted by \\[LilyPond-comment-region]\ + at start of each line in region.") + +(defun LilyPond-comment-region (beg-region end-region) + "Comment/uncomment every line in the region. +Insert LilyPond-comment-region at the beginning of every line in the region +or, if already present, remove it." + (interactive "*r") + (let ((end (make-marker))) + (set-marker end end-region) + (goto-char beg-region) + (beginning-of-line) + (if (looking-at (regexp-quote LilyPond-comment-region)) + (delete-region (point) (match-end 0)) + (insert LilyPond-comment-region)) + (while (and (zerop (forward-line 1)) + (< (point) (marker-position end))) + (if (looking-at (regexp-quote LilyPond-comment-region)) + (delete-region (point) (match-end 0)) + (insert LilyPond-comment-region))) + (set-marker end nil))) (defun LilyPond-calculate-indent () "Return appropriate indentation for current line as lilypond code. @@ -128,7 +148,6 @@ Returns nil if line starts inside a string" (current-indentation))))))))) - (defun LilyPond-indent-line () "Indent current line as lilypond code. Return the amount the indentation changed by." @@ -342,7 +361,8 @@ slur-paren-p defaults to nil. ;; match concurrent one-char opening and closing slurs (if (and (eq dir 1) (not (sequencep bracket-type)) - (eq (char-syntax (char-after oldpos)) ?\()) + (eq (char-syntax (char-after oldpos)) ?\() + (not (eq (char-after oldpos) ?<))) ;; anyway do not count open slur, since already level = -1 (progn (forward-char 1) (if (eq (following-char) @@ -540,27 +560,7 @@ builtin 'blink-matching-open' is not used. In syntax table, see (LilyPond-blink-matching-paren) (forward-char 1)))))) -;;; REDEFINITIONS -(defun scan-sexps (pos dir) +(defun LilyPond-scan-sexps (pos dir) "This function is redefined to be used in Emacs' show-paren-function and in XEmacs' paren-highlight." (LilyPond-blink-matching-paren dir)) - -;; Emacs and XEmacs have slightly different names for parenthesis highlighting. -(if (not (string-match "XEmacs\\|Lucid" emacs-version)) - (progn - (fset 'old-show-paren-function (symbol-function 'show-paren-function)) - (defun show-paren-function () - "Highlights the matching slur if cursor is moved before opening or -after closing slur. In this redefinition strings and comments are skipped." - (if (not (LilyPond-inside-string-or-comment-p)) - (old-show-paren-function)))) - (progn - ;; NOTE: paren-set-mode must be set before paren-highlight is redefined - (paren-set-mode 'paren) - (fset 'old-paren-highlight (symbol-function 'paren-highlight)) - (defun paren-highlight () - "Highlights the matching slur if cursor is moved before opening or -after closing slur. In this redefinition strings and comments are skipped." - (if (not (LilyPond-inside-string-or-comment-p)) - (old-paren-highlight)))))