Set buffer filename if it has none and it is written with an explicit filename

This commit is contained in:
Josh Holtrop 2018-03-20 21:23:11 -04:00
parent 8d158e4ed9
commit d93953a929
3 changed files with 12 additions and 2 deletions

View File

@ -487,3 +487,8 @@ EncodedString Buffer::get_string()
m_gap_buffer->compact(); m_gap_buffer->compact();
return EncodedString(m_gap_buffer->address(0u), m_gap_buffer->size(), m_encoding); return EncodedString(m_gap_buffer->address(0u), m_gap_buffer->size(), m_encoding);
} }
void Buffer::set_filename(const std::string & filename)
{
m_filename = std::make_shared<std::string>(filename);
}

View File

@ -183,6 +183,7 @@ public:
void erase_code_point(const Buffer::Iterator & position); void erase_code_point(const Buffer::Iterator & position);
void erase_range(const Buffer::Range & range); void erase_range(const Buffer::Range & range);
std::shared_ptr<std::string> filename() const { return m_filename; } std::shared_ptr<std::string> filename() const { return m_filename; }
void set_filename(const std::string & filename);
Iterator begin() const { return Iterator(this); } Iterator begin() const { return Iterator(this); }
std::shared_ptr<Iterator> beginp() const { return std::make_shared<Iterator>(this); } std::shared_ptr<Iterator> beginp() const { return std::make_shared<Iterator>(this); }
Iterator end() const { return *m_eof_iterator; } Iterator end() const { return *m_eof_iterator; }

View File

@ -551,15 +551,19 @@ void Window::handle_command(const EncodedString & command)
void Window::command_write_file(const CommandParser & cp) void Window::command_write_file(const CommandParser & cp)
{ {
std::shared_ptr<Buffer> buffer = m_focused_buffer_pane->buffer();
std::string path; std::string path;
std::shared_ptr<Buffer> buffer = m_focused_buffer_pane->buffer();
auto filename = buffer->filename();
if (cp.size() >= 2) if (cp.size() >= 2)
{ {
path = cp[1].to_string(); path = cp[1].to_string();
if (!filename)
{
buffer->set_filename(path);
}
} }
else else
{ {
auto filename = buffer->filename();
if (filename) if (filename)
{ {
path = *filename; path = *filename;