Text-Editor-Easy
view release on metacpan or search on metacpan
lib/Text/Editor/Easy/Abstract/Key.pm view on Meta::CPAN
else {
if ( $ref_line == $select_ref->{'stop_line'} ) {
Text::Editor::Easy::Abstract::line_deselect( $self, $ref_line );
}
if ( $select_ref->{'mode'} eq '+' ) {
# Changement possible de sens
#my $search_line = $line->next;
my ( $ref_search_line ) = $self->[PARENT]->next_line( $ref_line );
my $ref_start_line = $select_ref->{'start_line'};
my $ref_stop_line = $select_ref->{'stop_line'};
while ( $ref_search_line
and $ref_search_line ne $ref_start_line
and $ref_search_line ne $ref_stop_line ) {
#
#
( $ref_search_line ) = $self->[PARENT]->next_line( $ref_search_line );
}
if ( $ref_search_line == $ref_start_line ) {
# Inversion
$select_ref->{'mode'} = '-';
}
Text::Editor::Easy::Abstract::line_select( $self, $ref_line, 0, $pos);
}
else {
Text::Editor::Easy::Abstract::line_select( $self, $ref_line, $pos);
}
}
$select_ref->{'stop_line'} = $ref_line;
$select_ref->{'stop_pos'} = $pos;
$self->[SELECTION] = $select_ref;
}
sub copy {
my ($self) = @_;
#Appel au thread manager à faire. Pour l'instant, méthode provisoire et très longue
my $select_ref = set_start_selection_point($self, '+');
return if ( ! defined $select_ref->{'stop_line'} );
my ( $ref_start_line, $start_pos, $ref_stop_line, $stop_pos );
if ( $select_ref->{'mode'} eq '+' ) {
$ref_start_line = $select_ref->{'start_line'};
$start_pos = $select_ref->{'start_pos'};
$ref_stop_line = $select_ref->{'stop_line'};
$stop_pos = $select_ref->{'stop_pos'};
}
else {
$ref_start_line = $select_ref->{'stop_line'};
$start_pos = $select_ref->{'stop_pos'};
$ref_stop_line = $select_ref->{'start_line'};
$stop_pos = $select_ref->{'start_pos'};
}
my $buffer;
if ( $ref_stop_line != $ref_start_line ) {
$buffer = substr ( $self->[PARENT]->line_text( $ref_start_line) , $start_pos );
$buffer .= "\n";
}
else {
$buffer = substr ( $self->[PARENT]->line_text( $ref_start_line ), $start_pos, $stop_pos - $start_pos );
print "========Debut buffer\n$buffer\n==========Fin buffer\n";
Text::Editor::Easy->clipboard_set($buffer);
return;
}
my ( $ref_line ) = $self->[PARENT]->next_line( $ref_start_line );
while ( defined $ref_line and $ref_line != $ref_stop_line ) {
$ref_start_line = $ref_line;
$buffer .= $self->[PARENT]->line_text( $ref_line ) . "\n";
( $ref_line ) = $self->[PARENT]->next_line( $ref_line );
}
if ( ! defined $ref_line ) { # stop line suppressed ?
print STDERR "Can't copy : no line after line with reference $ref_start_line\n";
return;
}
$buffer .= substr ( $self->[PARENT]->line_text( $ref_line ), 0, $stop_pos );
#print "========Debut buffer\n$buffer\n==========Fin buffer\n";
Text::Editor::Easy->clipboard_set($buffer);
return $buffer;
#$buffer = $self->cursor->line->text . "\n";
}
sub delete_selection {
my ( $self ) = @_;
my $select_ref = $self->[SELECTION];
return if ( ! defined $select_ref );
my ( $ref_start_line, $start_pos, $ref_stop_line, $stop_pos );
if ( $select_ref->{'mode'} eq '+' ) {
$ref_start_line = $select_ref->{'start_line'};
$start_pos = $select_ref->{'start_pos'};
$ref_stop_line = $select_ref->{'stop_line'};
$stop_pos = $select_ref->{'stop_pos'};
}
else {
$ref_start_line = $select_ref->{'stop_line'};
$start_pos = $select_ref->{'stop_pos'};
$ref_stop_line = $select_ref->{'start_line'};
$stop_pos = $select_ref->{'start_pos'};
}
#print "Dans delete_selection : $start_pos|$stop_pos\n";
if ( $ref_start_line == $ref_stop_line ) {
my ( $text, $ref_cursor_line ) = Text::Editor::Easy::Abstract::cursor_line($self);
if ( $ref_cursor_line != $ref_stop_line ) {
# Bizarre !
print STDERR "Cursor not on start or end of selection : the text won't be suppressed\n";
Text::Editor::Easy::Abstract::deselect( $self );
undef $self->[SELECTION];
return;
}
my $new_text = substr ( $text, 0, $start_pos) . substr( $text, $stop_pos);
#print "Nouveau text de $ref_stop_line : |$new_text| START POS : $start_pos\n";
Text::Editor::Easy::Abstract::cursor_set( $self, $start_pos, $ref_stop_line );
Text::Editor::Easy::Abstract::line_set($self, $ref_stop_line, $new_text);
Text::Editor::Easy::Abstract::line_deselect( $self, $ref_stop_line );
undef $self->[SELECTION];
return;
}
my ( $text, $ref_cursor_line ) = Text::Editor::Easy::Abstract::cursor_line($self);
if ( $ref_cursor_line != $ref_start_line and $ref_cursor_line != $ref_stop_line ) {
print STDERR "Cursor not on start or end of selection : the text won't be suppressed\n";
Text::Editor::Easy::Abstract::deselect( $self );
undef $self->[SELECTION];
return;
}
my ( $at, $from );
if ( Text::Editor::Easy::Abstract::line_displayed( $self, $ref_start_line ) ) {
$at = Text::Editor::Easy::Abstract::line_top_ord ( $self, $ref_start_line );
$from = 'top';
}
elsif ( Text::Editor::Easy::Abstract::line_displayed( $self, $ref_stop_line ) ) {
$at = Text::Editor::Easy::Abstract::line_bottom_ord ( $self, $ref_stop_line );
$from = 'bottom';
( run in 1.431 second using v1.01-cache-2.11-cpan-84e82930d8c )