X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=semi-def.el;h=4534e647fa941aa8ecdbe7ad1f89aea43aa95002;hb=8c5add72e009f468075479d9197ae72a76fd3a5a;hp=1c0ee4e847caa51f467cf0d30c9d4e55f4e94bd3;hpb=d8c4ad3f0350b84102825dbd63cb800edd627a25;p=elisp%2Fsemi.git diff --git a/semi-def.el b/semi-def.el index 1c0ee4e..4534e64 100644 --- a/semi-def.el +++ b/semi-def.el @@ -26,7 +26,10 @@ (require 'emu) -(defconst mime-module-version '("SEMI" "Nadachi" 1 3 0) +(eval-when-compile (require 'cl)) + + +(defconst mime-module-version '("SEMI" "Itoigawa" 1 4 0) "Implementation name, version name and numbers of MIME-kernel package.") (autoload 'mule-caesar-region "mule-caesar" @@ -121,6 +124,43 @@ )))) +;;; @ menu +;;; + +(if window-system + (if (featurep 'xemacs) + (defun select-menu-alist (title menu-alist) + (let (ret) + (popup-menu + (list* title + "---" + (mapcar (function + (lambda (cell) + (vector (car cell) + `(progn + (setq ret ',(cdr cell)) + (throw 'exit nil) + ) + t) + )) + menu-alist) + )) + (recursive-edit) + ret)) + (defun select-menu-alist (title menu-alist) + (x-popup-menu + (list '(1 1) (selected-window)) + (list title (cons title menu-alist)) + )) + ) + (defun select-menu-alist (title menu-alist) + (cdr + (assoc (completing-read (concat title " : ") menu-alist) + menu-alist) + )) + ) + + ;;; @ PGP ;;; @@ -255,6 +295,41 @@ it is used as hook to set." )) +(defvar mime-condition-type-alist + '((preview . mime-preview-condition) + (action . mime-acting-condition))) + +(defvar mime-condition-mode-alist + '((with-default . ctree-set-calist-with-default) + (t . ctree-set-calist-strictly))) + +(defun mime-add-condition (target-type condition &optional mode file) + "Add CONDITION to database specified by TARGET-TYPE. +TARGET-TYPE must be 'preview or 'action. +If optional argument MODE is 'strict or nil (omitted), CONDITION is +added strictly. +If optional argument MODE is 'with-default, CONDITION is added with +default rule. +If optional argument FILE is specified, it is loaded when CONDITION is +activate." + (let ((sym (cdr (assq target-type mime-condition-type-alist)))) + (if sym + (let ((func (cdr (or (assq mode mime-condition-mode-alist) + (assq t mime-condition-mode-alist))))) + (if (fboundp func) + (progn + (funcall func sym condition) + (if file + (let ((method (cdr (assq 'method condition)))) + (autoload method file) + )) + ) + (error "Function for mode `%s' is not found." mode) + )) + (error "Variable for target-type `%s' is not found." target-type) + ))) + + ;;; @ end ;;;