in reply to Re: how to call gtk3::vte::grab_text_range
in thread how to call gtk3::vte::grab_text_range

Thanks for the answer

The second case, was a test. fixing to $func = sub {return 1}, returns to the first case

The only reason I mentioned is because, strangely it does not crash sending that parameter like that, which is weird for me

Accessing the source code of the get_text_range(), must be in some place of the gitlab repos for gtk from the gnome project, written in C

But in general by reading the Gtk documentation I have been able to work out everything, this is the first time I don't

This link shows the parameters to send : https://api.gtkd.org/vte.Terminal.Terminal.getTextRange.html

This link shows the function call : https://api.gtkd.org/vte.c.types.VteSelectionFunc.html

This link shows the old gnome2 vte documentation : https://gtk2-perl.sourceforge.net/doc/pod/Gnome2/Vte/Terminal.html, from where I must of the basic code that I use, everything else still works

I'm sure that I send the parameters correctly, because, I have tried a simple fixed call like this:

# Right mouse click on VTE $$self{_GUI}{_VTE}->signal_connect( 'button_press_event' => sub { if ($right_click_deep) { return 0; # Bubble up, let VTE's original handler t +ake care of it. } my ($widget, $event) = @_; my $state = $event->get_state(); my $shift = $state * ['shift-mask']; if ($event->button eq 2) { if (!$$self{_CFG}{'environments'}{ $$self{_UUID} }{'se +nd slow'}) { return 0; } $$self{_GUI}{_VTE}->paste_primary(); $$self{FOCUS}->child_focus('GTK_DIR_TAB_FORWARD'); return 1; } elsif ($event->button eq 3 and $event->type eq 'button-p +ress') { # See #209 for all this hack. my $handled_by_vte = 0; if (!$shift) { $right_click_deep = 1; $handled_by_vte = $$self{_GUI}{_VTE}->event($eve +nt); $right_click_deep = 0; } if (!$handled_by_vte) { $$self{FOCUS}->child_focus('GTK_DIR_TAB_FORWARD'); $self->_vteMenu($event); } return 1; # One way or another, we've handled it. } elsif ($event->button eq 1 && $event->type eq 'button-pr +ess' && $shift) { my ($w, $h) = $$self{_WINDOWTERMINAL}->get_size(); my ($col, $row) = (int($event->x / $$self{_GUI}{_VTE}- +>get_char_width()), int($event->y / $$self{_GUI}{_VTE}->get_char_widt +h() - 1)); print "($col,$row)\n"; my $func = sub { return 1 }; #my $string = $$self{_GUI}{_VTE}->get_text_range($row, + $col, $row, int($w / $$self{_GUI}{_VTE}->get_char_width() + 0.5), $f +unc, my $data = undef); my $string = $$self{_GUI}{_VTE}->get_text_range(1, 0, +1, 5, $func, my $data = undef); #my @list = $$self{_GUI}{_VTE}->get_text(); #print "($row,$col):@list\n"; }

In this case I send fixed values for row,col that I know have text in that range and still I get the error

The other oddity of this is that this code crashes too

my @list = $$self{_GUI}{_VTE}->get_text(); my @list = $$self{_GUI}{_VTE}->get_text($func = udef,$data = undef);

Even when the documentation says that the 2 parameters are optional

The other thing I'm not able to find is where is the documentation for the current Vte library is I just have this old link to use as a reference https://gtk2-perl.sourceforge.net/doc/pod/Gnome2/Vte/Terminal.html