File: ReleaseNotes.ivan.txt

package info (click to toggle)
libnb-platform18-java 12.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 729,800 kB
  • sloc: java: 5,059,097; xml: 574,432; php: 78,788; javascript: 29,039; ansic: 10,278; sh: 6,386; cpp: 4,612; jsp: 3,643; sql: 1,097; makefile: 540; objc: 288; perl: 277; haskell: 93
file content (2559 lines) | stat: -rw-r--r-- 101,795 bytes parent folder | download | duplicates (3)
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
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.

242273 PARTFIX Please support 256 Colors in Terminal
	xterm-16color

	Term.setEmulation() will now accept "xterm-16color" in additin to
	"xterm". Regardless of which one is set Term.getEmulation() will now
	return "xterm-16color" as it is the superset.

	To achieve this ...
	- Moved palette base numbers (PAL_*) from Term to Attr.
	  The fact that the stored values are off-by-one is dealt with 
	  in Attr.foreggroundColor/backgroundColor() which simplifies
	  Term.csetBG() and csetFG().
	- Attr.BGCOLOr and FGCOLOR fields were widened from 5 to 9 bits
	  in anticipation of 256 colors.
	- Instead of relying on case-based value adjustments in
	  Attr.setAttribute()/unsetAttribute() to convert rendition codes,
	  what clients pass xterm, to attribute values use a 'map'.
	  Attr.rendition_to_pindex() uses it to map a rendition # to a palette
	  index and is used from Term.rendition_to_color().
	- Adjust Attr.setAttribute()/unsetAttribute() to use the 'map'.

	However ...
	
	Terminal in NetBeans will start with TERM=xterm regardless of the
	value of Term.getEmulation(). The immediate reason for that is
	code in NativeExecutionServicve.runTerm(). Archaeology will
	"blame" this:
		274671:effd016fde86 - ilia Jun 9, 2014
		fixed Bug #244954 - support xterm-color in Terminal 

		This fix passes on the value of $TERM from the shell
		tha NB was started from on to NB Term.

		It doesn't work very well. On my system if I start NB
		from a shell $TERm is "inherited" to e.g. "xterm-256color",
		but if I start NB from the panel launcher $TERM is "xterm".
		Read on to see whay this happens.

	In fact the hard-coding of $TERM and ignoring of Term.getEmulation()
	predates that.
	What is going on?

	How $TERM is used
	-----------------
	At first blush you'd think that a "terminal emulator", e.g. xterm,
	will set $TERM to something, e.g. "xterm", "xterm-16color,
	"xterm-88color" or "xterm-256color", according to it's abilities.

	Then, an application running under that terminal emulator will pass on 
	the value of $TERM to libcurses which, in turn, will consult one
	of two kinds of terminal information databases, "termcap" or
	"terminfo" and use the value of $TERM to map libcurses semantic actions
	to actual terminal sequences.

	How this fails
	--------------
	Suppose you run a very new xterm which supports "TERM=xterm-256color"
	on a very old OS the termcap/terminfo for which supports only 
	"xterm". Then applications which feed "TERM=xterm-256color" to curses
	will get an error message.

	I expect that for this very reason 'xterm' does, no matter what,
	set $TERM=xterm. So how do applications take advantage of newer 
	xterm features?

	How Linux solves this
	---------------------
	On my FC21 'xterm' sets $TERM to "xterm" (you need to verify this
	by inspecting xterm src code or using strace, _not_ by echoing $TERM
	in a shell) but a whole hierarchy of _shell_ initialization scripts,
	arranges to set "TERM=xterm-256color". This works because the FC21
	distro build knows that it has built xterm with 256color capability
	so it feels justified in overriding $TERM in it's shell initialization
	scripts.

	How this doesn't work
	---------------------
	Supose you log in from a new system where $TERM is set to
	"xterm-256color" to an old system the termcap/terminfo of which
	knows nothing about "xterm-256color". Any curses app run on the
	remote system will complain about not knowing about "xterm-256color".

	What to do?
	-----------
	The fix 
		274671:effd016fde86 - ilia Jun 9, 2014
		fixed Bug #244954 - support xterm-color in Terminal 
	allows NB users some leeway to set $TERM before starting netbeans
	and for now I'm not going to perturb that. 

	The best solution I can think of is to have NB carry the appropriate
	terminfo file with it and install it locally or remotely and use
	$TERMINFO or $TERMINFO_DIRS to get applications to access the
	correct terminfo file for a given implementation of NB Term.

		Some applications, notably 'vim', don't seem to use curses
		but they _do_ honor $TERMINFO and $TERMINFO_DIRS.

	For a more in depth exposition consult private communication 
	subjected "On the correct settingof $TERM".

nobugid PARTFIX Enhanced info for AIOOB Exception in setCharacterAttribute()
	Hard to track bug.
	Catch the AIOOB thrown in setCharacterAttribute() and print out some
	detailed info to help track the cause.

242273 PARTFIX Please support 256 Colors in Terminal
	Factoring of Term.backgroundColor() and foregroundColor() in
	preparation for moving the decoding of color attribute into Attr.

242273 PARTFIX Please support 256 Colors in Terminal
	Renaming of variables in backgroundColor() and foregroundColor()
	in preparation for factoring.

242273 PARTFIX Please support 256 Colors in Terminal
	Switch to a single palette implementation.

	Previously Term used two "palettes" to map color indices into actual
	Color's. The two palettes were 'standard_color' and 'custom_color'.
	The former was strictly private and the latter was configurable via 
	Term.setCustomColor(). The actual mapping was performed
	in Term.foregroundColor() and backgroundColor().

	We now use a single 'palette' with domain bases specified by
	PAL_* constants:

	OLD			NEW			FG	BG
	---------------------------------------------------------------------
	standard_color[n]	palette[PAL_ANSI+n]	30-37	40-47
	custom_color[n]					50-57	60-67	OLD
				palette[PAL_BRIGHT+n]	90-97	100-107	NEW
	default foreground	palette[PAL_FG]
	default background	palette[PAL_BG]
				palette[PAL_RGB]
				palette[PAL_GREY]

	In short, custom colors now map to "bright" colors.

		These custom colors were part of a proposal to enhance 
		DtTerm which never made it. Being non-standard mucking
		with them will have little impact except for how IO 
		operations used it (See below).

	While the palette is populated, in initializePalette(), with RGB and
	GREY Colors no Interp handles RGB/GREY sequences yet.

	The encoding of colors in Attr cells is still the old way (which
	is offset by 1 to allow encoding of "default" as 0) and the
	adjustments are all done in Term.foregroundColor() and
	backgroundColor(). This will be optimized later.

	Therefore, setCustomColor() has been deprecated.

	Overriding Component
	--------------------
	Now that we have a single palette, setting of FG and BG colors 
	should keep it up-to-date. That is done by overriding Component's 
	setForeground() and setBackground(). This has to be done 
	with due mindfluness of 'reverse_video'.

	Reverse video tricks
	--------------------
	When reverse video is requested we swap palette[PAL_FG] and
	palette[PAL_BG]. This means that when we handle setForeground()
	or setBackground() we need to be mindful of the value of
	'reverse_video'.

	Inherit from L&F
	----------------
	The default fg and bg colors are now initialized using
		UIManager.getColor("TextArea.foreground");
		UIManager.getColor("TextArea.background");

	Term.setCustomColor() never worked
	----------------------------------
	... because I had these InterpProtoANSI.dispatchAttr() functions which
	screened the actual attribute values and none of them accepted
	attribute values in the range 50-57 or 60-67.
		This must've worked at some point in the past. Then,
		when I was working on proper xterm emulation, I introduced
		dispatchAttr() and neglected the "custom" atribute values.

	The only serious place which used Term.setCustomColor() was the
	mechanisms in TerminalInputOutput which supported IO-style setting
	of Colors. See, for example, TerminalInputOutput.customColor() which 
	added 50 to the color code. This has now been switched to add 90.

		To see it "not work" run the project
			lib/terminalemulator/examples/TermExample
		Then choose Terminals->TestTerminalWithRichNativeExecution
		Press OK.
		At the very begining You'll see 
			GREETINGS		green
			Choose			blue
			Unchoose		red
			Select chosen		blue # SHOULDA been Color.ORANGE

	The use of setCustomColor() in this fashion is temporary. Eventually
	TerminalInputOutput should be able to use direct RGB color
	setting using sequences like "ESC[48;2;...m".

	Bug in Term.backgroundColor()
	-----------------------------
	In the !reverse case we never handled the case of bcx = 0.

	Incidental
	----------
	- Get XTermTestSubject to force fg/bg colors on the xterm overriding
	  XTerm properties so that it matches other TextSubjects.
	- Enhance Test_attr to test "bright" attributes as well as running
	  in "reverse video" mode.

242273 PARTFIX Please support 256 Colors in Terminal
	Redid Attr class into an enum as I will be playing more with
	these bitfields in order to accomodate more colors.
	Original Attr class saved as AttrSave.

	The enum approach is a teeny bit slower since field params aren't
	hard-coded in the instruction stream as constants and one has to do 
	instance field access but I did benchmarking as well as profiling and
	Attr class didn't and doesn't contribute much to hotspots. I.e.
	0% in the profile.

	"test bc" was registered as "attr" by mistake so when I ran test 
	"attr" I got test "bc". Fixed so "attr" runs "attr".

242273 PARTFIX Please support 256 Colors in Terminal
	Fix benchmarking/statistics gathering escape sequences.
	They were implemented in InterpANSI (ACT_PRINT) but with the switch
	to xterm a while ago they should've been moved to InterpProtoANSI.

	Fix Term.indent(). Doing println("\t") for indentation makes
	no sense. It should've been print().

nobugid - Tinker with TermApp's runargs
	Had added VM options to set AA fonts to help figure out complaints
	from Tim. Looks like the VMOptions textarea doesn't like the
	options separated per line and when I run it the VM complains.

	But it worked once!

================================================================================
nobugid - Adjust spec version to 1.37.6
	One of the things that triggered an apichanges was the introducton
	of TermOptions.PROP_ALT_SENDS_ESCAPE. It turns out none of 
	PROP's in TermOptions is really used externally. I.e there's no
	API which sets of gets them and there's not property notifications
	that take them as parameters them so might as well make them all
	private.

================================================================================
nobugid - Massive tip cleanup

242439 - Terminal -- Clear preserves position of the prompt
	Fix is easy.
	Just have the Clear action call Term.clearHistory() instead of clear().

	User Visible Changes
	--------------------
	Clear action will clear history, selection and move cursor to 0,0.

	Added a Ctl-Shift-L accelerator for Clear. It can't be Ctl-L like
	it is in the regular output window because Ctrl-L might mean something
	to the application running in the terminal. Allother terminal
	accelerators are Ctl-Shift for the same reason.

236268 - terminal ignores Alt-f, Alt-b keys 
	Introduced new Term property, altSendsEscape.
	It is matched with a TermOptions property of the same name 
	and a check box in org.netbeans.modules.terminal.nb.TermOptionsPanel.

		I was surprised to find out that TermOptionsPanel under
		org.netbeans.lib.terminalemulator.support was cloned, for
		reasonably good reason, into terminal.nb/TerminalImplementation.

		So for the moment, the original TermOptionsPanel doesn't support
		altSendsEscape yet.

		Syncing the two implementations will be a future project.

	Term's altSendsEscape property affects the behaviour of Term's
	screen's charTyped() KeyListener. It is based on xterm behaviour.
	You can read more about it in the javadoc for Term.setAltSendsEscape().

	User Visible Changes
	--------------------
	If altSendsEscape is checked (the default), when Alt is used as
	a modifier for some other key, say K, it will be converted
	to an ESC followed by K.

	If altSendsEscape is not checked, when Alt is used as a modifier,
	characters in the range 0-127 will be "shifted" to 128-255 by
	adding 128. This allows the entering of "8bit ascii", "accented",
	characters used predominantely in the "latin" charsets.

		It takes a bit of care to actually see this work.

		For example, my personal locale has LANG=en_US.utf8 but
		everything else, LC_*, is "C". Java looks at $LC_ALL
		to decide it's Charset and for "C" it chooses US-ASCII
		which is a 7-bit ASCII encoding so anything modified by
		Alt showed up as '?' for me.
		The remedy was to set $LC_ALL to en_US.utf8.

		There are also some shananigans that 'bash' pulls such that
		if you type Alt-e at bash you won't get the accented 'e' but
		if you use 'cat' or 'od' or 'vi' things get echoed properly.

	The Mac
	-------
	Apparently my earlier assumption that "altIsNotMeta false" doesn't
	hold for the Mac for it has a dedicated Meta key, the Apple key, 
	distinct from Alt.
	However, I don't have a Mac so it'll take me a bit to figure what's
	the right thing to do. Suggestions welcome.

	Terminal options dialog
	-----------------------
	The usual accelerator choosing game. 
	I freed S by using z for FontSize and assigned it to AltSendsESC.

================================================================================
nobugid - Track gnome-terminal changes in TermTester

nobugid - Move handling of <ESC>[t (ACT_GLYPH) from InterpANSI to InterpDtTerm.

nobugid - Make background of images in the glyph gutter be transparent instead
          of white
	+ Misc. \n fixes.

nobugid - TermTester updates
	- Switch to javac.{source,target}=1.8
	- Look for xterm and gnome-terminal in /bin instead of /usr/bin.
	- New test commands 'mark' and 'glyph' to test Term's ability to 
	  place glyphs in the glyph gutter.
	- Enhance 'tab' test to help debug problems with HT handling.

nobugid - Allow ActiveTerm to react to right mouse button.
	... so we can do context menus for active regions.

================================================================================
nobugid - Track various NB API changes
	These are in projects in the examples directory.
	- JNA Structure now needs getFieldOrder() implemented.
	- TermListener now needs cwdChanged() implemented.

nobugid - TermTester
	These are testing utilities and various specs that I had kept
	separate. It's high time they got integrated.

	See http://wiki.netbeans.org/TerminalTestingAndTroubleshooting
	for an introduction to the use of these utilities.
	
nobugid - termcap and terminfo sequences
	... for xterm, ansi and dtterm added to doc-files/

238225 - Midnight Commander and re-size breaks terminal
	Looking at traces from Term MC sets the margins (op_margin())
	but never resets them (reset/default margins always track 
	the window size).

	MC does issue the sequence \ESC[?1049l which is really the
	combination of ...
	1047	Revert to normal screen buffer, clearing screen if switching
		away from alternate screen buffer.
	1048	(DECRC) Restore cursor.
	But AFAICT margins are not a property of a "screen" nor of a "cursor"
	("cursor" is actually a collection of attributes) so neither of
	the above play a role with margins.

	Instead, it seems, margins need to be reset on resizes. I checked
	with 'terminator' and 'konsole' and they reset the margins on resizes
	only.

	This is easy to fix by adding a private Term.resetMargins() and
	calling it wherever st.rows gets modified.

	BTW Term doesn't support alternate screens yet. This might explain
	some of the other oddities when exiting MC, vi, man etc.

nobugid - Track API changes: TermListener.titleChanged()
	This is in examples/ projects which got missed when titleChanged()
	was added. TermApp now shows it's title.

nobugid - Default $TERM for TermApp -> xterm
nobugid - PrintStatsAction for TermApp
	This is all to help debug bug 238225.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 265081:ccb1fab67b20

	summary     : Switch from "ansi" to "xterm" as the default terminal
	emulation type ($TERM)

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	op_ind() and op_cud() are now part of Ops.

	op_line_feed() now implemented in terms of op_ind().

	Fine tune op_cuu(0 and op_cud().

	op_full-reset() clears history.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242713:1841c687fb7b	Refactoring before tackling
						IND and CUD.

	Implement
		IND (Index)		\ESCD		scrolls
		line feed		\LF		== IND
		CUD (CUrsor Down)	\ESC[%dB	doesn't scroll
	using op_ind() and op_cud(). op_line_feed() maps to op_ind() for
	bwd compatibility.

	This fixes a bug where \ESC[%dB would previously scroll.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242712:a9901f0515a4

	Implement
		RI (Reverse Index)	\ESCM		scrolls
		CUU (Cursor up)		\ESC[%dA	doesn't scroll
	using op_ri() and op_cuu(). op_up() maps to op_ri() for bwd
	compatibility.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	Implement
		CBT (Cursor Backward Tabulation)\ESC[%dZ op_cbt
		CHT (Cursor Horizontal Tab) 	\ESC[%dI op_cht

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242710:7d3b4c76fb2a
	
	Implement ED (Erase in Display) and reimplement \ESC[%dJ in terms
	of op_ed() instead of op_cd() or op_cl().

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset:   242709:a0c447ec4b2c

	Fix EL (Erase in Line) and ECH (Erase CHaracters) especially wrt
	retaining background color in erased regions.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242708:8e56a4a57a11

	While fixing cursor show/hide discovered that the real problem is
	that for DEC private actions didn't correct handle multiple
	;-separated numbers - last one was dropped.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242707:b9d72096f34f

	Implement
		\ESC[%dG	CHA
		\ESC[%dX	ECH
		\ESC[%dd	VPA

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242706:f2e980336ed7

	- Handle unsupported Toolkit.getLockingKeyState().
	  See comment in InterpProtoANSIX.numLock().
	- Accept multiple numbers for \ESC[?
	- Parse \ESC[> family in InterpXTerm but leave actions for
	  later except for \ESC[>c.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset:   242705:ba366f6407ec

	Emit correct sequences for function, edit, numpad and arrow keys
	for InterpProtoANSIX ("xterm" and "dtterm").

		This comes at a slight price of regresions in Term
		accessibility - for the above terminal types only.
		PageUp, PageDown, Ctl-UpArrow and Ctl-DnArrow will no
		longer scroll according to Swing L&F conventions.
		This is acceptable if you consider Term to be the ultimate
		keyboard accessibility mechanism where terminal conventions
		override those of Swing L&F.

	Implement DECPAM, DECPNM and DECCKM to control alternative
	key sequences that get sent from above.

	InterpANSI also emits special sequences for arrow keys and 
	Insert and Home keys.

	InterpProtoANSIX now keep's it's own state to keep tyrack of
	PAM and CKM as opposed to using State.

	Implementation depends on new method
		Interp.keyPressed(KeyEvent e)
	which, in turn, depends on
		Ops.send_chars(String sequence)

	Because state is now kept in interpreters had to add 
		Interp.softReset().

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset:   242704:6f3266eb5908

	- \ESC[%dl implementation moved from 'ansi' to 'protoansi'.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	changeset   : 242703:674b8a6f08a4

	- \ESC7 and \ESC8 implementation moved from 'ansi' to 'protoansi'.

	- Implement all codes (012) for \ESC[%dK.
	  Uses new Ops.op_el(int code).
	  Ope.op_ce() now just delegates to op_el(0).

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	- Implement sequences for ProtoANSI
		  \ESCn
		  \ESCo

		  \ESC(B	\ESC(0
		  \ESC)B	\ESC)0
		  \ESC*B	\ESC*0
		  \ESC+B	\ESC+0
	  These utilize Ops.setG() and selectGL().

	- Font selection is now done in a slightly more complex, two-step,
	  process. Sequences \ESC(, ), * and + assign a font to one of 
	  graphics sets G0, G1, G2 or G3. Then the sequences
	  \SI, \SO, \ESCn and \ESCo choose one of G[0123] as the rendered
	  font.
	  All this info is now kept in State and State.font() returns 
	  the "current font".

	- For "ansi" emulation fonts are set using \ESC%dm.
	  Previosuly this used to go through Ops.set_attr() but now it
	  goes via Ops.op_setG() in InterpANSI.dispatchAttr().

	- Attr used to store font info but that was only used by State not by 
	  actual buffer cells. Now that font state is more complex it's stored
	  explicitly in State and all Attr font handling becomes dead code.
	  Removed the dead code.

	- Fixed rendition of the diamond ACS graphic character.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals

	- Increment spec version to 1.25

	- InterpProtoANSI and InterpProtoANSIX were supposed to be
	  package private.

	- Add ability to customize Alternative Character Set (ACS) encoding
	  by Interp.

	  The key is
		char Interp.mapACS(char)
	  which will take an interp-specific encoding and return a
	  canonical encoding or '\0' which means the passed in char
	  does not encode an ACS.
	  The canonical encodings correspond to curses ACS_ variables
	  and characters used by the 'acsc' terminfo attribute.

	  For example "infocmp ansi" will yield:
		acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361 ...
	  and therefore mapACS for ANSI should return '-' when
	  passed \030.

	  This is the main fix needed for 187345. That is, if "xterm"
	  emulation is chosen for a Term it will handle the rendition of
	  graphic characters correctly.

	  However handling of _switching_ to the ACS font will take a
	  bit more doing because "ansi" terminals honor \ESC10m and
	  \ESC11m but "xterm"s require \ESC(0 and \ESC(B and then 
	  \SO and \SI.

	- Add ability to customize responses to attribute codes by Interp.

	  The sequence \ESC%dm is a general attribute setting mechanism.
	  However, the values accepted by "xterm", "ansi" and "dtterm" 
	  differ wildly. Yet, fortunately, there's no overlap in functionality
	  so we can still leave the ultimate implementation of the code up to
	  Term/Ops/Attr.

	  Handling of the actual value of %d is now delegated to Interps via
	  	boolean InterpProtoANSI.dispatchAttr(AbstractInterp ai, int n)
	  which check for valid values of 'n' and call ops.op_attr().

	  Incidentally added a couple of missing codes to Attr.setAttribute().
	  3 and 6 are now accepted although they fall back on simulations.

	  This is all private to the terminalemulator package and only
	  applies to Interp's derived from InterpProtoANSI.

	- Using an intermediate private Term.mapACS() as a trampoline
	  between mapChar() and Interp.mapACS() didn't quite work out right.
	  Need to test for '\0' directly in mapChar().

	- Added additional ACS support for arrows and blocks.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals
	Distribute "text parameter" sequence interpretation properly
	between InterpXTerm and InterpProtoANSIX.

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals
	Barebones xterm support

	changeset:   240886:95ea4996d8d5

	Introduced package scoped class InterpXTerm.

	Term.setEmulation() now accepts "xterm". xterm sequences are
	similar to those of ansi and dtterm so this barebones implementation
	isn't really differentiated.

	In particular xterm emulation doesn't handle alternative renditions,
	the main issue in this bug, correctly yet which is why ansi
	should still be used as the default emulation.

	TermApp enhanced with a -t option which allows setting of the 
	terminal type to one of dumb|ansi|dtterm|xterm.

nobugid - Cleanup and better naming for examples directory
	changeset:   240885:eaea739e914d

	- demosrc/lib.termsupport/nbterm -> examples/TermApp
	- demosrc/lib.termsupport -> <rm>
	- demosrc/Suite -> examples/TermSuite
	- demosrc/Examples -> examples/TermExample
	- demosrc -> examples
	
nobugid - sequence logging for debugging and testing
	changeset:   240884:6efe424d9990

        API enhanced with the following:

            void Term.setSequenceLogging(boolean)
            boolean Term.isSequenceLogging()

            Set<String> Term.getCompletedSequences();
            Set<String> Term.getUnrecognizedSequences();

            void Ops.logCompletedSequence(String);
            void Ops.logUnrecognizedSequence(String);

        The idea is to turn this logging on, run some terminal-heavy
        apps like vim, rogue/nethack, mc, alsamixer etc and see what 
        escape sequences were actually processed and which were, 
        silently, ignored. This can help with determining coverage
        of a given application.

        A corresponding change in the Terminal module enables 
        logging if -J-DTerm.debug=sequences is used on the NB cmdline.
        The property will additionally enable a Terminal context menu item
        "Dump Sequences" which will dump the above respectively into
                /tmp/term-sequences-completed
                /tmp/term-sequences-unrecognized

        So, if a user complains about some fancy sequence not working,
        the thing to do is to run NB with -J-DTerm.debug=sequences, run
        the misbehaving application and then issue "Dump Sequences" from
        the terminal context menu. "term-sequences-unrecognized" is likely
        to contain a sequence that is not yet implemented.

        Implementation:
            protected String InterDumb.ctl_sequence
        was replaced with a more comprehensive and efficient
            private StringBuilder ctlSequence

207965 - Terminal incorrectly displays prompt string
187345 - wrong characters in Terminals
	changeset   : 240883:4e7a19ec8f00

	Preparation for introduction of xterm emulation.

	Introduced a table to track control sequences common to ansi, dtterm
	and xterm:
		lib.terminalemulator/doc-files/sequences

	Introduced InterpProtoANSI and InterpProtoANSIX.
	- InterpProtoANSI is intended to factor Interp states and actions that
	  are common to ansi, dtterm and xterm.
	- InterpProtoANSIX is intended to factor Interp states and actions
	  that are common to dtterm and xterm.

nobugid - debugging printfs for Failed and Successful sequences
	changeset   : 240882:a7abd9388502

	The idea is to log seen control sequences, both those which
	succeeded and those which failed. 
	Later this output will be controllable using Term debug flags.

nobugid - Get lib.richexecution and TermApp projects compilable again
	changeset   : 240881:d942f87bcfdd

	Fixing of various dependencies and project file regenerations.

nobugid - move documentation out of src directory
	changeset:   240878:8323630292f9

	... and into lib.terminalemulator/doc-files
................................................................................
nobugid - fix op_ce (clear to end of line) so there are no "boxes" when
          running nethack.
	This in response to Jesse's comment that nethack doesn't work
	under term.
	See bug #192779 Comment #1.
	After fixing this, and maybe thebelow bugs, I haven't had problems
	running nethack on linux.

nobugid - ensure ${cluster} is initialized before clean

nobugid - Term debugging switch from UI
	The "Start Terminal" dialog which pops up on Terminals->
	TestTerminalwithRich/NativeExecution now has a debug checkbox.
	Entries in the ControlWindow now have a "debug: on off" control.
	These allow enabling and disabling of Term debug flags.
	
nobugid - don't NPE when creating a Terminal and ControlWindow is closed.

187345 - wrong characters in Terminals
	Partial fix ...
	A program renders alternative characters as follows. It first needs to
	select the desired font via "ESC [ <n> m". Where <n> ranges from
	10 to 19, 10 meaning "default" font. About the only
	interesting font in widespread use is 11, the so-called DEC graphics
	character set. See the right two columns in
		http://vt100.net/docs/vt220-rm/table2-4.html
	Then the program needs to emit the right character codes. These vary
	from terminal type to terminal type and are described by the 'acsc'
	entry in the terminfo DB:
		cd /usr/share/terminfo/a
		infocmp ansi
	The mapping described by 'acsc' is for _output_. E.g. to render
	the DEC graphic character '~', i.e. ACS_BULLET, the program
	has to emit 0304 for an ANSI terminals and '~' for xterm.

	To that end ...
	... introduced support for alternative font character attributes.
	These are set by codes 10-19 of the ANSI "ESC [ ... m" escape
	sequence, 10 being the default font.

	These codes are normalized to a 0-9 range and stored in a new 
	4-bit-wide FONT field in Attr using Attr.setAttribute() and setFont()
	and subsequently accessed via Attr.font().

	How are various fonts rendered?
	We work on the assumption that unicode will contain a glyph
	for any desired graphic. This reduces the problem to
	mapping a character coming into op_char() to the appropriate unicode
	"glyph". This is done by Term.mapChar().
	mapChar() only handles additional font attribute 1 (aka ANSI character
	attribute code 11). It does so in two steps. First it maps the
	incoming character to the Alternative Character Set (ACS) based on
		http://vt100.net/docs/vt220-rm/table2-4.html
	These are canonical VT-100 characters.
	It then maps the canonical VT-100 character to an explicit unicode
	character representing the desired graphic.

	Still to do ...
	- Term.mapACS() needs to be an abstract method of Interp.
	- Not all VT-100 graphic characters have high fidelity representations
	  in unicode. A more sophisticated system would create it's own
	  scaled glyphs.

	And all of this hasn't solved the original problem of the fancy
	zsh prompt. I can get almost everything right except that there
	are too many spaces on the second line of the prompt causing 
	the "date" portion to wrap.
	But I think this has to do with the terminfo entry for 'ansi'
	or a curses bug on my FC12. Will have to check on some other 
	platforms after pushing.

188024 - single last character with different attributes not rendered
	An off-by-one error in the main loop termination test in
	Term.paint_line_new().

187345 - wrong characters in Terminals
	Introduced a version of StreamTerm.connect() that takes a charset
	like "ISO-8859-1" or "UTF-8". This allows for overriding the default
	system encoding. Sort of analogous to Project source encodings.

================================================================================
May have missed some entries here ...
================================================================================
nobugid (Towards more InputOutput functionality)
	Introduced IOResizable and IOEmulation to support Term-related
	functionality.
	IOREsizable allows capturing terminal size changes and forwarding
	them to the relevant ioctl().
	IOEmulation allows querying the actual terminal emulation provided
	and assigning it to $TERM. It also proviedes the disciplined
	property which describes whether the InputOutput provides it's
	own line discipline or relies on an external agent (usually a pty).

	TerminalInputOutput implements these new capabilities.

	TerminalIOProviderSupport, which is code common to many of the
	demo actions in demosrc, now uses the above InputOutput-based
	functionality instead of accessing a Term directly.

================================================================================
nobugid (Streams from StreamTerm)
	While experimenting with IOExecution it becaame clear that there
	would be some merit for StreamTerm to provide actual Streams the way
	InputOutput does. To that end StreamTerm provides:
		Reader getIn()
		Writer getOut().

	This simplifies the implemenatation of TerminalInputOutput. Or rather,
	factors some of the implementation into TerminalInputOutput.

nobugid (external hyperlink generation)
	Terminal can now recognize externally generated hyperlinks
	(per http://wiki.netbeans.org/TerminalEmulatorHyperlinking).
	You can generate such hyperlinks using 
		lib.terminalemulator/demosrc/terminal/examples/make_filter.awk
	as follows:
		make | awk -f make_filter.awk

	In order to process such hyperlinks one has to call
	Terminal.setHyperlinkListener which takes a new interface 
	HyperlinkListener. This is a bit cleaner than the older way
	of doing this as described in
		http://wiki.netbeans.org/TerminalEmulatorHyperlinking?version=6

	CommandmermDirectAction (aka Command with pty and direct access to
	Terminals) sets up a hyperlink listener.

nobugid (Experimentation with IOExecution)
	Have a temporary IOExecution per Tomas Holy's original
	proposal in terminal/ioprovider.

	Moved Program/Command and Shell into it's own package inside
	richexecution. Program used to be based on ProcessBuilder and
	even returned it. Now it's a pure data object and 
	PtyExecutor builds the ProcessBuilder on demand.

	TerminalInputOutput now implements it.

nobugid (more: track new I/O API's)
	terminal/example module has these:
	- IOFeaturesAction creates a Term base InputOutput to 
	  demonstrate various IOProvider features:
	  - IOPosition
	  - IOColorLines
	  - IOColors
	  - IOTab (this uses sunsky.png)
	They are basically implemented in TerminalInputOutput.

nobugid (track new I/O API's)
	TerminalIOProviderSupport.getIOProvider() now uses
	IOProvider.get("Terminal") instead of it's own iteration through
	lookup. The old code is relegated to getIOProviderClassic().

	terminaIOProvider implements getName() which returns "terminal" so
	IOProvider.get() can find it.

	TerminalProvider.createTerminal() variation which takes an IOContainer.

	ioprovider.TerminalInputOutput variation which takes an IOContainer
	and calls TerminalProvider.createTerminal().
	Commented out stubs implementing IO "features" (IOShuttle is
	used there).

	Terminal can now be contained in a TerminalContainer as well as an
	IOContainer. It doesn't fully implement all IOContainer.CallBacks.
	In particular "close" semantics are still undefined.
	The following behave differently depending on where a Terminal
	is embedded in:
		select()
		setTitle()
		setActions()	can only be done at construction time with IO.
		find()		not supported for IO.
		closeWork()

	TerminalContainer.reaped() -> removeTerminal().

	select, activated and deactivated passed thorugh from TerminalContainer
	to Terminal via callBacks. TermTopComponent overrides TC
	componentActivated()/Deactivated() to support this.

nobugid (prep for API review)
	Started arch.xml for rich execution.
	Command, PtyExecutor made final.
	Platform, Util made pkg private.
	TermExecutor made final and now delegates to PtyExecutor instead of
	inheriting.

nobugid (Font chooser -- pass1)
	Users have long chafed at the limited choice of fonts, basically
	"monospaced" in the output window both when it was based on Term
	and afterwards. See, for example, IZ's 29604, 40033, 43165, 45174
	55455, 87536. The main reason for this limitation is a bit
	different for Term and output2.
	Term is a _terminal_ based on rows and columns and in principle
	only makes sense with fixed width fonts.
	Fixed width fonts dramatically pseed up layout and rendering of text.
	This is particularly important for output2 which has to deal with 
	"unlimited" buffer sizes.

	However, we need not restrict ourselves to "monospaced". A typical
	system has a large palette of fonts and some of them are bound to
	be fixed width. This project adds a font chooser to TermOptionsPanel
	which allows the user to choose from among all the available fixed
	width fonts.

	However, we have a slight problem in that Swings fonts are not
	explicitly characterized by whether they are fixed width or not.
	So, we decide for ourselves by checking the widths of the first 256
	characters and if they are all equal we consider that font to be 
	fixed width.

	A more forceful approach would be to render variable width fonts
	in the fixed cells of a terminal. Presumably one can find the 
	maximum width and use that as cell width. Rendering has to be 
	done on a cell by cell basis and Term doesn't do that yet.
	The font chooser has a checkbox though for enabling non-fixed-width
	fonts in it's palette.

	To satisfy all of this ...
	- TermOptions now has a font property as opposed to just fontSize.
	- Term has a property, fixedFont, which governs what kind of font it
	  will accept. If it's set to false term behaves as before just
	  using the given fonts style and size and applying it to monospaced.
	  If it's set to true Term will accept any font assuming that the user
	  passed it a fixed width font.

	More works needs to be done:
	- One should be able to independently set the font size.
	- TermOptions' font property isn't properly saved and restored?
	- Whether variable width fonts are allowed should be part of
	  TermOptions.

================================================================================
nobugid (Solaris work)
	- lib.richexecution
	  - class CLibrary enhanced to work with Solaris.
	  - Viable process_start-solaris-intel.zip created.
	  - Viable process_start-solaris-sparc.zip created.
	  - Verified that JNA code and the process_start's work under both
	    32-bit and 64-bit VM's.
	  - Existing (zipped) process_start-linux-intel, whcih was built on
	    FC6 crashes with a SIGFPE on newer linuxes like SLES10 or SuSe10
	- lib.termsupport.nbterm
	  - Introduced nbterm64 in order to test stuff under 64-bit VM's.
	  - The distribution now contains all versions of process_starts
	    which it gets from the zipfiles.

================================================================================
nobugid (Mac work)
	- lib.richexecution
	  - Introduced mac-intel as a platform in build.xml which now
	    builds process_start-mac-intel.
	  - OS.platform() returns "mac-intel" to match.
	  - A viable process_start-mac-intel.zip created.
	  - In process_start.c need to explicitly assign a controlling
	    terminal using TIOCSCTTY.
	    We do this only if TIOCSCTTY is defined which should make 
	    the code platform neutral enough.
	  - In JNAPty instead of getpt() or explicit opening of "/dev/ptmx"
	    we use posix_openpt().
	  - New class Platform.
	    OS.platform replaced with Platform.platform().
	  - Platform sensitive JNA LIbraries ...
	    - PtyLibrary and ProcessLibrary interfaces merged into
	      CLibrary class.
	      CLibrary delegates to platform-specific Library's and
	      initializes the constants according to Platform.
	- lib.termsupport
	  - In TermExecutor.MyTermListener verified that setting TIOCSWINSZ
	    via the master works on the MAc.
	- lib.terminalemulator
	  - On the Mac VK_ESCAPE doesn't generate a keyTyped event() so
	    need to simulate it using keyPressed().
	    Introduced charTyped() to factor keyTyped() and keyPressed()
	    processing.
	    Introduced boolean onMac().

================================================================================
nobugid (Options support and UI)
        - lib.termsupport.TermOptions contains options information for a Term.
        - lib.termsupport.TermOptionsPanel is a generic JPanel for viewing the
          above.
        - org.netbeans.modules.terminal uses TermAdvancedOption to provide
          UI for options in NB under Tools->Options->Miscellaneous->Terminal.
        - TermApp (nbterm) has An Options context menu action and brings up an
          options dialog which is persisted in ~/.java/.userPrefs/nbterm.

================================================================================
nobugid (get working on Windows again)
	- richexecution
	  - build.xml now recognizes windows (XP) as a platform
	  - Use ${user.name} instead of ${env.USER}.
	  - Command needs to pass /c instead of -c on Windows.
	  - Pty constructor throws UnsupportedOperationException on Windows.
	  - PtyExecutor.start() needs to initialize pid to -1 so that
	    PtyProcess knows to not use unixy signals (it tests for -1).
	  - On Windows PtyProcess should return the processes streams
	    not the Pty's because there is no Pty. At some point we'll be
	    able to do RAW Pty's on Windows and then this won't be neccessary.
	- termsupport
	  - set the pty Mode to NONE on Windows.
================================================================================
nobugid (bugs in line insertion/deletion w and w/o margins)
	Symptom:
		vi a file in a 24x80 terminal.
		^D
		line 23 isn't refreshed properly.
	Fix in Term.OpsImpl.op_al(), op_dl().

	Seems to have fixed another symptom where fast ^D'ing when
	running 'vim' resulted in the "middle" line having lots of []'s.

nobugid (towards distributing demo NBM)
	- Adjust Suite/build.xml to special-case the creation of
	  lib.terminalemulators nbm's because it can't be added to the suite.
	- Add extra.module.files to RichExecution's project.properties to
	  ensure that process_start* ends up in the NBM.
	- Enhance richexecution.PtyExecutor to "chmod u+x" process_start*
	  because when they are extracted from an NBM zip cannot maintain
	  their execution permission.
	- Module collateral information (Description home page etc.) filled in.

	Suite/build.xml

	richexcution/project.properties

	richexcution/PtyExecutor.java

	richexcution/Bundle.properties

	termsupport/project.properties
	termsupport/Bundle.properties

	terminal/example/project.properties
	terminal/example/Bundle.properties

	terminal/project.properties
	terminal/Bundle.properties

	terminalemulator/project.properties
	terminalemulator/Bundle.properties

nobugid (i18n-check: misc. warnings in terminalemulator)
	terminalemulator/Term.java
	terminalemulator/Buffer.java

Started a debug/test infrastructure although it's not in the mainline
NB src code yet. The following were done to support it ...

nobugid (Suppport for raw pty's on linux)
	On Solaris one makes a pty raw by just not pushing the stream
	modules ptem ldterm and ttcompat.

	On linux pty's are be default non-raw. One can make them
	act like a raw terminal by using cfmakeraw(). It only 
	sets up a termios structure; one still needs to do a
	read/modify/write using tcgetattr() and tcsetattr().
	So added all of these to richexecution.PtyLibrary:
		class Termios		Linux only
		tcgetattr()
		tcsetattr()	plus relevant constants
		cfmakeraw()

	JNAPty.assigFd() and getFd() moved to new Util class.

	JNAPty now uses the above functions to do a read/modiy/write for
	raw pty's.

	richexecution.PtyLibrary.java
	richexecution.JNAPty.java
	richexecution.Util.java

nobugid (nbterm: couldn't find itself if executed through a soft link)
	Had to enhance the "find yourself" stuff at the beginning.

nobugid (nbterm: xterm-like -e and -geometry flags)
	The terminal debugging/testing infrastructure fires up nbterm
	and a reference existing implementation like xterm or konsole
	and broadcasts sequences to all for visual comparison.

	Needed to add -e and -geometry to nbterm for this to work.

	-e used to mean "try error detection mode". That is now
	renamed to -E.

nobugid (TermExecutor debugmode to emit more debugging stuff)
	termsupport/TermExecutor.java

================================================================================
151644 (Return of the terminalemulator)
	Second large chunk of work.
	Additional functionality and a more conventional module and pkg 
	organization.

	See
	http://wiki.netbeans.org/TerminalEmulator
	http://wiki.netbeans.org/TerminalEmulatorDemoModuleOrg

================================================================================
nobugid (Term and ActiveTerm support for hyperlinks)
	Term will now recognize the sequence 
		<ESC>]10;<clientData>;<text><BEL>;
	as analogous to 
		<a href="clientData">text</a>
	and create hyperlinks.

	See http://wiki.netbeans.org/TerminalEmulatorHyperlinking for
	usage details.

	In addition to interpretation of the sequence in InterpDtTerm
	and it's implementation in Term.op_hyperlink ...

	This required a bit of support internally to help save and
	restore text attributes of regions enclosing hyperlinks:
		ActiveRegion.getParentAttrs()
		ActiveRegion.setParentAttrs()
		Term.attrSave()
		Term.attrRestore()

nobugid (de-publicize RegionManager)

24760 (Eye candy for hyperlink navigation.)
	Partial fix.
	When the mouse hovers over a hyperlink the cursor shape changes to
	a pointing finger.

================================================================================
nobugid (TermSupport works on solaris now)
	- OS.UNIX -> OS.LINUX + OS.SOLARIS
	- JNAPty needs to do some ioctl(I_PUSH's) only on solaris.

nobugid (TermSupport handles csh correctly)
	The call to setpgrp/setsid inside pty_bind pulled up into PtyProcess.
	See comment is wrappedCmd().

================================================================================
nobugid (StreamTerm to handle IOExceptions better)
	See comments in StreamTerm.OutputMonitor.run().

================================================================================
tag: ivan_25

nobugid (de-publicize all ACT_ classes)
	All Interps use internal Actor classes using the naming convention
	ACT_. These classes were protected _and_ final and an eyesore
	in the javadoc.
	Made them package private.

124612 files lost when terminalemulator was moved to cnd
	The transfer of termulator from core to cnd was incomplete in two ways:

	1) Several files were dropped:
		   ReleaseNotes.ivan.txt 	(this file)
		   demosrc/buildtool/*
		   demosrc/telnet/*
		   test/unit/src/org/netbeans/lib/terminalemulator/TermTest.java
	   These files have been restored and brought up-to-date.

	2) Some changes were committed to CVS after the copy to cnd but
	   before the core copy was deleted so they got "lost".
	   These changes (tags ivan_24, ivan_23) have been reintroduced.

	Some more changes were never committed to CVS and missed both 
	the core-to-cnd copy as well as the CVS-to-Hg transition.
	These are documented below.

nobugid junit test failure on textWithin()
	In the process of reintroducing TermTest.java found that it fails.

nobugid Abstracting of Buffer and Line classes
	In order to be able to alter the implementation of Buffer, for
	instance to have it use java.nio.Buffer's like output2, have
	to make it be more abstract. To that end ...
	- Enhanced Buffer.printStats() to provide more detailed statistics.
	- Line.glyph_glyph -> Line.glyphId
	- Line.glyph_rendition -> Line.backgroundColor
	- new property glyphId
	- new property backgroundColor
	- - Line.charArray
	  + Line.accumulateInto
	- + Line.charAt(), charAtPut(), getChars()
	- Lot of code in Term.java used to pass a char buf[] around
	  which used to be a pointer directly into a Lines storage array
	  set in paint_line_new().
	  Now it uses Line.getChars() and a local xferBuf in myDrawChars().

nobugid Make Interp public
	On [fall 2007] Yarda, in order to satify some static code style checks,
	had, instead of making Term.setInterp(), getInterp() public, opted
	to make class Interp pkg private.

	Java apparently allows a sub-class of a package class to
	be passed to a parameter of the type of the package class.
	I.e. Interp is pkg private, MyInterp is public and extends
	Interp, ergo a public setInterp(Interp) is useful.

	Instead of quibbling, making Interp, setInterp() and getInterp()
	be public.

================================================================================
tag: ivan_24

These changes were driven by trying to get Midnight Commander (mc) to work 
under term. mc, with it's heavy dependence on terminal graphics, seems
like a good litmus test.
With these fixes we're doing fine on output, except for "graphical character"
rendering. However, mc isn't very usable due to heavy dependence on function
key and mouse event processing which I leave for another day.

nobugid Handle "set text parameters" escape sequence ESC ] <p1> ; <p2> BEL
        Allows for various terminalemulator application text values like
        icon name, window title and current working directory to be set.
        We only handle these sequences so output from mc doesn't mess up
        the screen. While the sequences call new methods of class Ops,
	op_icon_name(), op_win_title() and op_cwd(), a terminalemulator
	_Application_ would still need some sort of listener mechanism
	to adequately handle these requests.

	Includes InterpDtTerm.ACT_DONE_COLLECT2.

nobugid Factoring of InterpDtTerm.ACT_DEC_PRIVATE
        Mainly as I was exploring sequences having to do with enabling of
        mouse reporting. See
            http://www.xfree86.org/current/ctlseqs.html#Mouse%20Tracking

================================================================================
tag: ivan_23
nobugid Solitary attributed character in last column not rendered.
        scenario:
            Bring up 'vim', enter "aaa", enter ^V. A '^' will appear.
            In some environments the caret is blue and in such cases 
            the caret isn't rendered.
        cause:
            In Term.paint_line_new() in the case where we use runs we bail out
            too soon because of this test:
                if (rend+1 >= lastcol)
                    break;
        fix:
            Use > instead of >=.

nobugid TAB inserts spaces when it should only move the cursor.
        This became clear in a curses example submitted by a customer.
        Where curses uses TABs as a quick way to move around.
        Fixed in Term.OpsImpl.op_tab()

nobugid Handle ASCII SO and SI
        SO == ^N == Shift Out == LS1 == as    switch to VT100 graphical characters
        SI == ^O == Shift In  == LS0 == ae    switch to default rendition
        These were not handled and were just echoed, throwing off curses screens.
        Term.OpsImpl.op_as/ae() handle these.
        They are now absorbed but there is no real support for graphical
        characters yet.
        Unicode supposedly has 32 codes for them U+FDD0 thru U+FDEF but
        standard Java fonts render them as squares. And the mappings here:
            http://en.wikibooks.org/wiki/Unicode/Character_reference/F000-FFFF
        just show black squares.

	Added InterpANSI.Ascii, a convenience "enumeration" containing codes
	for common ascii characters.

6535452 Dbx console in IDE: still no cursor key support
        Also forum thread
            http://forum.java.sun.com/thread.jspa?forumID=852&threadID=5103260
        Term will now convert arrow keys per the DtTerm spec:
        CursorUp    ESC [ A
        CursorDown  ESC [ B
        CursorRight ESC [ C
        CursorLeft  ESC [ D
        This is done in Term.onCursorkey().

================================================================================
tag: ivan_22
nobugid remove deprecations
	- Switch to using setFocusTraversalKeys() as opposed to
	  the deracated isManagingFocus() (in Screen.java).
	- Use getScreen() as opposed to get getDisplay().

4921071 printing to the Process Output tab prevents using menus
	NetBeans has many request processors running at low P1 so
	a default priority (5?6?) for StreamTerm.OutputMonitor thread will
	swamp all the RPs if we have a firehose sub-process.
	Lowering the priority of StreamTerm.OutputMonitor to 1.

4898959 [Debugger Console]: copy/paste via mouse buttons don't work.
	With 1.4 we now can get a systemSelection in addition to
	systemClipboard so we can accurately implement X-windows-style
	selection semantics as follows:

	SunCopy		put Terms selection into systemClipboard (only if
			non-empty)
	SunPaste	stuff systemClipboard contents into Term buffer

	selection done	put Terms selection into systemSelection
	clear selection	put empty string into systemSelection
	middle click	stuff systemSelection contents into Term buffer

	The Term API has been extended with pasteFromClipboard() and
	pasteFromSelection(). The original paste() is now pasteFromClipboard()
	so NB OutputWindow works like before.

	Similarly we have copyToClipboard() and copyToSelection() and copy()
	is copyToClipboard() so NB OutputWindow works like before.

	Operations with the systemSelection only work if it is available
	on the host system (For example itis not available Windows).

	Mouse gestures to stuff the systemSelection _used_ to only work if the 
	autoInsert property is true. That was so that a casual text selection
	doesn't clobber the clipboard. Now that we have a distinction
	between the clipboard and selection this property is deprecated
	and it's setting will be ignored in favor of it always being
	true.

4898959 [Debugger Console]: copy/paste via mouse buttons don't work.
	Term used to ignore middle mouse clicks if any mousewheel support
	was available. Took that test out. See comments in mouseClicked().

36439 (output window gives ArrayIndexOutOfBounds for some characters)
	The wcwidth cache is allocated of size Character.MAX_VALUE
	and indexed by a 'char', so the only way it can get an AOB is
	Character.MAX_VALUE(\uffff) is passed to it. 
	Fixed by allocating one more cell.
	Can be easily verified by println'ing a \uffff but it's gotta go
	through internal execution.

17337 (CTRL-C to copy in Output Window causes it to scroll to bottom)
	'keystroke_set' is a collection of KeyStrokes in the form:
	       ks3 = getKeyStroke(VK_C, CTRL_MASK)
	we use Term.maybeConsume() in keyPressed and keyTyped events. During
	keyTyped the event->KS mapping gives us
	       ks2 = getKeyStroke((char) ('c'-64), CTRL_MASK)
	ks2 and ks3 while logically equivalent don't hash to the same so
	maybeConsume() says yes to ks2 and the Ctrl-C gets passed on.

	So to detect whether something in 'keystroke_set' needs to be dropped 
	we need to check at keyPress time but take action at keyTyped time.
	'passOn' helps us do that.

24824 (Focus problems with splitpane in OW)
4702175 (JScrollBar provide no focus feedback)
	Issue 24824 pertains mostly to the splitplane confusing things, but
	the scrollbars getting focus was muddying the waters.
	Workaround for 4702175 suggets to make the scrollbars not
	be focusable, so made the horizontal and vertical scrollbars non
	focusable. The effect of this is Ctrl-Tab will not shift
	focus to the scrollbars.

nobugid (Switched to timed repaint)
	Per Tims suggestion from issue 28297.
	I had noticed that pastes (now that I got them working) take an awful
	long time. A time delay of 20msec does wonders.
	This should pave the way for simplification of OuputTabTerm as I
	described in 28297.

36404 (Scrollbars should scroll faster)
	Until we agree on a common solution changed the rate from 50 to
	10 milli-seconds per frame.

nobugid (AOOB in Line.insertCharAt())
	With InterpANSI run Term under a real pty-based shell and
	run vi. Go into insert mode. Issue two ^t's and a {. Boom!
	Line.insertCharAt() could not handle insertions at columns past 
	thelength of the line. Fixed.

================================================================================
tag: ivan_21

issue 24824 Focus problems with splitpane in OW
	Overrode setEnabled() for Term so it propagates
	enabledness to sub-components per Aleses request.
	It's a sensible thing to have in any case.
	
	However, I couldn't find the error and setEnabled() code in 
	OW that Ales was talking about. So passing the bug on
	to Tim who's taken over Ales.

regression terminalemulator won't build on JDK < 1.4
	I had accidentally left an experimental
	    Clipboard systemSelection = getToolkit().getSystemSelection();
	Now it's commented out.

================================================================================
tag: ivan_20

Files: Term.java, Sel.java, Line.java

issue 30776 NPE when resizing output window
	Not enough info, so no action yet.

issue 31755 NullPointerException after resizing Output Window
	The basic problem was that Sel keeps the origin and extent of 
	the selection in unsorted order. Some methods, like paint() and
	getExtent, setExtent() compensate for this, but adjust()
	and intersects() didn't.

	Modified sel.adjust() to take a lastline argument as well.

	Moved sel.adjust into common area of Term.limit_lines().

nobugid Selection vanishes on resize
	This used to be done in Term.adjust_lines() to mimic DtTerm, where
	if you resize so that the current selection ends up going
	out the window the selection is cancelled.
	After fixing 31755 it seemed more practical to not nuke the
	selection (which is how xterm works).

issue 31951 Copy to clipboard removing empty lines in output window
	This was because Line.text would return a "" instead of a "\n"
	for "empty" lines. This was initially so so that selecting 
	the "empty lines" below the cursor would give "empty" selection
	strings. But we forego that in order to fix this bug.
	Turns out xterm also returns newlines for the "empty" lines
	below the cursor.
	Issue 21577 addresses the selectability of empty lines below the
	cursor, but that's orthogonal. Once we can't select these empty
	lines the fact that they return "" or "\n" per line becomes
	immaterial.

issue 27491 Output window Mouse Pointer
	Fixed part 2. Mouse pointer is now java.awt.Cursor.TEXT_CURSOR
	by default. This is consistent with xterm and DtTerm as well.
	This can always be overriden by using
		Term.getScreen().setCursor(...);

================================================================================
tag: ivan_19

issue 17644 Executation window cuts off output-window's text
	java bug 4711314 worked around by 
	adding a repaint to componentResized().
================================================================================
tag: ivan_18

(OutputWin only) Reversal on invokeAndWait()
	Issue 
		http://www.netbeans.org/issues/show_bug.cgi?id=25180
	Demonstrated several regressions connected with my choice
	of using invokeAndWait() in OutputTabTerm.

	David Strupl reveretd by changing invokeNow() to use invokeLater()
	but neglected to make copies of buffers passed in and forwarded to
	Term.

	Also added a quick change flag safe_mode.

================================================================================
tag: ivan_17
Text for bugs:

I"m marking this and other NPE related bugs as fixed with my commit
tagged ivan_17. For a thorough description read 
.../terminalemulator/ReleaseNotes.ivan.txt.
Since this is a rather radical change I'd rather see new bugs filed as
opposed to these being reopened.


nobugid slowdown due to accessibility
	When Assistive Technology latches on to a component various additional
	property changes get fired. These can be expensive so the usual
	trick is to only fire them if an AccessibleContext has been requested.

	However most apps (should) set the accessibleName() and that
	instantly creates on demand an AccessibleContext.

	For Term this means that every input character will fire 
	accessible property changes and we don't want thath. We only
	want to do this if some real AT is latched on to us.

	So, switched the test to test for an AccessibleText having
	been doled out.

issue 17644 DEFECT P3 PC Ivan@netbeans.org NEW NPE from terminalemulator
issue 20412 DEFECT P3 PC Ivan@netbeans.org STAR NPE on org.netbeans.lib. ...
issue 24444 DEFECT P3 PC Ivan@netbeans.org STAR NPE changing tab (Editting, ...
issue 24728 DEFECT P3 PC Ivan@netbeans.org NEW Random NPE when execute a ...
issue 18575 DEFECT P3 PC Ivan@netbeans.org STAR ConcurrentModificationException
issue 20430 DEFECT P3 PC Ivan@netbeans.org NEW Deadlock during XTest

	All of these, I postulate, happen because Term has been used 
	incorrectly. Being that it is a JComponent it's state is only
	allowed to be modified from the AWT event dispatcher thread.

	The various NPE and similar problems that arose in the past
	were unfortunately treated by inserting 'synchronised' all over
	Term code (mainly because of my incorrect assumption that
	paints get called on a special repainter thread).  There's also
	one instance of using SwingUtilities.invokeLater() in scrollbar
	adjustment.

	With this commit I've reversed the situation.

	First, all uses of 'synchronized' in Term have been commented 
	out with the following pattern in the comment: "OLD NPE-x".
	This is to make sure that the _fix_ is fixing the problem and
	not the leftover synchronized's.
	In case of disaster the code can be reverted.

	Next, OutputTabTerm's invocations to Term were routed through 
	SwingUtilities.invokeAndWait() or invokeLater(). They're actually
	done through little utility functions called invokeNow and
	invokeLater which do the SwingUtilities.isEventDispatchThread() test.
	Every stack trace in the above issues has originated from
	OutputTabTerm so I'm reasonably confident that all the above
	issues will be addressed by this.

	invokeNow() is used for InputStream data. invokeLater() is used
	for actions which come over the dispatcher.

	Some minor discussion on nbdev raised the issue that invokeAndWait()
	might induce deadlock. I'd like to argue that this is fine as follows:

		First, using invokeAndWait() is the rightthing to do for
		the input. It provides a measure of flow control for the
		input source and doesn't swamp the AWT event queue.

		Second, if you use invokeLater(), because you're passing 
		character arrays, these arrays will have to be copied.
		There's no need for elaborate buffering and queueing 
		since each inner class Runnable which gets created gets
		it's own copy of the reference to the buffer, but the
		buffer does need to be copied.

		Third, as issue 20430 demonstrates, insertion of
		synchronised is no panacea. We do need queued serialization.

		Fourth, if we do get deadlocks because of invokeAndWait() we
		can revisit this question. Regardless, some form of
		SwingUtilities.invoke has to be used so this fix is
		in the right direction.

		Finally, I'm hard-pressed to see how a deadlock can occur.
		The character input to Term (see below for other "input")
		comes from an external process or an internal thread. For
		a deadlock to occur Term code has to vie for a resource that 
		the outputting task is holding. Term is extremely
		self-contained though. It does not call back into any
		NB code and therefore should not contend for any resources.
		(The only exception is the use of debugging println's in
		internal execution mode which usually cause an
		infinite recursion).

		P.S. I actually tried with invokeLater() for a speed
		comparison. To my surprise I discovered that the text gets
		all run in and stuff _as if_ ordering gets messed up or 
		the runnables get issued out of order. Instead of pursuing
		why I took this as further confirmation that invokeAndWait
		is the right decision. Come to think of it I just used
		invokeLater and didn't copy my buffers.

	Analysis of Term state modification

	In general Term state modifications come from these sources:
		putChar[s].
			This is the main source and it's the responsibility of
			the caller to call them on the right thread.

		Various property settings.
			Happen in constructors or as side-effects of user
			actions in the gui. So in general they should be safe.
			All other calls should be carefully scrutinized.

		Keyboard input
			Come in on the Event Dispatch thread and usually
			gets consumed or passed on to a listener.
			If LineDiscipline() is being used stuff gets echoed
			but we're still within the Event Dispatch thread.

		Srollbar notifications, mouse events ...
			All come in on the Event Dispatch thread.


	Various mutators in OutputTabTerm are ....

		Calls from OutputWriter methods of TermOutputWriter. These
		are the most important source and therefore use
		invokeAndWait().

		setPageMode()
		historySizeKeeper()
			Safe. Called from TermOutputWriter

		Calls from the constructors.
			Safe. No mutator is going to come in while
			in a constructor.

		toString()
			Unsafe.

		updatePasteAction <- updateCopyCutAction
		updateCopyCutAction < activated < TopComponent.componentActivate
			Safe.

		activateHyperlink
		gotoHyperlink
		invokeJumpListener
		etc.
		<- JumpActionPerformer[ActionPerformer].performAction
		CopyActionPerformer[ActionPerformer].performAction()
			Unsafe. Called from RequestProcessor.
			Handled with existing Mutex.EVENT.readAccess.

		Term.performAction() (only used for PopupAction)
			boils down to OutputTabTerm.performAction()
			Unsafe? ... F10 is broken.
			Already handled with existing Mutex.EVENT.readAccess.

		selectAll <- actionPerformed
		setHyperlinkNavigationEnabled <- doClear
		doClear <- actionPerformed
		doClear <- topComponentClosed
			Boils down to OutputTabTerm.actionPerformed()
			Safe. Called on dispatch thread

		checkFont <- setSettings
		setSettings <- propertyChange(PropertyChangeEvent)
			Safe. Called on dispatch thread

	Escapes of Term
		OutputTabTerm provides a getTerm() method, allegedly for
		testing, but it still may be used so uses need to be
		scrutinized.

================================================================================
tag: ivan_16

issue 19156 (Not able to navigate to left/right in output window)
	All code dealing with Ctrl-Tab is gone.
	If you need to recover it check out code with tag ivan_15.

	Shortcuts for selection manipulation remain but that is now
	the subject of 

	http://www.netbeans.org/issues/show_bug.cgi?id=24759

	Here is the final result:

	Action			New binding		Old Binding	Where 
	--------------------------------------------------------------------
	Scroll line up		Ctrl-UpArrow (1)	UpArrow		Term
	Scroll line down	Ctrl-DownArrow (1)	DownArrow	Term

	Scroll page up		PageUp					Term
	Scroll page down	PageDown				Term

	Scroll view left	Ctrl-PageUp (1)				Term
	Scroll view right	Ctrl-PageDown (1)			Term

	Scroll column		# No good binding available

	Next hyperlink		Ctrl-T (2) (3)		DownArrow	OW
	Prev hyperlink		Shift-Ctrl-T (3)	UpArrow		OW
	Activate hyperlink	Enter|Space 		Enter|Space	OW
	Activate hyperlink	Single-click (4)	Single|Double-Click
									OW+Term

	Next Error & Activate	F12 (3)			F12		OW
	Prev Error & Activate	Shift-F12 (3)		Shift-F12	OW

	(1) Conflicts with JLF TabbedPane accelerators.
	(2) The highlighted errors are best described as hyperlinks hence
	    the generic treatment.
	(3) If you reach the last (first) link/error next (prev) will
	    not work on the first try and will put out a message in the 
	    status bar. One more will cause a wrap then.
	(4) The original implementation was very confused about single vs
	    double click. So much so that I couldn't characterise it.
	    For example build errors were navigable with a single click,
	    while exception errors had to be double-clicked.

================================================================================
tag: ivan_15

issue 19156 (Not able to navigate to left/right in output window)

	After discussions with cL on nbui about the merits of Tab
	vs Ctrl-Tab and a fair amount of work to get Tab to navigate links
	and Ctrl-Tab to go back to the focus mgr ... turns out the JLF
	was wrong and that Ctrl-T and Shift-Ctrl-T should be used for 
	link navigation! (this after email exchange with accessibility
	people at Sun)

	Since I put a fair amount of work into being able to switch between
	grabbing Tab, Ctrl-Tab and all I"m commiting this code with all
	of that code still in AS WELL as Ctrl-T codes so it can be
	retrieved again and will shortly commit code that elides it.
	Here are the coupl a notes on that code.

		CtrlTab. I"m not happy with this decision, so currently
		you can do it both ways using the property grabFocusKeys()
		which is set to false by default. 

		The various issues and implementations are discussed in source
		comments in Term.java and Screen.java both beginning with 
			Dealing with focus traversal ...

	One of the problematic issues was that Ctrl-Tab (or Ctrl-T) would
	jump the screen and appear in the term (as boxes) if the OW
	is not ReadOnly. Solved this problem by introducing 
		setHyperlinkNavigationEnabled()
	which alters the keysets to consume or ignore Ctrl-T and
	Ctrl-Shift-T. This stuff kicks in as soon as some exceptions
	appear so normally these keys go through. Since the keyset
	is shared had to create two sets.

	There are still a fair number of overall accelerator issues 
	that still remain but I"ll close this bug and reopen a new one.

issue 18733 (Output Window & NotifyException not accessible)
	One previous "fix" to this which wasn't really was the setting
	of the name.
	- Modified Term's accessible context to pass on name setting
	  to the Screen which is the component relevant to accessibility.
	- USe tab.getName() instead of getName() in OutTermPane.<init>.
	  Otherwise only null names were being passed.

	The big chunk of work here is the adding of AccessibleText to 
	Screen and all the various support code that's needed for this.
	All the issues (and there are quite a few) are discussed in
	the Javadoc comment for Term.getAccessibleContext().

	I've unit-tested a fair amount of this functionality, but since
	I don't have access to actual assistive technology on my Sun 
	box I have no clue if any of this is adequate.

	I have not yet been able to determine if anything and what needs to
	be done with the following:

	- Implement AccessibleState. JTextComponent doesn't do anything
	  special with it, so Term doesn't need to either right?

	- Implement AccessibleComponent. This one is strange since I can't
	  find any Swing components that implement it!

	- Term does scrolling, so it would seem like some parts of it
	  need to implement accessible roles of VIEW and SCROLLPANE, but
	  it's not yet clear to me how Assistive Technology would be getting
	  information about this.

issue 24460 (Actions "Next/Previous Error" are still enabled after first ... )
	I had chopped up checkNextPrevActions() too much.
	Redid it and it's much simpler now as well.

	Renamed checkNextPrevActions() to updateNextPrevActions() to bering it
	in line with other similar functions.

================================================================================
tag: ivan_14

issue 19156 (Not able to navigate to left/right in output window)
	Not just that but there is precious little keyboard navigation in
	Term. So this fix attempts to address as much as possible in
	the whole area of keyboard navigation. There are three rough areas:
	- Generic keyboard navigation
	- Error navigation
	- Selection via the keyboard.

	All new sequences are documented at the end of this section.

	OutputTabTerm has a private helper function oldBindings() which
	checks whether "-Doutput.oldbindings" was set and reverts to
	older behaviour.

	Generic keyboard navigation
	---------------------------
	Switched to a set of keyboard bindings that matches the JLF
	more closely. Moved the few that were implemented in
	OutputTabTerm to Term itself.

	Added Term.pageLeft(int n) and Term.pageRight(int n)

	While testing, ran into and fixed bugs in the horizontal
	scrolling mechanism whereas the cursor at the end of the line was
	not scrollable to ...
	- Term.possiblyHScroll() not uses the cursor position to extend
	  total buffer column size.
	- ColumnRight()'s limit check was incorrect causing bizarre
	  scrolling behaviour.

	Implemented the various bindings documented below.


	Error navigation
	----------------
	This area itself falls into several sub-parts ...
		- Treating errors as hyperlinks
		- "Whole" error hiliting
		- Hyperlink wrapping
		- Detecting of errors and utilisation of Term regions
		- Implementation issues and bwd compatibility.

    	NOTE: A lot of this work really should be done in ActiveTerm
	but I had to sort of exactly how OW does things before I could
	attempt to move the functionality down.

	Treating errors as hyperlinks
	.............................
	OW already tried to treat errors as hyperlinks so all I've done here
	is (almost) apply JLF rules of hyperlink navigation which are:

		- Links are traversed using Tab/Shift-Tab.
		- Links are activated using Space or Enter.
		- Traversed-to links are denoted using standard swing
		  selection feedback.

	There are a variety of inherent problems with these as well problems
	arising in the context of errors.

		- When showing and navigating java exception dump frames
		  the terminal is not in readonly mode so plain Tab, Enter
		  and Space are out of the question. Ctrl- versions are
		  used instead.

		- Tab and friends are also focus mgmt keys and it would all
		  work really well if we had not only focus next and prev 
		  idioms but also focus up and down idioms. Swing 1.4 is
		  anticipating this but the JLF spec seems to be lagging.
		  (See Component.setFocusTraversalKeys).
		  As it is Ctrl-Tab and Shift-Tab conflict with TabbedPane
		  and OW usurps them by hook and crook.

		- I don't like selection feedback to mark "current"
		  hyperlinks. If one selects elsewhere the location of the
		  current link gets lost.

		- There's no specification for denoting the currently
		  activated link.

	The whole things is also awkward for navigating compiler errors
	the way we're used to, so F12 and Shift-F12 still work like before.
	They just imply a next(prev) link combined with activation.

	"Whole" error hiliting
	......................
	Previously when navigating from one error you would get:
	a) A blue/underlined hyperlink like thing on one line.
	b) A grey character background for the whole error.

	Since we now use selection hilite to provide navgiation
	feedback, and since there's no accepted convention for denoting
	activated links, the grey background is used for denoting the
	currently activated hyperlink. NOTE: this is a short-term solution.

	(b) used to be ugly ... it used one per-character backgrounds
	and as a result had a staircasey look. Changed to full-line
	background colors. This neccessiated the addition of 
		Term.setRowGlyph()

	Hyperlink wrapping
	..................
	At the last (first) error a next (prev) action will have no effect
	but putting a message into the status bar, but one more action will
	cause the navigation wrap around to the first (last) error.
	This neccessiated the addition of 
		ActiveRegion.lastChild()
	to complement ActiveRegion.firstChild()


	Detecting of errors and utilisation of Term regions
	...................................................
	It also turned out that the way regions were created for compiler
	errors was very different from java exceptions. In the compilers
	case the boundries are know ahead of time and regions can be created.
	In the case of stack errors no regions are really created, the
	line is pattern-matched _after_ it's been sent to Term and an
	independent hit targeting scheme, based on the variable 'links', is
	used. So I switched this to on-the-fly pattern recognition with a
	small state machine. This way java exception hyperlinks are now
	treated more like regular errors and the whole 'links' mechanism
	can be eliminated in the future.

	As a result exception error navigation is a bit more predictable.

	This whole area is still waay too ad-hoc and brittle.


	Implementation issues and bwd compatibility
	...........................................
	Created a parallel set of variables and routines in OutputTabTerm
	to satisfy the new key bindings and semantics.

	old			new
	.....................................................
	nextPrevJump()		nextHyperlink | prevHyperlink
	changeCurrentregion()	gotoHyperlink()
				activateHyperlink()
	currentRegion		currentHyperlink

	oldBIndings() (mentioned above) plays it's biggest role here.

	The hardest part here was battling the focus manager for control
	over Tab, Ctrl-Tab, Shift-Tab. See the comments with the 
	heading "Dealing with focus traversal".



	Selection via the keyboard
	--------------------------
	This will be done later.



	Action			New binding		Old Binding	Where 
	--------------------------------------------------------------------
	Scroll line up		Ctrl-UpArrow (1)	UpArrow		Term
	Scroll line down	Ctrl-DownArrow (1)	DownArrow	Term

	Scroll page up		PageUp					Term
	Scroll page down	PageDown				Term

	Scroll view left	Ctrl-PageUp (1)				Term
	Scroll view right	Ctrl-PageDown (1)			Term

	Scroll column		# No good binding available

	Next hyperlink		Ctrl-Tab (2) (3) (5)	DownArrow	OW
	Prev hyperlink		Shift-Tab (4) (5)	UpArrow		OW
	Activate hyperlink	Ctrl-Enter|Ctrl-Space (3)
							Enter|Space	OW
	Activate hyperlink	Single-click (6)	Single|Double-Click
									OW+Term

	Next Error & Activate	F12 (5)			F12		OW
	Prev Error & Activate	Shift-F12 (5)		Shift-F12	OW

	(1) Conflicts with JLF TabbedPane accelerators.
	(2) The highlighted errors are best described as hyperlinks hence
	    the generic treatment.
	(3) The general rule is that if there's no textual input that 
	    Tab should be used, a Ctrl-Tab is for cases where we have 
	    textual input because there Tab is meaningful. However 
	    it's very hard for users of Netbeans to know when an output
	    window pane is in "readonly" mode, so we basically say
	    always use Ctrl-ed variations so you don't have to think about
	    it.
	(4) Technically Shift- is a direction reverser, so if the forward
	    direction is Ctrl-Tab then the bwd direction should be 
	    Ctrl-Shift-Tab ... except that youhave to have fingers of a
	    Martian to be able to do that, so I've stuck to Shift-Tab.
	(5) If you reach the last (first) link/error next (prev) will
	    not work on the first try and will put out a message in the 
	    status bar. One more will cause a wrap then.
	(6) The original implementation was very confused about single vs
	    double click. So much so that I couldn't characterise it.
	    for example buld errors were navigable with a single click,
	    while exception errors had to be double-clicked.

issue 18733 (Output Window & NotifyException not accessible)
	Phase-I:

	Term is accessible with role PANEL. It's just a generic container.

	ScrollWrapper is accessible with role PANEL. It is just a wrapper
	around the horizontal scrollbar to help in it's placement.

	Screen is accessible with role SWING_COMPONENT.
	It should by rights be TEXT but it's very tricky to implement 
	one dimensional caret coordinates in a 2D text widget. So, that's
	for later.

	These "fixes" deal with the accessibility issue only very
	superficially. That is, all JComponents that go into Term implement
	Accessible and return a description and a reasonable, but
	not neccessarily useful, role.

	More needs to be done if these components are to be actually usable.
	- Screen needs to implement AccessibleText. 
	- Term combines a scrollview and a view into one widget while Swing
	  accessibility expects these to be independent. I"m not sure how to
	  address this. One way would be to create dummy widgets that declare
	  the roles SCROLL_PANE and VIEW just so they can work
	  with accessibility.

nobugid (OutputTabTerm timer was never really effective)
	While working on error/hyperlink navigation I noticed that 
	Term's refreshEnabled property was always on. This in effect makes
	the whole timer approach introduced by rmatous not work.
	
	The way that was supposed to work is:
		1) issue Term.setRefreshEnabled(false)
		2) process and send chars to term and trigger timer
		3) when timer fires cause a repaint.
	It looks like though that step (1) was never done.
	
	This is extremely puzzling since at the time (cvs log)
		rmatous turned on timer on 2001/09/03
	there was ample proof that the timer helped. My suspicion is that
	at around the same time, this happenned:
		rmatous fixed CopyMaker on 2001/08/28 13:09:12
	so Term gets buffered input and the improvement was attributed
	to the wrong fix.

	In any case I've introduced step (1) and measured an increase in
	speed.

	Also, the code in repaintTimer() where the refreshEnabled property
	gets saved, set and restored is all redundant, since the earlier
	call to flush() does all this anyway.
	
================================================================================
tag: ivan_13

- performance - reduce Interp footprint
	This was based on an observation made by Tor that each Interp
	ends up creating redundant copies of it's tste tables.

	All Interps now have a static inner class InterpType which
	owns the state transition tables and defines the actions..
	Multiple instances of Interps of the same type share InterpTypes.

	Since the state transition actions are now implemented in the
	InterpType, they need to receive an instance of an Interp whose state
	they will be modifying. This is passed as an AbstractInterp.
	Occasionally the passed-in interp has to be cast to the appropriate 
	subclass of AbstractInterp.

	In order to reduce the number of these casts moved number parsing mgmt
	from InterpANSI to AbstractInterp.

	Some Interp subclasses achieved their means by modifying their
	state vectors! Since the vectors are now shared that won't do, so a
	more appropriate state stack was introduced into InterpDumb.
	The stack is cleared in reset().

	Files:
	AbstractInterp.java
	InterpANSI.java
	InterpDtTerm.java
	InterpDumb.java


- performance - user cheaper Interps by default.
	Jesse (I think) pointed out that NB in general has no use for 
	ANSI emulation, and that Term should by default use a "dumb" terminal.
	This should reduce the # of classes that get loaded in.
	This happens in the initialization of 'private Term.interp'.

- I18N
	This addresses the following issues:

	15333 Cursor isn't on end of text after using CTRL+C [V, ...]
	19570 I18N - The characters of the error message are overlaped.

	Basically Term can now properly handle non-latin characters, like
	Japanese. These issues were realy only the tip of the iceberg. Term
	did not really work with japanese until now.
	The following work:
		- Proper cursor position.
		- Proper handling of line wrapping and backspacing over it
		  (for when horizontallyScrollable is false). This is important
		  for the proper working of Solaris 'vi' in the ja locale.
		- Sane reaction to ANSI terminal control escapes.
		- Selection works.
		- Active regions work.
		- Backspace, TAB etc. work.

	There are two big parts to this

	- Rendering characters in grid/cellular fashion.

	  The book 
		Creating Worldwide software (second edition) (Prentice Hall)
		Tuthill & Smallberg
	  discusses (on p98) how some characters might be double width and
	  presents 'wcswidth(3)' and 'wcwidth(3)' to return the _display_
	  width of a given character. The underlying assumption here is that 
	  fixed width fonts are actually quantized width fonts.

	  This doesn't seem to be the case for Java fonts. For example the
	  default ja font I get has 7pixel wide latin characters and 
	  12 pixel wide japanese characters. What to do?

	  Write our own 'wcwidth' that uses Font.charWidth() and rounds it up
	  to a multiple of the width of the latin char sub-set.

	  But that's not enough. Graphics.drawString() will still advance
	  each glyph by the original width of the font, not our rounded-up
	  value. One solution is then to use a drawString() per character.
	  The adopted solution is instead to use GlyphVector's and
	  Graphics2d.drawGlyphVector() as used in Term.myDrawChars() and
	  Term.massage_glyphs(). Despite the hairiness of the code there
	  it turns out to be faster than a drawString() per char by
	  a good margin.

	- Accounting for the difference in Buffer vs Screen coordinates.
	  (A reading of the main javadoc comment for class Term would
	  help understand the rest of this).

	  So now we have a situation where a Line holds characters whose
	  positions are not neccessarily in a 1-1 correspondence with their
	  cell positions. Mappings are provided in both directions via 
	  Line.bufToCell() and Line.cellToBuf(). They are used in the existing
	  buffer to view coordinate xform functions (which for example map
	  a screen position to a character for the purpose of selection).
	  A variety of other locations had to be adjusted to use these for
	  proper operation. The driving algorithm for choosing what needs
	  attention was occurances of st.cursor.col since the cursor 
	  is in cell coordinates.

	  These function aren't "cheap" because they count from the beginning
	  of the line. Cacheing the values is impractical for the following
	  reasons:
		- You need to cache each mapping since they are used with equal
		  frequency.
		- Because Term allows horizontal scrolling a line can 
		  potentially be very long. The index into a line therefore 
		  will range from 0 to Integer.MAX_VALUE. This means
		  a cache of short's won't do.
		- So now we're talking a fair amount of memory that is 
		  probably not justifiable unless we come up with a way to
		  quickly dispose of the caches. Cache invalidation is
		  always a tricky problem, but I found out something else.
		  For a while I installed a wcwidth() cache per line (In
		  retrospect having wcwidth() manage the cache of course
		  made a lot more sense) but along the way I discovered
		  that the per-line cache gets invalidated quite often.
		  In effect the cache wouldn't have been helpful.
	  There are some pattern that could use improvement, a bufToCell
	  immediately followed by a cellToBuf, or a bufToCell(x) followed
	  by bufToCell(x+n). These could be collapsed into specialized
	  functions.

	Some neccesssary fallout from all of this ...

	- MyFontMetrics.wcwidth() is expensive given the number of times it
	  gets called so the resultant width is cached. The cache is indexed
	  by the char so is naturally Character.MAX_VALUE big. Not a big
	  chunk of memory in the big scheme of things but it can add up if you
	  have many Term instances. So there's a pool of them indexed by 
	  FontMetrics. It's unfortunately trickier than you'd think. 
	  See the opening comment in class MyFontMetrics for more info.

	- LineDiscipline had to be adjusted to do something reasonable
	  with backspaces in line buffered mode. There's a big comment in
	  LineDiscipline.sendChar(). 
	  To do this it reuires to have a back-pointer to the Term so
	  we now have StreamTerm.setTerm() which is used in 
	  Term.pushStream().

	- Dealing with double-width is expensive so we don't want to
	  compromise speed in 8-bit locales.

	  One way to deal with this is to query the "file.encoding"
	  property but I found that it's value is very variable from
	  Java release to Java release and probably from platform to
	  platform. In 1.4 class Charset is supposed to deal with this
	  but we're not ready for that switch yet.

	  What I opted for is having MyFontMetrics.wcwidth check for
	  variation from an initial width and set a flag (multiCell) 
	  on the first deviation. Various parts of the code then check
	  MyFontMetrics.isMultiCell(). So, for example, the painting code
	  now instead of calling Graphics.drawChars() will call 
	  Term.myDrawChars() which will based on this flag do the expensive
	  or the cheap thing.

	A note on ANSI emulation vs double-width characters.
	The ANSI standard doesn't talk abut double-width characters! So
	dealing with them is AFAIK up to individual vendors. I've
	followed Solaris'es DtTerm behaviour and spent a fair amount of
	time making sure that Solaris vi (which can excellently edit
	wide-char files under DtTerm) works under Term.

- bug: <noid> Junk characters inserted on character insert.
	Occasionally when charactes are shuffled in the Buffer, usually
	under vi, junk (usually 0) characters gets inserted into the
	Buffer instead of ' ' (ASCII SP)'s. These show up as "squares".
	Fixed in Line.insertCharAt(), Line.setCharAt() and
	Line.clearToEndFrom()

	Prior to JDK 1.4 ascii 0 was rendered by Swing as a blank.
	But under 1.4 this problem is a whole lot more visible.

- bug: <noid> Pathologically slow horizontal scrolling on long lines
	Was attempting to render all characters even those that are
	not in view. Fixed in Term.paint_line_new().

- bug: <noid> Cursor gets drawn on the glyph gutter on horizontal scroll.
	Fixed by adding an additional check in paint_cursor();

- deprecated: Term.goTo(Coord)
	Use Term.setCursorCoord(Coord) which matches getCursorCoord().

- Misc:
	public->private
		Buffer.visible_cols
	+	Buffer.visibleCols()
	+	StreamTerm.BUFSZ	(instead of hard-coded 1024)
	+ 	collection of statistics on linefeeds
	-	Term.paint_line_old()	// dead code
	+	Term.charWidth(char)	// See section above on I18N.



================================================================================
tag: release33

- accessibility
	Term now implements Accessible and returns an accessible context.
	The "accessible description" is set.
	The "accessible name" is set from OW to be the same as the tab name.

- performance
	- Added Term.setKeyStrokeSet() in order to allow sharing of,
	  sometimes large, sets.
	  Added code to OW to take advantage of this.
	  See 'updateKeyStrokeSet()' and 'getCommonKeyStrokeSet()'.
	  This code also tracks changes to the global keymap so that Term will
	  now pass through newly added keyboard accelerators.

================================================================================
back to main 3.3. trunk

- bug: <noid> Missing ANSI escape sequence handling:
	- ESC [ 4 h     set insert/overstrike mode
	- ESC [ 4 l	reset insert/overstrike mode
	- ESC [ 4; 17 r	margin control (used by vim for sub-windows)
	- ESC c		full reset
	- ESC [ ! p	soft reset
	- ESC [ <n> n	status report. (used by unix command 'resize')
			This also required cursor positioning ('H') to clip
			as opposed to ignore out of bounds row and
			column settings.

- bug: <noid> Exception when running "xemacs -nw" under pty-based Term
	xemacs has a propensity to send cursor motion directives with
	rows that exceed the boundaries and the checks in Ops.op_cm()
	were inadequate.

- issue 16010 (Autoscrolling behavior of terminal not ideal)
	Added a new properties
		boolean scrollOnOutput
		boolean trackCursor
	to complement the existing scrollOnInput.
	When 'scrollOnOutput' is set to 'false', you can use the
	scrollbar to look at some text higher up w/o it moving from
	underneath you as more output is produced.

	This feasture is "smart" in the sense that if the cursor is visible
	(i.e. the user hasn't scrolled away from the cursor) Term will
	scroll to track the cursor even if scrollOnOutput is set to false.

	However the smarts only kick in if 'trackCursor' is set to true.

	Adjsuted in netbeans/core/output/OutputTabTerm.java as well by adding
	term.setScrollOnOutput( false ) etc.

- new: added the following under CVS control:
	ReleaseNotes.ivan.txt
			This file.
	build.xml	For localized builds
	properties.html	Used by func_spec.html
	interpreter.html
			Used by func_spec.html
	func_spec.html	Evolution from proposal.3.html
	proposal.3.html	Original proposal as it appeared on the NB site.

================================================================================
tag: term_aug2001_ivan_12

- optimization
  Text with attributes (fg color, bg color, underline, active, etc) used
  to be rendered one character at a time and rather slowly.
  Switched to run-length based rendering where runs of characters
  with identical attributes are rendered together.
  Depending on the density of attributed text this has produced a *2 to
  *10 speedup in view painting.

  The function implementing this is Term.paint_line_new(). paint_line_old()
  has been kept around just in case.

================================================================================
tag: term_aug2001_ivan_11

- bug http://openide.netbeans.org/issues/show_bug.cgi?id=16027:
  Missing/awkward selection access functionality
    + public void paste()
    + public void copy()
    + property selectionExtent is now bound and fireProprtyChanged() is issued
      when selection changes.

- bug http://openide.netbeans.org/issues/show_bug.cgi?id=15953
  Exceptions when resized on selection.
  Fixed by adjusting selection in Term.adjust_lines.
  This is a stop-gap fix. All the selection adjustment code that uses
  Sel.intersection should be moved into Buffer methods.

- BG line stripe support (Term.setGlyph())
	- Eliminated interference between BG line strips and selection.
	  Did this by drawing the BG stripes before the selection in
	  Term.do_paint().
	- The stripes were being drawn in the gutters which made it look
	  funny. Now they're being draw only in the text area.

- bug <noid>
  BG color of characters would override Swing style selection.
  Fixed by having paint_line() not bother with BG rectangles if 
  the character falls into a selection and always set the character FG 
  color to the default fg.
  Added Extent.intersects(int, int) to help with this.

- bug <noid>
  From Ales and NB testers:
	> 1. When you run following simple program:
	>   public class Out {
	>       public static void main (String args[]) {        
	>           System.out.println("123");        
	>       }
	>   }
	> 
	>   and then you try to select more lines in OW, it looks strange. 
	>   - selection area ended somewhere in the middle of OW width
	>   - when you go (by selecting) behind OW right bound, squares will
	>     displayed in start of line (see squares.gif)
	>   - when you run this program second time, everything looks fine
	> 

	Reproduced and fixed.
	There are two parts to the problem:
	1) The selection is halfway through. 
	2) When you select and drag _out_ of the window you get the funny view.
	In both cases it had to do with (different) variables going below 0.
	Now, after a resize, line selection should extend all the way 
	and the drag right should work right.

- bug <noid>
  From Ales and NB testers:
	> 2. Sometimes (when playing with selection) we got NPE in 
	>   Term$Scroller.extend method, on 1125 line
	>   I found out, that sel.sel_extent is null from some reason
	> 

	This will happen if the selection "vanishes" while auto-scrolling
	is on. The way I reproduced it was by having a program trickle
	out a line of junk , once per second, then while it's running
	and scrolling select some test and drag up and out of the OW
	thereby starting the auto-scroller thread. Eventually the selection
	will go out of buffer history (If you have a short history or no
	anchors) and I got the same exception.

	I fixed it in Term.Scroller.extend() by checking for a null selection
	extent. That whole block of code is synchronized with Term.this
	which is the main lock for everything.

- Eliminated lots of OLD code.

================================================================================
tag: term_aug2001_ivan_10

+ Term.columnLeft(int n)
+ Term.columnRight(int n)
  These are analogs of lineUp/lineDown() for horizontal scrolling.

- auto-scrolling of dragged selections now works for both directions.
- auto-horizontal-scrolling to keep cursor in view. Only on input.
  This is tricky since because of non-local echoing the cursor position
  is not known on a keystroke. See comment above hscrollReset() for a
  detailed explanation of the design.

- bug <noid>
  Attributed text would not get rendered correctly on horizontal scroll.
  Fixed.

================================================================================
tag: term_aug2001_ivan_9

+ Horizontal scrollbars. Use
  	Term.setHorizontallyScrollable(boolean)
  to enable/disable it.
  Still needs auto scrolling and probably some other smarts.

================================================================================
tag: term_aug2001_ivan_8

- Sprinkled NOI18N's all over.
- Commented out debugging println's

================================================================================
tag: term_aug2001_ivan_7

- bug 15365 (View does't folow cursor - when writing)
  Fixed by adding a boolean property scrollOnInput() which by default is set
  to true.

- Added boolean property readOnly. When true, keystroke events and paste's
  are ignored.

================================================================================
tag: term_aug2001_ivan_6

+ Term.pageUp(int n)
+ Term.pageDown(int n)
+ Term.lineUp(int n)
+ Term.lineDown(int n)
	Scroll the view 'n' pages/lines up/down.
	Doing key bindings for these is up to the Term client.

- Implemented selection auto-scrolling for when mouse pointer moves out of
  the view. This is based on feedback from Chris Ledantec on nbui.

- Implemented SHIFT-left-click as a selection extension mechanism, per JLF.
  Actually it is slightly off in that it implements extension (what 
  you get when you drag) not addition semantics.

- bug: Term.possiblyNormalize() would occasionally cause a null Line exception.
  Fixed.

- bug: Tab expansion add's a '\0' into the buffer. On Windows this shows up 
  as as the Microsoft "unprintable character" square.
  Easily fixed in Term.OpsImpl.op_tab() by switching the ' ' character
  addition and the st.cursor.col++;

================================================================================
tag: term_aug2001_ivan_5

- bug: The common "null Line" bug fixed. Turns out I was using
  "synchronized(this)" in an inner class of Term.

- bug: minor bugs having to do with null'ed selections fixed. I think
  these only surfaced when I implemented absolute coordinates.

- Absolute Coordinates are in.
  What this means is that you no longer need to anchor text in order for
  Regions to work.

  The way this is accomplished is by having each line get an ever growing
  number and have Coord and ActiveRegions use these numbers for rows.

  implementation details:
  ----------------------
  To separate such "absolute" coordinates from the original buffer coordinates,
  instroduced package private class BCoord. Coord and BCoord can can be
  converted to each other. The conversion is based on 'Term.firsta' which
  is the absolute line number of the first line in thebufer. Just like
  Term.st.firstx is the buffer coordinate of the first line visible in
  the view.

  Similarly a BExtent was provided in parallel with Extent.

  Serious attention was payed to the possibility of 'firsta' wrapping around
  it's 32bit range. Ideally this could be dealt with by using unsigned numbers
  and modulo arithmetic, but Java doesn't have unsigned. Instead the variable
  is explicitly checked against Term.modulo = Integer.MAX_VALUE/2.
  The 2 is for good measure. Term.modulo can be artificially reduced to a
  small number in order to verify that selection and ActiveRegion relocation
  works correctly.

  ActiveRegions that go out of history periodically get culled.
  This is controlled using Term.cull_frequency.

- debugging aids:
  - Added a "debug gutter" Which can be used to print out view, buffer
    or absolute row coordinates.
  - Added Buffer.lock and Buffer.ck_lock() which helped me find race
    conditions. The code is commented out.

================================================================================
tag: term_aug2001_ivan_4

- preparatory work for processing of ANSI escape sequence
	ESC [ <m> ; <n> r

================================================================================
tag: term_aug2001_ivan_3

- bug: ActiveRegion.setSelectable(boolean) always set property to true. Fixed.
- bug: After the flush cleanup in term_aug2001_ivan_2 LineDispcipline's 
  eches of characters wouldn't show up until after a newline if
  the refreshEnabled property was off. Fixed by adding additional flushes.

+ Term.requestFocus() ... was missing. Added.

+ ActiveTerm.cancelRegion().
  This is supposed to help with hiliting regions that are detected only after
  the fact .. that is you aggressively call beginRegion(), like at the 
  beginning of a line, and if at the end of the line it turns out not to
  be useful you can cancel it.

================================================================================
tag: term_aug2001_ivan_2

- Fixed a bug where the Sun Copy key wouldn't copy things.

+ Term.flush(), TermStream.flush()
  See JavaDoc for Term.flush() for more info.

- Internal change to repaint(). 
  Term.repaint() used to always check the refreshEnabled attribute, which
  would cause things like scrolling or attribute changes not take
  immediate effect. So now we have possibly_repaint() which checks the 
  attribute and repaint() which doesn't.
  Only putChar() and putChars() use possibly_repaint().
  Made repaint() and possibly_repaint() be protected.


================================================================================
tag: term_aug2001_ivan_1

- AbstractInterp, InterpDumb, InterpANSI made public

- class ActiveTerm now inherits from class StreamTerm instead of class Term

+ ActiveRegion ActiveRegion.firstChild()
+ ActiveRegion ActiveRegion.getNextSibling()
+ ActiveRegion ActiveRegion.getPreviousSibling()

  To be used as follows:
	ActiveTerm at;
	r = at.regionManager().root().firstChild();
	r = r.getNextSibling()
	...
  You should be able to use Regions instead of Coords to index actions (see
  OutputTabTerm.<init>, new ActiveTermListener.

+ int Ops.op_get_width()
+ int Ops.op_get_column()

  To help with formatting and wrapping text in a Term

- The OutputStream 'pin'  parameter to StreamTerm.connect() is now optional.
  This makes sense for output only situations.

+ void Term.setTabSize(int tab_size)
+ int Term.getTabSize()
  Per NB folks' request.
  You should be able to get rid of expandTabs() in
  org/netbeans/core/output/OutputTabTerm.java.