Mercurial > emacs
changeset 36018:b42e0ad4cd7b
(widget-convert-text): Respect personality for
Emacspeak.
(insert/delete-button): New widget type.
(widget-insert/delete-button-action, widget-list-item-insert)
(widget-list-item-delete): New functions.
(insert-button): Change :tag, :help-echo.
(delete-button, widget-delete-button-action): Deleted.
(editable-list): Change :entry-format.
(widget-editable-list-entry-create): Use ins/del.
Process %-, not %i, %d.
author | Dave Love <fx@gnu.org> |
---|---|
date | Sat, 10 Feb 2001 00:56:28 +0000 |
parents | 4c3b10de9033 |
children | b45dd6332475 |
files | lisp/wid-edit.el |
diffstat | 1 files changed, 60 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/wid-edit.el Sat Feb 10 00:10:37 2001 +0000 +++ b/lisp/wid-edit.el Sat Feb 10 00:56:28 2001 +0000 @@ -757,13 +757,17 @@ Optional ARGS are extra keyword arguments for TYPE." (let ((widget (apply 'widget-convert type :delete 'widget-leave-text args)) (from (copy-marker from)) - (to (copy-marker to))) + (to (copy-marker to)) + (personality (get-text-property from 'personality))) (set-marker-insertion-type from t) (set-marker-insertion-type to nil) (widget-put widget :from from) (widget-put widget :to to) (when button-from (widget-specify-button widget button-from button-to)) + ;; W3 provides advice for this for Emacspeak's benefit. + (if personality + (put-text-property from to 'personality personality)) widget)) (defun widget-convert-button (type from to &rest args) @@ -2373,12 +2377,51 @@ ;; Pass notification to parent. (widget-apply widget :notify child event)) +;;; The `insert/delete-button' Widget. + +(define-widget 'insert/delete-button 'push-button + "An insert/delete item button for the `editable-list' widget." + :create (lambda (widget) + (let* ((map (make-sparse-keymap)) + (parent (widget-get widget :keymap))) + (if parent + (set-keymap-parent map parent)) + (define-key map [?\C-k] #'widget-list-item-delete) + (define-key map [?\C-o] #'widget-list-item-insert) + (widget-put widget :keymap map)) + (widget-default-create widget)) + :tag "+/-" + :help-echo "Insert or delete a new item into the list here" + :action 'widget-insert/delete-button-action) + +(defun widget-insert/delete-button-action (widget &optional event) + "Ask the parent to insert or delete a new item." + (if (y-or-n-p "Delete this item? (otherwise insert a new one)") + (widget-apply (widget-get widget :parent) + :delete-at (widget-get widget :widget)) + (widget-apply (widget-get widget :parent) + :insert-before (widget-get widget :widget)))) + +(defun widget-list-item-insert () + "Delete the list item widget which is the parent of the widget at point." + (interactive) + (let ((widget (widget-at (point)))) + (widget-apply (widget-get widget :parent) + :insert-before (widget-get widget :widget)))) + +(defun widget-list-item-delete () + "Add a new list item widget after the parent of the widget at point." + (interactive) + (let ((widget (widget-at (point)))) + (widget-apply (widget-get widget :parent) + :delete-at (widget-get widget :widget)))) + ;;; The `insert-button' Widget. (define-widget 'insert-button 'push-button - "An insert button for the `editable-list' widget." - :tag "INS" - :help-echo "Insert a new item into the list at this position." + "An append item button for the `editable-list' widget." + :tag "+" + :help-echo "Append a new item to the list" :action 'widget-insert-button-action) (defun widget-insert-button-action (widget &optional event) @@ -2386,19 +2429,6 @@ (widget-apply (widget-get widget :parent) :insert-before (widget-get widget :widget))) -;;; The `delete-button' Widget. - -(define-widget 'delete-button 'push-button - "A delete button for the `editable-list' widget." - :tag "DEL" - :help-echo "Delete this item from the list." - :action 'widget-delete-button-action) - -(defun widget-delete-button-action (widget &optional event) - ;; Ask the parent to insert a new item. - (widget-apply (widget-get widget :parent) - :delete-at (widget-get widget :widget))) - ;;; The `editable-list' Widget. ;; (defcustom widget-editable-list-gui nil @@ -2412,7 +2442,7 @@ :offset 12 :format "%v%i\n" :format-handler 'widget-editable-list-format-handler - :entry-format "%i %d %v" + :entry-format "%- %v" :menu-tag "editable-list" :value-create 'widget-editable-list-value-create :value-delete 'widget-children-value-delete @@ -2536,7 +2566,7 @@ ;; Create a new entry to the list. (let ((type (nth 0 (widget-get widget :args))) ;;; (widget-push-button-gui widget-editable-list-gui) - child delete insert) + child ins/del buttons) (widget-specify-insert (save-excursion (and (widget-get widget :indent) @@ -2548,14 +2578,11 @@ (delete-backward-char 2) (cond ((eq escape ?%) (insert ?%)) - ((eq escape ?i) - (setq insert (apply 'widget-create-child-and-convert - widget 'insert-button - (widget-get widget :insert-button-args)))) - ((eq escape ?d) - (setq delete (apply 'widget-create-child-and-convert - widget 'delete-button - (widget-get widget :delete-button-args)))) + ((eq escape ?-) + (setq ins/del (apply 'widget-create-child-and-convert + widget 'insert/delete-button + (widget-get widget + :insert/delete-button-args)))) ((eq escape ?v) (if conv (setq child (widget-create-child-value @@ -2566,18 +2593,17 @@ (widget-default-get type)))))) (t (error "Unknown escape `%c'" escape))))) - (widget-put widget - :buttons (cons delete - (cons insert - (widget-get widget :buttons)))) + (setq buttons (widget-get widget :buttons)) + (if ins/del + (push ins/del buttons)) + (widget-put widget :buttons buttons) (let ((entry-from (point-min-marker)) (entry-to (point-max-marker))) (set-marker-insertion-type entry-from t) (set-marker-insertion-type entry-to nil) (widget-put child :entry-from entry-from) (widget-put child :entry-to entry-to))) - (widget-put insert :widget child) - (widget-put delete :widget child) + (if ins/del (widget-put ins/del :widget child)) child)) ;;; The `group' Widget. @@ -2988,6 +3014,7 @@ "History of input to `widget-variable-prompt-value'.") (define-widget 'variable 'symbol + ;; Should complete on variables. "A Lisp variable." :prompt-match 'boundp :prompt-history 'widget-variable-prompt-value-history