AtkText -> vte_terminal_select_text
vte requires a patch to expose this for now, but it's the only way to do this since AtkText is completely broken
This commit is contained in:
parent
4ed94191a9
commit
8bb2c476df
12
README.rst
12
README.rst
|
@ -6,7 +6,8 @@ unset) and then falls back to ``$XDG_CONFIG_DIRS``.
|
|||
DEPENDENCIES
|
||||
============
|
||||
|
||||
A vte version >= 0.30.
|
||||
A vte version >= 0.30. A patch is currently required to expose the
|
||||
``vte-terminal-select-text`` function which is used for keyboard selection.
|
||||
|
||||
KEYBINDINGS
|
||||
===========
|
||||
|
@ -46,12 +47,7 @@ TODO
|
|||
* scrollback search needs to be improved upstream [1]_
|
||||
* expose keybindings in ``termite.cfg``
|
||||
|
||||
TEXT SELECTION
|
||||
--------------
|
||||
|
||||
* _vte_terminal_select_text would be perfect for extending this, but it isn't
|
||||
exposed in the API
|
||||
* does not currently work in ncurses applications
|
||||
* needs to be extended to more than just the basic ``h``/``j``/``k``/``l``
|
||||
* text selection needs to be extended to more than just the basic
|
||||
``h``/``j``/``k``/``l``
|
||||
|
||||
.. [1] https://bugzilla.gnome.org/show_bug.cgi?id=627886
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
diff -aur vte-0.32.2-old/src/vteaccess.c vte-0.32.2/src/vteaccess.c
|
||||
--- vte-0.32.2-old/src/vteaccess.c 2012-07-06 19:26:00.615978048 -0400
|
||||
+++ vte-0.32.2/src/vteaccess.c 2012-07-06 19:26:52.543297289 -0400
|
||||
@@ -1666,7 +1666,7 @@
|
||||
VTE_TERMINAL_ACCESSIBLE_PRIVATE_DATA);
|
||||
xy_from_offset (priv, start_offset, &start_x, &start_y);
|
||||
xy_from_offset (priv, end_offset, &end_x, &end_y);
|
||||
- _vte_terminal_select_text (terminal, start_x, start_y, end_x, end_y, start_offset, end_offset);
|
||||
+ vte_terminal_select_text (terminal, start_x, start_y, end_x, end_y, start_offset, end_offset);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
|
||||
--- vte-0.32.2-old/src/vte.c 2012-07-06 19:26:00.612644674 -0400
|
||||
+++ vte-0.32.2/src/vte.c 2012-07-06 19:26:52.479963159 -0400
|
||||
@@ -14568,7 +14568,7 @@
|
||||
}
|
||||
|
||||
void
|
||||
-_vte_terminal_select_text(VteTerminal *terminal,
|
||||
+vte_terminal_select_text(VteTerminal *terminal,
|
||||
long start_col, long start_row,
|
||||
long end_col, long end_row,
|
||||
int start_offset, int end_offset)
|
||||
@@ -14603,7 +14603,7 @@
|
||||
_vte_terminal_select_empty_at(VteTerminal *terminal,
|
||||
long col, long row)
|
||||
{
|
||||
- _vte_terminal_select_text(terminal, col, row, col - 1, row, 0, 0);
|
||||
+ vte_terminal_select_text(terminal, col, row, col - 1, row, 0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -15293,7 +15293,7 @@
|
||||
g_free (row_text);
|
||||
g_match_info_free (match_info);
|
||||
|
||||
- _vte_terminal_select_text (terminal, start_col, start_row, end_col, end_row, 0, 0);
|
||||
+ vte_terminal_select_text (terminal, start_col, start_row, end_col, end_row, 0, 0);
|
||||
/* Quite possibly the math here should not access adjustment directly... */
|
||||
value = gtk_adjustment_get_value(terminal->adjustment);
|
||||
page_size = gtk_adjustment_get_page_size(terminal->adjustment);
|
||||
diff -aur vte-0.32.2-old/src/vte.h vte-0.32.2/src/vte.h
|
||||
--- vte-0.32.2-old/src/vte.h 2012-07-06 19:26:00.612644674 -0400
|
||||
+++ vte-0.32.2/src/vte.h 2012-07-06 19:28:06.264224798 -0400
|
||||
@@ -485,6 +485,11 @@
|
||||
|
||||
char *vte_get_user_shell (void);
|
||||
|
||||
+void vte_terminal_select_text(VteTerminal *terminal,
|
||||
+ long start_col, long start_row,
|
||||
+ long end_col, long end_row,
|
||||
+ int start_offset, int end_offset);
|
||||
+
|
||||
/* Accessors for bindings. */
|
||||
#if !GTK_CHECK_VERSION (2, 91, 2)
|
||||
GtkAdjustment *vte_terminal_get_adjustment(VteTerminal *terminal);
|
16
termite.c
16
termite.c
|
@ -6,7 +6,6 @@
|
|||
#include <gdk/gdkx.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <vte/vte.h>
|
||||
#include <vte/vteaccess.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
|
@ -30,9 +29,9 @@ typedef enum select_mode {
|
|||
} select_mode;
|
||||
|
||||
typedef struct select_info {
|
||||
AtkText *text;
|
||||
select_mode mode;
|
||||
int begin;
|
||||
long begin_col;
|
||||
long begin_row;
|
||||
} select_info;
|
||||
|
||||
typedef struct search_panel_info {
|
||||
|
@ -83,11 +82,10 @@ static void cursor_moved_cb(VteTerminal *vte, select_info *select) {
|
|||
|
||||
vte_terminal_select_none(vte);
|
||||
|
||||
int offset = atk_text_get_caret_offset(select->text);
|
||||
long end_row, end_col;
|
||||
vte_terminal_get_cursor_position(vte, &end_col, &end_row);
|
||||
|
||||
atk_text_add_selection(select->text,
|
||||
MIN(select->begin, offset),
|
||||
MAX(select->begin, offset));
|
||||
vte_terminal_select_text(vte, select->begin_col, select->begin_row, end_col, end_row, 0, 0);
|
||||
|
||||
vte_terminal_copy_primary(vte);
|
||||
}
|
||||
|
@ -108,7 +106,7 @@ static void toggle_visual(VteTerminal *vte, select_info *select) {
|
|||
vte_terminal_select_none(vte);
|
||||
} else {
|
||||
select->mode = SELECT_VISUAL;
|
||||
select->begin = atk_text_get_caret_offset(select->text);
|
||||
vte_terminal_get_cursor_position(vte, &select->begin_col, &select->begin_row);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -641,7 +639,7 @@ int main(int argc, char **argv) {
|
|||
gtk_container_add(GTK_CONTAINER(overlay), vte);
|
||||
gtk_container_add(GTK_CONTAINER(window), overlay);
|
||||
|
||||
select_info select = {ATK_TEXT(vte_terminal_accessible_new(VTE_TERMINAL(vte))), SELECT_OFF, 0};
|
||||
select_info select = {SELECT_OFF, 0, 0};
|
||||
search_panel_info info = {vte, entry, alignment, OVERLAY_HIDDEN, select};
|
||||
|
||||
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
|
||||
|
|
Loading…
Reference in New Issue