commit fad722018f4c0d7c1ea84297874a866f04aa3e8f from: Omar Polo date: Sun Mar 28 13:23:47 2021 UTC add cmd_move_tab and cmd_move_tab_to bound to `C-x t m'/`g M-t' and `C-x t M'/`g M-T' respectively, names lifted after the Emacs corrispectives commit - f8742389d35e4364097a14937c92aedf40cfc468 commit + fad722018f4c0d7c1ea84297874a866f04aa3e8f blob - 4278cc3ef22718865e75b4b95d281af2ec56763f blob + 562f8d3e762664b142b128ca3faa7fdcb9fb7fd9 --- ui.c +++ ui.c @@ -86,6 +86,8 @@ CMD(cmd_tab_close_other); CMD(cmd_tab_new); CMD(cmd_tab_next); CMD(cmd_tab_previous); +CMD(cmd_tab_move); +CMD(cmd_tab_move_to); CMD(cmd_load_url); CMD(cmd_load_current_url); CMD(cmd_bookmark_page); @@ -284,6 +286,8 @@ load_default_keys(void) global_set_key("C-x t 2", cmd_tab_new); global_set_key("C-x t o", cmd_tab_next); global_set_key("C-x t O", cmd_tab_previous); + global_set_key("C-x t m", cmd_tab_move); + global_set_key("C-x t M", cmd_tab_move_to); global_set_key("M-<", cmd_beginning_of_buffer); global_set_key("M->", cmd_end_of_buffer); @@ -311,6 +315,8 @@ load_default_keys(void) global_set_key("g N", cmd_tab_new); global_set_key("g t", cmd_tab_next); global_set_key("g T", cmd_tab_previous); + global_set_key("g M-t", cmd_tab_move); + global_set_key("g M-T", cmd_tab_move_to); global_set_key("g g", cmd_beginning_of_buffer); global_set_key("G", cmd_end_of_buffer); @@ -770,6 +776,39 @@ cmd_tab_previous(struct window *window) } static void +cmd_tab_move(struct window *window) +{ + struct tab *tab, *t; + + tab = current_tab(); + t = TAILQ_NEXT(tab, tabs); + TAILQ_REMOVE(&tabshead, tab, tabs); + + if (t == NULL) + TAILQ_INSERT_HEAD(&tabshead, tab, tabs); + else + TAILQ_INSERT_AFTER(&tabshead, t, tab, tabs); +} + +static void +cmd_tab_move_to(struct window *window) +{ + struct tab *tab, *t; + + tab = current_tab(); + t = TAILQ_PREV(tab, tabshead, tabs); + TAILQ_REMOVE(&tabshead, tab, tabs); + + if (t == NULL) { + if (TAILQ_EMPTY(&tabshead)) + TAILQ_INSERT_HEAD(&tabshead, tab, tabs); + else + TAILQ_INSERT_TAIL(&tabshead, tab, tabs); + } else + TAILQ_INSERT_BEFORE(t, tab, tabs); +} + +static void cmd_load_url(struct window *window) { if (in_minibuffer) {