view man/xemacs/mouse.texi @ 4967:0d4c9d0f6a8d

rewrite dynarr code -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-03 Ben Wing <ben@xemacs.org> * device-x.c (x_get_resource_prefix): * device-x.c (Fx_get_resource): * device-x.c (Fx_get_resource_prefix): * device-x.c (Fx_put_resource): * dialog-msw.c: * dialog-msw.c (handle_question_dialog_box): * dired-msw.c (mswindows_sort_files): * dired-msw.c (mswindows_get_files): * extents.c (extent_fragment_sort_by_priority): * extents.c (Fset_extent_parent): * file-coding.c (coding_reader): * file-coding.c (coding_writer): * file-coding.c (gzip_convert): * frame.c (generate_title_string): * gutter.c (calculate_gutter_size_from_display_lines): * indent.c (vmotion_1): * lread.c (read_bit_vector): * mule-coding.c (iso2022_decode): * rangetab.c: * rangetab.c (Fcopy_range_table): * rangetab.c (Fget_range_table): * rangetab.c (unified_range_table_copy_data): * redisplay-msw.c (mswindows_output_string): * redisplay-output.c (output_display_line): * redisplay-output.c (redisplay_move_cursor): * redisplay-output.c (redisplay_clear_bottom_of_window): * redisplay-tty.c (tty_output_ichar_dynarr): * redisplay-tty.c (set_foreground_to): * redisplay-tty.c (set_background_to): * redisplay-xlike-inc.c (XLIKE_output_string): * redisplay.c (redisplay_window_text_width_string): * redisplay.c (redisplay_text_width_string): * redisplay.c (create_text_block): * redisplay.c (SET_CURRENT_MODE_CHARS_PIXSIZE): * redisplay.c (generate_fstring_runes): * redisplay.c (regenerate_modeline): * redisplay.c (ensure_modeline_generated): * redisplay.c (real_current_modeline_height): * redisplay.c (create_string_text_block): * redisplay.c (regenerate_window): * redisplay.c (REGEN_INC_FIND_START_END): * redisplay.c (point_visible): * redisplay.c (redisplay_window): * redisplay.c (mark_glyph_block_dynarr): * redisplay.c (line_start_cache_start): * redisplay.c (start_with_line_at_pixpos): * redisplay.c (update_line_start_cache): * redisplay.c (glyph_to_pixel_translation): * redisplay.c (pixel_to_glyph_translation): * sysdep.c (qxe_readdir): * text.c (dfc_convert_to_external_format): * text.c (dfc_convert_to_internal_format): * toolbar-common.c (common_output_toolbar_button): * window.c (window_modeline_height): * window.c (Fwindow_last_line_visible_height): * window.c (window_displayed_height): * window.c (window_scroll): * window.c (get_current_pixel_pos): Use Dynarr_begin() in place of Dynarr_atp (foo, 0). * dynarr.c (Dynarr_realloc): * dynarr.c (Dynarr_lisp_realloc): * dynarr.c (Dynarr_resize): * dynarr.c (Dynarr_insert_many): * dynarr.c (Dynarr_delete_many): * dynarr.c (Dynarr_memory_usage): * dynarr.c (stack_like_malloc): * dynarr.c (stack_like_free): * lisp.h: * lisp.h (DECLARE_DYNARR_LISP_IMP): * lisp.h (XD_DYNARR_DESC): * lisp.h (Dynarr_pop): * gutter.c (output_gutter): * redisplay-output.c (sync_rune_structs): * redisplay-output.c (redisplay_output_window): Redo the dynarr code, add greater checks. Rename the `len', `largest' and `max' members to `len_', `largest_' and `max_' to try and catch existing places that might directly modify these values. Make new accessors Dynarr_largest() and Dynarr_max() and make them and existing Dynarr_length() be non-lvalues by adding '+ 0' to them; fix a couple of places in the redisplay code that tried to modify the length directly by setting Dynarr_length(). Use the accessors whenever possible even in the dynarr code itself. The accessors also verify that 0 <= len <= largest <= max. Rename settor function Dynarr_set_size() to Dynarr_set_length() and use it more consistently; also create lower-level Dynarr_set_length_1(). This latter function should be the only function that directly modifies the `len_' member of a Dynarr, and in the process makes sure that the `largest' value is kept correct. Consistently use ERROR_CHECK_STRUCTURES instead of ERROR_CHECK_TYPES for error-checking code. Reintroduce the temporarily disabled verification code on the positions of Dynarr_at(), Dynarr_atp() and Dynarr_atp_past_end(). Also create Dynarr_resize_if() in place of a repeated code fragment. Clean up all the functions that modify Dynarrs to use the new macros and functions and verify the correctness of the Dynarr both before and after the change. Note that there are two kinds of verification -- one for accessing and one for modifying. The difference is that the modify verification additionally checks to make sure that the Dynarr isn't locked. (This is used in redisplay to check for problems with reentrancy.) * lrecord.h: Move XD_DYNARR_DESC to lisp.h, grouping with the dynarr code.
author Ben Wing <ben@xemacs.org>
date Wed, 03 Feb 2010 20:51:18 -0600
parents 376386a54a3c
children
line wrap: on
line source


@node Mouse Selection, Additional Mouse Operations, Mark, Top
@comment  node-name,  next,  previous,  up
@section Selecting Text with the Mouse
@cindex mouse selection

@cindex pointer shapes
  If you are using XEmacs under X, you can use the mouse pointer
to select text. (The normal mouse pointer is an I-beam, the same
pointer that @code{xterm} uses.)

@vindex modeline-pointer-glyph
@vindex nontext-pointer-glyph
@vindex text-pointer-glyph
The glyph variable @code{text-pointer-glyph} controls the shape of
the mouse pointer when over text.  You can also control the shape
of the mouse pointer when over nontext using @code{nontext-pointer-glyph},
and the shape of the mouse pointer when over the modeline using
@code{modeline-pointer-glyph}. (Remember, you should use
@code{set-glyph-image}, not @code{setq}, to set one of these
variables.)

@cindex pointer face
If you want to get fancy, you can set the foreground and background
colors of the mouse pointer by setting the @code{pointer} face.

There are two ways to select a region of text with the mouse:

  To select a word in text, double-click with the left mouse button
while the mouse cursor is over the word.  The word is highlighted when
selected. On monochrome monitors, a stippled background indicates that a
region of text has been highlighted. On color monitors, a color
background indicates highlighted text. You can triple-click to select
whole lines. 

To select an arbitrary region of text:

@enumerate
@item
Move the mouse cursor over the character at the beginning of the region of
text you want to select.
@item
Press and hold the left mouse button. 
@item
While holding the left mouse button down, drag the cursor to the
character at the end of the region of text you want to select.
@item
Release the left mouse button.
@end enumerate
The selected region of text is highlighted.

  Once a region of text is selected, it becomes the primary X selection
(@pxref{Using X Selections}) as well as the Emacs selected region. You
can paste it into other X applications and use the options from the
@b{Edit} pull-down menu on it.  Since it is also the Emacs region, you
can use Emacs region commands on it.

@node Additional Mouse Operations, Killing, Mouse Selection, Top
@section Additional Mouse Operations
@cindex mouse operations

XEmacs also provides the following mouse functions.  Most of these are
not bound to mouse gestures by default, but they are provided for your
customization pleasure.  For example, if you wanted @kbd{shift-left}
(that is, holding down the @key{Shift} key and clicking the left mouse
button) to delete the character at which you are pointing, then you
could do this:

@example
(global-set-key '(shift button1) 'mouse-del-char)
@end example

@findex mouse-del-char
@findex mouse-delete-window
@findex mouse-keep-one-window
@findex mouse-kill-line
@findex mouse-line-length
@findex mouse-scroll
@findex mouse-select
@findex mouse-select-and-split
@findex mouse-set-mark
@findex mouse-set-point
@findex mouse-track
@findex mouse-track-adjust
@findex mouse-track-and-copy-to-cutbuffer
@findex mouse-track-delete-and-insert

@table @kbd
@item mouse-del-char
Delete the character pointed to by the mouse.
@item mouse-delete-window
Delete the Emacs window that the mouse is on.
@item mouse-keep-one-window
Select the Emacs window that the mouse is on, then delete all other
windows on this frame.
@item mouse-kill-line
Kill the line pointed to by the mouse.
@item mouse-line-length
Print the length of the line indicated by the pointer.
@item mouse-scroll
Scroll point to the mouse position.
@item mouse-select
Select the Emacs window the mouse is on.
@item mouse-select-and-split
Select the Emacs window mouse is on, then split it vertically in half.
@item mouse-set-mark
Select the Emacs window the mouse is on and set the mark at the mouse 
position.  Display the cursor at that position for a second.
@item mouse-set-point
Select the Emacs window that the mouse is on and move point to the
mouse position.
@item mouse-track
Make a selection with the mouse.   This is the default binding of 
the left mouse button (@key{button1}).
@item mouse-track-adjust
Extend the existing selection.  This is the default binding of
@key{Shift-button1}.
@item mouse-track-and-copy-to-cutbuffer
Make a selection like @code{mouse-track}, but also copy it to the cut buffer.
@item mouse-track-delete-and-insert
Make a selection with the mouse and insert it at point.  This is the
default binding of @key{control-shift-button1}.
@item mouse-track-insert
Make a selection with the mouse and insert it at point.
This is the default binding of @key{control-button1}.
@item mouse-window-to-region
Narrow a window to the region between the cursor and the mouse pointer.
@end table

The @kbd{M-x mouse-track} command should be bound to a mouse button.  If
you click-and-drag, the selection is set to the region between the
point of the initial click and the point at which you release the
button.  These positions do not need to be ordered. 

If you click-and-release without moving the mouse, the point is moved,
and the selection is disowned (there will be no selection owner.)  The
mark will be set to the previous position of point.

If you double-click, the selection will extend by symbols instead of by
characters.  If you triple-click, the selection will extend by lines.

If you drag the mouse off the top or bottom of the window, you can
select pieces of text that are larger than the visible part of the
buffer; the buffer will scroll as necessary.

The selected text becomes the current X selection, and is also copied to
the top of the kill ring.  Point will be left at the position at
which you released the button and the mark will be left at the initial
click position.  Bind a mouse click to
@kbd{mouse-track-and-copy-to-cutbuffer} to copy selections to the cut buffer.
(See also the @code{mouse-track-adjust} command, on @kbd{Shift-button1}.)

The @kbd{M-x mouse-track-adjust} command should be bound to a mouse
button.  The selection will be enlarged or shrunk so that the point of
the mouse click is one of its endpoints.  This is only meaningful
after the @code{mouse-track} command (@key{button1}) has been executed.

The @kbd{M-x mouse-track-delete-and-insert} command is exactly the same
as the @code{mouse-track} command on @key{button1}, except that point is
not moved; the selected text is immediately inserted after being
selected; and the text of the selection is deleted.

The @kbd{M-x mouse-track-insert} command is exactly the same as the
@code{mouse-track} command on @key{button1}, except that point is not moved;
the selected text is immediately inserted after being selected; and the
selection is immediately disowned afterwards.