void tabs_only(view_t *view) { if(cfg.pane_tabs) { pane_tabs_t *const ptabs = get_pane_tabs(curr_view); while(DA_SIZE(ptabs->tabs) != 1U) { pane_tab_t *const ptab = &ptabs->tabs[ptabs->current == 0 ? 1 : 0]; ptabs->current -= (ptabs->current == 0 ? 0 : 1); free_pane_tab(ptab); DA_REMOVE(ptabs->tabs, ptab); } } else { while(DA_SIZE(gtabs) != 1U) { global_tab_t *const gtab = >abs[current_tab == 0 ? 1 : 0]; current_tab -= (current_tab == 0 ? 0 : 1); free_global_tab(gtab); DA_REMOVE(gtabs, gtab); } } }
void vle_aucmd_remove(const char event[], const char patterns[]) { int i; int len; char **pats = get_patterns(patterns, &len); for(i = (int)DA_SIZE(autocmds) - 1; i >= 0; --i) { char pat[1U + strlen(autocmds[i].pattern) + 1U]; copy_str(&pat[1], sizeof(pat) - 1U, autocmds[i].pattern); pat[0] = autocmds[i].negated ? '!' : '='; if(event != NULL && strcasecmp(event, autocmds[i].event) != 0) { continue; } if(patterns != NULL && !is_in_string_array(pats, len, pat)) { continue; } free_autocmd_data(&autocmds[i]); DA_REMOVE(autocmds, &autocmds[i]); } free_string_array(pats, len); }
void tabs_close(void) { // XXX: FUSE filesystems aren't exited this way, but this might be OK because // usually we exit from them on explicit ".." by a user. if(cfg.pane_tabs) { pane_tabs_t *const ptabs = get_pane_tabs(curr_view); pane_tab_t *const ptab = &ptabs->tabs[ptabs->current]; const int n = (int)DA_SIZE(ptabs->tabs); if(n != 1) { tabs_goto(ptabs->current + (ptabs->current == n - 1 ? -1 : +1)); if(ptabs->current > ptab - ptabs->tabs) { --ptabs->current; } free_pane_tab(ptab); DA_REMOVE(ptabs->tabs, ptab); } //add by sim1 for test //ui_sb_msgf("tabs_close: curr=%d, last=%d, tabs=%d", ptabs->current, ptabs->last, (int)DA_SIZE(ptabs->tabs)); } else { global_tab_t *const gtab = >abs[current_tab]; const int n = (int)DA_SIZE(gtabs); if(n != 1) { tabs_goto(current_tab == n - 1 ? current_tab - 1 : current_tab + 1); if(current_tab > gtab - gtabs) { --current_tab; } free_global_tab(gtab); DA_REMOVE(gtabs, gtab); } } }