[error] ExtensionManager: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 379
[error] ExtensionManager:  at org.gjt.sp.jedit.Buffer.getLineOfOffset(Buffer.java:892)
[error] ExtensionManager:  at errorlist.DefaultErrorSource$DefaultError.getLineNumber(DefaultErrorSource.java:510)
[error] ExtensionManager:  at errorlist.DefaultErrorSource.findError(DefaultErrorSource.java:330)
[error] ExtensionManager:  at errorlist.DefaultErrorSource.getLineErrors(DefaultErrorSource.java:134)
[error] ExtensionManager:  at errorlist.ErrorHighlight.paintValidLine(ErrorHighlight.java:53)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaExtension.paintScreenLineRange(TextAreaExtension.java:70)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:146)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:106)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaPainter.paint(TextAreaPainter.java:699)

[error] ExtensionManager: java.lang.NullPointerException
[error] ExtensionManager:  at org.gjt.sp.jedit.Buffer.markTokens(Buffer.java:2161)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ChunkCache.lineToChunkList(ChunkCache.java:760)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ChunkCache.updateChunksUpTo(ChunkCache.java:635)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ChunkCache.getLineInfo(ChunkCache.java:244)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaPainter$PaintText.paintValidLine(TextAreaPainter.java:1039)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaExtension.paintScreenLineRange(TextAreaExtension.java:70)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:146)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:106)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaPainter.paint(TextAreaPainter.java:699)


TO DO

absolute path completion

does not indent properly:

1000 [
    [
        [
            [
                50000 cons-a-lot
            ] 4 10 make-trash
        ] 4 10 make-trash
    ] 4 10 make-trash 0 swap [ [ + ] when* ] tree-each drop
] times

Note that this is not a complete to do list. It mostly only lists bugs
and quirks that I need to fix eventually.

splitting messes up last physical line in the newly created text area

console: cd / repeatedly on windows

ok [error] ExtensionManager: java.lang.NullPointerException
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.StructureMatcher$Highlight.getOffsets(StructureMatcher.java:181)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.StructureMatcher$Highlight.paintHighlight(StructureMatcher.java:207)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.StructureMatcher$Highlight.paintValidLine(StructureMatcher.java:147)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaExtension.paintScreenLineRange(TextAreaExtension.java:70)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:146)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.ExtensionManager.paintScreenLineRange(ExtensionManager.java:106)
[error] ExtensionManager:  at org.gjt.sp.jedit.textarea.TextAreaPainter.paint(TextAreaPainter.java:699)

+ text area:

  - click&drag breaks fast scroll
  - format: doesn't wrap right if selection starts in the middle of the
    line
  - ruleset importing trick
  - expand fold: try to expand even if already expanded
  - backspace with virtual caret: needs tweaks
  - independent text area component
    - gutter: has a depenency on View to do focus highlight, and Marker
    - text area: depends on view for input handling,
      smart home/end macro record, showing dialog boxes, abbrevs
    - mouse handler: registers
    - text area transfer handler: opening files dependency
  - new file: explicit folding: type {{{: fold marker doesn't appear
  - finish code to hide caret on user input; enter/backspace is a problem
    maybe listen for KeyTyped instead
  - indent folding: fold marker not always updated
  - format: preserve comment chars at start
  - tabs to spaces with rect select
  - input methods
  - remove-marker, select-next/prev-marker/bracket
  - format -- instead of \n\n, what if it has \n   \n?
  - DnD still dosn't work as expected when draging from the same buffer,
  but differen text area (for example droping at the position where drag
  was started erases text)- no support for vertical pasting
  - anoying cursor blinking (responsible for this is scrolling option :
  textArea.moveCaretPosition(pos,JEditTextArea.ELECTRIC_SCROLL) in
  dragOver() method)

+ auto indent:

  - ? : do not unindent
  - deep indent
  - Common Lisp &body forms
  - pressing enter: carry over * from prev line in javadoc
  - javadoc indent: if prev line was /* or *, unindent if prev line is
  */
  if(foo)
    while(bar)
    {
      //
    }
  <--- cursor here
  - option to disable electric keys
  - unindentThisAndFollowing
  - indent & syntax tokens

+ vfs browser:

  - test keyboard completion with expanded/collapsed tree
  - test keyboard completion with high latency VFS
  - fsb default size
  - don't show 'new directory' in favorites:
  - file system browser column widths are not saved
  
+ misc:

  - kill ring still being reversed
  - jEdit.checkBufferStatus() fucks with split panes
  
  - there is a comment in browser.actions.xml:
  /* NOTE: I do NOT want plugins creating check box menu items
   * in jEdit 4.2! The API is not stable, note the _comp hack...
   * in 4.3 I will finish the full action API refactoring and
   * IS_SELECTED blocks in browser actions will have access to
   * the browser variable just like the CODE block above.
   *
   * Love, Slava */

  - option to disable buffer local properties
  - CA+PLUS +: bad
  - jedit -encoding
  - goToBuffer() -- if any parent has zero height or zero width...
  - deferred loading API for macro handlers
  - S+INS, etc in swing controls
  - vfs: a way of running awt requests not all at end
  - wrapped dock buttons broken

+ beanshell:

  ; after else if()
  longs not read correctly if prefixed with 0x

+ docs:

- vfs browser changes
- auto indent
- save help index
- document optional dependencies
- deferred loading mention.
- addCommandPath()
- API thread safety
- add note to documentation about exponential-time regexps
- document deep indent
- note about dependencies
- plugin tutorial:
  - plugin build environment docs
  - auto-created actions
  - link to jEdit devel page
  - quicknotepad class -- links to API docs
  - functions - links to API docs
  - quicknotepad docs
- plugin tips and techniques:
  - common. properties, using properties for UI strings
  - cutting down on startup time
  - canned dialog boxes in GUIUtilities
  - tools.jar
  - string comparison in MiscUtilities
  - writing a macro handler
  - writing a fold handler
  - OperatingSystem class
  - option groups
  - listening for buffer changes
  - canned controls:
    animated icon, color well button, enhanced dialog,
    font selector, history text field, 
    jcheckboxlist, rolloverbutton,
    variablegridlayout
  - displaying a help viewer
  - canned icons
  - vfs implementation
  - running stuff in i/o threads
  - multi-threaded i/o
  - jeditresource: protocol
  - getting line syntax info, textutilities.getTokenAtOffset()
  - text area extensions
  - text area caret & scroll listeners
  - status bar messages & readNextChar()
- vfs javadoc: invokeAndWait() example for createVFSSession()

check tips of the day
- help:
  - titles in search are fucked
- sidebars: need a border or some sort

[error] WorkThread: java.lang.ClassCastException
[error] WorkThread:  at archive.ArchiveVFS.getDirectories(Unknown Source)
[error] WorkThread:  at archive.ArchiveVFS.cacheDirectories(Unknown Source)
[error] WorkThread:  at archive.ArchiveVFS._listDirectory(Unknown Source)
[error] WorkThread:  at org.gjt.sp.jedit.browser.BrowserIORequest.listDirectory(BrowserIORequest.java:159)
[error] WorkThread:  at org.gjt.sp.jedit.browser.BrowserIORequest.run(BrowserIORequest.java:90)
[error] WorkThread:  at org.gjt.sp.util.WorkThread.doRequest(WorkThread.java:194)
[error] WorkThread:  at org.gjt.sp.util.WorkThread.doRequests(WorkThread.java:161)
[error] WorkThread:  at org.gjt.sp.util.WorkThread.run(WorkThread.java:135)

[error] ChunkCache: BUG: skew=1,out.size()=0
[error] ChunkCache: BUG: skew=1,out.size()=1

- C+d & killring
- plugin mgr inspection of not-loaded plugins
- history text field tweak

+ obscure:

- no need to wait for requests after newFile()
- class loading problems
- motif l&f: shortcuts in menu items
- some JLists do not auto-scroll on keystroke
- how to handle S+0-9?
- invoking action bar command twice
- backup time distance setting
- if A depends on B but A is loaded before B and B breaks, A ends up
  being loaded. Solution: load plugins in order of dependencies?

+ performance:

- 7000 line lisp file: window resize is slow
- closing lots of files is slow -- esp. with close all dialog box!
- menu drag: slow
- bracket matching: no delay for current line match??
- final optimization for OffsetManager: scan to zero or scan to end
- do buffer load AWT half immediately after work thread half
- replace all in a directory could be faster
- buffer.setMode() slow
- eliminate redundant scans and events when loading buffer
- don't repaint whole selection when resizing
- could make non-soft wrap chunk merge even faster!
- syntax SPAN::END substitution: String --> char[] --> String
- is getScreenLineOfOffset() called often?
- if caret is at the end of a buffer when doing a replace all, a lot of
  repaint() and getLineOfOffset() calls are made
- optimize for no folding & no soft wrap case:
  - reset() and changed() don't need to scan
  - scroll/physUp/Down() simpler
- inserting lines repaints whole text area
- see if getLineOfOffset() can be optimized
- optimize 1 long line case
- two repaints in line insert
- redundant calls to recalculateLastPhysicalLines()/updateScrollBars()
- redundant updateChunksUpTo() calls

jEdit buffer local properties:
:wrap=hard:maxLineLen=72:indentSize=2:
