INCS = -Iinc/
-LIBEDIT_OBJS = \
- libedit/buf.o \
- libedit/filetype.o \
- libedit/utf8.o \
- libedit/utils.o \
- libedit/exec.o \
- libedit/view.o
-
-LIBX_OBJS = \
- libx/x11.o
+LIBEDIT_OBJS = \
+ lib/buf.o \
+ lib/filetype.o \
+ lib/utf8.o \
+ lib/utils.o \
+ lib/exec.o \
+ lib/view.o \
+ lib/x11.o
TEST_OBJS = \
unittests.o \
test: unittests
./unittests
-xedit: xedit.o libx.a libedit.a
+xedit: xedit.o libedit.a
$(LD) -o $@ $^ $(LDFLAGS)
-xpick: xpick.o libx.a libedit.a
+xpick: xpick.o libedit.a
$(LD) -o $@ $^ $(LDFLAGS)
libedit.a: $(LIBEDIT_OBJS)
$(AR) $(ARFLAGS) $@ $^
-libx.a: $(LIBX_OBJS)
- $(AR) $(ARFLAGS) $@ $^
-
unittests: $(TEST_OBJS) libedit.a
Up Next:
+* Undo/Redo tags should apply to the edit buffer, ctrl+z + ctrl+y to the current buffer
* Tag line count should account for wrapped lines
* block selection should handle brace-balancing
* context sensitive selection of words, commands, line numbers, or filenames.
+++ /dev/null
-#include <stdc.h>
-#include <utf.h>
-#include <edit.h>
-
-typedef struct {
- char* file;
- char* cmd;
-} Choice;
-
-void add_choice(uint8_t* buf, size_t n) {
- char* str = malloc(n);
- memcpy(str, buf, n);
- str[n] = '\0';
- /**/
- char* tag = strtok(str, "\t");
- char* file = strtok(NULL, "\t");
- char* cmd = file + strlen(file) + 1;
- char* end = strrchr(cmd, ';');
- if (end) *end = '\0';
-
- puts(tag);
- puts(file);
- puts(cmd);
-}
-
-void fetchtags(char* tagfile, char* tag) {
- size_t mlen = strlen(tag);
- FMap file = fmap(tagfile);
- for (size_t n, i = 0; i < file.len;) {
- if (file.buf[i] > *tag) {
- break;
- } if ((file.buf[i + mlen] == '\t') &&
- (0 == strncmp(((char*)file.buf+i), tag, mlen))) {
- for (n = 0; file.buf[i + n++] != '\n';);
- add_choice(file.buf + i, n-1);
- i += n;
- } else {
- while (file.buf[i++] != '\n');
- }
- }
-}
-
-int main(int argc, char** argv) {
- /* usage message */
- if (argc != 3) {
- printf("Usage: %s <tagfile> <tag>\n", argv[0]);
- exit(1);
- }
- /* scan the file */
- fetchtags(argv[1], argv[2]);
- return 0;
-}