oh-my-git/scripts/fake-editor
Morten Minde Neergaard 38675f94e8 fake-editor: Prefix save message with an "s"
With this, we can distinguish "save" from "close"

This fixes issue #160
2022-11-03 09:34:32 +01:00

40 lines
1.3 KiB
Perl
Executable file

#!/usr/bin/env perl
use IO::Socket;
use File::Spec;
$socket = IO::Socket::INET->new(PeerAddr => "127.0.0.1",
PeerPort => 1234,
Proto => "tcp",
Type => SOCK_STREAM);
my $absolute_path = File::Spec->rel2abs($ARGV[0]);
# Send the length of the first argument as four bytes.
$socket->send(pack("L", length($absolute_path)));
# Send the first argument as a string.
$socket->send($absolute_path);
# Get and send the content of the file, prefixed by its length.
my $content = do{local(@ARGV,$/)=$absolute_path;<>};
$socket->send(pack("L", length($content)));
$socket->send($content);
# Get size of written content. This blocks until the players hits save or close.
my $length_str;
$socket->recv($length_str, 4);
my $length = unpack("L", $length_str);
my $new_content = "";
$socket->recv($new_content, $length);
# Write content back into the file.
if ($new_content =~ /^s/) {
my $handle;
open ($handle,'>',$absolute_path) or die("Error opening file");
print $handle (substr $new_content, 1);
close ($handle) or die ("Error closing file");
}
# This call is intended to block, we're waiting for Godot to close the connection.
my $reply;
$socket->read($reply, 1000);