Mercurial > hg > xemacs-beta
view man/xemacs/mouse.texi @ 5169:6c6d78781d59
cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-24 Ben Wing <ben@xemacs.org>
* array.h:
* array.h (XD_LISP_DYNARR_DESC):
* dumper.c (pdump_register_sub):
* dumper.c (pdump_store_new_pointer_offsets):
* dumper.c (pdump_reloc_one_mc):
* elhash.c:
* gc.c (lispdesc_one_description_line_size):
* gc.c (kkcc_marking):
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* lrecord.h (enum memory_description_type):
* lrecord.h (enum data_description_entry_flags):
* lrecord.h (struct opaque_convert_functions):
Rename XD_LISP_OBJECT_BLOCK_PTR to XD_INLINE_LISP_OBJECT_BLOCK_PTR
and document it in lrecord.h.
* data.c:
* data.c (finish_marking_weak_lists):
* data.c (continue_marking_ephemerons):
* data.c (finish_marking_ephemerons):
* elhash.c (MARK_OBJ):
* gc.c:
* gc.c (lispdesc_indirect_count_1):
* gc.c (struct):
* gc.c (kkcc_bt_push):
* gc.c (kkcc_gc_stack_push):
* gc.c (kkcc_gc_stack_push_lisp_object):
* gc.c (kkcc_gc_stack_repush_dirty_object):
* gc.c (KKCC_DO_CHECK_FREE):
* gc.c (mark_object_maybe_checking_free):
* gc.c (mark_struct_contents):
* gc.c (mark_lisp_object_block_contents):
* gc.c (register_for_finalization):
* gc.c (mark_object):
* gc.h:
* lisp.h:
* profile.c:
* profile.c (mark_profiling_info_maphash):
Clean up KKCC code related to DEBUG_XEMACS. Rename
kkcc_backtrace() to kkcc_backtrace_1() and add two params: a
`size' arg to control how many stack elements to print and a
`detailed' arg to control whether Lisp objects are printed using
`debug_print()'. Create front-ends to kkcc_backtrace_1() --
kkcc_detailed_backtrace(), kkcc_short_backtrace(),
kkcc_detailed_backtrace_full(), kkcc_short_backtrace_full(), as
well as shortened versions kbt(), kbts(), kbtf(), kbtsf() -- to
call it with various parameter values. Add an `is_lisp' field to
the stack and backtrace structures and use it to keep track of
whether an object pushed onto the stack is a Lisp object or a
non-Lisp structure; in kkcc_backtrace_1(), don't try to print a
non-Lisp structure as a Lisp object.
* elhash.c:
* extents.c:
* file-coding.c:
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* marker.c:
* marker.c (Fmarker_buffer):
* mule-coding.c:
* number.c:
* rangetab.c:
* specifier.c:
New macros IF_OLD_GC(), IF_NEW_GC() to simplify declaration of
Lisp objects when a finalizer may exist in one but not the other.
Use them appropriately.
* extents.c (finalize_extent_info):
Don't zero out data->soe and data->extents before trying to free,
else we get memory leaks.
* lrecord.h (enum lrecord_type):
Make the first lrecord type have value 1 not 0 so that 0 remains
without implementation and attempts to interpret zeroed memory
as a Lisp object will be more obvious.
* array.c (Dynarr_free):
* device-msw.c (msprinter_delete_device):
* device-tty.c (free_tty_device_struct):
* device-tty.c (tty_delete_device):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-x.c:
* emacs.c (free_argc_argv):
* emodules.c (attempt_module_delete):
* file-coding.c (chain_finalize_coding_stream_1):
* file-coding.c (chain_finalize_coding_stream):
* glyphs-eimage.c:
* glyphs-eimage.c (jpeg_instantiate_unwind):
* glyphs-eimage.c (gif_instantiate_unwind):
* glyphs-eimage.c (png_instantiate_unwind):
* glyphs-eimage.c (tiff_instantiate_unwind):
* imgproc.c:
* imgproc.c (build_EImage_quantable):
* insdel.c (uninit_buffer_text):
* mule-coding.c (iso2022_finalize_detection_state):
* objects-tty.c (tty_finalize_color_instance):
* objects-tty.c (tty_finalize_font_instance):
* objects-tty.c (tty_font_list):
* process.c:
* process.c (finalize_process):
* redisplay.c (add_propagation_runes):
* scrollbar-gtk.c:
* scrollbar-gtk.c (gtk_free_scrollbar_instance):
* scrollbar-gtk.c (gtk_release_scrollbar_instance):
* scrollbar-msw.c:
* scrollbar-msw.c (mswindows_free_scrollbar_instance):
* scrollbar-msw.c (unshow_that_mofo):
* scrollbar-x.c (x_free_scrollbar_instance):
* scrollbar-x.c (x_release_scrollbar_instance):
* select-x.c:
* select-x.c (x_handle_selection_request):
* syntax.c:
* syntax.c (uninit_buffer_syntax_cache):
* text.h (eifree):
If possible, whenever we call xfree() on a field in a structure,
set the field to 0 afterwards. A lot of code is written so that
it checks the value being freed to see if it is non-zero before
freeing it -- doing this and setting the value to 0 afterwards
ensures (a) we won't try to free twice if the cleanup code is
called twice; (b) if the object itself stays around, KKCC won't
crash when attempting to mark the freed field.
* rangetab.c:
Add a finalization method when not NEW_GC to avoid memory leaks.
(#### We still get memory leaks when NEW_GC; need to convert gap
array to Lisp object).
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 24 Mar 2010 01:22:51 -0500 |
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.