Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Impressum ReleaseNotes.ivan.txt   Interaktion und
PortierbarkeitText

 
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)
--> --------------------

--> maximum size reached

--> --------------------

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.299Bemerkung:  Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge