[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs bufed.c charset.c dired.c latex-mode.c q...
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs bufed.c charset.c dired.c latex-mode.c q... |
Date: |
Tue, 11 Aug 2015 17:45:31 +0000 |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 15/08/11 17:45:31
Modified files:
. : bufed.c charset.c dired.c latex-mode.c qe.c
qe.h qeconfig.h util.c variables.c
Log message:
minibuffer completion: add fuzzy matching
- add extra group argument in functions add_string() and set_string()
- group matches in completion_sort_func()
- add const char *strmem(const char *str, const void *mem, int size);
- add variable fuzzy-search
- add minibuffer-insert command to handle insert triggers
- display variable status after set-variable
- make TAB a regular char in incremental search
- display control chars as ^x in incremental search prompt
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/bufed.c?cvsroot=qemacs&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/qemacs/charset.c?cvsroot=qemacs&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/qemacs/dired.c?cvsroot=qemacs&r1=1.54&r2=1.55
http://cvs.savannah.gnu.org/viewcvs/qemacs/latex-mode.c?cvsroot=qemacs&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.193&r2=1.194
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.190&r2=1.191
http://cvs.savannah.gnu.org/viewcvs/qemacs/qeconfig.h?cvsroot=qemacs&r1=1.50&r2=1.51
http://cvs.savannah.gnu.org/viewcvs/qemacs/util.c?cvsroot=qemacs&r1=1.69&r2=1.70
http://cvs.savannah.gnu.org/viewcvs/qemacs/variables.c?cvsroot=qemacs&r1=1.15&r2=1.16
Patches:
Index: bufed.c
===================================================================
RCS file: /sources/qemacs/qemacs/bufed.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- bufed.c 1 Jun 2014 13:54:58 -0000 1.34
+++ bufed.c 11 Aug 2015 17:45:30 -0000 1.35
@@ -63,7 +63,7 @@
free_strings(&bs->items);
for (b = qs->first_buffer; b != NULL; b = b->next) {
if (!(b->flags & BF_SYSTEM) || (bs->flags & BUFED_ALL_VISIBLE))
- add_string(&bs->items, b->name);
+ add_string(&bs->items, b->name, 0);
}
/* build buffer */
Index: charset.c
===================================================================
RCS file: /sources/qemacs/qemacs/charset.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- charset.c 31 May 2014 00:26:26 -0000 1.38
+++ charset.c 11 Aug 2015 17:45:30 -0000 1.39
@@ -1143,14 +1143,14 @@
for (charset = first_charset; charset != NULL; charset = charset->next) {
if (strxstart(charset->name, cp->current, NULL))
- add_string(&cp->cs, charset->name);
+ add_string(&cp->cs, charset->name, 0);
if (charset->aliases) {
for (q = p = charset->aliases;; q++) {
if (*q == '\0' || *q == '|') {
if (q > p) {
pstrncpy(name, sizeof(name), p, q - p);
if (strxstart(name, cp->current, NULL))
- add_string(&cp->cs, name);
+ add_string(&cp->cs, name, 0);
}
if (*q == '\0')
break;
Index: dired.c
===================================================================
RCS file: /sources/qemacs/qemacs/dired.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- dired.c 10 Aug 2015 19:44:19 -0000 1.54
+++ dired.c 11 Aug 2015 17:45:30 -0000 1.55
@@ -773,7 +773,7 @@
ds->nfiles++;
ds->total_bytes += st.st_size;
}
- item = add_string(&ds->items, line);
+ item = add_string(&ds->items, line, 0);
if (item) {
DiredItem *dip;
int plen = strlen(p);
Index: latex-mode.c
===================================================================
RCS file: /sources/qemacs/qemacs/latex-mode.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- latex-mode.c 5 Apr 2015 18:31:01 -0000 1.52
+++ latex-mode.c 11 Aug 2015 17:45:30 -0000 1.53
@@ -223,7 +223,7 @@
for (func = latex_funcs; func->name; func++) {
if (strxstart(func->name, cp->current, NULL))
- add_string(&cp->cs, func->name);
+ add_string(&cp->cs, func->name, 0);
}
}
Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.193
retrieving revision 1.194
diff -u -b -r1.193 -r1.194
--- qe.c 10 Aug 2015 20:01:02 -0000 1.193
+++ qe.c 11 Aug 2015 17:45:30 -0000 1.194
@@ -5104,7 +5104,7 @@
*/
if (!stat(filename, &sb) && S_ISDIR(sb.st_mode))
pstrcat(filename, sizeof(filename), "/");
- add_string(&cp->cs, filename);
+ add_string(&cp->cs, filename, 0);
}
find_file_close(&ffst);
@@ -5161,10 +5161,19 @@
cp->len = eb_get_contents(s->b, cp->current, sizeof(cp->current));
}
+/* XXX: should have a globbing and a case insensitive option */
void complete_test(CompleteState *cp, const char *str)
{
- if (!memcmp(str, cp->current, cp->len))
- add_string(&cp->cs, str);
+ QEmacsState *qs = &qe_state;
+ int fuzzy = 0;
+
+ if (memcmp(str, cp->current, cp->len)) {
+ if (!qs->fuzzy_search
+ || !strmem(str, cp->current, cp->len))
+ return;
+ fuzzy = 1;
+ }
+ add_string(&cp->cs, str, fuzzy);
}
static int completion_sort_func(const void *p1, const void *p2)
@@ -5172,6 +5181,9 @@
StringItem *item1 = *(StringItem **)p1;
StringItem *item2 = *(StringItem **)p2;
+ /* Group items by group order */
+ if (item1->group != item2->group)
+ return item1->group - item2->group;
/* Use natural sort: keep numbers in order */
return qe_strcollate(item1->str, item2->str);
}
@@ -5339,6 +5351,13 @@
}
}
+static void do_minibuffer_char(EditState *s, int key, int argval)
+{
+ do_char(s, key, argval);
+ if (completion_popup_window)
+ do_completion(s);
+}
+
/* scroll in completion popup */
void minibuf_complete_scroll_up_down(__unused__ EditState *s, int dir)
{
@@ -5404,7 +5423,7 @@
if (qs->last_cmd_func != (CmdFunc)do_history) {
/* save currently edited line */
eb_get_contents(s->b, buf, sizeof(buf));
- set_string(hist, hist->nb_items - 1, buf);
+ set_string(hist, hist->nb_items - 1, buf, 0);
minibuffer_history_saved_offset = s->offset;
}
/* insert history text */
@@ -5462,7 +5481,7 @@
hist->nb_items--;
qe_free(&hist->items[hist->nb_items]);
if (buf[0] != '\0')
- add_string(hist, buf);
+ add_string(hist, buf, 0);
}
s->b->flags |= BF_TRANSIENT;
@@ -5546,7 +5565,7 @@
minibuffer_history_saved_offset = 0;
if (hist) {
minibuffer_history_index = hist->nb_items;
- add_string(hist, "");
+ add_string(hist, "", 0);
}
}
@@ -6581,7 +6600,12 @@
for (i = 0; i < is->pos; i++) {
v = is->search_string[i];
if (!(v & FOUND_TAG)) {
- if (!buf_putc_utf8(out, v))
+ if (v < 32 || v == 127) {
+ buf_printf(out, "^%c", (v + '@') & 127);
+ } else {
+ buf_putc_utf8(out, v);
+ }
+ if (buf_avail(out) <= 0)
break;
}
}
@@ -6691,7 +6715,7 @@
is->search_flags &= ~SEARCH_FLAG_SMARTCASE;
break;
default:
- if (KEY_SPECIAL(ch)) {
+ if (KEY_SPECIAL(ch) && ch != '\t') {
/* exit search mode */
#if 0
// FIXME: behaviour from qemacs-0.3pre13
Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.190
retrieving revision 1.191
diff -u -b -r1.190 -r1.191
--- qe.h 10 Aug 2015 19:44:20 -0000 1.190
+++ qe.h 11 Aug 2015 17:45:30 -0000 1.191
@@ -177,6 +177,7 @@
typedef struct StringItem {
void *opaque; /* opaque data that the user can use */
char selected; /* true if selected */
+ char group; /* used to group sorted items */
char str[1];
} StringItem;
@@ -340,6 +341,7 @@
int memfind(const char *list, const char *p, int len);
int strfind(const char *list, const char *s);
int strxfind(const char *list, const char *s);
+const char *strmem(const char *str, const void *mem, int size);
const void *memstr(const void *buf, int size, const char *str);
#define stristart(str, val, ptr) qe_stristart(str, val, ptr)
@@ -398,8 +400,8 @@
/* Various string packages: should unify these but keep API simple */
-StringItem *set_string(StringArray *cs, int index, const char *str);
-StringItem *add_string(StringArray *cs, const char *str);
+StringItem *set_string(StringArray *cs, int index, const char *str, int group);
+StringItem *add_string(StringArray *cs, const char *str, int group);
void free_strings(StringArray *cs);
/* simple dynamic strings wrappers. The strings are always terminated
@@ -1432,6 +1434,7 @@
int default_fill_column; /* 70 */
EOLType default_eol_type; /* EOL_UNIX */
int backup_inhibited; /* prevent qemacs from backing up files */
+ int fuzzy_search; /* use fuzzy search for completion matcher */
};
extern QEmacsState qe_state;
Index: qeconfig.h
===================================================================
RCS file: /sources/qemacs/qemacs/qeconfig.h,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- qeconfig.h 10 Aug 2015 19:44:20 -0000 1.50
+++ qeconfig.h 11 Aug 2015 17:45:31 -0000 1.51
@@ -421,6 +421,9 @@
};
CmdDef minibuffer_commands[] = {
+ CMD2( KEY_DEFAULT, KEY_NONE,
+ "minibuffer-insert", do_minibuffer_char, ESii,
+ "*" "kiui")
CMD1( KEY_RET, KEY_NONE,
"minibuffer-exit", do_minibuffer_exit, 0)
CMD1( KEY_CTRL('g'), KEY_NONE,
Index: util.c
===================================================================
RCS file: /sources/qemacs/qemacs/util.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -b -r1.69 -r1.70
--- util.c 19 Jun 2015 14:23:55 -0000 1.69
+++ util.c 11 Aug 2015 17:45:31 -0000 1.70
@@ -704,6 +704,33 @@
}
}
+const char *strmem(const char *str, const void *mem, int size)
+{
+ int c, len;
+ const char *p, *str_max, *p1 = mem;
+
+ if (size <= 0)
+ return (size < 0) ? NULL : str;
+
+ size--;
+ c = *p1++;
+ if (!c) {
+ /* cannot find chunk with embedded nuls */
+ return NULL;
+ }
+
+ len = strlen(str);
+ if (size >= len)
+ return NULL;
+
+ str_max = str + len - size;
+ for (p = str; p < str_max; p++) {
+ if (*p == c && !memcmp(p + 1, p1, size))
+ return p;
+ }
+ return NULL;
+}
+
const void *memstr(const void *buf, int size, const char *str)
{
int c, len;
@@ -1219,7 +1246,7 @@
count = nb_qe_colors;
while (count > 0) {
if (strxstart(def->name, cp->current, NULL))
- add_string(&cp->cs, def->name);
+ add_string(&cp->cs, def->name, 0);
def++;
count--;
}
@@ -1444,7 +1471,7 @@
}
/* set one string. */
-StringItem *set_string(StringArray *cs, int index, const char *str)
+StringItem *set_string(StringArray *cs, int index, const char *str, int group)
{
StringItem *v;
int len;
@@ -1457,6 +1484,7 @@
if (!v)
return NULL;
v->selected = 0;
+ v->group = group;
memcpy(v->str, str, len + 1);
if (cs->items[index])
qe_free(&cs->items[index]);
@@ -1465,7 +1493,7 @@
}
/* make a generic array alloc */
-StringItem *add_string(StringArray *cs, const char *str)
+StringItem *add_string(StringArray *cs, const char *str, int group)
{
int n;
@@ -1476,7 +1504,7 @@
cs->nb_allocated = n;
}
cs->items[cs->nb_items++] = NULL;
- return set_string(cs, cs->nb_items - 1, str);
+ return set_string(cs, cs->nb_items - 1, str, group);
}
void free_strings(StringArray *cs)
Index: variables.c
===================================================================
RCS file: /sources/qemacs/qemacs/variables.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- variables.c 30 May 2014 23:13:04 -0000 1.15
+++ variables.c 11 Aug 2015 17:45:31 -0000 1.16
@@ -48,6 +48,7 @@
S_VAR( "default-tab-width", default_tab_width, VAR_NUMBER, VAR_RW )
S_VAR( "default-fill-column", default_fill_column, VAR_NUMBER, VAR_RW )
S_VAR( "backup-inhibited", backup_inhibited, VAR_NUMBER, VAR_RW )
+ S_VAR( "fuzzy-search", fuzzy_search, VAR_NUMBER, VAR_RW )
//B_VAR( "screen-charset", charset, VAR_NUMBER, VAR_RW )
@@ -309,6 +310,7 @@
void do_set_variable(EditState *s, const char *name, const char *value)
{
qe_set_variable(s, name, value, 0);
+ do_show_variable(s, name);
}
/* should register this as help function */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs bufed.c charset.c dired.c latex-mode.c q...,
Charlie Gordon <=