summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/util/ourcomments-widgets.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/nxhtml/util/ourcomments-widgets.el')
-rw-r--r--emacs.d/nxhtml/util/ourcomments-widgets.el141
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