editor: only ask to save if anything's changed; print status

This commit is contained in:
Juerd Waalboer 2022-08-30 20:57:41 +02:00
parent 43a1990974
commit 042db97ea8

View file

@ -87,7 +87,7 @@ sub _find($win) {
$win->delete('find'); $win->delete('find');
} }
sub _editor($title, $data) { sub _editor($title, $origdata) {
our $cui ||= Curses::UI->new; our $cui ||= Curses::UI->new;
my $win = $cui->add('main', 'Window'); my $win = $cui->add('main', 'Window');
$title = "[$title] Ctrl+X: exit Ctrl+F: find Ctrl+C/K/V: copy/cut/paste"; $title = "[$title] Ctrl+X: exit Ctrl+F: find Ctrl+C/K/V: copy/cut/paste";
@ -95,7 +95,7 @@ sub _editor($title, $data) {
my $editor = $win->add( my $editor = $win->add(
'editor', 'TextEditor', 'editor', 'TextEditor',
-title => $title, -title => $title,
-text => $data, -text => $origdata,
-border => 1, -border => 1,
-padbottom => 1, # ibm3151/screen lastline corner glitch workaround -padbottom => 1, # ibm3151/screen lastline corner glitch workaround
-wrapping => 0, -wrapping => 0,
@ -120,6 +120,7 @@ sub _editor($title, $data) {
[ "\cC" => sub { $editor->{-pastebuffer} = $editor->getline_at_ypos($editor->{-ypos}) } ], [ "\cC" => sub { $editor->{-pastebuffer} = $editor->getline_at_ypos($editor->{-ypos}) } ],
[ "\cF" => sub { _find($win) } ], [ "\cF" => sub { _find($win) } ],
[ "\cX" => sub { [ "\cX" => sub {
if ($editor->get ne $origdata) {
my $answer = $cui->dialog( my $answer = $cui->dialog(
-message => "Save changes?", -message => "Save changes?",
-buttons => [ -buttons => [
@ -129,8 +130,11 @@ sub _editor($title, $data) {
], ],
-values => [ 1, 0 ], -values => [ 1, 0 ],
); );
$return = $editor->get if $answer == 1; $return = $origdata if $answer == 1;
$cui->mainloopExit if $answer >= 0; $cui->mainloopExit if $answer >= 0;
} else {
$cui->mainloopExit;
}
} ], } ],
); );
@ -159,7 +163,12 @@ sub edit($filename) {
or die "Someone else is alreading editing $filename.\n"; or die "Someone else is alreading editing $filename.\n";
my $save = _editor($filename, scalar slurp $filename); my $save = _editor($filename, scalar slurp $filename);
spurt $filename, $save if defined $save; if (defined $save) {
spurt $filename, $save;
print "$filename updated.\n";
} else {
print "$filename not changed.\n";
}
} }
1; 1;