mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 01:16:18 +04:00
Implement view transpose (#2461)
Change the layout of existing split view from horizontal to vertical and vica-versa. It only effects the focused view and its siblings, i.e. not recursive. Command is mapped to 't' or 'C-t' under the Window menus.
This commit is contained in:
parent
62fd1f6999
commit
8958bf0a92
@ -360,6 +360,7 @@ pub fn doc(&self) -> &str {
|
||||
jump_view_left, "Jump to the split to the left",
|
||||
jump_view_up, "Jump to the split above",
|
||||
jump_view_down, "Jump to the split below",
|
||||
transpose_view, "Transpose splits",
|
||||
rotate_view, "Goto next window",
|
||||
hsplit, "Horizontal bottom split",
|
||||
hsplit_new, "Horizontal bottom split scratch buffer",
|
||||
@ -3863,6 +3864,10 @@ fn jump_view_down(cx: &mut Context) {
|
||||
cx.editor.focus_down()
|
||||
}
|
||||
|
||||
fn transpose_view(cx: &mut Context) {
|
||||
cx.editor.transpose_view()
|
||||
}
|
||||
|
||||
// split helper, clear it later
|
||||
fn split(cx: &mut Context, action: Action) {
|
||||
let (view, doc) = current!(cx.editor);
|
||||
|
@ -171,6 +171,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
|
||||
"C-w" | "w" => rotate_view,
|
||||
"C-s" | "s" => hsplit,
|
||||
"C-v" | "v" => vsplit,
|
||||
"C-t" | "t" => transpose_view,
|
||||
"f" => goto_file_hsplit,
|
||||
"F" => goto_file_vsplit,
|
||||
"C-q" | "q" => wclose,
|
||||
@ -226,6 +227,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
|
||||
"C-w" | "w" => rotate_view,
|
||||
"C-s" | "s" => hsplit,
|
||||
"C-v" | "v" => vsplit,
|
||||
"C-t" | "t" => transpose_view,
|
||||
"f" => goto_file_hsplit,
|
||||
"F" => goto_file_vsplit,
|
||||
"C-q" | "q" => wclose,
|
||||
|
@ -885,6 +885,10 @@ pub fn focus_down(&mut self) {
|
||||
self.tree.focus_direction(tree::Direction::Down);
|
||||
}
|
||||
|
||||
pub fn transpose_view(&mut self) {
|
||||
self.tree.transpose();
|
||||
}
|
||||
|
||||
pub fn should_close(&self) -> bool {
|
||||
self.tree.is_empty()
|
||||
}
|
||||
|
@ -526,6 +526,18 @@ pub fn focus_next(&mut self) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn transpose(&mut self) {
|
||||
let focus = self.focus;
|
||||
let parent = self.nodes[focus].parent;
|
||||
if let Content::Container(container) = &mut self.nodes[parent].content {
|
||||
container.layout = match container.layout {
|
||||
Layout::Vertical => Layout::Horizontal,
|
||||
Layout::Horizontal => Layout::Vertical,
|
||||
};
|
||||
self.recalculate();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn area(&self) -> Rect {
|
||||
self.area
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user