mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
More X11 snarf tweaks.
Will we ever finish?
This commit is contained in:
parent
1555bd7aaa
commit
e39b8b1928
5 changed files with 38 additions and 11 deletions
|
@ -57,7 +57,7 @@ data set $file
|
||||||
attr add addr=$3
|
attr add addr=$3
|
||||||
plumb to edit
|
plumb to edit
|
||||||
plumb start /usr/local/plan9/bin/B $file
|
plumb start /usr/local/plan9/bin/B $file
|
||||||
#plumb client window $editor
|
# plumb client window $editor
|
||||||
|
|
||||||
# .h files are looked up in /sys/include and passed to edit
|
# .h files are looked up in /sys/include and passed to edit
|
||||||
type is text
|
type is text
|
||||||
|
@ -66,7 +66,8 @@ arg isfile /sys/include/$1
|
||||||
data set $file
|
data set $file
|
||||||
attr add addr=$3
|
attr add addr=$3
|
||||||
plumb to edit
|
plumb to edit
|
||||||
plumb client window $editor
|
plumb start /usr/local/plan9/bin/B $file
|
||||||
|
# plumb client window $editor
|
||||||
|
|
||||||
# .m files are looked up in /sys/module and passed to edit
|
# .m files are looked up in /sys/module and passed to edit
|
||||||
type is text
|
type is text
|
||||||
|
@ -75,7 +76,8 @@ arg isfile /sys/module/$1
|
||||||
data set $file
|
data set $file
|
||||||
attr add addr=$3
|
attr add addr=$3
|
||||||
plumb to edit
|
plumb to edit
|
||||||
plumb client window $editor
|
plumb start /usr/local/plan9/bin/B $file
|
||||||
|
# plumb client window $editor
|
||||||
|
|
||||||
# faces -> new mail window for message
|
# faces -> new mail window for message
|
||||||
type is text
|
type is text
|
||||||
|
|
|
@ -6,7 +6,7 @@ LDFLAGS=$LDFLAGS -lsec -lregexp9 -l9 -lbio -lfmt -lutf
|
||||||
|
|
||||||
<$PLAN9/src/mkmany
|
<$PLAN9/src/mkmany
|
||||||
|
|
||||||
BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac|9term|venti'
|
BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac|9term|venti|htmlfmt'
|
||||||
DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "$BUGGERED"`
|
DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "$BUGGERED"`
|
||||||
|
|
||||||
<$PLAN9/src/mkdirs
|
<$PLAN9/src/mkdirs
|
||||||
|
|
|
@ -379,6 +379,10 @@ xattach(char *label)
|
||||||
* Look up clipboard atom.
|
* Look up clipboard atom.
|
||||||
*/
|
*/
|
||||||
_x.clipboard = XInternAtom(_x.display, "CLIPBOARD", False);
|
_x.clipboard = XInternAtom(_x.display, "CLIPBOARD", False);
|
||||||
|
_x.utf8string = XInternAtom(_x.display, "UTF8_STRING", False);
|
||||||
|
_x.targets = XInternAtom(_x.display, "TARGETS", False);
|
||||||
|
_x.text = XInternAtom(_x.display, "TEXT", False);
|
||||||
|
_x.compoundtext = XInternAtom(_x.display, "COMPOUND_TEXT", False);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lots of display connections for various procs.
|
* Lots of display connections for various procs.
|
||||||
|
|
|
@ -378,6 +378,9 @@ xgetsnarf(XDisplay *xd)
|
||||||
* come, and we have no way to time out. Instead, we will clear
|
* come, and we have no way to time out. Instead, we will clear
|
||||||
* local property #1, request our buddy to fill it in for us, and poll
|
* local property #1, request our buddy to fill it in for us, and poll
|
||||||
* until he's done or we get tired of waiting.
|
* until he's done or we get tired of waiting.
|
||||||
|
*
|
||||||
|
* We should try to go for _x.utf8string instead of XA_STRING,
|
||||||
|
* but that would add to the polling.
|
||||||
*/
|
*/
|
||||||
prop = 1;
|
prop = 1;
|
||||||
XChangeProperty(xd, _x.drawable, prop, XA_STRING, 8, PropModeReplace, (uchar*)"", 0);
|
XChangeProperty(xd, _x.drawable, prop, XA_STRING, 8, PropModeReplace, (uchar*)"", 0);
|
||||||
|
@ -392,7 +395,7 @@ xgetsnarf(XDisplay *xd)
|
||||||
break;
|
break;
|
||||||
lastlen = len;
|
lastlen = len;
|
||||||
}
|
}
|
||||||
if(i == 30){
|
if(i == 10){
|
||||||
data = nil;
|
data = nil;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +403,7 @@ xgetsnarf(XDisplay *xd)
|
||||||
data = nil;
|
data = nil;
|
||||||
XGetWindowProperty(xd, _x.drawable, prop, 0, SnarfSize/sizeof(ulong), 0,
|
XGetWindowProperty(xd, _x.drawable, prop, 0, SnarfSize/sizeof(ulong), 0,
|
||||||
AnyPropertyType, &type, &fmt, &len, &dummy, &xdata);
|
AnyPropertyType, &type, &fmt, &len, &dummy, &xdata);
|
||||||
if(type != XA_STRING || len == 0){
|
if((type != XA_STRING && type != _x.utf8string) || len == 0){
|
||||||
if(xdata)
|
if(xdata)
|
||||||
XFree(xdata);
|
XFree(xdata);
|
||||||
data = nil;
|
data = nil;
|
||||||
|
@ -444,19 +447,33 @@ xputsnarf(XDisplay *xd, char *data)
|
||||||
int
|
int
|
||||||
xselect(XEvent *e, XDisplay *xd)
|
xselect(XEvent *e, XDisplay *xd)
|
||||||
{
|
{
|
||||||
|
char *name;
|
||||||
XEvent r;
|
XEvent r;
|
||||||
XSelectionRequestEvent *xe;
|
XSelectionRequestEvent *xe;
|
||||||
|
Atom a[4];
|
||||||
|
|
||||||
memset(&r, 0, sizeof r);
|
memset(&r, 0, sizeof r);
|
||||||
xe = (XSelectionRequestEvent*)e;
|
xe = (XSelectionRequestEvent*)e;
|
||||||
if(1 || xe->target == XA_STRING){
|
if(0) fprint(2, "xselect target=%d requestor=%d property=%d selection=%d\n",
|
||||||
|
xe->target, xe->requestor, xe->property, xe->selection);
|
||||||
|
r.xselection.property = xe->property;
|
||||||
|
if(xe->target == _x.targets){
|
||||||
|
a[0] = XA_STRING;
|
||||||
|
a[1] = _x.utf8string;
|
||||||
|
a[2] = _x.text;
|
||||||
|
a[3] = _x.compoundtext;
|
||||||
|
|
||||||
|
XChangeProperty(xd, xe->requestor, xe->property, xe->target,
|
||||||
|
8, PropModeReplace, (uchar*)a, sizeof a);
|
||||||
|
}else if(xe->target == XA_STRING || xe->target == _x.utf8string || xe->target == _x.text || xe->target == _x.compoundtext){
|
||||||
|
/* if the target is STRING we're supposed to reply with Latin1 XXX */
|
||||||
qlock(&clip.lk);
|
qlock(&clip.lk);
|
||||||
XChangeProperty(xd, xe->requestor, xe->property, XA_STRING, 8,
|
XChangeProperty(xd, xe->requestor, xe->property, xe->target,
|
||||||
PropModeReplace, (uchar*)clip.buf, strlen(clip.buf)+1);
|
8, PropModeReplace, (uchar*)clip.buf, strlen(clip.buf));
|
||||||
qunlock(&clip.lk);
|
qunlock(&clip.lk);
|
||||||
r.xselection.property = xe->property;
|
|
||||||
}else{
|
}else{
|
||||||
fprint(2, "asked for a %d\n", xe->target);
|
name = XGetAtomName(xd, xe->target);
|
||||||
|
fprint(2, "%s: cannot handle selection request for '%s' (%d)\n", argv0, name, (int)xe->target);
|
||||||
r.xselection.property = None;
|
r.xselection.property = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,10 @@ struct Xprivate {
|
||||||
XVisual *vis;
|
XVisual *vis;
|
||||||
u32int white;
|
u32int white;
|
||||||
Atom clipboard;
|
Atom clipboard;
|
||||||
|
Atom utf8string;
|
||||||
|
Atom targets;
|
||||||
|
Atom text;
|
||||||
|
Atom compoundtext;
|
||||||
uint putsnarf;
|
uint putsnarf;
|
||||||
uint assertsnarf;
|
uint assertsnarf;
|
||||||
int destroyed;
|
int destroyed;
|
||||||
|
|
Loading…
Reference in a new issue