summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1320
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1320')
-rw-r--r--data/vim/patches/8.1.1320233
1 files changed, 0 insertions, 233 deletions
diff --git a/data/vim/patches/8.1.1320 b/data/vim/patches/8.1.1320
deleted file mode 100644
index d6d50ac8b..000000000
--- a/data/vim/patches/8.1.1320
+++ /dev/null
@@ -1,233 +0,0 @@
-To: vim_dev@googlegroups.com
-Subject: Patch 8.1.1320
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 8.1.1320
-Problem: It is not possible to track changes to a buffer.
-Solution: Add listener_add() and listener_remove(). No docs or tests yet.
-Files: src/structs.h, src/change.c, src/proto/change.pro
-
-
-*** ../vim-8.1.1319/src/structs.h 2019-05-09 21:08:53.764083394 +0200
---- src/structs.h 2019-05-11 18:25:06.736904482 +0200
-***************
-*** 1873,1878 ****
---- 1873,1891 ----
- #endif
- } jobopt_T;
-
-+ #ifdef FEAT_EVAL
-+ /*
-+ * Structure used for listeners added with listener_add().
-+ */
-+ typedef struct listener_S listener_T;
-+ struct listener_S
-+ {
-+ listener_T *lr_next;
-+ int lr_id;
-+ char_u *lr_callback;
-+ partial_T *lr_partial;
-+ };
-+ #endif
-
- /* structure used for explicit stack while garbage collecting hash tables */
- typedef struct ht_stack_S
-***************
-*** 2424,2429 ****
---- 2437,2444 ----
- #ifdef FEAT_EVAL
- dictitem_T b_bufvar; /* variable for "b:" Dictionary */
- dict_T *b_vars; /* internal variables, local to buffer */
-+
-+ listener_T *b_listener;
- #endif
- #ifdef FEAT_TEXT_PROP
- int b_has_textprop; // TRUE when text props were added
-*** ../vim-8.1.1319/src/change.c 2019-05-11 17:03:55.170019762 +0200
---- src/change.c 2019-05-11 19:11:46.862043029 +0200
-***************
-*** 151,156 ****
---- 151,284 ----
- #endif
- }
-
-+ #ifdef FEAT_EVAL
-+ static list_T *recorded_changes = NULL;
-+ static long next_listener_id = 0;
-+
-+ /*
-+ * Record a change for listeners added with listener_add().
-+ */
-+ static void
-+ may_record_change(
-+ linenr_T lnum,
-+ colnr_T col,
-+ linenr_T lnume,
-+ long xtra)
-+ {
-+ dict_T *dict;
-+
-+ if (curbuf->b_listener == NULL)
-+ return;
-+ if (recorded_changes == NULL)
-+ {
-+ recorded_changes = list_alloc();
-+ if (recorded_changes == NULL) // out of memory
-+ return;
-+ ++recorded_changes->lv_refcount;
-+ recorded_changes->lv_lock = VAR_FIXED;
-+ }
-+
-+ dict = dict_alloc();
-+ if (dict == NULL)
-+ return;
-+ dict_add_number(dict, "lnum", (varnumber_T)lnum);
-+ dict_add_number(dict, "end", (varnumber_T)lnume);
-+ dict_add_number(dict, "added", (varnumber_T)xtra);
-+ dict_add_number(dict, "col", (varnumber_T)col);
-+
-+ list_append_dict(recorded_changes, dict);
-+ }
-+
-+ /*
-+ * listener_add() function
-+ */
-+ void
-+ f_listener_add(typval_T *argvars, typval_T *rettv)
-+ {
-+ char_u *callback;
-+ partial_T *partial;
-+ listener_T *lnr;
-+
-+ callback = get_callback(&argvars[0], &partial);
-+ if (callback == NULL)
-+ return;
-+
-+ lnr = (listener_T *)alloc_clear((sizeof(listener_T)));
-+ if (lnr == NULL)
-+ {
-+ free_callback(callback, partial);
-+ return;
-+ }
-+ lnr->lr_next = curbuf->b_listener;
-+ curbuf->b_listener = lnr;
-+
-+ if (partial == NULL)
-+ lnr->lr_callback = vim_strsave(callback);
-+ else
-+ lnr->lr_callback = callback; // pointer into the partial
-+ lnr->lr_partial = partial;
-+
-+ lnr->lr_id = ++next_listener_id;
-+ rettv->vval.v_number = lnr->lr_id;
-+ }
-+
-+ /*
-+ * listener_remove() function
-+ */
-+ void
-+ f_listener_remove(typval_T *argvars, typval_T *rettv UNUSED)
-+ {
-+ listener_T *lnr;
-+ listener_T *next;
-+ listener_T *prev = NULL;
-+ int id = tv_get_number(argvars);
-+ buf_T *buf = curbuf;
-+
-+ for (lnr = buf->b_listener; lnr != NULL; lnr = next)
-+ {
-+ next = lnr->lr_next;
-+ if (lnr->lr_id == id)
-+ {
-+ if (prev != NULL)
-+ prev->lr_next = lnr->lr_next;
-+ else
-+ buf->b_listener = lnr->lr_next;
-+ free_callback(lnr->lr_callback, lnr->lr_partial);
-+ vim_free(lnr);
-+ }
-+ prev = lnr;
-+ }
-+ }
-+
-+ /*
-+ * Called when a sequence of changes is done: invoke listeners added with
-+ * listener_add().
-+ */
-+ void
-+ invoke_listeners(void)
-+ {
-+ listener_T *lnr;
-+ typval_T rettv;
-+ int dummy;
-+ typval_T argv[2];
-+
-+ if (recorded_changes == NULL) // nothing changed
-+ return;
-+ argv[0].v_type = VAR_LIST;
-+ argv[0].vval.v_list = recorded_changes;
-+
-+ for (lnr = curbuf->b_listener; lnr != NULL; lnr = lnr->lr_next)
-+ {
-+ call_func(lnr->lr_callback, -1, &rettv,
-+ 1, argv, NULL, 0L, 0L, &dummy, TRUE, lnr->lr_partial, NULL);
-+ clear_tv(&rettv);
-+ }
-+
-+ list_unref(recorded_changes);
-+ recorded_changes = NULL;
-+ }
-+ #endif
-+
- /*
- * Common code for when a change was made.
- * See changed_lines() for the arguments.
-***************
-*** 175,180 ****
---- 303,311 ----
- // mark the buffer as modified
- changed();
-
-+ #ifdef FEAT_EVAL
-+ may_record_change(lnum, col, lnume, xtra);
-+ #endif
- #ifdef FEAT_DIFF
- if (curwin->w_p_diff && diff_internal())
- curtab->tp_diff_update = TRUE;
-*** ../vim-8.1.1319/src/proto/change.pro 2019-05-11 17:03:55.170019762 +0200
---- src/proto/change.pro 2019-05-11 18:24:29.733104385 +0200
-***************
-*** 2,7 ****
---- 2,10 ----
- void change_warning(int col);
- void changed(void);
- void changed_internal(void);
-+ void f_listener_add(typval_T *argvars, typval_T *rettv);
-+ void f_listener_remove(typval_T *argvars, typval_T *rettv);
-+ void invoke_listeners(void);
- void changed_bytes(linenr_T lnum, colnr_T col);
- void inserted_bytes(linenr_T lnum, colnr_T col, int added);
- void appended_lines(linenr_T lnum, long count);
-*** ../vim-8.1.1319/src/version.c 2019-05-11 18:28:41.351611622 +0200
---- src/version.c 2019-05-11 19:12:16.001896710 +0200
-***************
-*** 769,770 ****
---- 769,772 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1320,
- /**/
-
---
-It might look like I'm doing nothing, but at the cellular level
-I'm really quite busy.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ an exciting new programming language -- http://www.Zimbu.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///