1 |
.TH XCB 1 "Oct 6 1994" "X Version 11" |
2 |
.SH NAME |
3 |
xcb \- X Cut Buffers \- Pigeon holes for your cut and paste selections. |
4 |
.SH SYNOPSIS |
5 |
.B xcb |
6 |
[\fIXt option\fP] |
7 |
[\fB\-l\fP \fIlayout\fP] |
8 |
[\fB\-n\fP \fIcount\fP] |
9 |
[\fB\-p\fP|\fB\-s\fP|\fB\-S\fP \fIlist\fP] |
10 |
[\fB\-r\fP \fIcount\fP] |
11 |
.SH DESCRIPTION |
12 |
\fIXcb\fP provides easy access to the cut buffers built into every X server. |
13 |
It allows the buffers to be manipulated either via the command line, |
14 |
or with the mouse in a point and click manner. |
15 |
The buffers can be used as holding pens to store and retrieve |
16 |
arbitrary data fragments. |
17 |
Any number of cut buffers may be created, |
18 |
so any number of different pieces of data can be saved and recalled later. |
19 |
By default, 8 cut buffers are created. |
20 |
The program is designed primarily for use with textual data. |
21 |
.LP |
22 |
\fIXcb\fP has two modes of operation. |
23 |
Normally \fIxcb\fP provides an array of windows on your display, |
24 |
one per cut buffer, tiled horizontally, vertically, or in some |
25 |
user specified layout. |
26 |
Each window displays the contents of its respective cut buffer. |
27 |
Data can be cut from and pasted to the windows in a similar manner |
28 |
to xterm. |
29 |
The buffers can also be rotated. |
30 |
.LP |
31 |
In task mode, \fIxcb\fP lets you access the cut buffers from the command line. |
32 |
Cut buffers can be loaded from stdin, |
33 |
copied or concatenated to stdout, |
34 |
loaded using the current PRIMARY selection, |
35 |
or rotated an arbitrary number of positions. |
36 |
In this mode of operation, \fIxcb\fP performs the requested task |
37 |
and then exits. |
38 |
It does not create any windows and |
39 |
has no interaction with the mouse or keyboard. |
40 |
.SH OPTIONS |
41 |
\fIXcb\fP supports the full set of X Toolkit Intrinsics options, |
42 |
as well as those listed below. |
43 |
\fIXcb\fP options can appear in any order. |
44 |
The presence of the |
45 |
\fB\-p\fP, |
46 |
\fB\-r\fP, |
47 |
\fB\-s\fP or |
48 |
\fB\-S\fP |
49 |
options causes \fIxcb\fP to execute in task mode, |
50 |
described above. |
51 |
.IP "\fB\-l\fP \fIlayout\fP" |
52 |
This option controls the geometry arrangement of \fIxcb's\fP subwindows. |
53 |
It is the command line equivalent of the \fB.layout\fP resource, |
54 |
described below. |
55 |
.LP |
56 |
.IP "\fB\-n\fP \fIcount\fP" |
57 |
Create \fIcount\fP cut buffers. |
58 |
\fICount\fP can be any integer greater than zero. |
59 |
This option is the command line equivalent of the \fB.bufferCount\fP |
60 |
resource, described below. |
61 |
.LP |
62 |
.IP "\fB\-u\fP" |
63 |
Use utf-8 instead of the current locale settings when executing in task mode |
64 |
and doing I/O. |
65 |
.LP |
66 |
.IP "\fB\-V\fP" |
67 |
Print the xcb release version number and exit immediately. |
68 |
.LP |
69 |
.IP "\fB\-p\fP \fIlist\fP" |
70 |
Print the contents of the listed buffer(s) on stdout. |
71 |
The buffered data is printed exactly as it is stored in the server. |
72 |
Selecting two or more buffers has the effect of concatenating |
73 |
the data on stdout. |
74 |
The cut buffers are numbered from 0... onwards. |
75 |
The list can be either a single digit, |
76 |
a comma separated list of digits, |
77 |
a range of the form m\-n, |
78 |
or some combination of lists and ranges. |
79 |
The buffers are printed in listed order, |
80 |
so repeated numbers in the list can be used to |
81 |
duplicate buffer contents. |
82 |
.LP |
83 |
.IP "\fB\-r\fP \fIcount\fP" |
84 |
Rotate the buffers by \fIcount\fP positions. |
85 |
\fICount\fP can be any integer, positive or negative. |
86 |
This option may be used in conjunction with the |
87 |
\fB\-n\fP \fIcount\fP option to rotate |
88 |
a specific number of buffers. |
89 |
If the \fB\-n\fP option is not used, \fIxcb\fP will rotate |
90 |
the number of buffers given by the \fB.bufferCount\fP resource. |
91 |
.LP |
92 |
.IP "\fB\-s\fP \fIlist\fP" |
93 |
Store the data from stdin in the listed buffer(s). |
94 |
If the list refers to two or more buffers, the input data is duplicated |
95 |
in each buffer. |
96 |
Refer to the \fB\-p\fP option for the definition of a list. |
97 |
.LP |
98 |
.IP "\fB\-S\fP \fIlist\fP" |
99 |
Store the current PRIMARY selection data in the listed buffer(s). |
100 |
The data is converted to a string representation. |
101 |
If the list refers to two or more buffers, the PRIMARY selection is |
102 |
duplicated in each buffer. |
103 |
Refer to the \fB\-p\fP option for the definition of a list. |
104 |
Under the \-S option xcb waits for the nominated cut buffer's contents |
105 |
to change before exiting. If no change is detected within |
106 |
3 seconds, xcb exits with a non-zero return code. |
107 |
.SH WIDGETS and RESOURCES |
108 |
The \fIxcb\fP widget hierarchy consists of a collection of |
109 |
custom buffer widgets, one per cut buffer. |
110 |
In the Athena version of the program, these buffer widgets are all |
111 |
contained within a single Athena form widget. |
112 |
In the Motif version of the program, they are |
113 |
each enclosed by Motif frame widgets, and the frame |
114 |
widgets are all contained within a single Motif RowColumn widget. |
115 |
.LP |
116 |
The names of the buffer widgets are "buffer0", "buffer1", |
117 |
"buffer2", .... etc., and their class name is "Buffer". |
118 |
Each buffer widget supports all the standard core widget |
119 |
resources, plus the \fB\.foreground\fP and \fB\.fontSet\fP resources. |
120 |
.LP |
121 |
Application wide resources are as follows: |
122 |
.br |
123 |
.sp 1 |
124 |
.nf |
125 |
\fB\.bufferCount\fP (default value 8) |
126 |
.in +8 |
127 |
This is the number of buffer widgets to create. |
128 |
Any number of widgets (greater than zero) can be created. |
129 |
.in -8 |
130 |
.sp 1 |
131 |
\fB\.layout\fP (default value "h") |
132 |
.in +8 |
133 |
Only the first character of the resource value is significant. |
134 |
This is the geometry arrangement to apply in the container widget. |
135 |
The layout can be "h" (horizontal), "v" (vertical), or some |
136 |
other value to disable the inbuilt geometry code and specify |
137 |
the layout via your X resources. An example is provided in the |
138 |
application default resources file. |
139 |
.in -8 |
140 |
.fi |
141 |
.SH EVENTS and TRANSLATIONS |
142 |
\fIXcb's\fP input semantics are coded into a Toolkit translation table. |
143 |
The default bindings have been chosen to conform with the default |
144 |
configuration of other cut and paste clients, such as xterm. |
145 |
The bindings may be altered or overridden according to your needs. |
146 |
The actions functions provided by \fIxcb\fP are:\- |
147 |
.br |
148 |
.sp 1 |
149 |
.ns |
150 |
.ta 16n |
151 |
.nf |
152 |
cut() causes the contents of the chosen cut buffer to become |
153 |
the PRIMARY selection. The window contents, if any, |
154 |
are highlighted, and can then be pasted into other |
155 |
cut buffers or applications. |
156 |
.sp 1 |
157 |
paste() causes the value of the PRIMARY selection to be |
158 |
converted into text and pasted into the chosen cut |
159 |
buffer, overwriting any previous buffer contents. |
160 |
If no PRIMARY selection is present, \fIxcb\fP pastes |
161 |
the contents of cut buffer zero into the chosen buffer. |
162 |
.sp 1 |
163 |
clear() clears the chosen cut buffer. |
164 |
.sp 1 |
165 |
rotate(NN) rotates the cut buffers by NN positions. NN may |
166 |
be any positive or negative number. |
167 |
.sp 1 |
168 |
refresh() causes the cut buffer window to be cleared and redrawn. |
169 |
.sp 1 |
170 |
selreq() this action function handles paste requests |
171 |
from other clients, or other \fIxcb\fP windows. |
172 |
It should always be bound to SelectionRequest events. |
173 |
.sp 1 |
174 |
selclear() this action function responds to the loss of |
175 |
ownership of the PRIMARY selection property. |
176 |
It should always be bound to SelectionClear events. |
177 |
.sp 1 |
178 |
quit() causes \fIxcb\fP to terminate. |
179 |
.fi |
180 |
.ta 8n |
181 |
.sp 1 |
182 |
The default bindings are as follows:\- |
183 |
.sp 1 |
184 |
.ta 20n |
185 |
.nf |
186 |
<Btn1Down>: cut() \\n\\ |
187 |
Shift <Btn2Down>: clear() \\n\\ |
188 |
<Btn2Down>: paste() \\n\\ |
189 |
Shift <Btn3Down>: rotate(-1) \\n\\ |
190 |
<Btn3Down>: rotate(1) \\n\\ |
191 |
<Key>Left: rotate(-1) \\n\\ |
192 |
<Key>Right: rotate(1) \\n\\ |
193 |
<Key>Up: rotate(-1) \\n\\ |
194 |
<Key>Down: rotate(1) \\n\\ |
195 |
<Key>q: quit() \\n\\ |
196 |
<SelReq>: selreq() \\n\\ |
197 |
<SelClr>: selclear() |
198 |
.fi |
199 |
.ta 8n |
200 |
.sp 1 |
201 |
.SH EXAMPLES |
202 |
The following are some examples of \fIxcb\fP task mode usage:\- |
203 |
.sp 1 |
204 |
xcb \-s 0\-7 < /dev/null |
205 |
.br |
206 |
This clears the first 8 cut buffers in your server. |
207 |
.sp 1 |
208 |
echo "G'day." | xcb \-display bigears:0.0 \-s 1,3,5,7 |
209 |
.br |
210 |
This loads the string "G'day." into four of the cut buffers |
211 |
on the display "bigears". |
212 |
.sp 1 |
213 |
xsendevent -win buffer5 '<Btn1Down>' |
214 |
.br |
215 |
This uses the program xsendevent to send a synthetic mouse click event |
216 |
to an xcb subwindow, thereby making that window the owner of |
217 |
the PRIMARY selection. |
218 |
.sp 1 |
219 |
ls \`xcb \-p 2,3\` |
220 |
.br |
221 |
This produces a listing of all the files named in |
222 |
cut buffers 2 and 3. |
223 |
.br |
224 |
.sp 1 |
225 |
xcb \-p 0\-7 | xcb \-s 0 |
226 |
.br |
227 |
This concatenates the values in the first 8 cut buffers, and places |
228 |
the result back in cut buffer zero. |
229 |
.sp 1 |
230 |
xcb -S 0 && xcb -p 0 |
231 |
.br |
232 |
The first command copies the current PRIMARY selection |
233 |
into the first cut buffer. If the copy succeeds, then |
234 |
the second command prints that data on stdout. |
235 |
.br |
236 |
.sp 1 |
237 |
.nf |
238 |
for i in 0 1 2 3 4 5 6 7 |
239 |
do |
240 |
xcb \-p $i > $HOME/.xcb/$i |
241 |
done |
242 |
for i in 0 1 2 3 4 5 6 7 |
243 |
do |
244 |
xcb \-s $i < $HOME/.xcb/$i |
245 |
done |
246 |
.fi |
247 |
This first loop saves the contents of each of the cut buffers |
248 |
in a separate file under your home directory. The second loop |
249 |
restores the cut buffer contents from those files. |
250 |
When placed in your .logout and .login scripts respectively, |
251 |
the commands are a simple method of preserving your cut buffers |
252 |
across login sessions. |
253 |
.sp 1 |
254 |
.nf |
255 |
function g { |
256 |
echo "$1\\\\c" | xcb \-s 7 |
257 |
grep "$@" |
258 |
} |
259 |
function vg { |
260 |
vi +/\`xcb \-p 7\` "$@" |
261 |
} |
262 |
.fi |
263 |
These two shell functions exemplify a simple mechanism for saving and |
264 |
reusing regular expressions. |
265 |
The first function saves the regex used for grep\-ing into |
266 |
cut buffer 7. The second function reuses the most recent |
267 |
grep regex as a search command in vi. |
268 |
There is considerable scope for expanding and improving these ideas. |
269 |
.SH SEE ALSO |
270 |
xterm(1), xcutsel(1), xclipboard(1), xprop(1) |
271 |
.br |
272 |
Athena Widget Set \- C Language Interface |
273 |
.br |
274 |
Motif Programmers Reference Guide |
275 |
.SH AUTHORS |
276 |
Current Maintainer (I18n version) |
277 |
.br |
278 |
Marc Lehmann |
279 |
.br |
280 |
E\-mail: pcg\@goof.com |
281 |
.br |
282 |
.sp 1 |
283 |
Original Author |
284 |
.br |
285 |
Farrell McKay |
286 |
.br |
287 |
E\-mail: Farrell.McKay\@mpx.com.au |
288 |
.br |
289 |
.sp 1 |
290 |
XView modifications provided by Danny Vanderryn |
291 |
.br |
292 |
E\-mail: dvanderr\@us.oracle.com |
293 |
.SH COPYRIGHT |
294 |
Copyright (C) 1992,1993,1994 by Farrell McKay. |
295 |
.br |
296 |
.sp 1 |
297 |
Permission to use, copy, modify, and distribute this software and its |
298 |
documentation for any purpose and without fee is hereby granted, provided |
299 |
that the above copyright notice appears in all copies and that both that |
300 |
copyright notice and this permission notice appear in supporting |
301 |
documentation. This software is provided "as is" without express or |
302 |
implied warranty. |
303 |
.SH "BUGS :\-)" |
304 |
Xlib's underlying protocol for moving selection data |
305 |
between client and server can sometimes be slow, |
306 |
depending on the amount of data involved. |
307 |
Do not expect fast performance if your selections are |
308 |
big or you want to store big files in your cut buffers! |
309 |
("big" means, say, over 10k bytes \- but your mileage |
310 |
may vary). |