diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index cf5d390..8de2d40 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -487,3 +487,8 @@ EncodedString Buffer::get_string() m_gap_buffer->compact(); 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(filename); +} diff --git a/src/core/Buffer.h b/src/core/Buffer.h index a79cf74..b762bf0 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -183,6 +183,7 @@ public: void erase_code_point(const Buffer::Iterator & position); void erase_range(const Buffer::Range & range); std::shared_ptr filename() const { return m_filename; } + void set_filename(const std::string & filename); Iterator begin() const { return Iterator(this); } std::shared_ptr beginp() const { return std::make_shared(this); } Iterator end() const { return *m_eof_iterator; } diff --git a/src/gui/Window.cc b/src/gui/Window.cc index dc1f30e..7ca9445 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -551,15 +551,19 @@ void Window::handle_command(const EncodedString & command) void Window::command_write_file(const CommandParser & cp) { - std::shared_ptr buffer = m_focused_buffer_pane->buffer(); std::string path; + std::shared_ptr buffer = m_focused_buffer_pane->buffer(); + auto filename = buffer->filename(); if (cp.size() >= 2) { path = cp[1].to_string(); + if (!filename) + { + buffer->set_filename(path); + } } else { - auto filename = buffer->filename(); if (filename) { path = *filename;