Fix regression when file on command line cannot be opened

Commit 933e4a599 (Load buffer in command line order, 2022-12-06)
introduced a regression: the command

	$ kak /boot/grub/grub.cfg
	Fatal error: no such buffer '/boot/grub/grub.cfg'

quits with no indication of the underlying error.

Prior to 933e4a599, it would open the *scratch* buffer instead,
and show an error in the status line, pointing to the debug buffer,
which would contain:

	error while opening file '/boot/grub/grub.cfg':
	    /boot/grub/grub.cfg: Permission denied

Let's fix this scenario by matching the old behavior.
This commit is contained in:
Johannes Altmanninger 2023-01-06 08:36:57 +01:00
parent 938be7a7b0
commit 4f7d7a5e33

View File

@ -50,10 +50,13 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pi
StringView init_buffer, Optional<BufferCoord> init_coord, StringView init_buffer, Optional<BufferCoord> init_coord,
Client::OnExitCallback on_exit) Client::OnExitCallback on_exit)
{ {
Buffer& buffer = init_buffer.empty() ? BufferManager::instance().get_first_buffer() Buffer* buffer = nullptr;
: BufferManager::instance().get_buffer(init_buffer); if (not init_buffer.empty())
buffer = BufferManager::instance().get_buffer_ifp(init_buffer);
if (buffer == nullptr)
buffer = &BufferManager::instance().get_first_buffer();
WindowAndSelections ws = get_free_window(buffer); WindowAndSelections ws = get_free_window(*buffer);
Client* client = new Client{std::move(ui), std::move(ws.window), Client* client = new Client{std::move(ui), std::move(ws.window),
std::move(ws.selections), pid, std::move(ws.selections), pid,
std::move(env_vars), std::move(env_vars),
@ -64,7 +67,7 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pi
if (init_coord) if (init_coord)
{ {
auto& selections = client->context().selections_write_only(); auto& selections = client->context().selections_write_only();
selections = SelectionList(buffer, buffer.clamp(*init_coord)); selections = SelectionList(*buffer, buffer->clamp(*init_coord));
client->context().window().center_line(init_coord->line); client->context().window().center_line(init_coord->line);
} }