char *minibuf_read_variable_name(char *msg) { char *ms; Completion *cp = completion_new(FALSE); le *lp; for (lp = mainVarList; lp != NULL; lp = lp->list_next) list_append(cp->completions, zstrdup(lp->data)); for (;;) { ms = minibuf_read_completion(msg, "", cp, NULL); if (ms == NULL) { free_completion(cp); cancel(); return NULL; } if (ms[0] == '\0') { free_completion(cp); minibuf_error("No variable name given"); return NULL; } else if (get_variable(ms) == NULL) { minibuf_error("Undefined variable name `%s'", ms); waitkey(WAITKEY_DEFAULT); } else { minibuf_clear(); break; } } free_completion(cp); return ms; }
char *minibuf_read_variable_name(char *msg) { char *ms; historyp hp; hp = make_variable_history(); for (;;) { ms = minibuf_read_history(msg, "", hp); if (ms == NULL) { free_history(hp); cancel(); return NULL; } if (ms[0] == '\0') { free_history(hp); minibuf_error("No variable name given"); return NULL; } else if (get_variable(ms) == NULL) { minibuf_error("Undefined variable name"); waitkey(2 * 1000); } else { minibuf_clear(); break; } } free_history(hp); return ms; }
int find_file(const char *filename) { Buffer *bp; char *s; for (bp = head_bp; bp != NULL; bp = bp->next) if (bp->filename != NULL && !strcmp(bp->filename, filename)) { switch_to_buffer(bp); return TRUE; } s = make_buffer_name(filename); if (strlen(s) < 1) { free(s); return FALSE; } if (!is_regular_file(filename)) { minibuf_error("%s is not a regular file", filename); waitkey(WAITKEY_DEFAULT); return FALSE; } bp = create_buffer(s); free(s); bp->filename = zstrdup(filename); switch_to_buffer(bp); read_from_disk(filename); thisflag |= FLAG_NEED_RESYNC; return TRUE; }
static le * do_search (bool forward, bool regexp, const char *pattern) { le * ok = leNIL; const char *ms = NULL; if (pattern == NULL) pattern = ms = minibuf_read ("%s%s: ", last_search, regexp ? "RE search" : "Search", forward ? "" : " backward"); if (pattern == NULL) return FUNCALL (keyboard_quit); if (pattern[0] != '\0') { free (last_search); last_search = xstrdup (pattern); if (!search (get_buffer_pt (cur_bp), pattern, forward, regexp)) minibuf_error ("Search failed: \"%s\"", pattern); else ok = leT; } free ((char *) ms); return ok; }
int lookup_bool_variable(char *var) { char *p; if ((p = htable_fetch(var_table, var)) != NULL) return !strcmp(p, "true"); #if 0 minibuf_error("Warning: used uninitialized variable `@v%s@@'", var); waitkey(2 * 1000); #endif return FALSE; }
bool find_file (const char *filename) { Buffer bp; for (bp = head_bp; bp != NULL; bp = get_buffer_next (bp)) if (get_buffer_filename (bp) != NULL && STREQ (get_buffer_filename (bp), filename)) break; if (bp == NULL) { if (exist_file (filename) && !is_regular_file (filename)) { minibuf_error ("File exists but could not be read"); return false; } else { bp = buffer_new (); set_buffer_names (bp, filename); set_buffer_dir (bp, astr_new_cstr (dir_name (filename))); estr es = estr_readf (filename); if (es) set_buffer_readonly (bp, !check_writable (filename)); else es = estr_new_astr (astr_new ()); set_buffer_text (bp, es); /* Reset undo history. */ set_buffer_next_undop (bp, NULL); set_buffer_last_undop (bp, NULL); set_buffer_modified (bp, false); } } switch_to_buffer (bp); thisflag |= FLAG_NEED_RESYNC; return true; }
static int kill_line(int literally) { if (!eolp()) { if (warn_if_readonly_buffer()) return FALSE; undo_save(UNDO_INSERT_BLOCK, cur_bp->pt, astr_len(cur_bp->pt.p->item) - cur_bp->pt.o, 0); undo_nosave = TRUE; while (!eolp()) { kill_ring_push(following_char()); FUNCALL(delete_char); } undo_nosave = FALSE; thisflag |= FLAG_DONE_KILL; if (!literally) return TRUE; } if (list_next(cur_bp->pt.p) != cur_bp->lines) { if (!FUNCALL(delete_char)) return FALSE; kill_ring_push('\n'); thisflag |= FLAG_DONE_KILL; return TRUE; } minibuf_error("End of buffer"); return FALSE; }