summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/related/flymu.el
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2011-03-07 09:04:49 +0100
committerGravatar Tom Willemsen2011-03-07 09:04:49 +0100
commit94d2fc1815a919734353c942f224db1de4b4fcb8 (patch)
tree4168e816ead132bfa3510e272427837c3895f5e2 /emacs.d/nxhtml/related/flymu.el
parentd0e7674fdb1de12c8de202d4028a5d7ed3669a6e (diff)
downloaddotfiles-94d2fc1815a919734353c942f224db1de4b4fcb8.tar.gz
dotfiles-94d2fc1815a919734353c942f224db1de4b4fcb8.zip
Django, org
* Added nxhtml, mostly for django support. * Changed some org settings.
Diffstat (limited to 'emacs.d/nxhtml/related/flymu.el')
-rw-r--r--emacs.d/nxhtml/related/flymu.el157
1 files changed, 157 insertions, 0 deletions
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