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;
prev 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).