From: NeilBrown Date: Wed, 9 Dec 2015 09:00:02 +0000 (+1100) Subject: complete: remove the finding of the render-lines pane. X-Git-Tag: lca2016~99 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=01e2a944a3de791fde8491face0c72529f79df13;p=edlib.git complete: remove the finding of the render-lines pane. If we just make render-lines use "key_handle_focus", it is OK for render-complete to be placed on top of the stack. This makes things a lot cleaner. We now need to let move-line through too. Signed-off-by: NeilBrown --- diff --git a/render-complete.c b/render-complete.c index 1c425376..49c51c94 100644 --- a/render-complete.c +++ b/render-complete.c @@ -215,6 +215,8 @@ DEF_CMD(complete_nomove) return 0; if (strcmp(ci->key, "Move-to") == 0) return 0; + if (strcmp(ci->key, "Move-Line") == 0) + return 0; return 1; } @@ -396,36 +398,17 @@ static void register_map(void) REDEF_CMD(complete_attach) { struct pane *complete; - struct pane *lines; - struct pane *parent; struct complete_data *cd; - struct cmd_info ci2 = {0}; if (!rc_map) register_map(); - /* Need to interpose a new pane between the 'render-lines' pane, - * which we assume is 'ci->focus' and its parent, so we can - * re-interpret lines. - * Find the 'render-line-prev' pane by sending a render-line request - * (with NULLs so it fails) and grabbing 'home' - */ - ci2.key = "render-line"; - ci2.focus = ci->focus; - if (key_handle_focus(&ci2) == 0) - return -1; - parent = ci2.home; - lines = pane_child(parent); - mark_free(ci2.mark); - - cd = calloc(1, sizeof(*cd)); - complete = pane_register(parent, 0, &complete_handle.c, cd, NULL); + complete = pane_register(ci->focus, 0, &complete_handle.c, cd, NULL); if (!complete) { free(cd); return -1; } - pane_reparent(lines, complete); pane_check_size(complete); cd->prefix = strdup(""); diff --git a/render-lines.c b/render-lines.c index baca5157..096ef938 100644 --- a/render-lines.c +++ b/render-lines.c @@ -263,7 +263,7 @@ static struct mark *call_render_line_prev(struct pane *p, ci.mark = m; ci.focus = p; ci.numeric = n; - ret = key_handle(&ci); + ret = key_handle_focus(&ci); if (ret == 0) { mark_free(m); return NULL; @@ -312,7 +312,7 @@ static struct mark *call_render_line(struct pane *p, struct mark *start) * 'used' can be negative if the mark is before the start * of the pane */ - if (key_handle(&ci) == 0) { + if (key_handle_focus(&ci) == 0) { mark_free(ci.mark); return NULL; } @@ -353,7 +353,7 @@ static struct mark *call_render_line_offset(struct pane *p, ci.mark = mark_dup(start, 0); ci.numeric = offset; ci.comm2 = &no_save; - if (key_handle(&ci) == 0) { + if (key_handle_focus(&ci) == 0) { mark_free(ci.mark); return NULL; } @@ -380,7 +380,7 @@ static int call_render_line_to_point(struct pane *p, struct mark *pm, ci.mark = mark_dup(start, 0); ci.numeric = -1; ci.comm2 = &get_len; - len = key_handle(&ci); + len = key_handle_focus(&ci); if (len <= 0) { mark_free(ci.mark); return 0;