diff options
| author | Dave Love | 2001-02-20 10:56:15 +0000 |
|---|---|---|
| committer | Dave Love | 2001-02-20 10:56:15 +0000 |
| commit | 2ff864e0b39e0b73d75cc1266f906b5fd117cd18 (patch) | |
| tree | ee7db7a750d8d9f7ac394842231c789eca161075 | |
| parent | 54ed3bd2f1a710aae4b1d9d7e87cf5b48b693729 (diff) | |
| download | emacs-2ff864e0b39e0b73d75cc1266f906b5fd117cd18.tar.gz emacs-2ff864e0b39e0b73d75cc1266f906b5fd117cd18.zip | |
Revert bogus revision 2001-02-20T10:59:03Z!fx@gnu.org.
| -rw-r--r-- | lisp/wid-edit.el | 93 |
1 files changed, 33 insertions, 60 deletions
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index dc7e28b4ed1..b28b52688c5 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el | |||
| @@ -757,17 +757,13 @@ button end points. | |||
| 757 | Optional ARGS are extra keyword arguments for TYPE." | 757 | Optional ARGS are extra keyword arguments for TYPE." |
| 758 | (let ((widget (apply 'widget-convert type :delete 'widget-leave-text args)) | 758 | (let ((widget (apply 'widget-convert type :delete 'widget-leave-text args)) |
| 759 | (from (copy-marker from)) | 759 | (from (copy-marker from)) |
| 760 | (to (copy-marker to)) | 760 | (to (copy-marker to))) |
| 761 | (personality (get-text-property from 'personality))) | ||
| 762 | (set-marker-insertion-type from t) | 761 | (set-marker-insertion-type from t) |
| 763 | (set-marker-insertion-type to nil) | 762 | (set-marker-insertion-type to nil) |
| 764 | (widget-put widget :from from) | 763 | (widget-put widget :from from) |
| 765 | (widget-put widget :to to) | 764 | (widget-put widget :to to) |
| 766 | (when button-from | 765 | (when button-from |
| 767 | (widget-specify-button widget button-from button-to)) | 766 | (widget-specify-button widget button-from button-to)) |
| 768 | ;; W3 provides advice for this for Emacspeak's benefit. | ||
| 769 | (if personality | ||
| 770 | (put-text-property from to 'personality personality)) | ||
| 771 | widget)) | 767 | widget)) |
| 772 | 768 | ||
| 773 | (defun widget-convert-button (type from to &rest args) | 769 | (defun widget-convert-button (type from to &rest args) |
| @@ -2377,51 +2373,12 @@ Return an alist of (TYPE MATCH)." | |||
| 2377 | ;; Pass notification to parent. | 2373 | ;; Pass notification to parent. |
| 2378 | (widget-apply widget :notify child event)) | 2374 | (widget-apply widget :notify child event)) |
| 2379 | 2375 | ||
| 2380 | ;;; The `insert/delete-button' Widget. | ||
| 2381 | |||
| 2382 | (define-widget 'insert/delete-button 'push-button | ||
| 2383 | "An insert/delete item button for the `editable-list' widget." | ||
| 2384 | :create (lambda (widget) | ||
| 2385 | (let* ((map (make-sparse-keymap)) | ||
| 2386 | (parent (widget-get widget :keymap))) | ||
| 2387 | (if parent | ||
| 2388 | (set-keymap-parent map parent)) | ||
| 2389 | (define-key map [?\C-k] #'widget-list-item-delete) | ||
| 2390 | (define-key map [?\C-o] #'widget-list-item-insert) | ||
| 2391 | (widget-put widget :keymap map)) | ||
| 2392 | (widget-default-create widget)) | ||
| 2393 | :tag "+/-" | ||
| 2394 | :help-echo "Insert or delete a new item into the list here" | ||
| 2395 | :action 'widget-insert/delete-button-action) | ||
| 2396 | |||
| 2397 | (defun widget-insert/delete-button-action (widget &optional event) | ||
| 2398 | "Ask the parent to insert or delete a new item." | ||
| 2399 | (if (y-or-n-p "Delete this item? (otherwise insert a new one)") | ||
| 2400 | (widget-apply (widget-get widget :parent) | ||
| 2401 | :delete-at (widget-get widget :widget)) | ||
| 2402 | (widget-apply (widget-get widget :parent) | ||
| 2403 | :insert-before (widget-get widget :widget)))) | ||
| 2404 | |||
| 2405 | (defun widget-list-item-insert () | ||
| 2406 | "Delete the list item widget which is the parent of the widget at point." | ||
| 2407 | (interactive) | ||
| 2408 | (let ((widget (widget-at (point)))) | ||
| 2409 | (widget-apply (widget-get widget :parent) | ||
| 2410 | :insert-before (widget-get widget :widget)))) | ||
| 2411 | |||
| 2412 | (defun widget-list-item-delete () | ||
| 2413 | "Add a new list item widget after the parent of the widget at point." | ||
| 2414 | (interactive) | ||
| 2415 | (let ((widget (widget-at (point)))) | ||
| 2416 | (widget-apply (widget-get widget :parent) | ||
| 2417 | :delete-at (widget-get widget :widget)))) | ||
| 2418 | |||
| 2419 | ;;; The `insert-button' Widget. | 2376 | ;;; The `insert-button' Widget. |
| 2420 | 2377 | ||
| 2421 | (define-widget 'insert-button 'push-button | 2378 | (define-widget 'insert-button 'push-button |
| 2422 | "An append item button for the `editable-list' widget." | 2379 | "An insert button for the `editable-list' widget." |
| 2423 | :tag "+" | 2380 | :tag "INS" |
| 2424 | :help-echo "Append a new item to the list" | 2381 | :help-echo "Insert a new item into the list at this position." |
| 2425 | :action 'widget-insert-button-action) | 2382 | :action 'widget-insert-button-action) |
| 2426 | 2383 | ||
| 2427 | (defun widget-insert-button-action (widget &optional event) | 2384 | (defun widget-insert-button-action (widget &optional event) |
| @@ -2429,6 +2386,19 @@ Return an alist of (TYPE MATCH)." | |||
| 2429 | (widget-apply (widget-get widget :parent) | 2386 | (widget-apply (widget-get widget :parent) |
| 2430 | :insert-before (widget-get widget :widget))) | 2387 | :insert-before (widget-get widget :widget))) |
| 2431 | 2388 | ||
| 2389 | ;;; The `delete-button' Widget. | ||
| 2390 | |||
| 2391 | (define-widget 'delete-button 'push-button | ||
| 2392 | "A delete button for the `editable-list' widget." | ||
| 2393 | :tag "DEL" | ||
| 2394 | :help-echo "Delete this item from the list." | ||
| 2395 | :action 'widget-delete-button-action) | ||
| 2396 | |||
| 2397 | (defun widget-delete-button-action (widget &optional event) | ||
| 2398 | ;; Ask the parent to insert a new item. | ||
| 2399 | (widget-apply (widget-get widget :parent) | ||
| 2400 | :delete-at (widget-get widget :widget))) | ||
| 2401 | |||
| 2432 | ;;; The `editable-list' Widget. | 2402 | ;;; The `editable-list' Widget. |
| 2433 | 2403 | ||
| 2434 | ;; (defcustom widget-editable-list-gui nil | 2404 | ;; (defcustom widget-editable-list-gui nil |
| @@ -2442,7 +2412,7 @@ Return an alist of (TYPE MATCH)." | |||
| 2442 | :offset 12 | 2412 | :offset 12 |
| 2443 | :format "%v%i\n" | 2413 | :format "%v%i\n" |
| 2444 | :format-handler 'widget-editable-list-format-handler | 2414 | :format-handler 'widget-editable-list-format-handler |
| 2445 | :entry-format "%- %v" | 2415 | :entry-format "%i %d %v" |
| 2446 | :menu-tag "editable-list" | 2416 | :menu-tag "editable-list" |
| 2447 | :value-create 'widget-editable-list-value-create | 2417 | :value-create 'widget-editable-list-value-create |
| 2448 | :value-delete 'widget-children-value-delete | 2418 | :value-delete 'widget-children-value-delete |
| @@ -2566,7 +2536,7 @@ Return an alist of (TYPE MATCH)." | |||
| 2566 | ;; Create a new entry to the list. | 2536 | ;; Create a new entry to the list. |
| 2567 | (let ((type (nth 0 (widget-get widget :args))) | 2537 | (let ((type (nth 0 (widget-get widget :args))) |
| 2568 | ;;; (widget-push-button-gui widget-editable-list-gui) | 2538 | ;;; (widget-push-button-gui widget-editable-list-gui) |
| 2569 | child ins/del buttons) | 2539 | child delete insert) |
| 2570 | (widget-specify-insert | 2540 | (widget-specify-insert |
| 2571 | (save-excursion | 2541 | (save-excursion |
| 2572 | (and (widget-get widget :indent) | 2542 | (and (widget-get widget :indent) |
| @@ -2578,11 +2548,14 @@ Return an alist of (TYPE MATCH)." | |||
| 2578 | (delete-backward-char 2) | 2548 | (delete-backward-char 2) |
| 2579 | (cond ((eq escape ?%) | 2549 | (cond ((eq escape ?%) |
| 2580 | (insert ?%)) | 2550 | (insert ?%)) |
| 2581 | ((eq escape ?-) | 2551 | ((eq escape ?i) |
| 2582 | (setq ins/del (apply 'widget-create-child-and-convert | 2552 | (setq insert (apply 'widget-create-child-and-convert |
| 2583 | widget 'insert/delete-button | 2553 | widget 'insert-button |
| 2584 | (widget-get widget | 2554 | (widget-get widget :insert-button-args)))) |
| 2585 | :insert/delete-button-args)))) | 2555 | ((eq escape ?d) |
| 2556 | (setq delete (apply 'widget-create-child-and-convert | ||
| 2557 | widget 'delete-button | ||
| 2558 | (widget-get widget :delete-button-args)))) | ||
| 2586 | ((eq escape ?v) | 2559 | ((eq escape ?v) |
| 2587 | (if conv | 2560 | (if conv |
| 2588 | (setq child (widget-create-child-value | 2561 | (setq child (widget-create-child-value |
| @@ -2593,17 +2566,18 @@ Return an alist of (TYPE MATCH)." | |||
| 2593 | (widget-default-get type)))))) | 2566 | (widget-default-get type)))))) |
| 2594 | (t | 2567 | (t |
| 2595 | (error "Unknown escape `%c'" escape))))) | 2568 | (error "Unknown escape `%c'" escape))))) |
| 2596 | (setq buttons (widget-get widget :buttons)) | 2569 | (widget-put widget |
| 2597 | (if ins/del | 2570 | :buttons (cons delete |
| 2598 | (push ins/del buttons)) | 2571 | (cons insert |
| 2599 | (widget-put widget :buttons buttons) | 2572 | (widget-get widget :buttons)))) |
| 2600 | (let ((entry-from (point-min-marker)) | 2573 | (let ((entry-from (point-min-marker)) |
| 2601 | (entry-to (point-max-marker))) | 2574 | (entry-to (point-max-marker))) |
| 2602 | (set-marker-insertion-type entry-from t) | 2575 | (set-marker-insertion-type entry-from t) |
| 2603 | (set-marker-insertion-type entry-to nil) | 2576 | (set-marker-insertion-type entry-to nil) |
| 2604 | (widget-put child :entry-from entry-from) | 2577 | (widget-put child :entry-from entry-from) |
| 2605 | (widget-put child :entry-to entry-to))) | 2578 | (widget-put child :entry-to entry-to))) |
| 2606 | (if ins/del (widget-put ins/del :widget child)) | 2579 | (widget-put insert :widget child) |
| 2580 | (widget-put delete :widget child) | ||
| 2607 | child)) | 2581 | child)) |
| 2608 | 2582 | ||
| 2609 | ;;; The `group' Widget. | 2583 | ;;; The `group' Widget. |
| @@ -3014,7 +2988,6 @@ It will read a directory name from the minibuffer when invoked." | |||
| 3014 | "History of input to `widget-variable-prompt-value'.") | 2988 | "History of input to `widget-variable-prompt-value'.") |
| 3015 | 2989 | ||
| 3016 | (define-widget 'variable 'symbol | 2990 | (define-widget 'variable 'symbol |
| 3017 | ;; Should complete on variables. | ||
| 3018 | "A Lisp variable." | 2991 | "A Lisp variable." |
| 3019 | :prompt-match 'boundp | 2992 | :prompt-match 'boundp |
| 3020 | :prompt-history 'widget-variable-prompt-value-history | 2993 | :prompt-history 'widget-variable-prompt-value-history |