From 266bdfe5193bf66a28118d0aa8c0f441b26a3129 Mon Sep 17 00:00:00 2001 From: glennsl Date: Sat, 27 Jun 2020 16:13:40 +0200 Subject: [PATCH 1/3] add oni.layout.singleTabMode configuration setting --- src/Feature/Layout/Configuration.re | 2 ++ src/Feature/Layout/Feature_Layout.re | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Feature/Layout/Configuration.re b/src/Feature/Layout/Configuration.re index d928254159..becfe547cf 100644 --- a/src/Feature/Layout/Configuration.re +++ b/src/Feature/Layout/Configuration.re @@ -57,3 +57,5 @@ let layoutTabPosition = Codec.layoutTabPosition, ~default=`bottom, ); + +let singleTabMode = setting("oni.layout.singleTabMode", bool, ~default=true); diff --git a/src/Feature/Layout/Feature_Layout.re b/src/Feature/Layout/Feature_Layout.re index 0cec799cae..017869bbbc 100644 --- a/src/Feature/Layout/Feature_Layout.re +++ b/src/Feature/Layout/Feature_Layout.re @@ -744,5 +744,9 @@ module Contributions = { ]; let configuration = - Configuration.[showLayoutTabs.spec, layoutTabPosition.spec]; + Configuration.[ + showLayoutTabs.spec, + layoutTabPosition.spec, + singleTabMode.spec, + ]; }; From fb8a712d16cbfa9b8e387dc90e42a5d214f3a059 Mon Sep 17 00:00:00 2001 From: glennsl Date: Sat, 27 Jun 2020 16:18:29 +0200 Subject: [PATCH 2/3] hide tabs when singleTabMode=true --- src/Feature/Layout/View.re | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Feature/Layout/View.re b/src/Feature/Layout/View.re index f2984a3290..ed6b5074f5 100644 --- a/src/Feature/Layout/View.re +++ b/src/Feature/Layout/View.re @@ -264,6 +264,7 @@ module EditorGroupView = { let make = ( ~provider as module ContentModel: ContentModel, + ~config, ~showTabs, ~uiFont, ~theme, @@ -280,7 +281,7 @@ module EditorGroupView = { | None => React.empty }; - if (showTabs) { + if (showTabs && !Local.Configuration.singleTabMode.get(config)) { let editors = model.editors |> List.rev; let tabs = Date: Sat, 27 Jun 2020 16:35:05 +0200 Subject: [PATCH 3/3] replace tabs on open in single tab mode --- src/Feature/Layout/Configuration.re | 2 +- src/Feature/Layout/Feature_Layout.re | 7 +++++++ src/Feature/Layout/Feature_Layout.rei | 2 +- src/Feature/Layout/Model.re | 12 ++++++++++-- src/Store/Features.re | 1 + 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Feature/Layout/Configuration.re b/src/Feature/Layout/Configuration.re index becfe547cf..f2c697015f 100644 --- a/src/Feature/Layout/Configuration.re +++ b/src/Feature/Layout/Configuration.re @@ -58,4 +58,4 @@ let layoutTabPosition = ~default=`bottom, ); -let singleTabMode = setting("oni.layout.singleTabMode", bool, ~default=true); +let singleTabMode = setting("oni.layout.singleTabMode", bool, ~default=false); diff --git a/src/Feature/Layout/Feature_Layout.re b/src/Feature/Layout/Feature_Layout.re index 017869bbbc..90a34061ef 100644 --- a/src/Feature/Layout/Feature_Layout.re +++ b/src/Feature/Layout/Feature_Layout.re @@ -4,6 +4,13 @@ open Oni_Core.Utility; include Model; +let openEditor = (~config, editor) => + if (Local.Configuration.singleTabMode.get(config)) { + updateActiveGroup(Group.replaceAllWith(editor)); + } else { + updateActiveGroup(Group.openEditor(editor)); + }; + // UPDATE open Msg; diff --git a/src/Feature/Layout/Feature_Layout.rei b/src/Feature/Layout/Feature_Layout.rei index 26f0ad9e27..2dc455f24c 100644 --- a/src/Feature/Layout/Feature_Layout.rei +++ b/src/Feature/Layout/Feature_Layout.rei @@ -19,7 +19,7 @@ let split: ([ | `Horizontal | `Vertical], model) => model; let activeEditor: model => Editor.t; -let openEditor: (Editor.t, model) => model; +let openEditor: (~config: Config.resolver, Editor.t, model) => model; let closeBuffer: (~force: bool, Vim.Types.buffer, model) => option(model); let addLayoutTab: model => model; diff --git a/src/Feature/Layout/Model.re b/src/Feature/Layout/Model.re index ad2376075b..8f16e610ca 100644 --- a/src/Feature/Layout/Model.re +++ b/src/Feature/Layout/Model.re @@ -1,3 +1,6 @@ +module Local = { + module Configuration = Configuration; +}; open Oni_Core; open Utility; open Feature_Editor; @@ -18,6 +21,7 @@ module Group: { let nextEditor: t => t; let previousEditor: t => t; let openEditor: (Editor.t, t) => t; + let replaceAllWith: (Editor.t, t) => t; let removeEditor: (int, t) => option(t); let map: (Editor.t => Editor.t, t) => t; @@ -92,6 +96,12 @@ module Group: { }; }; + let replaceAllWith = (editor, group) => { + ...group, + editors: [editor], + selectedId: Editor.getId(editor), + }; + let removeEditor = (editorId, group) => { switch (List.filter(e => Editor.getId(e) != editorId, group.editors)) { | [] => None @@ -253,8 +263,6 @@ let nextEditor = updateActiveGroup(Group.nextEditor); let previousEditor = updateActiveGroup(Group.previousEditor); -let openEditor = editor => updateActiveGroup(Group.openEditor(editor)); - let removeLayoutTab = (index, model) => { let left = Base.List.take(model.layouts, index); let right = Base.List.drop(model.layouts, index + 1); diff --git a/src/Store/Features.re b/src/Store/Features.re index b1173d805d..e63521655f 100644 --- a/src/Store/Features.re +++ b/src/Store/Features.re @@ -128,6 +128,7 @@ let update = ...state, layout: Feature_Layout.openEditor( + ~config=Feature_Configuration.resolver(state.config), Feature_Editor.Editor.create( ~font=state.editorFont, ~buffer=editorBuffer,