From 94d2fc1815a919734353c942f224db1de4b4fcb8 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Mon, 7 Mar 2011 09:04:49 +0100 Subject: Django, org * Added nxhtml, mostly for django support. * Changed some org settings. --- emacs.d/nxhtml/related/flymu.el | 157 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 emacs.d/nxhtml/related/flymu.el (limited to 'emacs.d/nxhtml/related/flymu.el') diff --git a/emacs.d/nxhtml/related/flymu.el b/emacs.d/nxhtml/related/flymu.el new file mode 100644 index 0000000..6b3a552 --- /dev/null +++ b/emacs.d/nxhtml/related/flymu.el @@ -0,0 +1,157 @@ +;;; flymu.el --- Flymake for mumamo-mode +;; +;; Author: Lennart Borgman (lennart O borgman A gmail O com) +;; Created: Sun Dec 02 14:52:32 2007 +;; Version: 0.1 +;; Last-Updated: +;; URL: +;; Keywords: +;; Compatibility: +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Flymake syntax checks for mumamo chunks. +;; +;; Not ready yet!!! +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change log: +;; +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; This program 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 2, or +;; (at your option) any later version. +;; +;; This program 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 this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(require 'flymake) + +;;(flymu-make-major-mode-alist) +(defun flymu-make-major-mode-alist () + "Grab values from `flymake-allowed-file-name-masks'. +We need a list of major modes and the corresponding init and +cleanup functions for flymake. This functions creates such a list +from flymakes dito list for file names." + (let ((allowed nil)) + (save-match-data + (dolist (regexp-init flymake-allowed-file-name-masks) + (let* ((regexp (car regexp-init)) + (init (cdr regexp-init)) + ;; Make it as simple as possible. First see if the same + ;; regexp is used: + (mode (let ((m (cdr (assoc regexp auto-mode-alist)))) + ;; Don't use this if it is complicated: + (when (commandp m) m))) + (ext regexp)) + (unless mode + ;; Try to make a simple file name, this could be made + ;; better but I do not know if that would be meaningful: + (setq ext (replace-regexp-in-string "\\\\\\." "." ext)) + (setq ext (replace-regexp-in-string "\\\\'" "" ext)) + (setq ext (replace-regexp-in-string "[\\$?+*]" "" ext)) + ;; Next compare the filename against the entries in + ;; auto-mode-alist. The code is from `set-auto-mode'. + (let ((name ext) + (done nil)) + (while name + ;; Find first matching alist entry. + (setq mode + (if (memq system-type '(vax-vms windows-nt cygwin)) + ;; System is case-insensitive. + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; System is case-sensitive. + (or + ;; First match case-sensitively. + (let ((case-fold-search nil)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; Fallback to case-insensitive match. + (and auto-mode-case-fold + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)))))) + (if (and mode + (consp mode) + (cadr mode)) + (setq name (substring name 0 (match-beginning 0))) + (setq name))))) + (when (and mode + ;; nxml-mode's do not need flymake: + (let ((major-mode mode)) + (not (derived-mode-p 'nxml-mode)))) + (let ((rec (append (list mode) init))) + (when (= (length rec) 2) + (setq rec (append rec (list nil)))) + (add-to-list 'allowed rec)))))) + allowed)) + +(defcustom flymu-allowed-major-modes (flymu-make-major-mode-alist) + "Major modes syntax checking is allowed for." + :type '(repeat (list (function :tag "Major mode") + (function :tag "Init function") + (choice (const :tag "No cleanup function" nil) + (function :tag "Cleanup function")))) + :set-after '(flymake-allowed-file-name-masks) + :group 'flymu) + +(defvar flymu-mumamo-chunk nil) +(make-variable-buffer-local 'flymu-mumamo-chunk) + + +;; Fix-me: What to check? When? Make flymu-mumamo-chunk a function +;; instead? Mark chunks for checking - let mumamo do that? Flymake +;; should be able to mark a chunk to, even if it is not a whole +;; line. What about line numbers? + +;; Advice these functions: +(defadvice flymake-get-file-name-mode-and-masks (around + flymu-ad-flymake-get-file-name-mode-and-masks + (file-name)) + "Make flymake init file selection according to mode." + (if flymu-mumamo-chunk + (let ((major (overlay-get ovl 'mumamo-major-mode)) + (rec (assq major flymu-allowed-major-modes))) + (when rec + (setq ad-return-value (cdr rec)))) + ad-do-it)) +(ad-activate 'flymake-get-file-name-mode-and-masks) + +;;(defun flymake-save-buffer-in-file (file-name) +(defadvice flymake-save-buffer-in-file (around + flymu-ad-flymake-save-buffer-in-file + (file-name)) + (if flymu-mumamo-chunk + (let ((min (overlay-start flymu-mumamo-chunk)) + (max (overlay-end flymu-mumamo-chunk))) + (make-directory (file-name-directory file-name) 1) + (write-region min max file-name nil 566) + (flymake-log 3 "saved chunk %s:%s-%s in file %s" (buffer-name) min ma file-name)) + ad-do-it)) + +(provide 'flymu) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; flymu.el ends here -- cgit v1.2.3-54-g00ecf