|
Graphics.UI.Gtk.Multiline.TextBuffer | Portability | portable (depends on GHC) | Stability | provisional | Maintainer | gtk2hs-users@lists.sourceforge.net |
|
|
|
|
|
Description |
Stores attributed text for display in a TextView
|
|
Synopsis |
|
|
|
|
Detail
|
|
You may wish to begin by reading the text widget conceptual overview
which gives an overview of all the objects and data types related to the
text widget and how they work together.
|
|
Class Hierarchy
|
|
| GObject
| +----TextBuffer
|
|
Types
|
|
data TextBuffer |
Instances | |
|
|
class GObjectClass o => TextBufferClass o |
| Instances | |
|
|
castToTextBuffer :: GObjectClass obj => obj -> TextBuffer |
|
toTextBuffer :: TextBufferClass o => o -> TextBuffer |
|
Constructors
|
|
textBufferNew |
|
|
Methods
|
|
textBufferGetLineCount :: TextBufferClass self => self -> IO Int |
Obtains the number of lines in the buffer. This value is cached, so the
function is very fast.
|
|
textBufferGetCharCount :: TextBufferClass self => self -> IO Int |
Gets the number of characters in the buffer. The character count is
cached, so this function is very fast.
|
|
textBufferGetTagTable :: TextBufferClass self => self -> IO TextTagTable |
Get the TextTagTable associated with this buffer.
|
|
textBufferInsert |
:: TextBufferClass self | | => self | | -> TextIter | iter - a position in the buffer
| -> String | text - text to insert
| -> IO () | | Inserts text at position iter. Emits the
"insert_text" signal; insertion actually occurs in the default handler for
the signal. iter is invalidated when insertion occurs (because the buffer
contents change).
|
|
|
textBufferInsertAtCursor :: TextBufferClass self => self -> String -> IO () |
Simply calls textBufferInsert, using the current cursor position as the
insertion point.
|
|
textBufferInsertInteractive |
:: TextBufferClass self | | => self | | -> TextIter | iter - a position in buffer
| -> String | text - the text to insert
| -> Bool | defaultEditable - default editability of buffer
| -> IO Bool | returns whether text was actually inserted
| Like textBufferInsert, but the insertion will not occur if iter is at
a non-editable location in the buffer. Usually you want to prevent
insertions at ineditable locations if the insertion results from a user
action (is interactive).
If no tag is at the specified position, use the default value def to
decide if the text should be inserted. This value could be set to the result
of textViewGetEditable.
|
|
|
textBufferInsertInteractiveAtCursor |
|
|
textBufferInsertRange |
:: TextBufferClass self | | => self | | -> TextIter | iter - a position in the buffer
| -> TextIter | start - a position in a TextBuffer
| -> TextIter | end - another position in the same buffer as start
| -> IO () | | Copies text, tags, and pixbufs between start and end (the order of
start and end doesn't matter) and inserts the copy at iter. Used
instead of simply getting/inserting text because it preserves images and
tags. If start and end are in a different buffer from buffer, the two
buffers must share the same tag table.
Implemented via emissions of the insert-text and apply-tag signals, so
expect those.
|
|
|
textBufferInsertRangeInteractive |
:: TextBufferClass self | | => self | | -> TextIter | iter - a position in the buffer
| -> TextIter | start - a position in a TextBuffer
| -> TextIter | end - another position in the same buffer as start
| -> Bool | defaultEditable - default editability of the buffer
| -> IO Bool | returns whether an insertion was possible at iter
| Same as textBufferInsertRange, but does nothing if the insertion point
isn't editable. The defaultEditable parameter indicates whether the text
is editable at iter if no tags enclosing iter affect editability.
Typically the result of textViewGetEditable is appropriate here.
|
|
|
textBufferDelete |
:: TextBufferClass self | | => self | | -> TextIter | start - a position in buffer
| -> TextIter | end - another position in buffer
| -> IO () | | Deletes text between start and end. The order of start and end is
not actually relevant; textBufferDelete will reorder them. This function
actually emits the "delete_range" signal, and the default handler of that
signal deletes the text. Because the buffer is modified, all outstanding
iterators become invalid after calling this function; however, the start
and end will be re-initialized to point to the location where text was
deleted.
|
|
|
textBufferDeleteInteractive |
:: TextBufferClass self | | => self | | -> TextIter | startIter - start of range to delete
| -> TextIter | endIter - end of range
| -> Bool | defaultEditable - whether the buffer is editable by
default
| -> IO Bool | returns whether some text was actually deleted
| Deletes all editable text in the given range. Calls textBufferDelete
for each editable sub-range of [start,end). start and end are
revalidated to point to the location of the last deleted range, or left
untouched if no text was deleted.
|
|
|
textBufferSetText |
:: TextBufferClass self | | => self | | -> String | text - text to insert
| -> IO () | | Deletes current contents of buffer, and inserts text instead.
|
|
|
textBufferGetText |
:: TextBufferClass self | | => self | | -> TextIter | start - start of a range
| -> TextIter | end - end of a range
| -> Bool | includeHiddenChars - whether to include invisible text
| -> IO String | | Returns the text in the range [start,end). Excludes undisplayed text
(text marked with tags that set the invisibility attribute) if
includeHiddenChars is False. Does not include characters representing
embedded images, so character indexes into the returned string do
not correspond to character indexes into the buffer. Contrast
with textBufferGetSlice.
|
|
|
textBufferGetSlice |
:: TextBufferClass self | | => self | | -> TextIter | start - start of a range
| -> TextIter | end - end of a range
| -> Bool | includeHiddenChars - whether to include invisible text
| -> IO String | | Returns the text in the range [start,end). Excludes undisplayed text
(text marked with tags that set the invisibility attribute) if
includeHiddenChars is False. The returned string includes a
(chr 0xFFFC) character whenever the buffer contains embedded images, so
character indexes into the returned string do correspond to
character indexes into the buffer. Contrast with textBufferGetText. Note
that (chr 0xFFFC) can occur in normal text as well, so it is not a reliable
indicator that a pixbuf or widget is in the buffer.
|
|
|
textBufferInsertPixbuf |
:: TextBufferClass self | | => self | | -> TextIter | iter - location to insert the pixbuf
| -> Pixbuf | pixbuf - a Pixbuf
| -> IO () | | Inserts an image into the text buffer at iter. The image will be
counted as one character in character counts, and when obtaining the buffer
contents as a string, will be represented by the Unicode "object
replacement character" (chr 0xFFFC). Note that the "slice" variants for
obtaining portions of the buffer as a string include this character for
pixbufs, but the "text" variants do not. e.g. see textBufferGetSlice and
textBufferGetText.
|
|
|
textBufferCreateMark |
:: TextBufferClass self | | => self | | -> Maybe MarkName | markName - name for mark, or Nothing
| -> TextIter | where - location to place mark
| -> Bool | leftGravity - whether the mark has left gravity
| -> IO TextMark | returns the new TextMark object
| Creates a mark at position where. If markName is Nothing, the mark
is anonymous; otherwise, the mark can be retrieved by name using
textBufferGetMark. If a mark has left gravity, and text is inserted at the
mark's current location, the mark will be moved to the left of the
newly-inserted text. If the mark has right gravity (leftGravity =
False), the mark will end up on the right of newly-inserted text. The
standard left-to-right cursor is a mark with right gravity (when you type,
the cursor stays on the right side of the text you're typing).
Emits the "mark_set" signal as notification of the mark's initial
placement.
|
|
|
textBufferMoveMark |
:: (TextBufferClass self, TextMarkClass mark) | | => self | | -> mark | mark - a TextMark
| -> TextIter | where - new location for mark in the buffer
| -> IO () | | Moves mark to the new location where. Emits the "mark_set" signal
as notification of the move.
|
|
|
textBufferMoveMarkByName |
|
|
textBufferDeleteMark |
:: (TextBufferClass self, TextMarkClass mark) | | => self | | -> mark | mark - a TextMark in the buffer
| -> IO () | | Deletes mark, so that it's no longer located anywhere in the buffer.
Most operations on mark become invalid. There is no way to undelete a
mark. textMarkGetDeleted will return True after this function has been
called on a mark; textMarkGetDeleted indicates that a mark no longer
belongs to a buffer. The "mark_deleted" signal will be emitted as
notification after the mark is deleted.
|
|
|
textBufferDeleteMarkByName |
|
|
textBufferGetMark |
|
|
textBufferGetInsert :: TextBufferClass self => self -> IO TextMark |
Returns the mark that represents the cursor (insertion point). Equivalent
to calling liftM fromJust $ textBufferGetMark "insert", but very
slightly more efficient, and involves less typing.
|
|
textBufferGetSelectionBound :: TextBufferClass self => self -> IO TextMark |
Returns the mark that represents the selection bound. Equivalent to
calling liftM fromJust $ textBufferGetMark "selection_bound", but
very slightly more efficient, and involves less typing.
The currently-selected text in buffer is the region between the
"selection_bound" and "insert" marks. If "selection_bound" and
"insert" are in the same place, then there is no current selection.
textBufferGetSelectionBounds is another convenient function for handling
the selection, if you just want to know whether there's a selection and what
its bounds are.
|
|
textBufferPlaceCursor |
:: TextBufferClass self | | => self | | -> TextIter | where - where to put the cursor
| -> IO () | | This function moves the "insert" and "selection_bound" marks
simultaneously. If you move them to the same place in two steps with
textBufferMoveMark, you will temporarily select a region in between their
old and new locations, which can be pretty inefficient since the
temporarily-selected region will force stuff to be recalculated. This
function moves them as a unit, which can be optimized.
|
|
|
textBufferApplyTag |
:: (TextBufferClass self, TextTagClass tag) | | => self | | -> tag | tag - a TextTag
| -> TextIter | start - one bound of range to be tagged
| -> TextIter | end - other bound of range to be tagged
| -> IO () | | Emits the "apply_tag" signal on the buffer. The default handler for the
signal applies tag to the given range. start and end do not have to be
in order.
|
|
|
textBufferRemoveTag |
:: (TextBufferClass self, TextTagClass tag) | | => self | | -> tag | tag - a TextTag
| -> TextIter | start - one bound of range to be untagged
| -> TextIter | end - other bound of range to be untagged
| -> IO () | | Emits the "remove_tag" signal. The default handler for the signal
removes all occurrences of tag from the given range. start and end
don't have to be in order.
|
|
|
textBufferApplyTagByName |
|
|
textBufferRemoveTagByName |
|
|
textBufferRemoveAllTags |
:: TextBufferClass self | | => self | | -> TextIter | start - one bound of range to be untagged
| -> TextIter | end - other bound of range to be untagged
| -> IO () | | Removes all tags in the range between start and end. Be careful with
this function; it could remove tags added in code unrelated to the code
you're currently writing. That is, using this function is probably a bad
idea if you have two or more unrelated code sections that add tags.
|
|
|
textBufferGetIterAtLineOffset |
:: TextBufferClass self | | => self | | -> Int | lineNumber - line number counting from 0
| -> Int | charOffset - char offset from start of line
| -> IO TextIter | | Obtains an iterator pointing to charOffset within the given line. The
charOffset must exist, offsets off the end of the line are not allowed.
|
|
|
textBufferGetIterAtOffset |
:: TextBufferClass self | | => self | | -> Int | charOffset - char offset from start of buffer (counting
from 0) or -1
| -> IO TextIter | | Creates an iterator pointing to a position charOffset chars from the
start of the entire buffer. If charOffset is -1 or greater than the number
of characters in the buffer, the end iterator is returned, that is the
iterator one past the last valid character in the buffer.
|
|
|
textBufferGetIterAtLine |
|
|
textBufferGetIterAtMark |
|
|
textBufferGetStartIter :: TextBufferClass self => self -> IO TextIter |
Create an iterator at the first position in the text buffer. This is
the same as using textBufferGetIterAtOffset to get the iter at character
offset 0.
|
|
textBufferGetEndIter :: TextBufferClass self => self -> IO TextIter |
Returns the "end iterator," one past the last valid
character in the text buffer. If dereferenced with textIterGetChar, the
end iterator has a character value of 0. The entire buffer lies in the range
from the first position in the buffer (call textBufferGetStartIter to get
character position 0) to the end iterator.
|
|
textBufferGetModified |
:: TextBufferClass self | | => self | | -> IO Bool | returns True if the buffer has been modified
| Indicates whether the buffer has been modified since the last call to
textBufferSetModified set the modification flag to False. Used for
example to enable a "save" function in a text editor.
It is often more convenient to use onModifiedChanged.
|
|
|
textBufferSetModified :: TextBufferClass self => self -> Bool -> IO () |
Used to keep track of whether the buffer has been modified since the last
time it was saved. Whenever the buffer is saved to disk, call
textBufferSetModified buffer False. When the buffer is
modified, it will automatically toggled on the modified bit again. When the
modified bit flips, the buffer emits a "modified_changed" signal.
|
|
textBufferDeleteSelection |
:: TextBufferClass self | | => self | | -> Bool | interactive - whether the deletion is caused by user
interaction
| -> Bool | defaultEditable - whether the buffer is editable by default
| -> IO Bool | returns whether there was a non-empty selection to delete
| Deletes the range between the "insert" and "selection_bound" marks,
that is, the currently-selected text. If interactive is True, the
editability of the selection will be considered (users can't delete
uneditable text).
|
|
|
textBufferHasSelection :: TextBufferClass self => self -> IO Bool |
Check if a selection exists.
|
|
textBufferGetSelectionBounds |
:: TextBufferClass self | | => self | | -> IO (TextIter, TextIter) | (start, end) returns the selection start and
end iterators
| Returns the bounds of the selection (if the selection has length 0, then
start and end will be the same). start and end will be in ascending
order.
|
|
|
textBufferSelectRange |
:: TextBufferClass self | | => self | | -> TextIter | ins - where to put the "insert" mark
| -> TextIter | bound - where to put the "selection_bound" mark
| -> IO () | | This function moves the "insert" and "selection_bound" marks
simultaneously. If you move them in two steps with textBufferMoveMark, you
will temporarily select a region in between their old and new locations,
which can be pretty inefficient since the temporarily-selected region will
force stuff to be recalculated. This function moves them as a unit, which
can be optimized.
- Available since Gtk+ version 2.4
|
|
|
textBufferGetBounds |
:: TextBufferClass self | | => self | | -> TextIter | start - iterator to initialize with first position in the
buffer
| -> TextIter | end - iterator to initialize with the end iterator
| -> IO () | | Retrieves the first and last iterators in the buffer, i.e. the entire
buffer lies within the range [start,end).
|
|
|
textBufferBeginUserAction :: TextBufferClass self => self -> IO () |
Called to indicate that the buffer operations between here and a call to
textBufferEndUserAction are part of a single user-visible operation. The
operations between textBufferBeginUserAction and textBufferEndUserAction
can then be grouped when creating an undo stack. TextBuffer maintains a
count of calls to textBufferBeginUserAction that have not been closed with
a call to textBufferEndUserAction, and emits the "begin_user_action" and
"end_user_action" signals only for the outermost pair of calls. This
allows you to build user actions from other user actions.
The "interactive" buffer mutation functions, such as
textBufferInsertInteractive, automatically call begin/end user action
around the buffer operations they perform, so there's no need to add extra
calls if you user action consists solely of a single call to one of those
functions.
|
|
textBufferEndUserAction :: TextBufferClass self => self -> IO () |
Should be paired with a call to textBufferBeginUserAction. See that
function for a full explanation.
|
|
textBufferBackspace |
:: TextBufferClass self | | => self | | -> TextIter | iter - a position in buffer
| -> Bool | interactive - whether the deletion is caused by user
interaction
| -> Bool | defaultEditable - whether the buffer is editable by
default
| -> IO Bool | returns True if the buffer was modified
| Performs the appropriate action as if the user hit the delete key with
the cursor at the position specified by iter. In the normal case a single
character will be deleted, but when combining accents are involved, more
than one character can be deleted, and when precomposed character and accent
combinations are involved, less than one character will be deleted.
Because the buffer is modified, all outstanding iterators become invalid
after calling this function; however, the iter will be re-initialized to
point to the location where text was deleted.
- Available since Gtk+ version 2.6
|
|
|
textBufferInsertChildAnchor |
:: TextBufferClass self | | => self | | -> TextIter | iter - location to insert the anchor
| -> TextChildAnchor | anchor - a TextChildAnchor
| -> IO () | | Inserts a child widget anchor into the text buffer at iter. The anchor
will be counted as one character in character counts, and when obtaining the
buffer contents as a string, will be represented by the Unicode "object
replacement character" (chr 0xFFFC). Note that the "slice" variants for
obtaining portions of the buffer as a string include this character for
child anchors, but the "text" variants do not. e.g. see
textBufferGetSlice and textBufferGetText. Consider
textBufferCreateChildAnchor as a more convenient alternative to this
function.
|
|
|
textBufferCreateChildAnchor |
|
|
textBufferGetIterAtChildAnchor |
|
|
Attributes
|
|
textBufferTagTable :: (TextBufferClass self, TextTagTableClass textTagTable) => ReadWriteAttr self TextTagTable textTagTable |
Text Tag Table.
|
|
textBufferText :: TextBufferClass self => Attr self String |
The text content of the buffer. Without child widgets and images, see
textBufferGetText for more information.
Default value: ""
|
|
textBufferModified :: TextBufferClass self => Attr self Bool |
'modified' property. See textBufferGetModified and
textBufferSetModified
|
|
Signals
|
|
onApplyTag :: TextBufferClass self => self -> (TextTag -> TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
A TextTag was applied to a region of text.
|
|
afterApplyTag :: TextBufferClass self => self -> (TextTag -> TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
|
onBeginUserAction :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
A new atomic user action is started.
- Together with connectToEndUserAction these signals can be
used to build an undo stack.
|
|
afterBeginUserAction :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
|
onBufferChanged :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
Emitted when the contents of the buffer change.
|
|
afterBufferChanged :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
|
onDeleteRange :: TextBufferClass self => self -> (TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
A range of text is about to be deleted.
|
|
afterDeleteRange :: TextBufferClass self => self -> (TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
|
onEndUserAction :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
An atomic action has ended.
- see connectToBeginUserAction
|
|
afterEndUserAction :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
|
onInsertPixbuf :: TextBufferClass self => self -> (TextIter -> Pixbuf -> IO ()) -> IO (ConnectId self) |
A widgets is inserted into the buffer.
connectToInsertChildAnchor :: TextBufferClass self =>
(TextIter -> TextChildAnchor -> IO ()) -> ConnectAfter -> self ->
IO (ConnectId self)
connectToInsertChildAnchor = connect_BOXED_OBJECT__NONE insert_child_anchor
mkTextIterCopy
A Pixbuf is inserted into the
buffer.
|
|
afterInsertPixbuf :: TextBufferClass self => self -> (TextIter -> Pixbuf -> IO ()) -> IO (ConnectId self) |
|
onInsertText :: TextBufferClass self => self -> (TextIter -> String -> IO ()) -> IO (ConnectId self) |
Some text was inserted.
|
|
afterInsertText :: TextBufferClass self => self -> (TextIter -> String -> IO ()) -> IO (ConnectId self) |
|
onMarkDeleted :: TextBufferClass self => self -> (TextMark -> IO ()) -> IO (ConnectId self) |
A TextMark within the buffer was deleted.
|
|
afterMarkDeleted :: TextBufferClass self => self -> (TextMark -> IO ()) -> IO (ConnectId self) |
|
onMarkSet :: TextBufferClass self => self -> (TextIter -> TextMark -> IO ()) -> IO (ConnectId self) |
A TextMark was inserted into the buffer.
|
|
afterMarkSet :: TextBufferClass self => self -> (TextIter -> TextMark -> IO ()) -> IO (ConnectId self) |
|
onModifiedChanged :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
The textbuffer has changed.
|
|
afterModifiedChanged :: TextBufferClass self => self -> IO () -> IO (ConnectId self) |
|
onRemoveTag :: TextBufferClass self => self -> (TextTag -> TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
A TextTag was removed.
|
|
afterRemoveTag :: TextBufferClass self => self -> (TextTag -> TextIter -> TextIter -> IO ()) -> IO (ConnectId self) |
|
Produced by Haddock version 0.7 |