Why not getsid()?


On Sun, Mar 02, 2014 at 03:18:10PM +0000, Balazs Kezes wrote:
> On 2014-02-27 22:09, Matteo Cavalleri wrote:
> > $ cat /etc/hosts | less # the pipe is important here
> > [...]
> > so when I create a new window with e.g. something piped to less the
> > new window opens on the root directory, always.
> 
> It seems that tmux tries to determine the pane's current directory by
> checking the foreground process group's leader's current working
> directory. In the above pipe that leader is the "cat /etc/hosts" which
> has already finished when you do the split so it can't observe its cwd
> at that point.
> 
> I think a reasonable fallback for this scenario would be to check the
> session leader's cwd which is the shell where you start the above
> pipeline. I've appended a patch which implements this in Linux.
> 
> ---
> diff --git a/osdep-linux.c b/osdep-linux.c
> index ccac267..8942c94 100644
> --- a/osdep-linux.c
> +++ b/osdep-linux.c
> @@ -65,7 +65,7 @@ osdep_get_cwd(int fd)
>  {
>       static char      target[MAXPATHLEN + 1];
>       char            *path;
> -     pid_t            pgrp;
> +     pid_t            pgrp, sid;
>       ssize_t          n;
>  
>       if ((pgrp = tcgetpgrp(fd)) == -1)
> @@ -74,6 +74,16 @@ osdep_get_cwd(int fd)
>       xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp);
>       n = readlink(path, target, MAXPATHLEN);
>       free(path);
> +
> +     if (n == -1) {
> +             // Try the session leader as well.
> +             if (ioctl(fd, TIOCGSID, &sid) == -1)
> +                     return (NULL);
> +             xasprintf(&path, "/proc/%lld/cwd", (long long) sid);
> +             n = readlink(path, target, MAXPATHLEN);
> +             free(path);
> +     }
> +
>       if (n > 0) {
>               target[n] = '\0';
>               return (target);
> -- 
> Balazs
> 
> ------------------------------------------------------------------------------
> Flow-based real-time traffic analytics software. Cisco certified tool.
> Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
> Customize your own dashboards, set traffic alerts and generate reports.
> Network behavioral analysis & security monitoring. All-in-one tool.
> http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
> _______________________________________________
> tmux-users mailing list
> tmux-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tmux-users

------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to