Support sourcing files that use crlf end of lines
This commit is contained in:
parent
7bff1b782e
commit
be03db9a24
|
@ -947,7 +947,7 @@ const CommandDesc source_cmd = {
|
||||||
filename_completer,
|
filename_completer,
|
||||||
[](const ParametersParser& parser, Context& context)
|
[](const ParametersParser& parser, Context& context)
|
||||||
{
|
{
|
||||||
String file_content = read_file(parse_filename(parser[0]));
|
String file_content = read_file(parse_filename(parser[0]), true);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
CommandManager::instance().execute(file_content, context);
|
CommandManager::instance().execute(file_content, context);
|
||||||
|
|
27
src/file.cc
27
src/file.cc
|
@ -110,22 +110,37 @@ String compact_path(StringView filename)
|
||||||
return filename.str();
|
return filename.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
String read_fd(int fd)
|
String read_fd(int fd, bool text)
|
||||||
{
|
{
|
||||||
String content;
|
String content;
|
||||||
char buf[256];
|
constexpr size_t bufsize = 256;
|
||||||
|
char buf[bufsize];
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
ssize_t size = read(fd, buf, 256);
|
ssize_t size = read(fd, buf, bufsize);
|
||||||
if (size == -1 or size == 0)
|
if (size == -1 or size == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
content += StringView(buf, buf + size);
|
if (text)
|
||||||
|
{
|
||||||
|
ssize_t beg = 0;
|
||||||
|
for (ssize_t pos = 0; pos < size; ++pos)
|
||||||
|
{
|
||||||
|
if (buf[pos] == '\r')
|
||||||
|
{
|
||||||
|
content += StringView{buf + beg, buf + pos};
|
||||||
|
beg = pos + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
content += StringView{buf + beg, buf + size};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
content += StringView{buf, buf + size};
|
||||||
}
|
}
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
String read_file(StringView filename)
|
String read_file(StringView filename, bool text)
|
||||||
{
|
{
|
||||||
int fd = open(parse_filename(filename).c_str(), O_RDONLY);
|
int fd = open(parse_filename(filename).c_str(), O_RDONLY);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
|
@ -137,7 +152,7 @@ String read_file(StringView filename)
|
||||||
}
|
}
|
||||||
auto close_fd = on_scope_end([fd]{ close(fd); });
|
auto close_fd = on_scope_end([fd]{ close(fd); });
|
||||||
|
|
||||||
return read_fd(fd);
|
return read_fd(fd, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer* create_buffer_from_file(StringView filename)
|
Buffer* create_buffer_from_file(StringView filename)
|
||||||
|
|
|
@ -37,8 +37,8 @@ std::pair<StringView, StringView> split_path(StringView path);
|
||||||
|
|
||||||
String get_kak_binary_path();
|
String get_kak_binary_path();
|
||||||
|
|
||||||
String read_fd(int fd);
|
String read_fd(int fd, bool text = false);
|
||||||
String read_file(StringView filename);
|
String read_file(StringView filename, bool text = false);
|
||||||
|
|
||||||
Buffer* create_buffer_from_file(StringView filename);
|
Buffer* create_buffer_from_file(StringView filename);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user