[BACK]Return to notify.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/notify.c between version 1.26 and 1.27

version 1.26, 2018/07/04 12:30:52 version 1.27, 2019/04/26 11:38:51
Line 36 
Line 36 
 };  };
   
 static void  static void
 notify_hook1(struct cmdq_item *item, struct notify_entry *ne)  notify_hook_formats(struct cmdq_item *item, struct session *s, struct window *w,
       int pane)
 {  {
         struct cmd_find_state    fs;          if (s != NULL) {
         struct hook             *hook;                  cmdq_format(item, "hook_session", "$%u", s->id);
         struct cmdq_item        *new_item;                  cmdq_format(item, "hook_session_name", "%s", s->name);
         struct session          *s = ne->session;          }
         struct window           *w = ne->window;          if (w != NULL) {
                   cmdq_format(item, "hook_window", "@%u", w->id);
                   cmdq_format(item, "hook_window_name", "%s", w->name);
           }
           if (pane != -1)
                   cmdq_format(item, "hook_pane", "%%%d", pane);
   }
   
   static void
   notify_insert_hook(struct cmdq_item *item, struct notify_entry *ne)
   {
           struct cmd_find_state            fs;
           struct options                  *oo;
           struct cmdq_item                *new_item;
           struct session                  *s = ne->session;
           struct window                   *w = ne->window;
           struct options_entry            *o;
           struct options_array_item       *a;
           struct cmd_list                 *cmdlist;
   
           log_debug("%s: %s", __func__, ne->name);
   
         cmd_find_clear_state(&fs, 0);          cmd_find_clear_state(&fs, 0);
         if (cmd_find_empty_state(&ne->fs) || !cmd_find_valid_state(&ne->fs))          if (cmd_find_empty_state(&ne->fs) || !cmd_find_valid_state(&ne->fs))
                 cmd_find_from_nothing(&fs, 0);                  cmd_find_from_nothing(&fs, 0);
         else          else
                 cmd_find_copy_state(&fs, &ne->fs);                  cmd_find_copy_state(&fs, &ne->fs);
   
         hook = hooks_find(hooks_get(fs.s), ne->name);          if (fs.s == NULL)
         if (hook == NULL)                  oo = global_s_options;
           else
                   oo = fs.s->options;
           o = options_get(oo, ne->name);
           if (o == NULL)
                 return;                  return;
         log_debug("notify hook %s", ne->name);  
   
         new_item = cmdq_get_command(hook->cmdlist, &fs, NULL, CMDQ_NOHOOKS);          a = options_array_first(o);
         cmdq_format(new_item, "hook", "%s", ne->name);          while (a != NULL) {
                   cmdlist = options_array_item_value(a)->cmdlist;
                   if (cmdlist == NULL) {
                           a = options_array_next(a);
                           continue;
                   }
   
         if (s != NULL) {                  new_item = cmdq_get_command(cmdlist, &fs, NULL, CMDQ_NOHOOKS);
                 cmdq_format(new_item, "hook_session", "$%u", s->id);                  cmdq_format(new_item, "hook", "%s", ne->name);
                 cmdq_format(new_item, "hook_session_name", "%s", s->name);                  notify_hook_formats(new_item, s, w, ne->pane);
         }  
         if (w != NULL) {  
                 cmdq_format(new_item, "hook_window", "@%u", w->id);  
                 cmdq_format(new_item, "hook_window_name", "%s", w->name);  
         }  
         if (ne->pane != -1)  
                 cmdq_format(new_item, "hook_pane", "%%%d", ne->pane);  
   
         cmdq_insert_after(item, new_item);                  cmdq_insert_after(item, new_item);
                   item = new_item;
   
                   a = options_array_next(a);
           }
 }  }
   
 static enum cmd_retval  static enum cmd_retval
Line 102 
Line 128 
         if (strcmp(ne->name, "session-window-changed") == 0)          if (strcmp(ne->name, "session-window-changed") == 0)
                 control_notify_session_window_changed(ne->session);                  control_notify_session_window_changed(ne->session);
   
         notify_hook1(item, ne);          notify_insert_hook(item, ne);
   
         if (ne->client != NULL)          if (ne->client != NULL)
                 server_client_unref(ne->client);                  server_client_unref(ne->client);
Line 169 
Line 195 
         ne.window = item->target.w;          ne.window = item->target.w;
         ne.pane = item->target.wp->id;          ne.pane = item->target.wp->id;
   
         notify_hook1(item, &ne);          notify_insert_hook(item, &ne);
 }  }
   
 void  void

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27