Beispiel #1
0
/* compose_scroll_to_offset */
void compose_scroll_to_offset(Compose * compose, int offset)
{
	GtkTextBuffer * buffer;
	GtkTextIter iter;

	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->view));
	gtk_text_buffer_get_iter_at_offset(buffer, &iter, offset);
	gtk_text_buffer_place_cursor(buffer, &iter);
	gtk_text_view_place_cursor_onscreen(GTK_TEXT_VIEW(compose->view));
}
Beispiel #2
0
void goto_local_label (const gchar *l)
{
	gchar *t = g_utf8_find_next_char (l, NULL);
	gchar *s = g_strconcat ("<a name=\"", t, NULL);

	GtkTextIter iter;
	GtkTextIter match_start;

	GtkTextMark *m = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER(cur_text_doc->text_buffer)); 
	gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER(cur_text_doc->text_buffer), &iter, m);

	if (gtk_text_iter_forward_search  (&iter, s, GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, NULL, NULL))
	{
		gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(cur_text_doc->text_buffer), &match_start );
		gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW(cur_text_doc->text_view), &match_start, 0.0, TRUE, 0.0, 0.0 );
		gtk_text_view_place_cursor_onscreen (GTK_TEXT_VIEW (cur_text_doc->text_view));
	}

	g_free (s);
}
static VALUE
textview_place_cursor_onscreen(VALUE self)
{
    return CBOOL2RVAL(gtk_text_view_place_cursor_onscreen(_SELF(self)));
}
Beispiel #4
0
/*-------------------------------textview------------------------------*/
static gboolean
textview2_key_press_event_cb(GtkWidget *winParent, GdkEvent *event, gpointer userdata) {
    gboolean setFalseG = TRUE;

    /*Receive input in search mode*/
    if (inSearch == TRUE)
    {
        unsigned int c = event->key.keyval;
        /*get keyval as char*/
        if( c != GDK_KEY_KP_Enter && c != GDK_Return ) {
            if(isascii(c))/*can not input cjk thus not accounted*/
                strOper++[0] = c;
            else if(c == GDK_BackSpace && strOper > searchStr)
                strOper--;
            else {
                ;/*skip*/
            }
            strOper[0] = '\0';
        }
        else {
            /*highlight and try moving forward to target on Enter*/
            if(strlen(searchStr) != 0) {
                my_text_buffer_highlight(text2, searchStr, 4);
                myre_move_to_string(text2, searchStr, 1);
            }

            inSearch = FALSE;
        }

        if(inSearch)
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status,"status"),
                               searchStr);
        else
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status, "status"),
                               "End Search");

        return TRUE;
    }
    switch(event->key.keyval)
    {
    case GDK_i:
        gtk_widget_grab_focus(entry);
        break;

    case GDK_I:
        gtk_widget_grab_focus(entry);
        gtk_editable_set_position((GtkEditable *)entry, 0);
        break;

    case GDK_a:
    case GDK_A:
        gtk_widget_grab_focus(entry);
        gtk_editable_set_position((GtkEditable *)entry, -1);
        break;

    case GDK_x:
    case GDK_X:
        button2_clicked_cb();
        return TRUE;

    case GDK_j:
    case GDK_KEY_Down:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_DISPLAY_LINES,  1, inSelect && inCursor, NULL);
        break;

    case GDK_k:
    case GDK_KEY_Up:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, -1, inSelect && inCursor, NULL);
        break;

    case GDK_h:
    case GDK_KEY_Left:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_VISUAL_POSITIONS, -1, inSelect && inCursor, NULL);
        break;

    case GDK_l:
    case GDK_KEY_Right:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_VISUAL_POSITIONS,  1, inSelect && inCursor, NULL);
        break;

    case GDK_w:
    case GDK_e:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_WORDS,  1, inSelect && inCursor, NULL);
        break;
    case GDK_b:
        g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_WORDS, -1, inSelect && inCursor, NULL);
        break;

    case GDK_n:
        myre_move_to_string(text2, searchStr, 1);
        break;
    case GDK_N:
        myre_move_to_string(text2, searchStr, 0);
        break;

    case GDK_g:
        if(inVimG)
        {
            gtk_text_buffer_get_iter_at_offset(text2, &current, 0);
            gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview2), &current,
                                         0,    /* 0.0-0.5 screen */
                                         TRUE, /* use xy align   */
                                         0,    /* x */
                                         0     /* y */
                                        );
            gtk_text_buffer_place_cursor(text2, &current);
        }
        inVimG = !inVimG;
        setFalseG = FALSE;
        break;

    case GDK_G:
        gtk_text_iter_forward_to_end (&current);
        gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview2), &current,
                                     0,
                                     TRUE,
                                     0,
                                     0
                                    );
        gtk_text_buffer_place_cursor(text2, &current);
        break;

    case GDK_KEY_slash: /* toggle search */
        inSearch = !inSearch;
        if(NULL == searchStr) {
            searchStr = malloc(MAX_LENGTH);
        }
        /* try unmarking last search */
        if (strlen(searchStr) != 0)
        {
            my_text_buffer_highlight(text2, searchStr, 5);
        }
        memset(searchStr, '\0', MAX_LENGTH);
        strOper = searchStr;
        gtk_statusbar_push(status,
                           gtk_statusbar_get_context_id(status, "status"),
                           "--Search--");
        break;

    case GDK_KEY_KP_Enter:
    case GDK_Return:
        /*end search string input*/
        inSearch = FALSE;
        break;

    case GDK_p:
        /* put selection to entry */
        gtk_widget_grab_focus(entry);
        g_signal_emit_by_name(entry, "paste-clipboard", entry, NULL);
        break;

    case GDK_y:
        /* copy to clipboard */
        if(gtk_text_buffer_get_has_selection(text2))
        {
            g_signal_emit_by_name(textview2, "copy-clipboard", GTK_TEXT_VIEW(textview2), NULL);
            g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_VISUAL_POSITIONS,  0, FALSE, NULL);
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status, "status"),
                               "Selection copied to clipboard.");

            /* cursor off after yank */
            inCursor = FALSE;
            gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview2), inCursor);
            /* selection off */
            inSelect = FALSE;
        }
        else
            /* vacant yank attempts */
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status, "status"),
                               "--Search--Empty Yank Ignored");

        break;

    case GDK_v:
        /* toggle select mode */
        if(!inCursor) /* make sure cursor is shown */
        {
            inCursor = TRUE;
            vCursor  = TRUE;
            gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview2), inCursor);
        }
        if (inSelect)
        {
            /* clear selection */
            if(gtk_text_buffer_get_has_selection(text2))
                g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_VISUAL_POSITIONS,  0, FALSE, NULL);
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status, "status"),
                               "");

            /* exit vCursor after move-cursor dependency */
            if (inCursor && vCursor)
            {
                gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview2), FALSE);
                inCursor = FALSE;
                vCursor  = FALSE;
            }

        }
        else
        {
            gtk_statusbar_push(status,
                               gtk_statusbar_get_context_id(status, "status"),
                               "--Selection--");
        }

        inSelect = !inSelect;
        break;
    case GDK_c:
        /* always expire select mode */
        inSelect = FALSE;
        /* clear selection, should be inCursor */
        if(gtk_text_buffer_get_has_selection(text2))
            g_signal_emit_by_name(textview2, "move-cursor", GTK_MOVEMENT_VISUAL_POSITIONS,  0, FALSE, NULL);
        gtk_statusbar_push(status,
                           gtk_statusbar_get_context_id(status, "status"),
                           "");

        /* show cursor for selection */
        inCursor = !inCursor;
        gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview2), inCursor);

        break;


    default:
        return FALSE;
    }

    if(setFalseG)
        inVimG = FALSE;

    if( !(inSearch || inSelect) )
    {
        gtk_text_view_place_cursor_onscreen(GTK_TEXT_VIEW(textview2));
    }
    return TRUE;
}