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/util/udev-ecb.el | 229 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 emacs.d/nxhtml/util/udev-ecb.el (limited to 'emacs.d/nxhtml/util/udev-ecb.el') diff --git a/emacs.d/nxhtml/util/udev-ecb.el b/emacs.d/nxhtml/util/udev-ecb.el new file mode 100644 index 0000000..be3b35f --- /dev/null +++ b/emacs.d/nxhtml/util/udev-ecb.el @@ -0,0 +1,229 @@ +;;; udev-ecb.el --- Get ECB sources and set it up +;; +;; Author: Lennart Borgman (lennart O borgman A gmail O com) +;; Created: 2008-08-25T04:02:37+0200 Mon +(defconst udev-ecb:version "0.2");; Version: +;; Last-Updated: +;; URL: +;; Keywords: +;; Compatibility: +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; 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: + + +(eval-when-compile (require 'udev nil t)) + +(defgroup udev-ecb nil + "Customization group for udev-ecb." + :group 'nxhtml) + +(defcustom udev-ecb-dir "~/.emacs.d/udev/ecb-cvs/" + "Directory where to put CVS ECB sources." + :type 'directory + :group 'udev-ecb) + +(defun udev-ecb-cvs-dir () + "Return cvs root directory." + (file-name-as-directory (expand-file-name "ecb" udev-ecb-dir))) + +(defvar udev-ecb-miss-cedet nil) + +(defun udev-ecb-load-ecb () + "Load fetched ECB." + (setq udev-ecb-miss-cedet nil) + (unless (featurep 'ecb) + (add-to-list 'load-path (udev-ecb-cvs-dir)) + (let ((msg nil)) + (unless (or msg (featurep 'cedet)) (setq msg "CEDET is not loaded")) + (unless (or msg (locate-library "semantic")) (setq msg "can't find CEDET Semantic")) + (unless (or msg (locate-library "eieio")) (setq msg "can't find CEDET eieio")) + (if msg + (progn + (setq udev-ecb-miss-cedet (format "Can't load ECB because %s." msg)) + (ourcomments-warning udev-ecb-miss-cedet)) + (require 'ecb nil t))))) + +(defcustom udev-ecb-load-ecb nil + "To load or not to load ECB..." + :type 'boolean + :require 'udev-ecb + :set (lambda (sym val) + (set-default sym val) + (when val + (udev-ecb-load-ecb))) + ;; ecb-activate, ecb-customize-most-important to menu + :set-after '(udev-cedet-load-cedet) + :group 'udev-ecb) + +(defvar udev-ecb-steps + '(udev-ecb-fetch + udev-ecb-fix-bad-files + udev-ecb-fetch-diff + udev-ecb-check-diff + udev-ecb-install + )) + +(defun udev-ecb-buffer-name (mode) + "Return a name for current compilation buffer ignoring MODE." + (udev-buffer-name "*Updating ECB %s*" udev-ecb-update-buffer mode)) + +(defvar udev-ecb-update-buffer nil) + +(defun udev-ecb-has-cedet () + (cond + ((not (and (locate-library "semantic") + (locate-library "eieio"))) + (message (propertize "CEDET must be installed and loaded first" + 'face 'secondary-selection)) + nil) + ((not (featurep 'cedet)) + (message (propertize "CEDET must be loaded first" + 'face 'secondary-selection)) + nil) + (t t))) + +(defun udev-ecb-setup-when-finished (log-buffer) + (require 'cus-edit) + (let ((inhibit-read-only t)) + (with-current-buffer log-buffer + (widen) + (goto-char (point-max)) + (insert "\n\nYou must restart Emacs to load ECB properly.\n") + (let ((load-ecb-saved-value (get 'udev-ecb-load-ecb 'saved-value)) + (here (point)) + ) + (if load-ecb-saved-value + (insert "You have setup to load ECB the next time you start Emacs.\n\n") + (insert (propertize "Warning:" 'face 'compilation-warning) + " You have not setup to load ECB the next time you start Emacs.\n\n")) + (insert-button " Setup " + 'face 'custom-button + 'action (lambda (btn) + (interactive) + (customize-group-other-window 'udev-ecb))) + (insert " Setup to load ECB from fetched sources when starting Emacs."))))) + +;;;###autoload +(defun udev-ecb-update () + "Fetch and install ECB from the devel sources. +To determine where to store the sources see `udev-ecb-dir'. +For how to start ECB see `udev-ecb-load-ecb'." + (interactive) + (when (udev-ecb-has-cedet) + (let* ((has-it (file-exists-p (udev-ecb-cvs-dir))) + (prompt (if has-it + "Do you want to update ECB from devel sources? " + "Do you want to install ECB from devel sources? "))) + (when (y-or-n-p prompt) + (setq udev-ecb-update-buffer (get-buffer-create "*Update ECB*")) + (udev-call-first-step udev-ecb-update-buffer udev-ecb-steps + "Starting updating ECB from development sources" + 'udev-ecb-setup-when-finished))))) + +;;;###autoload +(defun udev-ecb-customize-startup () + "Customize ECB dev nXhtml startup group." + (interactive) + (if (file-exists-p (udev-ecb-cvs-dir)) + (customize-group-other-window 'udev-ecb) + (message (propertize "You must fetch ECB from nXhtml first" + 'face 'secondary-selection)))) + +(defun udev-ecb-fetch (log-buffer) + "Fetch ECB sources (asynchronously)." + (let ((default-directory (file-name-as-directory udev-ecb-dir))) + (unless (file-directory-p default-directory) + (make-directory default-directory)) + (with-current-buffer + (compilation-start + "cvs -z3 -d:pserver:anonymous@ecb.cvs.sourceforge.net:/cvsroot/ecb co -P ecb" + 'compilation-mode + 'udev-ecb-buffer-name) + (current-buffer)))) + +;;(udev-ecb-fix-bad-files nil) +(defun udev-ecb-fix-bad-files (log-buffer) + "Change files that can not be compiled." + (let* ((bad-file (expand-file-name "ecb/ecb-advice-test.el" udev-ecb-dir)) + (bad-file-buffer (find-buffer-visiting bad-file)) + (this-log-buf (get-buffer-create "*Fix bad ECB files*")) + (fixed-it nil)) + (when (file-exists-p bad-file) + (with-current-buffer (find-file-noselect bad-file) + (save-restriction + (widen) + (goto-char (point-min)) + (save-match-data + (while (re-search-forward "\r" nil t) + (setq fixed-it t) + (replace-match "")))) + (basic-save-buffer) + (with-current-buffer this-log-buf + (erase-buffer) + (if fixed-it + (insert "Fixed " bad-file "\n") + (insert "The file " bad-file " was already ok\n"))) + (unless bad-file-buffer (kill-buffer (current-buffer))))) + this-log-buf)) + +(defun udev-ecb-fetch-diff (log-buffer) + "Fetch diff between local ECB sources and repository." + (udev-fetch-cvs-diff (udev-ecb-cvs-dir) 'udev-ecb-buffer-name)) + +(defun udev-ecb-check-diff (log-buffer) + "Check cvs diff output for merge conflicts." + (udev-check-cvs-diff (expand-file-name "your-patches.diff" + (udev-ecb-cvs-dir)) + udev-ecb-update-buffer)) + +(defun udev-ecb-install (log-buffer) + "Install the ECB sources just fetched. +Note that they will not be installed in current Emacs session." + (udev-batch-compile "-l ecb-batch-compile.el" + udev-this-dir + 'udev-ecb-buffer-name)) + +;;(udev-ecb-install-help (get-buffer-create "*temp online-help*")) +(defun udev-ecb-install-help (log-buffer) + (let ((trc-buf (get-buffer-create "*temp online-help*"))) + (with-current-buffer trc-buf + (setq default-directory (udev-ecb-cvs-dir)) + (w32shell-with-shell "msys" (shell-command "make online-help&" trc-buf))))) + +(provide 'udev-ecb) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; udev-ecb.el ends here -- cgit v1.2.3-54-g00ecf