diff options
Diffstat (limited to 'emacs.d/nxhtml/util/ourcomments-widgets.el')
-rw-r--r-- | emacs.d/nxhtml/util/ourcomments-widgets.el | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/emacs.d/nxhtml/util/ourcomments-widgets.el b/emacs.d/nxhtml/util/ourcomments-widgets.el new file mode 100644 index 0000000..359a0b1 --- /dev/null +++ b/emacs.d/nxhtml/util/ourcomments-widgets.el @@ -0,0 +1,141 @@ +;;; ourcomments-widgets.el --- widgets for custom etc +;; +;; Author: Lennart Borgman (lennart O borgman A gmail O com) +;; Created: 2009-10-13 Tue +;; 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 3, 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 'mumamo nil t)) + +;;;###autoload (autoload 'command "ourcomments-widgets") +(define-widget 'command 'restricted-sexp + "A command function." + :complete-function (lambda () + (interactive) + (lisp-complete-symbol 'commandp)) + :prompt-value 'widget-field-prompt-value + :prompt-internal 'widget-symbol-prompt-internal + :prompt-match 'commandp + :prompt-history 'widget-command-prompt-value-history + :action 'widget-field-action + :match-alternatives '(commandp) + :validate (lambda (widget) + (unless (commandp (widget-value widget)) + (widget-put widget :error (format "Invalid command: %S" + (widget-value widget))) + widget)) + :value 'ignore + :tag "Command") + + +;;;###autoload +(defun major-or-multi-majorp (value) + "Return t if VALUE is a major or multi major mode function." + (or (and (fboundp 'mumamo-multi-major-modep) + (fboundp (mumamo-multi-major-modep value))) + (major-modep value))) + +;; Fix-me: This might in the future be defined in Emacs. +;;;###autoload +(defun major-modep (value) + "Return t if VALUE is a major mode function." + (let ((sym-name (symbol-name value))) + ;; Do some reasonable test to find out if it is a major mode. + ;; Load autoloaded mode functions. + ;; + ;; Fix-me: Maybe test for minor modes? How was that done? + (when (and (fboundp value) + (commandp value) + (not (memq value '(flyspell-mode + isearch-mode + savehist-mode + ))) + (< 5 (length sym-name)) + (string= "-mode" (substring sym-name (- (length sym-name) 5))) + (if (and (listp (symbol-function value)) + (eq 'autoload (car (symbol-function value)))) + (progn + (message "loading ") + (load (cadr (symbol-function value)) t t)) + t) + (or (memq value + ;; Fix-me: Complement this table of known major modes: + '(fundamental-mode + xml-mode + nxml-mode + nxhtml-mode + css-mode + javascript-mode + espresso-mode + php-mode + )) + (and (intern-soft (concat sym-name "-hook")) + ;; This fits `define-derived-mode' + (get (intern-soft (concat sym-name "-hook")) 'variable-documentation)) + (progn (message "Not a major mode: %s" value) + ;;(sit-for 4) + nil) + )) + t))) + +;;;###autoload (autoload 'major-mode-function "ourcomments-widgets") +(define-widget 'major-mode-function 'function + "A major mode lisp function." + :complete-function (lambda () + (interactive) + (lisp-complete-symbol 'major-or-multi-majorp)) + :prompt-match 'major-or-multi-majorp + :prompt-history 'widget-function-prompt-value-history + :match-alternatives '(major-or-multi-majorp) + :validate (lambda (widget) + (unless (major-or-multi-majorp (widget-value widget)) + (widget-put widget :error (format "Invalid function: %S" + (widget-value widget))) + widget)) + :value 'fundamental-mode + :tag "Major mode function") + + + +(provide 'ourcomments-widgets) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ourcomments-widgets.el ends here |