File: a2119.html

package info (click to toggle)
appunti-informatica-libera 2001.08.18-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 27,912 kB
  • ctags: 23,734
  • sloc: makefile: 69
file content (639 lines) | stat: -rw-r--r-- 33,056 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"    "http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <META NAME="Generator" CONTENT="Alml">
    <META NAME="Description" CONTENT="GNU/Linux e altro software libero">
    <META NAME="Keywords" CONTENT="Linux, GNU/Linux, Unix, software, software libero, free software">
    <META NAME="Author" CONTENT="Daniele Giacomini &nbsp;&nbsp; &nbsp;daniele&nbsp;@&nbsp;swlibero.org">
    <META NAME="Date" CONTENT="2001.08.18 ">
    <META NAME="Resource-type" LANG="en" CONTENT="Document" >
    <META NAME="Revisit-after" LANG="en" CONTENT="15 days" >
    <META NAME="Robots" CONTENT="ALL" >
    <TITLE> Appunti di informatica libera</TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="a2.css">
    <LINK REL="Start" TITLE="Start" HREF="a2.html">
    <LINK REL="Prev" TITLE="Previous" HREF="a2118.html">
    <LINK REL="Next" TITLE="Next" HREF="a2120.html">
</HEAD>
<BODY>
<P>
<A HREF="a2120.html">[successivo]</A>
<A HREF="a2118.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
<A HREF="a2114.html">[tomo]</A>
<A HREF="a2115.html">[parte]</A>
</P>
<HR>
<DIV>
<H1>Capitolo 87. &nbsp; <A NAME="title1495"></A><A NAME="anchor1793"></A> X: <A NAME="index8077"></A>gestori di finestre <A NAME="index8078"></A> </H1>

<P>Il <A NAME="index8079"></A>gestore di finestre, o <EM>window manager</EM> (WM), &egrave; quel programma <A NAME="index8080"></A>cliente, che si occupa di incorniciare le superfici degli altri programmi <A NAME="index8081"></A>clienti, di gestire la messa a fuoco, e quindi il passaggio da un programma all'altro e di altre funzioni di contorno. Anche se apparentemente non sembra molto, il <A NAME="index8082"></A>gestore di finestre &egrave; in grado di cambiare la faccia e il funzionamento operativo del sistema X.</P>

<P>Alcuni <A NAME="index8083"></A>gestori di finestre consentono di utilizzare una superficie maggiore di quella che si vede sullo schermo. Si parla in questi casi di <A NAME="index8084"></A>gestori di finestre con <A NAME="index8085"></A>superficie grafica virtuale, ovvero di <EM>virtual window manager</EM> (VWM). Di solito, per passare da una zona all'altra della <A NAME="index8086"></A>superficie grafica virtuale si utilizza la combinazione [<KBD>Ctrl+freccia...</KBD>] nella direzione in cui ci si vuole spostare, oppure si utilizza il mouse all'interno di una tabellina riassuntiva di tutta la <A NAME="index8087"></A>superficie grafica virtuale.</P>

<P>Volendo, a puro titolo didattico, si pu&ograve; utilizzare X senza un <A NAME="index8088"></A>gestore di finestre.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>xinit xterm -geometry =50x10+10+10</CODE></STRONG></P>

<P>La figura <A HREF="a2119.html#anchor1794">87.1</A> mostra il risultato del comando appena mostrato. Quando termina l'esecuzione del programma <SAMP>xterm</SAMP>, <SAMP>xinit</SAMP> fa terminare il funzionamento del <A NAME="index8089"></A>servente.</P>

<TABLE ID="anchor1794" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="81.jpg" ALT="figure/a2-x-server" HEIGHT="283"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1794">87.1</A>. Il <A NAME="index8090"></A>servente X avviato senza un <A NAME="index8091"></A>gestore di finestre. </P>

</TD></TR>
</TABLE>

<P>Per conoscere maggiori notizie sui <A NAME="index8092"></A>gestori di finestre per X si pu&ograve; consultare la pagina &lt;<EM><A HREF="http://www.plig.org/xwinman/">http://www.plig.org/xwinman/</A></EM>&gt;.</P>

<H2>87.1 &nbsp; <A NAME="title1496"></A><A NAME="anchor1795"></A>
 twm <A NAME="index8093"></A> </H2>

<P>Il <A NAME="index8094"></A>gestore di finestre tradizionale e pi&ugrave; semplice &egrave; <SAMP>twm</SAMP>. &Egrave; l'unico che venga fornito assieme a X. Non &egrave; particolarmente amichevole, ma utilizza poche risorse, e cos&igrave; &egrave; adatto agli elaboratori pi&ugrave; lenti; e inoltre &egrave; facile da configurare. Vale sempre la pena di configurare in modo essenziale questo <A NAME="index8095"></A>gestore di finestre per avere un riferimento sicuro, anche quando se ne intende utilizzare principalmente un altro pi&ugrave; sofisticato.</P>

<TABLE ID="anchor1796" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="82.jpg" ALT="figure/a2-twm-xterm" HEIGHT="340"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1796">87.2</A>. <SAMP>twm</SAMP>, il <A NAME="index8096"></A>gestore di finestre tradizionale. </P>

</TD></TR>
</TABLE>

<H3>87.1.1 &nbsp; <A NAME="title1497"></A><A NAME="anchor1797"></A>
 twm e ~/.xinitrc <A NAME="index8097"></A> </H3>

<P>Per fare in modo che, attraverso lo <A NAME="index8098"></A>script <SAMP>startx</SAMP>, si avvii automaticamente il <A NAME="index8099"></A>gestore di finestre <SAMP>twm</SAMP>, occorre ricordare di modificare il proprio <A NAME="index8100"></A>script <CODE>~/.xinitrc</CODE>.</P>

<P>Nel caso particolare di <SAMP>twm</SAMP> che &egrave; un <A NAME="index8101"></A>gestore di finestre piuttosto povero, pu&ograve; essere conveniente l'avvio di altri programmi prima di <SAMP>twm</SAMP> stesso. Ecco come potrebbe terminare il nostro <CODE>~/.xinitrc</CODE>.</P>

<PRE>...
# start some nice programs

# TWM
xsetroot -solid gray
xclock -digital -geometry +0-0 &amp;
xbiff -geometry -0-0 &amp;
twm</PRE>

<P>In questo esempio si pu&ograve; osservare che viene avviato prima il programma <SAMP>xsetroot</SAMP> per definire un colore uniforme del fondale (la <A NAME="index8102"></A>finestra principale), quindi vengono avviati <SAMP>xclock</SAMP> e <SAMP>xbiff</SAMP> <A NAME="index8103"></A>sullo sfondo (<EM>background</EM>). Infine viene avviato il <A NAME="index8104"></A>gestore di finestre <SAMP>twm</SAMP>.<SUP><A HREF="#footnote1" NAME="footnote-ref1">(1)</A></SUP></P>

<H3>87.1.2 &nbsp; <A NAME="title1498"></A><A NAME="anchor1798"></A>
 ~/.twmrc <A NAME="index8106"></A> </H3>

<P>Il file <CODE>~/.twmrc</CODE> contiene la configurazione personalizzata di <SAMP>twm</SAMP>. Se manca, viene utilizzata solitamente la configurazione predefinita, e in tal caso potrebbe trattarsi di <CODE>/usr/X11R6/lib/X11/twm/system.twmrc</CODE>.</P>

<P>Segue un esempio molto semplificato di una possibile configurazione personalizzata, ottenuta attraverso la modifica del file di configurazione distribuito assieme a <SAMP>twm</SAMP>.</P>

<PRE># .twmrc
#

NoGrabServer
RestartPreviousState
DecorateTransients
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
ResizeFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
MenuFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"
IconManagerFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*"
#ClientBorderWidth

Color
{
    BorderColor "slategrey"
    DefaultBackground "maroon"
    DefaultForeground "gray85"
    TitleBackground "maroon"
    TitleForeground "gray85"
    MenuBackground "maroon"
    MenuForeground "gray85"
    MenuTitleBackground "gray70"
    MenuTitleForeground "maroon"
    IconBackground "maroon"
    IconForeground "gray85"
    IconBorderColor "gray85"
    IconManagerBackground "maroon"
    IconManagerForeground "gray85"
}


# Definizione di alcune funzioni utili per azioni basate sul movimento.

MoveDelta 3
Function "sposta-sotto" { f.move f.deltastop f.lower }
Function "sposta-sopra" { f.move f.deltastop f.raise }
Function "sposta-icona" { f.move f.deltastop f.iconify }


# Definisce alcuni abbinamenti con i tasti del mouse.

Button1 = : root : f.menu "opzioni-generali"
Button3 = : root : f.menu "programmi"

Button1 = : title : f.function "sposta-sopra"
Button2 = : title : f.iconify
Button3 = : title : f.function "sposta-sotto"

Button1 = : icon : f.function "sposta-icona"
Button2 = : icon : f.iconify
Button3 = : icon : f.iconify

Button1 = : iconmgr : f.function "sposta-sopra"
Button2 = : iconmgr : f.iconify
Button3 = : iconmgr : f.function "sposta-sotto"


# Inizia la definizione dei men&ugrave;

menu "opzioni-generali"
{
"Twm"                   f.title
"Riduzione a icona"     f.iconify
"Ridimensionamento"     f.resize
"Spostamento"           f.move
"Sopra"                 f.raise
"Sotto"                 f.lower
""                      f.nop
"Messa a fuoco"         f.focus
"Fuori fuoco"           f.unfocus
"Mostra Iconmanager"    f.showiconmgr
"Nasconde Iconmanager"  f.hideiconmgr
""                      f.nop
"Eliminazione"          f.destroy
"Cancellazione"         f.delete
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

menu "programmi"
{
"Men&ugrave; dei programmi"    f.title
"Terminale"             f.exec          "xterm -font 6x13 -ls -geometry 80x25+0+0 &amp;"
"File manager"          f.exec          "xfm &amp;"
""                      f.nop
"Applicazioni varie"    f.menu          "applicazioni"
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

menu "applicazioni"
{
"Applicazioni varie"    f.title
"medit"                 f.exec          "medit &amp;"
""                      f.nop
"ghostview"             f.exec          "ghostview -geometry =630x420+0+0 &amp;"
"gv"                    f.exec          "gv -geometry =630x420+0+0 &amp;"
""                      f.nop
"xpaint"                f.exec          "xpaint &amp;"
}</PRE>

<P>Nella prima parte vengono definite le caratteristiche generali dell'ambiente. Successivamente si definisce il funzionamento del mouse e in particolare si abbinano delle funzioni alla pressione dei tasti di questo. La cosa pi&ugrave; importante &egrave; predisporre dei <A NAME="index8107"></A>men&ugrave; in modo da poter avviare i programmi utilizzati pi&ugrave; di frequente. L'esempio visto sopra viene ripreso in parte nella descrizione seguente:</P>

<PRE>Function "sposta-sotto" { f.move f.deltastop f.lower }
Function "sposta-sopra" { f.move f.deltastop f.raise }
Function "sposta-icona" { f.move f.deltastop f.iconify }</PRE>

<P>In questa parte vengono definite alcune funzioni composte a cui si far&agrave; riferimento pi&ugrave; gi&ugrave; in corrispondenza di azioni con il mouse o eventualmente anche di selezioni all'interno di <A NAME="index8108"></A>men&ugrave;.</P>

<PRE>Button1 = : root : f.menu "opzioni-generali"
Button3 = : root : f.menu "programmi"

Button1 = : title : f.function "sposta-sopra"
Button2 = : title : f.iconify
Button3 = : title : f.function "sposta-sotto"

Button1 = : icon : f.function "sposta-icona"
Button2 = : icon : f.iconify
Button3 = : icon : f.iconify

Button1 = : iconmgr : f.function "sposta-sopra"
Button2 = : iconmgr : f.iconify
Button3 = : iconmgr : f.function "sposta-sotto"</PRE>

<P>Questa parte definisce le azioni abbinate alla pressione di uno dei tasti del mouse, in corrispondenza di determinati oggetti:</P>

<UL>

<LI>

<P>la <A NAME="index8109"></A>finestra principale, ovvero il fondale;</P>
</LI>

<LI>

<P>la barra del titolo di una finestra;</P>
</LI>

<LI>

<P>un'icona;</P>
</LI>

<LI>

<P>il riepilogo delle finestre e delle icone presenti sulla <A NAME="index8110"></A>superficie grafica (<EM>iconmanager</EM>).</P>
</LI>
</UL>

<P>In particolare, se si preme il primo tasto del mouse quando il puntatore si trova su una parte di superficie libera del fondale, ovvero sulla <A NAME="index8111"></A>finestra principale, si apre il <A NAME="index8112"></A>men&ugrave; delle opzioni generali. Premendo invece il terzo tasto si apre un altro <A NAME="index8113"></A>men&ugrave;: quello dei programmi.</P>

<PRE>menu "opzioni-generali"
{
"Twm"                   f.title
"Riduzione a icona"     f.iconify
"Ridimensionamento"     f.resize
"Spostamento"           f.move
"Sopra"                 f.raise
"Sotto"                 f.lower
""                      f.nop
"Messa a fuoco"         f.focus
"Fuori fuoco"           f.unfocus
"Mostra Iconmanager"    f.showiconmgr
"Nasconde Iconmanager"  f.hideiconmgr
""                      f.nop
"Eliminazione"          f.destroy
"Cancellazione"         f.delete
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}</PRE>

<P>Il <A NAME="index8114"></A>men&ugrave; delle opzioni generali, permette di attivare una serie di funzioni di <SAMP>twm</SAMP>. In particolare, vale la pena di notare la funzione <SAMP>f.destroy</SAMP> con cui si pu&ograve; eliminare una finestra assieme al programma in esecuzione al suo interno. Inoltre, si pu&ograve; osservare la funzione <SAMP>f.nop</SAMP> che non fa alcunch&eacute; e viene usata in abbinamento a delle separazioni tra le voci del <A NAME="index8115"></A>men&ugrave;, e la funzione <SAMP>f.title</SAMP> che serve solo a definire un titolo per il <A NAME="index8116"></A>men&ugrave;.<SUP><A HREF="#footnote2" NAME="footnote-ref2">(2)</A></SUP></P>

<PRE>menu "programmi"
{
"Men&ugrave; dei programmi"    f.title
"Terminale"             f.exec          "xterm -font 6x13 -ls -geometry 80x25+0+0 &amp;"
"File manager"          f.exec          "xfm &amp;"
""                      f.nop
"Applicazioni varie"    f.menu          "applicazioni"
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}</PRE>

<P>Il <A NAME="index8117"></A>men&ugrave; del programmi &egrave; solo una raccolta di richieste di avvio di programmi di uso comune, oltre alla chiamata di funzioni importanti come il riavvio del <A NAME="index8118"></A>gestore di finestre e la conclusione della sua attivit&agrave;. I <A NAME="index8119"></A>men&ugrave; possono essere annidati, come in questo esempio, dove la voce <SAMP>Applicazioni varie</SAMP> apre un altro <A NAME="index8120"></A>men&ugrave; di applicazioni.</P>

<H2>87.2 &nbsp; <A NAME="title1499"></A><A NAME="anchor1799"></A>
 fvwm <A NAME="index8121"></A> </H2>

<P>Il <A NAME="index8122"></A>gestore di finestre <SAMP>fvwm</SAMP> &egrave; una derivazione di <SAMP>twm</SAMP> con <A NAME="index8123"></A>superficie grafica virtuale e cornici tridimensionali.</P>

<TABLE ID="anchor1800" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="83.jpg" ALT="figure/a2-fvwm-xterm" HEIGHT="340"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1800">87.3</A>. <SAMP>fvwm</SAMP> -- sull'angolo superiore sinistro si vede la tabellina riepilogativa della <A NAME="index8124"></A>superficie grafica virtuale. </P>

</TD></TR>
</TABLE>

<H3>87.2.1 &nbsp; <A NAME="title1500"></A><A NAME="anchor1801"></A>
 fvwm e ~/.xinitrc <A NAME="index8125"></A> </H3>

<P>Per fare in modo che, attraverso lo <A NAME="index8126"></A>script <SAMP>startx</SAMP>, si avvii automaticamente il <A NAME="index8127"></A>gestore di finestre <SAMP>fvwm</SAMP>, occorre ricordare di modificare il proprio <A NAME="index8128"></A>script <CODE>~/.xinitrc</CODE>.</P>

<P>Generalmente &egrave; sufficiente avviare il <A NAME="index8129"></A>gestore di finestre, senza altri programmi accessori.</P>

<PRE>...
# start some nice programs

fvwm</PRE>

<H3>87.2.2 &nbsp; <A NAME="title1501"></A><A NAME="anchor1802"></A>
 ~/.fvwmrc <A NAME="index8130"></A> </H3>

<P>Il file <CODE>~/.fvwmrc</CODE> contiene la configurazione personalizzata di <SAMP>fvwm</SAMP>. Se manca, viene utilizzata solitamente la configurazione predefinita, e in tal caso potrebbe trattarsi di <CODE>/usr/X11R6/lib/X11/fvwm/system.fvwmrc</CODE>.</P>

<P>Come al solito, la personalizzazione del file di configurazione parte da una copia di quello predefinito.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>cp /usr/X11R6/lib/X11/fvwm/system.fvwmrc ~/.fvwmrc</CODE></STRONG></P>

<P>Il file di configurazione predefinito potrebbe essere molto complesso, ma adeguatamente commentato in modo da guidare chi desidera modificarlo. In generale, non &egrave; conveniente personalizzare tutto. Di sicuro &egrave; necessario sistemare i <A NAME="index8131"></A>men&ugrave;, mentre il resto pu&ograve; rimanere com'&egrave;.</P>

<P>Di seguito vengono mostrati alcuni pezzi di questo file, in cui appare in che modo si compone un <A NAME="index8132"></A>men&ugrave; (in questo ambiente si parla di <A NAME="index8133"></A>men&ugrave; a scomparsa: <EM>popup</EM>) e come questo si pu&ograve; collegare a un'azione del mouse.</P>

<PRE># This menu will fire up some very common utilities
Popup "Utilities"
        Title   "Programmi"
        Exec    "Terminale"     exec xterm -e bash &amp;
        Nop     ""
        Popup   "Applicazioni"  Apps
        Nop     ""
        Popup   "Fine lavoro"   Quit-Verify
EndPopup</PRE>

<P>In questo esempio si vede la dichiarazione di un <A NAME="index8134"></A>men&ugrave; a scomparsa denominato <SAMP>Utilities</SAMP>. Al suo interno vengono definiti diversi elementi (funzioni). In particolare:</P>

<UL>

<LI>

<P><SAMP>Title</SAMP></P>

<P>rappresenta il titolo del <A NAME="index8135"></A>men&ugrave;;</P>
</LI>

<LI>

<P><SAMP>Exec</SAMP></P>

<P>rappresenta un comando da eseguire e dopo la stringa che lo descrive, viene indicata l'istruzione <SAMP>exec</SAMP> seguita dal comando vero e proprio (si tratta quasi sempre di programmi avviati <A NAME="index8136"></A>sullo sfondo, altrimenti si bloccherebbe il sistema di <A NAME="index8137"></A>men&ugrave; in attesa che il programma avviato termini la sua esecuzione);</P>
</LI>

<LI>

<P><SAMP>Nop</SAMP></P>

<P>rappresenta un'azione nulla e serve a separare alcuni gruppetti di voci di <A NAME="index8138"></A>men&ugrave;;</P>
</LI>

<LI>

<P><SAMP>Popup</SAMP></P>

<P>rappresenta il riferimento a un sottomenu.</P>
</LI>
</UL>

<P>Un <A NAME="index8139"></A>men&ugrave; deve poter essere aperto in qualche modo, per esempio attraverso la selezione di una voce in un altro <A NAME="index8140"></A>men&ugrave;. Ma il <A NAME="index8141"></A>men&ugrave; principale deve essere accessibile in modo indipendente da altri <A NAME="index8142"></A>men&ugrave;: di solito si abbina a un clic sulla <A NAME="index8143"></A>finestra principale (il <EM>desktop</EM>).</P>

<PRE>#     Button    Context Modifi  Function
Mouse 1         R       A       PopUp "Utilities"
Mouse 2         R       A       PopUp "Window Ops"</PRE>

<P>L'estratto sopra riportato, mostra l'abbinamento tra un clic del primo tasto del mouse, quando il puntatore si trova sulla <A NAME="index8144"></A>finestra principale, e l'azione <SAMP>PopUp&nbsp;"Utilities"</SAMP>, cosa che fa apparire il <A NAME="index8145"></A>men&ugrave; visto in precedenza.</P>

<P>Per concludere, vale la pena di osservare che i sottomenu sono identici a un <A NAME="index8146"></A>men&ugrave; normale. Quello che segue &egrave; il <A NAME="index8147"></A>men&ugrave; <SAMP>Apps</SAMP> che si ottiene selezionando la voce <SAMP>Applicazioni</SAMP> del <A NAME="index8148"></A>men&ugrave; visto sopra.</P>

<PRE>Popup "Apps"
        Exec    "Netscape"      exec netscape &amp;
        Exec    "Pine"          exec xterm -e pine &amp;
        Nop     ""
        Exec    "Emacs"         exec emacs &amp;
EndPopup</PRE>

<H2>87.3 &nbsp; <A NAME="title1502"></A><A NAME="anchor1803"></A>
 fvwm2 <A NAME="index8149"></A> </H2>

<P>Il <A NAME="index8150"></A>gestore di finestre <SAMP>fvwm2</SAMP> &egrave; una derivazione di <SAMP>fvwm</SAMP> in cui si emula il comportamento di <A NAME="index8151"></A>MS-Windows 95, pur mantenendo il sistema della <A NAME="index8152"></A>superficie grafica virtuale.</P>

<TABLE ID="anchor1804" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="84.jpg" ALT="figure/a2-fvwm2-xfontsel" HEIGHT="283"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1804">87.4</A>. <SAMP>xfontsel</SAMP> eseguito all'interno di <SAMP>fvwm2</SAMP>. </P>

</TD></TR>
</TABLE>

<H3>87.3.1 &nbsp; <A NAME="title1503"></A><A NAME="anchor1805"></A>
 fvwm2 e ~/.xinitrc <A NAME="index8153"></A> </H3>

<P>Per fare in modo che, attraverso lo <A NAME="index8154"></A>script <SAMP>startx</SAMP>, si avvii automaticamente il <A NAME="index8155"></A>gestore di finestre <SAMP>fvwm2</SAMP>, occorre ricordare di modificare il proprio <A NAME="index8156"></A>script <CODE>~/.xinitrc</CODE>.</P>

<P>Generalmente &egrave; sufficiente avviare il <A NAME="index8157"></A>gestore di finestre, senza altri programmi accessori.</P>

<PRE>...
# start some nice programs

fvwm2</PRE>

<H3>87.3.2 &nbsp; <A NAME="title1504"></A><A NAME="anchor1806"></A>
 ~/.fvwm2rc <A NAME="index8158"></A> </H3>

<P>Il file <CODE>~/.fvwm2rc</CODE> contiene la configurazione personalizzata. Se manca viene utilizzata solitamente la configurazione predefinita e in tal caso potrebbe trattarsi di <CODE>/usr/X11R6/lib/X11/fvwm2/system.fvwm2rc</CODE>.</P>

<P>Per la personalizzazione del file di configurazione si parte normalmente da una copia di quello predefinito.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>cp /usr/X11R6/lib/X11/fvwm2/system.fvwm2rc ~/.fvwm2rc</CODE></STRONG></P>

<P>Il file di configurazione predefinito &egrave; molto complesso, ma adeguatamente commentato in modo da guidare chi desidera modificarlo. In generale, &egrave; conveniente personalizzare almeno il sistema di <A NAME="index8159"></A>men&ugrave;, ma anche la barra delle applicazioni, quella che emula il comportamento di <A NAME="index8160"></A>MS-Windows 95, necessita di una verifica.</P>

<P>Di seguito vengono mostrati alcuni pezzi significativi di questo file.</P>

<PRE># Dimensione della superficie grafica virtuale.
DeskTopSize 3x2</PRE>

<P><SAMP>fvwm2</SAMP> &egrave; un <A NAME="index8161"></A>gestore di finestre virtuale, e i tal senso permette l'utilizzo di una superficie grafica maggiore di quella reale. Questa istruzione definisce la disponibilit&agrave; di una superficie virtuale pari a sei volte quella normale, disposta su una matrice di tre colonne per due righe.</P>

<P>A volte si pu&ograve; desiderare di non gestire alcuna <A NAME="index8162"></A>superficie grafica virtuale. In tal caso, l'istruzione va sostituita con <SAMP>DeskTopSize 1x1</SAMP>.</P>

<PRE>AddToMenu "StartMenu"
+ "Terminale%mini-term.xpm%"            Exec    rxvt -font 6x13 -ls -geometry 80x25+0+0 &amp;
+ "File manager%mini-filemgr.xpm%"      Exec    xfm -geometry =250x400-0+0 &amp;
+ "Applicazioni varie%mini-x2.xpm%"     Popup   Applications
+ ""                                    Nop 
+ "Fine lavoro%mini-stop.xpm%"          Popup   Quit-Verify

AddToMenu "Applications" "Applicazioni" Title
+ "medit%mini-edit.xpm%"                Exec    medit &amp;
+ ""                                    Nop
+ "gv%mini-gv.xpm%"                     Exec    gv -geometry 630x420+0+0 &amp;
+ "xpaint%mini-paint.xpm%"              Exec    xpaint -geometry 630x420+0+0 &amp;
+ ""                                    Nop
+ "dosemu%mini-x2.xpm%"                 Exec    xdos -geometry +0+0 &amp;

AddToMenu "Quit-Verify" "Fine lavoro?" Title
+ "S&igrave;, fine lavoro%mini-exclam.xpm%"    Quit
+ "No, annulla%mini-cross.xpm%"         Nop</PRE>

<P>L'estratto precedente mostra un esempio molto semplificato di un sistema di <A NAME="index8163"></A>men&ugrave;. La prima differenza che si nota, rispetto alla configurazione di altri programmi di questo tipo, &egrave; la presenza di riferimenti a file di icona. Infatti, le descrizioni che appaiono nel <A NAME="index8164"></A>men&ugrave;, possono essere associate a un'icona rappresentata da un file delimitato attraverso il simbolo di percentuale. Per esempio, <SAMP>"Terminale&nbsp;%mini-term.xpm%"</SAMP> rappresenta la voce che dovr&agrave; apparire sul <A NAME="index8165"></A>men&ugrave;, e l'icona che gli verr&agrave; posta a fianco. Le icone non sono obbligatorie e sono contenute normalmente all'interno della directory <CODE>/usr/X11R6/lib/X11/mini-icons/</CODE>.</P>

<P>Gli elementi, o le funzioni, utilizzabili all'interno di un <A NAME="index8166"></A>men&ugrave; sono in particolare:</P>

<UL>

<LI>

<P><SAMP>Exec</SAMP></P>

<P>rappresenta un comando da eseguire (si tratta quasi sempre di programmi avviati <A NAME="index8167"></A>sullo sfondo, altrimenti si bloccherebbe il sistema di <A NAME="index8168"></A>men&ugrave; finch&eacute; il programma non termina la sua esecuzione);</P>
</LI>

<LI>

<P><SAMP>Nop</SAMP></P>

<P>rappresenta un'azione nulla e serve a separare alcuni gruppetti di voci di <A NAME="index8169"></A>men&ugrave;;</P>
</LI>

<LI>

<P><SAMP>Popup</SAMP></P>

<P>rappresenta il riferimento a un sottomenu.</P>
</LI>
</UL>

<P>Si pu&ograve; osservare ancora, che il titolo del <A NAME="index8170"></A>men&ugrave; viene definito subito dopo la dichiarazione dell'inizio del <A NAME="index8171"></A>men&ugrave; stesso. Per esempio, <SAMP>AddToMenu&nbsp;"Applications"&nbsp;"Applicazioni"&nbsp;Title</SAMP> dichiara l'inizio del <A NAME="index8172"></A>men&ugrave; <SAMP>Applications</SAMP> che avr&agrave; il titolo <SAMP>Applicazioni</SAMP>.</P>

<PRE>#     Button    Context Modifi  Function
Mouse 1         R       A       Menu "StartMenu" Nop
Mouse 2         R       A       Menu "Window-Ops2" Nop
Mouse 3         R       A       WindowList</PRE>

<P>L'abbinamento delle azioni del mouse &egrave; sempre molto importante. Nell'esempio visibile sopra, si abbina un clic con il primo tasto sulla <A NAME="index8173"></A>finestra principale (cio&egrave; lo sfondo) al <A NAME="index8174"></A>men&ugrave; principale descritto in precedenza.</P>

<P>Pu&ograve; essere utile dare un'occhiata anche all'abbinamento che si stabilisce con la selezione dei bottoni posti sulla barra del titolo delle finestre.</P>

<PRE># Bottoni della barra del titolo

# Un bottone nella parte sinistra apre il &lt;ttid&gt;men&ugrave;&lt;/ttid&gt; delle opzioni.
# Il primo bottone a destra riduce a icona.
# Il secondo bottone a destra espande la finestra al massimo consentito dallo schermo.
# Il terzo bottone a destra chiude la finestra

#     Button    Context Modif   Function
Mouse 0         1       A       Function "window_ops_func"
Mouse 1         2       A       Delete
Mouse 0         4       A       Maximize 100 95
Mouse 0         6       A       Iconify</PRE>

<P>&Egrave; il caso di osservare che <SAMP>Mouse&nbsp;0</SAMP> corrisponde a un clic con un tasto qualsiasi del mouse. Inoltre, la funzione <SAMP>Maximize</SAMP> permette di ridimensionare la finestra in rapporto percentuale rispetto alla dimensione dello schermo. In questo caso, trattandosi di un <A NAME="index8175"></A>gestore di finestre che utilizza la parte bassa dello schermo per la barra delle applicazioni, conviene limitare l'ingrandimento verticale a solo il 95&nbsp;%, in modo da non coprire tale barra.</P>

<PRE>Style "FvwmTaskBar" NoTitle,BorderWidth 4,HandleWidth 4,Sticky,StaysOnTop,WindowListSkip,CirculateSkip

*FvwmTaskBarGeometry +0-0
*FvwmTaskBarFore Black
*FvwmTaskBarBack #c0c0c0
*FvwmTaskBarTipsFore black
*FvwmTaskBarTipsBack bisque
*FvwmTaskBarFont -adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*
*FvwmTaskBarSelFont -adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-*-*
*FvwmTaskBarAction Click1 Iconify -1,Raise,Focus
*FvwmTaskBarAction Click2 Iconify
*FvwmTaskBarAction Click3 Module "FvwmIdent" FvwmIdent
*FvwmTaskBarUseSkipList
*FvwmTaskBarAutoStick
*FvwmTaskBarStartName Avvio
*FvwmTaskBarStartMenu StartMenu
*FvwmTaskBarStartIcon 
*FvwmTaskBarShowTips
#*FvwmTaskBarShowTransients
#*FvwmTaskBarClockFormat %I:%M%p
#*FvwmTaskBarHighlightFocus
#*FvwmTaskBarAutoHide
*FvwmTaskBarMailCommand Exec xterm -T Posta -ls -e mail</PRE>

<P>Si pu&ograve; personalizzare anche la barra delle applicazioni. Vale la pena di osservare quanto segue.</P>

<UL>

<LI>

<P><SAMP>*FvwmTaskBarStartName Avvio</SAMP></P>

<P>Il nome che appare sul pulsante di avvio &egrave; normalmente <SAMP>Start</SAMP>; qui &egrave; stato italianizzato in <SAMP>Avvio</SAMP>.</P>
</LI>

<LI>

<P><SAMP>*FvwmTaskBarStartMenu StartMenu</SAMP></P>

<P>La selezione del tasto di avvio richiama il <A NAME="index8176"></A>men&ugrave; <SAMP>StartMenu</SAMP> gi&agrave; descritto in precedenza.</P>
</LI>

<LI>

<P><SAMP>*FvwmTaskBarMailCommand Exec xterm -T Posta -ls -e mail</SAMP></P>

<P>Quando appare la segnalazione della presenza di posta, con un clic doppio sul simbolo corrispondente che appare sulla barra delle applicazioni, si apre una finestra di terminale, <SAMP>xterm</SAMP>, all'interno della quale si avvia il programma <SAMP>mail</SAMP> allo scopo di leggere la posta.</P>
</LI>
</UL>

<P>Resta da notare che alcune voci riferite alla barra degli strumenti hanno valore solo in quanto esistenti, in qualit&agrave; di valori booleani. Alcune voci risultano commentate, lasciando intendere che la loro assenza implica la negazione della definizione loro corrispondente.</P>

<H2>87.4 &nbsp; <A NAME="title1505"></A><A NAME="anchor1807"></A>
 fvwm95-2 <A NAME="index8177"></A> </H2>

<P>Il <A NAME="index8178"></A>gestore di finestre <SAMP>fvwm95-2</SAMP> &egrave; una variante di <SAMP>fvwm2</SAMP> che si avvicina ancora di pi&ugrave; al comportamento di <A NAME="index8179"></A>MS-Windows 95.</P>

<TABLE ID="anchor1808" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="85.jpg" ALT="figure/a2-fvwm95-xcalc" HEIGHT="283"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1808">87.5</A>. <SAMP>xcalc</SAMP> eseguito all'interno di <SAMP>fvwm95-2</SAMP>. </P>

</TD></TR>
</TABLE>

<H3>87.4.1 &nbsp; <A NAME="title1506"></A><A NAME="anchor1809"></A>
 fvwm95-2 e ~/.xinitrc <A NAME="index8180"></A> </H3>

<P>Per fare in modo che, attraverso lo <A NAME="index8181"></A>script <SAMP>startx</SAMP>, si avvii automaticamente il <A NAME="index8182"></A>gestore di finestre <SAMP>fvwm95-2</SAMP>, occorre ricordare di modificare il proprio <A NAME="index8183"></A>script <CODE>~/.xinitrc</CODE>.</P>

<P>Generalmente &egrave; sufficiente avviare il <A NAME="index8184"></A>gestore di finestre, senza altri programmi accessori.</P>

<PRE>...
# start some nice programs

fvwm95-2</PRE>

<H3>87.4.2 &nbsp; <A NAME="title1507"></A><A NAME="anchor1810"></A>
 ~/.fvwm2rc95 <A NAME="index8185"></A> </H3>

<P>Il file <CODE>~/.fvwm2rc95</CODE> contiene la configurazione personalizzata. Se manca viene utilizzata solitamente la configurazione predefinita e in tal caso potrebbe trattarsi di <CODE>/usr/X11R6/lib/X11/fvwm95-2/system.fvwm2rc95</CODE>.</P>

<P>Per la personalizzazione del file di configurazione si parte normalmente da una copia di quello predefinito.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>cp /usr/X11R6/lib/X11/fvwm95-2/system.fvwm2rc95 ~/.fvwm2rc95</CODE></STRONG></P>

<P>Il file di configurazione predefinito &egrave; molto complesso, ma adeguatamente commentato in modo da guidare chi desidera modificarlo. In generale, &egrave; conveniente personalizzare almeno il sistema di <A NAME="index8186"></A>men&ugrave;, ma anche la barra delle applicazioni, quella che emula il comportamento di <A NAME="index8187"></A>MS-Windows 95, necessita di una verifica.</P>

<P>Il formato di questo file &egrave; compatibile con quello di <SAMP>fvwm2</SAMP>.</P>

<H2>87.5 &nbsp; <A NAME="title1508"></A><A NAME="anchor1811"></A>
 <A NAME="index8188"></A>AfterStep <A NAME="index8189"></A> </H2>

<P>Il <A NAME="index8190"></A>gestore di finestre <SAMP>afterstep</SAMP> &egrave; una derivazione di <SAMP>fvwm</SAMP> in cui si emula il comportamento dell'interfaccia grafica di <A NAME="index8191"></A>NeXT. Dal punto di vista operativo si comporta in maniera molto simile a <SAMP>fvwm</SAMP>.</P>

<TABLE ID="anchor1812" BORDER="0" WIDTH="100%">
<TR><TD>

<P><IMG SRC="86.jpg" ALT="figure/a2-afterstep-xcalc" HEIGHT="283"></P>

<P class="caption"> Figura <A HREF="a2119.html#anchor1812">87.6</A>. <SAMP>xcalc</SAMP> eseguito all'interno di AfterStep. </P>

</TD></TR>
</TABLE>

<H3>87.5.1 &nbsp; <A NAME="title1509"></A><A NAME="anchor1813"></A>
 ~/.steprc <A NAME="index8192"></A> </H3>

<P>Il file <CODE>~/.steprc</CODE> contiene la configurazione personalizzata. Se manca viene utilizzata solitamente la configurazione predefinita: <CODE>/usr/X11R6/lib/X11/afterstep/system.steprc</CODE>.</P>
Appunti di informatica libera 2001.08.18  --- <EM>Copyright &copy; 2000-2001 Daniele Giacomini -- &nbsp;daniele&nbsp;@&nbsp;swlibero.org</EM><HR>

<P><A HREF="#footnote-ref1" NAME="footnote1">1)</A> &Egrave; bene ricordare che <SAMP>xsetroot</SAMP> non ha bisogno di essere avviato <A NAME="index8105"></A>sullo sfondo perch&eacute; termina subito la sua attivit&agrave;.</P>

<P><A HREF="#footnote-ref2" NAME="footnote2">2)</A> Nella tradizione informatica, la sigla NOP sta per <EM>Not OPerate</EM> e definisce un'azione priva di risultati.</P>
</DIV>
<HR>
<P>Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome  <A HREF="x_gestori_di_finestre.html">x_gestori_di_finestre.html</A></P>
<P>
<A HREF="a2120.html">[successivo]</A>
<A HREF="a2118.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
</P>
</BODY>
</HTML>