annotate lisp/widget.el @ 51207:7e176ef34c10

Make (many) trivial substitutions for renamed and new macros in dispextern.h, frame.h and window.h. (make_window): Initialize new members left_margin_cols, right_margin_cols, left_fringe_width, right_fringe_width, fringes_outside_margins, scroll_bar_width, and vertical_scroll_bar_type. (coordinates_in_window): Adapted to new fringe/margin positions and per-window fringes and scroll-bars. Fix bug related to incorrectly adjusting coordinates by frame's internal_border_width (the effect normally negible since the internal_border_width is typically 0 or 1 pixel, but very noticeable for an internal_border_width of e.g. 25 pixels). Upon successful return (other than ON_NOTHING), the coordinates are now always properly converted to window relative for the given display element. (window_from_coordinates): Add new parameters wx and wy to return the window relative x and y position in the returned window and part. A null arg means, don't return the position. All callers changed. (adjust_window_margins): New function which may reduce the width of the display margins if a window's text area is too small after resizing or splitting windows. (size_window): Fix bug that did not account for display margin widths when checking the minimum width of a window; use adjust_window_margins. (set_window_buffer): Call Fset_window_fringes and Fset_window_scroll_bars to setup per-window elements. Add new arg KEEP_MARGINS_P. Non-nil means to keep window's existing display margin, fringe widths, and scroll bar settings (e.g. after splitting a window or resizing the frame). All callers changed. (Fset_window_buffer): New arg KEEP_MARGINS. All callers changed. (Fsplit_window): Duplicate original window's display margin, fringe, and scroll-bar settings; then call Fset_window_buffer with KEEP_MARGINS non-nil. This fixes a bug which caused a split window to only preserve the display margins in one of the windows. When splitting horisontally, call adjust_window_margins on both windows to ensure that the text area of the new windows is non too narrow. This fixes a bug which could cause emacs to trap if the width of the split window was less than the width of the display margins. (window_box_text_cols): Renamed from window_internal_width. All uses changed. Adapt to per-window fringes and scroll bars. Fix bug that caused vertical separator to be subtracted also on window frames. Fix another bug that did not reduce the returned value by the columns used for display margins. (window_scroll_line_based): Fix bug related to scrolling too much when display margins are present (implicitly fixed by the fix to window_box_text_cols). (scroll_left, scroll_right): Fix bug related to scrolling too far by default when display margins are present (implicitly fixed by the fix to window_box_text_cols). (struct saved_window): Rename members left to left_col, top to top_line, width to total_cols, height to total_lines, orig_top to orig_top_line, orig_height to orig_total_lines. All uses changed. New members left_margin_cols, right_margin_cols, left_fringe_width, right_fringe_width, fringes_outside_margins, scroll_bar_width, and vertical_scroll_bar_type for saving per-window display elements. (Fset_window_configuration): Restore display margins, fringes, and scroll bar settings. This fixes a bug which caused display margins to be discarded when saving and restoring a window configuration. (save_window_save): Save display margins, fringes, and scroll bar settings. This fixes a bug which caused display margins to be discarded when saving and restoring a window configuration. (Fset_window_margins): Do nothing if display margins are not really changed. Otherwise, call adjust_window_margins to ensure the text area doesn't get too narrow. This fixes a bug which could cause emacs to trap if setting display margins wider than the width of the window. (Fset_window_fringes): New defun to allow user to specifically set this window's fringe widths and position vs. display margins. (Fwindow_fringes): New defun to return window's actual fringe settings. (Fset_window_scroll_bars): New defun to allow user to specifically set this window's scroll bar width and position. (Fwindow_scroll_bars): New defun to return window's actual scroll bar settings. (compare_window_configurations): Also compare display margins, fringes, and scroll bar settings. (syms_of_window): Defsubr new defuns for fringe and scroll bars.
author Kim F. Storm <storm@cua.dk>
date Sat, 24 May 2003 22:07:51 +0000
parents e88404e8f2cf
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30147
diff changeset
1 ;;; widget.el --- a library of user interface components
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
2 ;;
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
4 ;;
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
5 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
6 ;; Keywords: help, extensions, faces, hypermedia
18258
e83bc8150072 Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 18139
diff changeset
7 ;; Version: 1.9920
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
8 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
9
17520
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
10 ;; This file is part of GNU Emacs.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
11
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
15 ;; any later version.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
16
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
20 ;; GNU General Public License for more details.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
21
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
22 ;; You should have received a copy of the GNU General Public License
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
25 ;; Boston, MA 02111-1307, USA.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
26
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
27 ;;; Commentary:
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
28 ;;
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
29 ;; The widget library is partially documented in the `widget' Info
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
30 ;; file.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
31 ;;
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
32 ;; This file only contains the code needed to define new widget types.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
33 ;; Everything else is autoloaded from `wid-edit.el'.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
34
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
35 ;;; Code:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
36
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
37 ;; Doing this is unnecessary in Emacs 20. Kept as dummy in case
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
38 ;; external libraries call it. We save a kb or two of purespace by
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
39 ;; dummying-out such definitions generally.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
40 (defmacro define-widget-keywords (&rest keys)
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
41 ;;; ;; Don't use backquote, since that makes trouble trying to
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
42 ;;; ;; re-bootstrap from just the .el files.
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
43 ;;; (list 'eval-and-compile
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
44 ;;; (list 'let (list (list 'keywords (list 'quote keys)))
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
45 ;;; (list 'while 'keywords
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
46 ;;; (list 'or (list 'boundp (list 'car 'keywords))
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
47 ;;; (list 'set (list 'car 'keywords) (list 'car 'keywords)))
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
48 ;;; (list 'setq 'keywords (list 'cdr 'keywords)))))
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
49 )
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
50
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
51 ;;;(define-widget-keywords :documentation-indent
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
52 ;;; :complete-function :complete :button-overlay
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
53 ;;; :field-overlay
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
54 ;;; :documentation-shown :button-prefix
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
55 ;;; :button-suffix :mouse-down-action :glyph-up :glyph-down :glyph-inactive
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
56 ;;; :prompt-internal :prompt-history :prompt-match
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
57 ;;; :prompt-value :deactivate :active
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
58 ;;; :inactive :activate :sibling-args :delete-button-args
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
59 ;;; :insert-button-args :append-button-args :button-args
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
60 ;;; :tag-glyph :off-glyph :on-glyph :valid-regexp
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
61 ;;; :secret :sample-face :sample-face-get :case-fold
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
62 ;;; :create :convert-widget :format :value-create :offset :extra-offset
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
63 ;;; :tag :doc :from :to :args :value :action
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
64 ;;; :value-set :value-delete :match :parent :delete :menu-tag-get
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
65 ;;; :value-get :choice :void :menu-tag :on :off :on-type :off-type
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
66 ;;; :notify :entry-format :button :children :buttons :insert-before
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
67 ;;; :delete-at :format-handler :widget :value-pos :value-to-internal
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
68 ;;; :indent :size :value-to-external :validate :error :directory
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
69 ;;; :must-match :type-error :value-inline :inline :match-inline :greedy
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
70 ;;; :button-face-get :button-face :value-face :keymap :entry-from
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
71 ;;; :entry-to :help-echo :documentation-property :tab-order)
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
72
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
73 (defun define-widget (name class doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
74 "Define a new widget type named NAME from CLASS.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
75
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
76 NAME and CLASS should both be symbols, CLASS should be one of the
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
77 existing widget types, or nil to create the widget from scratch.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
78
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
79 After the new widget has been defined, the following two calls will
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
80 create identical widgets:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
81
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
82 * (widget-create NAME)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
83
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
84 * (apply 'widget-create CLASS ARGS)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
85
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
86 The third argument DOC is a documentation string for the widget."
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
87 (put name 'widget-type (cons class args))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17520
diff changeset
88 (put name 'widget-documentation doc)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17520
diff changeset
89 name)
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
90
30147
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
91 ;; This is used by external widget code (in W3, at least).
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
92 (defalias 'widget-plist-member 'plist-member)
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
93
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
94 ;;; The End.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
95
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
96 (provide 'widget)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
97
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30147
diff changeset
98 ;;; widget.el ends here