-
Notifications
You must be signed in to change notification settings - Fork 283
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement the next/previous editor commands and keybindings #1447
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -61,16 +61,23 @@ let getOrCreateEditorForBuffer = (state, bufferId) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: Just use List.find_opt? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let rec _getIndexOfElement = elem => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fun | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [] => (-1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [hd, ...tl] => hd === elem ? 0 : _getIndexOfElement(elem, tl) + 1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [] => None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [hd, ...tl] => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hd === elem | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? Some(0) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
: ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (_getIndexOfElement(elem, tl)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| None => None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Some(i) => Some(i + 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let _getAdjacentEditor = (editor: int, reverseTabOrder: list(int)) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (_getIndexOfElement(editor, reverseTabOrder)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| (-1) => None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| idx => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| None => None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Some(idx) => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
List.nth_opt(reverseTabOrder, idx + 1), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
List.nth_opt(reverseTabOrder, max(idx - 1, 0)), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -82,6 +89,48 @@ let _getAdjacentEditor = (editor: int, reverseTabOrder: list(int)) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let setActiveEditorTo = (kind, model) => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (model.reverseTabOrder) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [_] => model | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _ => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (model.activeEditorId) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Some(activeEditorId) => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (_getIndexOfElement(activeEditorId, model.reverseTabOrder)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| None => model | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Some(idx) => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// The diff amounts are inverted because the list is in reverse order | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let newIndex = | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (kind) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| `Next => idx - 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| `Previous => idx + 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let count = List.length(model.reverseTabOrder); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let newIndex = | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (newIndex < 0) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Wrapping negative, go to end | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
count - 1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else if (newIndex >= count) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// If this is past the end, go to zero | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
newIndex; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+111
to
+120
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There are some convenience functions in oni2/src/Core/Utility/IndexEx.re Lines 1 to 27 in 7493356
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep, that is exactly what I need. I'll give it a try when I get a chance. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
...model, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
activeEditorId: List.nth_opt(model.reverseTabOrder, newIndex), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| None => model | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let nextEditor = setActiveEditorTo(`Next); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let previousEditor = setActiveEditorTo(`Previous); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let isEmpty = model => IntMap.is_empty(model.editors); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let removeEditorById = (state, editorId) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can use
Option.map
for this:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I figured there had to be something for that like in Rust but when looking at the Reason docs I did not see much. I need to check the OCaml docs more I suppose. Good tip with using
succ
too.