9front - general discussion about 9front
 help / color / mirror / Atom feed
From: igor@9lab.org
To: 9front@9front.org
Cc: cinap_lenrek@felloff.net
Subject: Re: [9front] [PATCH] rio: allow spaces in working directory path (-cd) when creating a new window
Date: Mon, 29 Nov 2021 01:29:50 +0100	[thread overview]
Message-ID: <78471EBB208850B6682BAF4168D2911A@9lab.org> (raw)
In-Reply-To: <B884909AAC83761D18BC037BEB08577E@felloff.net>

[-- Attachment #1: Type: text/plain, Size: 974 bytes --]

Quoth cinap_lenrek@felloff.net:
[…]
> probably is better to parse everything using gettokens().
> as your patch doesnt handle quoting the quotes.
[…]

Done. Using gettokens(…) instead of the previous hack.

> the whole window command also will probably have issues with
> this kind of stuff... the quoting is definitely messed up in
> there.
> 
> tho it is possible to quote from rc, like:
> 
> fn q {a=$1 whatis a | sed 's!^a=!!;q'}
[…]

Done. Thanks for the tip with quoting from rc.

> or even get rid of wctl all together... it is a bit silly given
> you can just fork and mount $wsys yourself... then there are not
> two different code paths for creating a window.
[…]

The attached patch fixes the use case with spaces in paths for the
-cd option for wctl and window command.

Agree that two *different* code paths in /rc/bin/window for creating
a window is a bit silly. Will work on unifying that in the next
revision of the patch…

Thanks.

Cheers,
Igor

[-- Attachment #2: rio-working-directory-with-spaces-v2.patch --]
[-- Type: text/plain, Size: 2050 bytes --]

From: Igor Böhm <igor@9lab.org>
Date: Mon, 29 Nov 2021 00:06:45 +0000
Subject: [PATCH] rio: allow spaces in working directory path (-cd) when creating a new window


The initial working directory of the new window may be set by a
`-cd directory` option. However, the `-cd directory` option is
not capable of handling paths with spaces.

To enable paths with spaces the function
/sys/src/cmd/rio/wctl.c:/^parsewctl is extended to handle quoted
directory paths.

Before applying the patch the following will fail to open a new
window by writing to /dev/wctl:

<snip>
 % rio -i window
 % mkdir '/tmp/path with space'
 % echo new -cd '''/tmp/path with space''' window -x rc >> /dev/wctl
 % pwd
 /tmp/path with space
<snap>

The following invocation fails as well:

<snip>
 % window -cd '/tmp/path with space'
 % pwd
 /tmp/path with space
<snap>

After applying the patch the above sequences work as expected,
opening a window running rc and the working directory set to
'/tmp/path with space'.
---
diff 78c7ad88ffbfbd2b7a7269d863e5f4be7535b566 06623a45c7101085ce651a92ff8b952fe239eaac
--- a/rc/bin/window	Fri Nov 26 22:47:15 2021
+++ b/rc/bin/window	Mon Nov 29 01:06:45 2021
@@ -100,6 +100,6 @@
 	}
 
 	if(! ~ $#wdir 0)
-		spec=($spec -cd $wdir)
+		spec=($spec -cd `{a=$wdir whatis a|sed 's!^a=!!;q'})
 	echo new $spec $argv0 -x $cmd >>$wctl
 }
--- a/sys/src/cmd/rio/wctl.c	Fri Nov 26 22:47:15 2021
+++ b/sys/src/cmd/rio/wctl.c	Mon Nov 29 01:06:45 2021
@@ -203,7 +203,7 @@
 parsewctl(char **argp, Rectangle r, Rectangle *rp, int *pidp, int *idp, int *hiddenp, int *scrollingp, char **cdp, char *s, char *err)
 {
 	int cmd, param, xy, sign;
-	char *t;
+	char *f[2], *t;
 
 	*pidp = 0;
 	*hiddenp = 0;
@@ -252,10 +252,13 @@
 			s++;
 		if(param == Cd){
 			*cdp = s;
-			while(*s && !isspace(*s))
-				s++;
-			if(*s != '\0')
-				*s++ = '\0';
+			gettokens(*cdp, f, nelem(f), " \t\r\n\v\f");
+			s += strlen(*cdp);
+			if((*cdp)[0] == '\'' && s[-1] == '\''){
+				/* drop quotes */
+				*cdp += 1;
+				s[-1] = '\0';
+			}
 			continue;
 		}
 		sign = 0;

      parent reply	other threads:[~2021-11-29  0:37 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-25  2:17 igor
2021-11-25  9:57 ` cinap_lenrek
2021-11-25 10:40   ` igor
2021-11-29  0:29   ` igor [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=78471EBB208850B6682BAF4168D2911A@9lab.org \
    --to=igor@9lab.org \
    --cc=9front@9front.org \
    --cc=cinap_lenrek@felloff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).