The branch, master has been updated
       via  13360ad54157790cbbaab757f659cb6d8a4ce2c4 (commit)
       via  9389cfbec9d7f4a7b5f9d4a580428949db4f6e67 (commit)
      from  7be152412ea0a614df11bce9ba5097574369a5f6 (commit)

- Log -----------------------------------------------------------------
commit 13360ad54157790cbbaab757f659cb6d8a4ce2c4
Merge: 9389cfb 7be1524
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>

    Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code

 cmd-if-shell.c     |    3 +++
 cmd-queue.c        |    4 ++--
 cmd-source-file.c  |    3 +++
 cmd-split-window.c |    2 +-
 cmd-wait-for.c     |    2 +-
 format.c           |    2 +-
 layout.c           |    3 +++
 tmux.1             |    2 +-
 tmux.c             |    6 ++++--
 9 files changed, 19 insertions(+), 8 deletions(-)



commit 9389cfbec9d7f4a7b5f9d4a580428949db4f6e67
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>

    Support -c for new-session, based on code from J Raynor.
---
 cmd-new-session.c  |   22 ++++++++++++-------
 cmd-new-window.c   |    2 +-
 cmd-queue.c        |   24 +++++++++++++++++++++
 cmd-split-window.c |    2 +-
 cmd.c              |   59 ++++++++++++++++++++-------------------------------
 tmux.1             |    1 +
 tmux.h             |    3 +-
 7 files changed, 66 insertions(+), 47 deletions(-)

diff --git a/cmd-new-session.c b/cmd-new-session.c
index b1e1aa4..1c743a8 100644
--- a/cmd-new-session.c
+++ b/cmd-new-session.c
@@ -34,9 +34,10 @@ enum cmd_retval       cmd_new_session_exec(struct cmd *, 
struct cmd_q *);
 
 const struct cmd_entry cmd_new_session_entry = {
        "new-session", "new",
-       "AdDF:n:Ps:t:x:y:", 0, 1,
-       "[-AdDP] [-F format] [-n window-name] [-s session-name] "
-       CMD_TARGET_SESSION_USAGE " [-x width] [-y height] [command]",
+       "Ac:dDF:n:Ps:t:x:y:", 0, 1,
+       "[-AdDP] [-c start-directory] [-F format] [-n window-name] "
+       "[-s session-name] " CMD_TARGET_SESSION_USAGE " [-x width] [-y height] "
+       "[command]",
        CMD_STARTSERVER|CMD_CANTNEST|CMD_SENDENVIRON,
        NULL,
        cmd_new_session_exec
@@ -52,8 +53,8 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
        struct environ           env;
        struct termios           tio, *tiop;
        struct passwd           *pw;
-       const char              *newname, *target, *update, *cwd, *errstr;
-       const char              *template;
+       const char              *newname, *target, *update, *base, *cwd;
+       const char              *errstr, *template;
        char                    *cmd, *cause, *cp;
        int                      detached, idx;
        u_int                    sx, sy;
@@ -126,14 +127,19 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
 
        /* Get the new session working directory. */
        if (c != NULL && c->cwd != NULL)
-               cwd = c->cwd;
+               base = c->cwd;
        else {
                pw = getpwuid(getuid());
                if (pw->pw_dir != NULL && *pw->pw_dir != '\0')
-                       cwd = pw->pw_dir;
+                       base = pw->pw_dir;
                else
-                       cwd = "/";
+                       base = "/";
        }
+       if (args_has(args, 'c'))
+               cwd = args_get(args, 'c');
+       else
+               cwd = options_get_string(&global_s_options, "default-path");
+       cwd = cmd_default_path(base, base, cwd);
 
        /* Find new session size. */
        if (c != NULL) {
diff --git a/cmd-new-window.c b/cmd-new-window.c
index 2ca0cec..e5658b3 100644
--- a/cmd-new-window.c
+++ b/cmd-new-window.c
@@ -102,7 +102,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
                cmd = options_get_string(&s->options, "default-command");
        else
                cmd = args->argv[0];
-       cwd = cmd_get_default_path(cmdq, args_get(args, 'c'));
+       cwd = cmdq_default_path(cmdq, args_get(args, 'c'));
 
        if (idx == -1)
                idx = -1 - options_get_number(&s->options, "base-index");
diff --git a/cmd-queue.c b/cmd-queue.c
index 38a88d2..808d4dc 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -283,3 +283,27 @@ cmdq_flush(struct cmd_q *cmdq)
        }
        cmdq->item = NULL;
 }
+
+/* Get default path using command queue. */
+const char *
+cmdq_default_path(struct cmd_q *cmdq, const char *cwd)
+{
+       struct client   *c = cmdq->client;
+       struct session  *s;
+       const char      *current;
+
+       if ((s = cmd_current_session(cmdq, 0)) == NULL)
+               return (NULL);
+
+       if (cwd == NULL)
+               cwd = options_get_string(&s->options, "default-path");
+
+       if (c != NULL && c->session == NULL && c->cwd != NULL)
+               current = c->cwd;
+       else if (s->curw != NULL)
+               current = osdep_get_cwd(s->curw->window->active->fd);
+       else
+               current = NULL;
+
+       return (cmd_default_path(s->cwd, current, cwd));
+}
diff --git a/cmd-split-window.c b/cmd-split-window.c
index 5b5140b..039d7fc 100644
--- a/cmd-split-window.c
+++ b/cmd-split-window.c
@@ -82,7 +82,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_q *cmdq)
                cmd = options_get_string(&s->options, "default-command");
        else
                cmd = args->argv[0];
-       cwd = cmd_get_default_path(cmdq, args_get(args, 'c'));
+       cwd = cmdq_default_path(cmdq, args_get(args, 'c'));
 
        type = LAYOUT_TOPBOTTOM;
        if (args_has(args, 'h'))
diff --git a/cmd.c b/cmd.c
index c9eb41a..6bf7cec 100644
--- a/cmd.c
+++ b/cmd.c
@@ -1278,68 +1278,55 @@ cmd_template_replace(const char *template, const char 
*s, int idx)
 }
 
 /*
- * Return the default path for a new pane, using the given path or the
- * default-path option if it is NULL. Several special values are accepted: the
- * empty string or relative path for the current pane's working directory, ~
- * for the user's home, - for the session working directory, . for the tmux
- * server's working directory. The default on failure is the session's working
- * directory.
+ * Return the default path for a new pane. Several special values are accepted:
+ * the empty string or relative path for the current working directory,
+ * ~ for the user's home, - for the base working directory, . for the server
+ * working directory.
  */
 const char *
-cmd_get_default_path(struct cmd_q *cmdq, const char *cwd)
+cmd_default_path(const char *base, const char *current, const char *in)
 {
-       struct client           *c = cmdq->client;
-       struct session          *s;
-       struct environ_entry    *envent;
        const char              *root;
+       struct environ_entry    *envent;
        char                     tmp[MAXPATHLEN];
        struct passwd           *pw;
        int                      n;
        size_t                   skip;
        static char              path[MAXPATHLEN];
 
-       if ((s = cmd_current_session(cmdq, 0)) == NULL)
-               return (NULL);
-
-       if (cwd == NULL)
-               cwd = options_get_string(&s->options, "default-path");
-
        skip = 1;
-       if (strcmp(cwd, "$HOME") == 0 || strncmp(cwd, "$HOME/", 6) == 0) {
+       if (strcmp(in, "$HOME") == 0 || strncmp(in, "$HOME/", 6) == 0) {
                /* User's home directory - $HOME. */
                skip = 5;
                goto find_home;
-       } else if (cwd[0] == '~' && (cwd[1] == '\0' || cwd[1] == '/')) {
+       } else if (in[0] == '~' && (in[1] == '\0' || in[1] == '/')) {
                /* User's home directory - ~. */
                goto find_home;
-       } else if (cwd[0] == '-' && (cwd[1] == '\0' || cwd[1] == '/')) {
-               /* Session working directory. */
-               root = s->cwd;
+       } else if (in[0] == '-' && (in[1] == '\0' || in[1] == '/')) {
+               /* Base working directory. */
+               root = base;
                goto complete_path;
-       } else if (cwd[0] == '.' && (cwd[1] == '\0' || cwd[1] == '/')) {
+       } else if (in[0] == '.' && (in[1] == '\0' || in[1] == '/')) {
                /* Server working directory. */
                if (getcwd(tmp, sizeof tmp) != NULL) {
                        root = tmp;
                        goto complete_path;
                }
-               return (s->cwd);
-       } else if (*cwd == '/') {
+               return ("/");
+       } else if (*in == '/') {
                /* Absolute path. */
-               return (cwd);
+               return (in);
        } else {
                /* Empty or relative path. */
-               if (c != NULL && c->session == NULL && c->cwd != NULL)
-                       root = c->cwd;
-               else if (s->curw != NULL)
-                       root = osdep_get_cwd(s->curw->window->active->fd);
+               if (current != NULL)
+                       root = current;
                else
-                       return (s->cwd);
+                       return (base);
                skip = 0;
-               if (root != NULL)
-                       goto complete_path;
+               goto complete_path;
        }
 
-       return (s->cwd);
+       return (base);
 
 find_home:
        envent = environ_find(&global_environ, "HOME");
@@ -1348,15 +1335,15 @@ find_home:
        else if ((pw = getpwuid(getuid())) != NULL)
                root = pw->pw_dir;
        else
-               return (s->cwd);
+               return (base);
 
 complete_path:
        if (root[skip] == '\0') {
                strlcpy(path, root, sizeof path);
                return (path);
        }
-       n = snprintf(path, sizeof path, "%s/%s", root, cwd + skip);
+       n = snprintf(path, sizeof path, "%s/%s", root, in + skip);
        if (n > 0 && (size_t)n < sizeof path)
                return (path);
-       return (s->cwd);
+       return (base);
 }
diff --git a/tmux.1 b/tmux.1
index ede1bb2..bbe9beb 100644
--- a/tmux.1
+++ b/tmux.1
@@ -676,6 +676,7 @@ Lock all clients attached to
 .Ar target-session .
 .It Xo Ic new-session
 .Op Fl AdDP
+.Op Fl c Ar start-directory
 .Op Fl F Ar format
 .Op Fl n Ar window-name
 .Op Fl s Ar session-name
diff --git a/tmux.h b/tmux.h
index ae1f38a..b6b66fb 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1767,7 +1767,7 @@ int                cmd_find_index(struct cmd_q *, const 
char *,
 struct winlink *cmd_find_pane(struct cmd_q *, const char *, struct session **,
                     struct window_pane **);
 char           *cmd_template_replace(const char *, const char *, int);
-const char             *cmd_get_default_path(struct cmd_q *, const char *);
+const char             *cmd_default_path(const char *, const char *, const 
char *);
 extern const struct cmd_entry *cmd_table[];
 extern const struct cmd_entry cmd_attach_session_entry;
 extern const struct cmd_entry cmd_bind_key_entry;
@@ -1876,6 +1876,7 @@ void               cmdq_run(struct cmd_q *, struct 
cmd_list *);
 void            cmdq_append(struct cmd_q *, struct cmd_list *);
 int             cmdq_continue(struct cmd_q *);
 void            cmdq_flush(struct cmd_q *);
+const char             *cmdq_default_path(struct cmd_q *, const char *);
 
 /* cmd-string.c */
 int    cmd_string_parse(const char *, struct cmd_list **, const char *,


-----------------------------------------------------------------------

Summary of changes:
 cmd-new-session.c  |   22 ++++++++++++-------
 cmd-new-window.c   |    2 +-
 cmd-queue.c        |   24 +++++++++++++++++++++
 cmd-split-window.c |    2 +-
 cmd.c              |   59 ++++++++++++++++++++-------------------------------
 tmux.1             |    1 +
 tmux.h             |    3 +-
 7 files changed, 66 insertions(+), 47 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to