Add a -to-file <filename> switch to the echo command

As discussed in #2836
This commit is contained in:
Maxime Coste 2019-04-07 09:31:36 +10:00
parent 835f2239a7
commit 744778be30
7 changed files with 23 additions and 1 deletions

View File

@ -206,6 +206,10 @@ of the file onto the filesystem
*-debug*:::
print the given text to the *\*debug** buffer
*-to-file* <filename>:::
write the given text to the given file on the host
filesystem.
*set-face* <scope> <name> <facespec>::
*alias* face +
define a face in *scope*

View File

@ -1200,6 +1200,7 @@ const CommandDesc echo_cmd = {
"echo <params>...: display given parameters in the status line",
ParameterDesc{
{ { "markup", { false, "parse markup" } },
{ "to-file", { true, "echo contents to given filename" } },
{ "debug", { false, "write to debug buffer instead of status line" } } },
ParameterDesc::Flags::SwitchesOnlyAtStart
},
@ -1208,7 +1209,11 @@ const CommandDesc echo_cmd = {
CommandCompleter{},
[](const ParametersParser& parser, Context& context, const ShellContext&)
{
String message = fix_atom_text(join(parser, ' ', false));
String message = join(parser, ' ', false);
if (auto filename = parser.get_switch("to-file"))
return write_to_file(*filename, message);
message = fix_atom_text(message);
if (parser.get_switch("debug"))
write_to_debug_buffer(message);
else if (parser.get_switch("markup"))

View File

@ -257,6 +257,15 @@ void write(int fd, StringView data)
}
}
void write_to_file(StringView filename, StringView data)
{
const int fd = open(filename.zstr(), O_CREAT | O_WRONLY | O_TRUNC, 0644);
if (fd == -1)
throw file_access_error(filename, strerror(errno));
auto close_fd = on_scope_end([fd]{ close(fd); });
write(fd, data);
}
struct BufferedWriter
{
BufferedWriter(int fd) : fd{fd} {}

View File

@ -39,6 +39,7 @@ bool fd_writable(int fd);
String read_fd(int fd, bool text = false);
String read_file(StringView filename, bool text = false);
void write(int fd, StringView data);
void write_to_file(StringView filename, StringView data);
struct MappedFile
{

View File

@ -0,0 +1 @@
:echo -to-file data %{foo bar}<ret>!cat data<ret>

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
foo bar