diff --git a/data/core/commands/root.lua b/data/core/commands/root.lua index 37d42f5a..7bc13283 100644 --- a/data/core/commands/root.lua +++ b/data/core/commands/root.lua @@ -11,6 +11,15 @@ local t = { node:close_active_view(core.root_view.root_node) end, + ["root:close-or-quit"] = function() + local node = core.root_view:get_active_node() + if node and (not node:is_empty() or not node.is_primary_node) then + node:close_active_view(core.root_view.root_node) + else + core.quit() + end + end, + ["root:close-all"] = function() core.confirm_close_all(core.root_view.close_all_docviews, core.root_view) end, diff --git a/data/core/keymap-macos.lua b/data/core/keymap-macos.lua index 327a1cc5..e233bb2e 100644 --- a/data/core/keymap-macos.lua +++ b/data/core/keymap-macos.lua @@ -17,7 +17,8 @@ local function keymap_macos(keymap) ["cmd+ctrl+i"] = "root:switch-to-up", ["cmd+ctrl+k"] = "root:switch-to-down", - ["cmd+w"] = "root:close", + + ["cmd+w"] = "root:close-or-quit", ["ctrl+tab"] = "root:switch-to-next-tab", ["ctrl+shift+tab"] = "root:switch-to-previous-tab", ["cmd+pageup"] = "root:move-tab-left", @@ -31,7 +32,6 @@ local function keymap_macos(keymap) ["cmd+7"] = "root:switch-to-tab-7", ["cmd+8"] = "root:switch-to-tab-8", ["cmd+9"] = "root:switch-to-tab-9", - ["cmd+f"] = "find-replace:find", ["cmd+r"] = "find-replace:replace", ["f3"] = "find-replace:repeat-find", diff --git a/data/core/rootview.lua b/data/core/rootview.lua index 037e7580..36ab148d 100644 --- a/data/core/rootview.lua +++ b/data/core/rootview.lua @@ -584,7 +584,7 @@ end function Node:is_empty() if self.type == "leaf" then - return #self.views == 0 + return #self.views == 0 or (#self.views == 1 and self.views[1]:is(EmptyView)) else return self.a:is_empty() and self.b:is_empty() end @@ -608,9 +608,9 @@ function Node:close_all_docviews() else self.a:close_all_docviews() self.b:close_all_docviews() - if self.a:is_empty() then + if self.a:is_empty() and not self.a.is_primary_node then self:consume(self.b) - elseif self.b:is_empty() then + elseif self.b:is_empty() and not self.b.is_primary_node then self:consume(self.a) end end @@ -833,7 +833,7 @@ function RootView:on_mouse_moved(x, y, dx, dy) core.request_cursor(node.active_view.cursor) end if node and self.dragged_node and (self.dragged_node[1] ~= node or (tab_index and self.dragged_node[2] ~= tab_index)) - and node.type == "leaf" and #node.views > 0 and node.views[1]:is(DocView) then + and node.type == "leaf" and #node.views > 0 and node.views[1]:is(DocView) then local tab = self.dragged_node[1].views[self.dragged_node[2]] if self.dragged_node[1] ~= node then for i, v in ipairs(node.views) do if v.doc == tab.doc then tab = nil break end end