commit b1df9b71b9b1ea1d102e827cf7cdb3ed824741a3 from: Omar Polo date: Fri Mar 12 19:35:16 2021 UTC open URL in new tab commit - e1b01434ff1bad173a8266870731e1df9e646b9f commit + b1df9b71b9b1ea1d102e827cf7cdb3ed824741a3 blob - 3b35300ae2ccdcb42706916be155dd6a93c83266 blob + dbdb10698208dec844279e376a853e21d2992959 --- ui.c +++ ui.c @@ -100,6 +100,7 @@ static void cmd_beginning_of_buffer(struct tab*); static void cmd_end_of_buffer(struct tab*); static void cmd_kill_telescope(struct tab*); static void cmd_push_button(struct tab*); +static void cmd_push_button_new_tab(struct tab*); static void cmd_clear_minibuf(struct tab*); static void cmd_execute_extended_command(struct tab*); static void cmd_tab_close(struct tab*); @@ -156,7 +157,7 @@ static void load_url_in_tab(struct tab*, const char* static void enter_minibuffer(void(*)(void), void(*)(void), void(*)(void), struct minibuf_histhead*); static void exit_minibuffer(void); static void switch_to_tab(struct tab*); -static void new_tab(void); +static struct tab *new_tab(void); static struct { int meta, key; } thiskey; @@ -450,6 +451,7 @@ load_default_keys(void) /* global */ global_set_key("C-m", cmd_push_button); + global_set_key("M-enter", cmd_push_button_new_tab); /* === minibuffer map === */ minibuffer_set_key("ret", cmd_mini_complete_and_exit); @@ -702,6 +704,26 @@ cmd_push_button(struct tab *tab) } static void +cmd_push_button_new_tab(struct tab *tab) +{ + struct tab *t; + struct line *l; + size_t nth; + + nth = tab->s->line_off + tab->s->curs_y; + if (nth > tab->s->line_max) + return; + l = nth_line(tab, nth); + if (l->type != LINE_LINK) + return; + + t = new_tab(); + memcpy(&t->url, &tab->url, sizeof(tab->url)); + memcpy(&t->urlstr, &tab->urlstr, sizeof(tab->urlstr)); + load_url_in_tab(t, l->alt); +} + +static void cmd_clear_minibuf(struct tab *tab) { handle_clear_minibuf(0, 0, NULL); @@ -1641,7 +1663,7 @@ switch_to_tab(struct tab *tab) tab->flags |= TAB_CURRENT; } -static void +static struct tab * new_tab(void) { struct tab *tab, *t; @@ -1664,10 +1686,11 @@ new_tab(void) TAILQ_INSERT_TAIL(&tabshead, tab, tabs); load_url_in_tab(tab, url); - return; + return tab; err: event_loopbreak(); + return NULL; } int