1 .\" Copyright (c) 2014-2016 Bert Burgemeister <trebbu@googlemail.com>
3 .\" Permission is hereby granted, free of charge, to any person obtaining
4 .\" a copy of this software and associated documentation files (the
5 .\" "Software"), to deal in the Software without restriction, including
6 .\" without limitation the rights to use, copy, modify, merge, publish,
7 .\" distribute, sublicense, and/or sell copies of the Software, and to
8 .\" permit persons to whom the Software is furnished to do so, subject to
9 .\" the following conditions:
11 .\" The above copyright notice and this permission notice shall be
12 .\" included in all copies or substantial portions of the Software.
14 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 .\" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 .\" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 .\" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 .\" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 .Nd Pipe-Driven GTK+ Interface
36 .Op Fl u Ar builder-file
37 .Op Fl -display Ar X-server
40 is a helper program that displays graphical user
41 interfaces for other programs. It renders the GUI definition
42 found in a GtkBuilder XML file (typically created using the
44 interface designer), and communicates with the main program solely
45 through plain text messages via pipes or fifos. It provides access to
46 a subset of features of a subset of widgets of GTK+ 3. Simple
47 one-shot dialogs as well as more complex, long-running programs can be
55 Prints a help message and exits.
56 .It Fl e Ar parent-xid
57 Embeds the main window into the XEmbed socket
63 if necessary, and uses it for command input.
65 A command is a line of text. Its format is
66 .Qq Fa name Ns Ic \&: Ns Fa action Bq Fa data
69 is the name of the receiving widget;
71 is separated from the rest of the command by a single whitespace
72 character. Commands whose first non-whitespace character is
74 are considered comments and ignored silently, as are empty input lines.
75 Any occurences of the two-character sequences
79 will be converted into newline or carriage return, respectively.
80 Every other character following a backslash will be left unchanged,
81 but the backslash will be removed. Invalid commands are reported on
83 and are otherwise ignored. See
85 for applicable commands.
89 exists but is not a named pipe. The named pipe
91 is deleted upon successful program termination.
93 Default command input is
98 if necessary, and uses it for output of feedback messages from the
99 graphical user interface.
101 A feedback message is a line of text; its format is
102 .Qq Fa name Ns Ic \&: Ns Fa info Bq Fa data
105 is the name of the sending widget. See
107 for possible feedback messages.
111 exists but is not a named pipe. The named pipe
113 is deleted upon successful program termination.
115 Default feedback-message output is
117 .It Fl u Ar builder-file
118 Displays the graphical user interface
120 which should be created using the
122 user interface designer and saved in GtkBuilder (.ui) format. Widget
123 names should be alphanumeric, including underscores, and the main
129 .It Fl -display Ar X-server
132 for user interaction.
134 Prints the GTK+ version and exits.
141 The widget classes able to communicate through
148 .Sx GtkComboBoxText ,
154 .Sx GtkFileChooserButton ,
155 .Sx GtkFileChooserDialog ,
160 .Sx GtkMenuItem, GtkImageMenuItem ,
162 .Sx GtkPrintUnixDialog ,
166 .Sx GtkScrolledWindow
173 .Sx GtkToggleButton ,
175 .Sx GtkTreeViewColumn ,
180 references a widget by the
182 it is given in Glade. In the .ui file, this
184 is represented by the
186 attribute of the referenced object; therefore, a
190 would appear in the .ui file as
191 .Li <object class="GtkWindow" id="foo"> .
192 .Ss Any Widget (including widgets not mentioned above)
193 .Bl -tag -width "commands "
195 .Qq Fa name Ns Ic :set_sensitive Brq Ic 0 | 1
196 makes the widget grayed out
201 .Qq Fa name Ns Ic :set_visible Brq Ic 0 | 1
204 the widget, or makes it visible
207 .Qq Fa name Ns Ic :grab_focus
208 puts the keyboard focus onto the widget, if possible.
210 .Qq Fa name Ns Ic :set_size_request Bq Fa width height
211 sets the widget's minimum size to
215 Default is the widget's natural size.
218 .Fa name Ns Ic :style
219 .Bo Fa prop Ic : Ns Fa val Ns Bo Ic ; Fa prop Ic : Ns Fa val ... Bc Bc
223 of the widget style to
225 Properties not explicitly specified are reset to their default values.
227 .Bl -dash -offset indent -compact
229 .Qq Li label1:style font:Bold 11; background-color:green
231 .Qq Li label1:style font-style:italic; font-weight:bold; color:blue
233 .Qq Li frame1:style border-color:red yellow; border-width:5px
235 .Qq Li frame1:style border-radius:10px; transition:10s
237 For a description of possible color notations see
240 .Qq Fa name Ns Ic :set_tooltip_text Bq Fa text
241 sets the widget's tooltip
243 Default is disabling the tooltip.
245 .Qq Fa name Ns Ic :force
246 simulates a click on the
248 d widget, triggering a response as described with the widgets below.
250 .Bl -dash -offset indent -compact
252 The command is ignored by
260 .Sx GtkTreeViewColumn ;
262 .Sx GtkCalendar , GtkEntry , GtkFileChooserButton , GtkScale ,
265 report the currently selected item;
270 just open their respective dialogs.
273 .Qq Fa name Ns Ic :load Fa file
280 is required but ignored.
282 commands may be nested but on attempts to read from the same file, the
285 is ignored. There is also a
292 .Qq Fa name Ns Ic :main_quit
293 kills the user interface. A non-empty
295 is required but ignored.
298 .Bl -tag -width "commands "
300 .Qq Fa name Ns Ic :set_label Fa string
301 replaces the button text with
304 .Qq Fa name Ns Ic \&:clicked
307 s with names ending in
308 .Ic _ok , _apply , _cancel , _send_text ,
311 may work differently; see
312 .Sx GtkDialog , GtkFileChooserDialog ,
318 .Bl -tag -width "commands "
320 .Qq Fa name Ns Ic :select_date Fa yyyy Ns Ic - Ns Fa mm Ns Ic - Ns Fa dd
321 selects the date on the calendar.
323 .Qq Fa name Ns Ic :mark_day Fa day
328 .Qq Fa name Ns Ic :clear_marks
329 unmarks all days on the calendar.
331 .Qq Fa name Ns Ic \&:clicked Fa yyyy Ns Ic - Ns Fa mm Ns Ic - Ns Fa dd
333 .Qq Fa name Ns Ic \&:doubleclicked Fa yyyy Ns Ic - Ns Fa mm Ns Ic - Ns Fa dd
336 .Bl -tag -width "commands "
338 .Qq Fa name Ns Ic :set_active Brq Ic 0 | 1
339 switches the check mark off
344 .Qq Fa name Ns Ic :set_label Fa string
345 replaces the button text with
348 .Qq Fa name Ns Ic \&:1
350 .Qq Fa name Ns Ic \&:0
354 .Bl -tag -width "commands "
356 .Qq Fa name Ns Ic :set_color Fa color
357 preselects the color.
360 .Bl -dash -offset indent -compact
362 a standard X11 color name, like
363 .Qq Li Dark Sea Green ,
365 a hexadecimal value in the form
366 .Ic # Ns Fa rgb , Ic # Ns Fa rrggbb , Ic # Ns Fa rrrgggbbb ,
368 .Ic # Ns Fa rrrrggggbbbb ,
370 an RGB color in the form
371 .Ic rgb( Ns Fa red Ns Ic \&, Ns Fa green Ns Ic \&, Ns Fa blue Ns Ic \&) ,
374 an RGBA color in the form
375 .Ic rgba( Ns Fa red Ns Ic \&, Ns Fa green Ns Ic \&, Ns
376 .Fa blue Ns Ic \&, Ns Fa alpha Ns Ic \&) .
379 .Qq Fa name Ns Ic \&:color Ic rgb( Ns Fa red Ns Ic \&, Ns Fa green Ns Ic \&, Ns Fa blue Ns Ic \&)
381 .Qq Fa name Ns Ic \&:color Ic rgba( Ns Fa red Ns Ic \&, Ns Fa green Ns Ic \&, Ns Fa blue Ns Ic \&, Ns Fa alpha Ns Ic \&) .
385 lie between 0 and 255, and
394 .Bl -tag -width "commands "
396 .Qq Fa name Ns Ic :prepend_text Fa string
398 .Qq Fa name Ns Ic :append_text Fa string
399 prepend/append a new selectable item marked
402 .Qq Fa name Ns Ic :insert_text Fa position string
408 .Qq Fa name Ns Ic :remove Fa position
412 .Qq Fa entry_name Ns Ic \&:text Fa text ,
414 being the name of the child
427 .Fa foo Ns Ic _invoke .
435 .Fa foo Ns Ic _cancel
437 if the dialog is the sole window of the GUI and therefore named
448 it will take care of hiding the dialog window.
449 .Bl -tag -width "commands "
456 Most drawing commands expect an
458 parameter (an arbitrary non-negative integer) which can be used to reference the
459 command for later removal.
461 All coordinates refer to a left-handed coordinate system with its
462 origin in the upper-left corner.
463 .Bl -tag -width "commands "
465 .Qq Fa name Ns Ic :arc Fa id x y radius angle1 angle2
466 adds a circular arc to the current path. The arc is centered at
468 and proceeds clockwise from
476 .Qq Fa name Ns Ic :arc_negative Fa id x y radius angle1 angle2
477 adds a circular arc to the current path. The arc is centered at
479 and proceeds counterclockwise from
487 .Qq Fa name Ns Ic :close_path Fa id
488 adds a line segment from the current point to the point most recently
490 .Fa name Ns Ic :move_to
492 .Fa name Ns Ic :rel_move_to .
494 .Qq Fa name Ns Ic :curve_to Fa id x1 y1 x2 y2 x3 y3
495 adds a cubic Bezier spline from the current point to
503 .Qq Fa name Ns Ic :fill Fa id
504 fills the current path and clears it.
506 .Qq Fa name Ns Ic :fill_preserve Fa id
507 fills the current path without clearing it.
509 .Qq Fa name Ns Ic :line_to Fa id x y
510 adds a line from the current point to
513 .Qq Fa name Ns Ic :move_to Fa id x y
514 sets the current point to
517 .Qq Fa name Ns Ic :rectangle Fa id x y width height
518 adds a rectangle to the current path. The top left corner is at
521 .Qq Fa name Ns Ic :refresh
526 .Qq Fa name Ns Ic :rel_curve_to Fa id dx1 dy1 dx2 dy2 dx3 dy3
527 adds a cubic Bezier spline from the current point to
533 as control points. All coordinates are offsets relative to the
536 .Qq Fa name Ns Ic :rel_line_to Fa id dx dy
537 adds a line from the current point to a point offset from there by
540 .Qq Fa name Ns Ic :rel_move_to Fa id dx dy
541 moves the current point by
544 .Qq Fa name Ns Ic :remove Fa id
545 removes the elements with
548 .Ic GtkDrawingArea Fa name .
550 .Qq Fa name Ns Ic :set_dash Fa id l
551 sets the dash pattern to
557 .Qq Fa name Ns Ic :set_dash Fa id l1on l1off l2on l2off ...
558 resets the dash pattern to a line with arbitrary on/off portions.
560 .Qq Fa name Ns Ic :set_dash Fa id
561 resets the dash pattern to a solid line.
563 .Qq Fa name Ns Ic :set_font_size Fa id size
564 sets the font size for subsequent calls of
565 .Fa name Ns Ic :show_text .
567 .Qq Fa name Ns Ic :set_line_cap Fa id Brq Ic butt | round | square
568 sets the line cap style.
570 .Qq Fa name Ns Ic :set_line_join Fa id Brq Ic miter | round | bevel
571 sets the line junction style.
573 .Qq Fa name Ns Ic :set_line_width Fa id width
576 .Qq Fa name Ns Ic :set_source_rgba Fa id color
579 is in the format used with
582 .Qq Fa name Ns Ic :show_text Fa id text
585 beginning at the current point.
587 .Qq Fa name Ns Ic :stroke Fa id
588 strokes the current path and clears it.
590 .Qq Fa name Ns Ic :stroke_preserve Fa id
591 strokes the current path without clearing it.
596 .Bl -tag -width "commands "
598 .Qq Fa name Ns Ic :set_text Fa string
599 replaces the user-editable text with
602 .Qq Fa name Ns Ic :set_placeholder_text Fa string
605 that is displayed when the entry is empty and unfocused.
607 .Qq Fa name Ns Ic \&:text Fa text ,
608 once for each change of
613 are mouse pointer coordinates relative to the
615 .Bl -tag -width "commands "
619 .Qq Fa name Ns Ic \&:button_press Fa b x y ,
620 .Qq Fa name Ns Ic \&:button_release Fa b x y
623 is the mouse button (normally 1, 2, or 3 for the left, middle, and
624 right button; others may exist).
626 .Qq Fa name Ns Ic \&:motion Fa x y
627 is reported repeatedly while the mouse is being moved with a button
630 .Qq Fa name Ns Ic \&:key_press Fa key ,
633 .Pq e.g. Li Control_L , Tab , a .
636 .Bl -tag -width "commands "
638 .Qq Fa name Ns Ic :set_label Fa string
639 replaces the expander label text with
642 .Qq Fa name Ns Ic :set_expanded Brq Ic 0 | 1
645 the child widget, or makes it visible
650 .Ss GtkFileChooserButton
651 .Bl -tag -width "commands "
653 .Qq Fa name Ns Ic :set_filename Fa path
656 to the extent it exists.
658 .Qq Fa name Ns Ic \&:file Fa pathname
659 if the selection has changed.
661 .Ss GtkFileChooserDialog
663 .Ic GtkFileChooserDialog
671 .Fa foo Ns Ic _invoke .
674 .Ic GtkFileChooserDialog
681 if the dialog is the sole window of the GUI and therefore named
686 .Ic GtkFileChooserDialog
691 .Fa foo Ns Ic _cancel
693 if the dialog is the sole window of the GUI and therefore named
698 .Ic GtkFileChooserDialog
705 if the dialog is the sole window of the GUI and therefore named
708 .Bl -tag -width "commands "
710 .Qq Fa name Ns Ic :set_filename Fa path
713 to the extent it exists.
715 .Qq Fa name Ns Ic :set_current_name Fa string
718 the suggested filename, which may not yet exist.
720 should either resemble an absolute path, or the
722 must be set separately by
723 .Fa name Ns Ic :set_filename Fa directory .
725 .Qq Fa name Ns Ic :file Fa pathname
727 .Qq Fa name Ns Ic :folder Fa pathname
730 .Bl -tag -width "commands "
732 .Qq Fa name Ns Ic :set_font_name Fa fontname
735 .Qq Fa name Ns Ic \&:font Fa fontname
738 .Bl -tag -width "commands "
740 .Qq Fa name Ns Ic :set_label Fa text
741 replaces the frame label text with
747 .Bl -tag -width "commands "
749 .Qq Fa name Ns Ic :set_from_icon_name Fa icon-name
750 replaces the image with one of the standard icons.
752 .Qq Fa name Ns Ic :set_from_file Fa path
753 replaces the image by the one found at
759 .Bl -tag -width "commands "
761 .Qq Fa name Ns Ic :set_text Fa string
762 replaces the label text with
767 .Ss GtkMenuItem, GtkImageMenuItem
768 .Bl -tag -width "commands "
777 .Fa foo Ns Ic _invoke
781 .Sx GtkFileChooserDialog
784 if it exists. If there isn't any dialog attached to the
787 .Qq Fa name Ns Ic \&:active Fa label .
790 .Bl -tag -width "commands "
792 .Qq Fa name Ns Ic :set_current_page Fa n
793 switches to zero-based page number
798 .Ss GtkPrintUnixDialog
799 .Bl -tag -width "commands "
801 .Qq Fa name Ns Ic :print Fa file.ps
802 opens the print dialog. Pressing the
806 to the printer the user selected in the dialog.
811 .Bl -tag -width "commands "
813 .Qq Fa name Ns Ic :set_fraction Fa x
814 moves the progress bar to
816 .Pq between 0 and 1 .
818 .Qq Fa name Ns Ic :set_text Bq Fa string
819 replaces the text of the progress bar with
821 Default is the progress percentage.
826 .Bl -tag -width "commands "
828 .Qq Fa name Ns Ic :set_active 1
829 switches the button on. All other buttons of the same group will go off
832 .Qq Fa name Ns Ic :set_label Fa string
833 replaces the button text with
836 .Qq Fa name Ns Ic \&:1
838 .Qq Fa name Ns Ic \&:0
842 .Bl -tag -width "commands "
844 .Qq Fa name Ns Ic :set_value Fa x
845 moves the slider to value
848 .Qq Fa name Ns Ic \&:value Fa floating_point_text
850 .Ss GtkScrolledWindow
851 .Bl -tag -width "commands "
853 .Qq Fa name Ns Ic :hscroll Fa position
855 .Qq Fa name Ns Ic :vscroll Fa position
858 to the left or top edge of the
859 .Ic GtkScrolledWindow ,
862 .Qq Fa name Ns Ic :hscroll_to_range Fa pos_0 pos_1
864 .Qq Fa name Ns Ic :vscroll_to_range Fa pos_0 pos_1
865 scroll, if necessary, the range between
870 .Ic GtkScrolledWindow .
871 If the range is greater than the window, the initial part of the range
878 may be unsupported by Glade, but its definition can be inserted
879 manually into the GtkBuilder (.ui) file:
882 \ \ \ \ <object class="GtkSocket" id="socket1">
883 \ \ \ \ \ \ <property name="visible">True</property>
884 \ \ \ \ \ \ <property name="can_focus">True</property>
887 \ \ \ \ \ \ <property name="expand">True</property>
888 \ \ \ \ \ \ <property name="fill">True</property>
889 \ \ \ \ \ \ <property name="position">1</property>
893 .Bl -tag -width "commands "
895 .Qq Fa name Ns Ic :id
896 requests a feedback message containing the socket
899 .Qq Fa name Ns Ic :id Fa xid
900 can be used by another process to XEmbed its widgets into the
903 .Qq Fa name Ns Ic :plug-added ,
908 Notification that the other process has inserted its widgets into or
909 removed them from the
913 .Bl -tag -width "commands "
915 .Qq Fa name Ns Ic :set_text Fa string
916 sets the selected value to
919 .Qq Fa name Ns Ic \&:text Fa text
922 .Bl -tag -width "commands "
924 .Qq Fa name Ns Ic :start
926 .Qq Fa name Ns Ic :stop
927 start and stop the spinner.
934 parameter is an arbitrary non-negative integer.
935 .Bl -tag -width "commands "
937 .Qq Fa name Ns Ic :push_id Fa id string ,
938 .Qq Fa name Ns Ic :push Fa string
943 or 0, respectively, and display it in the statusbar.
945 .Qq Fa name Ns Ic :pop_id Fa id ,
946 .Qq Fa name Ns Ic :pop
947 remove the latest entry associated with context id
949 or 0, respectively, from the statusbar.
951 .Qq Fa name Ns Ic :remove_all
952 empties the statusbar.
957 .Bl -tag -width "commands "
959 .Qq Fa name Ns Ic :set_active Brq Ic 0 | 1
965 .Qq Fa name Ns Ic \&:1
967 .Qq Fa name Ns Ic \&:0
971 There should be a dedicated
973 for sending (parts of) the text.
981 .Fa foo Ns Ic _send_text
982 will send the content of the
987 .Fa foo Ns Ic _send_selection
988 will send the highlighted part the
990 .Bl -tag -width "commands "
992 .Qq Fa name Ns Ic :set_text Fa string
993 replaces the user-editable text with (potentially empty)
996 .Qq Fa name Ns Ic :delete
999 .Qq Fa name Ns Ic :insert_at_cursor Fa string
1004 .Qq Fa name Ns Ic :place_cursor Brq Fa position | Ic end
1005 places the text cursor at
1007 or at the end of the text.
1009 .Qq Fa name Ns Ic :place_cursor_at_line Fa line
1010 places the text cursor at the beginning of
1013 .Qq Fa name Ns Ic :scroll_to_cursor
1014 scrolls to the cursor position if necessary.
1016 .Qq Fa name Ns Ic :save Fa file
1021 command containing the text.
1023 .Qq Fa button_name Ns Ic :text Fa text ,
1025 being the name of the
1031 and backslashes are replaced by
1035 .Bl -tag -width "commands "
1037 .Qq Fa name Ns Ic :set_active Brq Ic 0 | 1
1038 switches the button off
1043 .Qq Fa name Ns Ic :set_label Fa string
1044 replaces the button text with
1047 .Qq Fa name Ns Ic \&:1
1049 .Qq Fa name Ns Ic \&:0
1054 can deal with columns of type
1055 .Ic gboolean , gint , guint , glong , gulong , gint64 , guint64 , gfloat , gdouble ,
1062 refer to the underlying model
1065 .Ic GtkTreeStore ) .
1067 is a sequence of one or more colon-separated integers, e.g.
1071 .Bl -tag -width "commands "
1073 .Qq Fa name Ns Ic :set Fa row column data
1074 replaces the content at
1078 (which should be compatible with the type of
1080 If necessary, new tree nodes are created to obtain the minimal tree
1081 structure needed to support
1084 .Qq Fa name Ns Ic :insert_row Brq Fa row Bo Ic as_child Bc | Ic end
1085 inserts a new, empty row; either as a sibling of
1091 or at the end of the list, respectively.
1093 .Qq Fa name Ns Ic :move_row Fa origin Brq Fa destination | Ic end
1096 within its current level to
1100 .Qq Fa name Ns Ic :remove_row Fa row
1101 removes the row at position
1104 .Qq Fa name Ns Ic :clear
1107 .Qq Fa name Ns Ic :expand Fa row
1108 expands one level of the subtree below
1111 .Qq Fa name Ns Ic :expand_all Bq Fa row
1112 expands the subtree below
1116 .Qq Fa name Ns Ic :collapse Bq Fa row
1117 collapses the subtree below
1121 .Qq Fa name Ns Ic :set_cursor Bq Fa row
1126 .Qq Fa name Ns Ic :scroll Fa row column
1131 .Qq Fa name Ns Ic :save Fa file
1132 stores the content of the underlying model as a sequence of
1137 .Qq Fa name Ns Ic \&:clicked
1139 .Qq Fa name Ns Ic \&: Ns Fa column_type row column value ,
1140 one message per cell in the underlying model for each selected row; or
1142 .Qq Fa name Ns Ic \&: Ns Fa column_type row column new_value ,
1147 .Ss GtkTreeViewColumn
1148 .Bl -tag -width "commands "
1152 .Qq Fa name Ns Ic \&:clicked
1155 .Bl -tag -width "commands "
1157 .Qq Fa name Ns Ic :set_title Fa string
1158 replaces the text in the title bar with
1161 .Qq Fa name Ns Ic :resize Bq Fa width height
1162 changes the window size to
1166 pixels if specified, or to the default size.
1168 .Qq Fa name Ns Ic :move Fa x y
1169 moves the window to position
1172 .Qq Fa name Ns Ic :fullscreen
1174 .Qq Fa name Ns Ic :unfullscreen
1175 switch fullscreen mode on and off.
1180 .Ss Discovering Pipeglade Interactively
1181 Suppose the interface in
1184 .Sx GtkLabel Li label1
1186 .Sx GtkButton Li button1 .
1190 .Sx GtkButton , Qq button1:clicked
1191 will be reported on the terminal. Typing
1192 .Dl label1:set_text Button Label
1193 will change the text shown on the label into
1195 .Ss One-Shot File Dialog
1196 Suppose the interface in
1197 .Pa ./simple_open.ui
1199 .Sx GtkFileChooserDialog
1206 .Dl pipeglade -u simple_open.ui
1207 will open the dialog; pressing
1209 will close it after sending the selected filename to
1211 .Ss One-Shot User Notification
1213 .Pa ./simple_dialog.ui
1215 .Sx GtkLabel Li label1 ,
1217 .Dl pipeglade -u simple_dialog.ui <<< \e
1218 .Dl \ \ \ \ \&"label1:set_text NOW READ THIS!\&"
1219 will set the label text accordingly and wait for user input.
1220 .Ss Continuous Input
1221 The following shell command displays a running clock:
1223 .Dl \ \ \ \ echo \&"label1:set_text `date`\&";
1224 .Dl \ \ \ \ sleep 1;
1225 .Dl done | pipeglade -u simple_dialog.ui
1226 .Ss Continuous Input and Output
1227 The following shell script fragment sets up
1229 for continuous communication with another program,
1231 .Dl pipeglade -i in.fifo -o out.fifo &
1232 .Dl # wait for in.fifo and out.fifo to appear
1233 .Dl while test \& ! \e( -e in.fifo -a -e out.fifo \e); do :; done
1234 .Dl main_prog <out.fifo >in.fifo
1237 exits 0 on success, and >0 if an error occurs.
1249 .An Bert Burgemeister Aq trebbu@googlemail.com .
1251 Please report them to the author.