TO DO

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

goToBuffer() and 0-height edit panes
check tips of the day
- document optional dependencies
- 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)

- drag and drop, not at caret position?
- sidekick out of memory error!
[error] ChunkCache: BUG: skew=1,out.size()=0
[error] ChunkCache: BUG: skew=1,out.size()=1

[error] EditBus: java.lang.ArrayIndexOutOfBoundsException: 1
[error] EditBus:  at org.gjt.sp.jedit.buffer.LineManager.isScreenLineCountValid(LineManager.java:145)
[error] EditBus:  at org.gjt.sp.jedit.textarea.DisplayManager.getScreenLineCount(DisplayManager.java:223)
[error] EditBus:  at org.gjt.sp.jedit.textarea.DisplayManager$ScrollLineCount.reset(DisplayManager.java:1098)
[error] EditBus:  at org.gjt.sp.jedit.textarea.DisplayManager._notifyScreenLineChanges(DisplayManager.java:650)
[error] EditBus:  at org.gjt.sp.jedit.textarea.JEditTextArea.propertiesChanged(JEditTextArea.java:4968)
[error] EditBus:  at org.gjt.sp.jedit.EditPane.handleBufferUpdate(EditPane.java:667)
[error] EditBus:  at org.gjt.sp.jedit.EditPane.handleMessage(EditPane.java:317)
[error] EditBus:  at org.gjt.sp.jedit.EditBus.send(EditBus.java:148)
[error] EditBus:  at org.gjt.sp.jedit.Buffer.propertiesChanged(Buffer.java:1530)
[error] EditBus:  at org.gjt.sp.jedit.Buffer.setMode(Buffer.java:2025)
[error] EditBus:  at org.gjt.sp.jedit.Buffer.setMode(Buffer.java:2058)
[error] EditBus:  at org.gjt.sp.jedit.Buffer.finishLoading(Buffer.java:3866)
[error] EditBus:  at org.gjt.sp.jedit.Buffer.access$800(Buffer.java:71)
[error] EditBus:  at org.gjt.sp.jedit.Buffer$1.run(Buffer.java:280)
[error] EditBus:  at org.gjt.sp.util.WorkThreadPool.doAWTRequest(WorkThreadPool.java:392)

- SLASH -vs- / shortcut issue
- wrapped dock buttons broken
- VFS browser pathsEqual(): case sensitivity!
- 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)
- C+d & killring
- jEdit.checkBufferStatus() fucks with split panes
- complete word not wide enough
- test keyboard completion with expanded/collapsed tree
- test keyboard completion with high latency VFS
- option to disable context menu
- plugin mgr inspection of not-loaded plugins
- history text field tweak
- tall caret and tab
- printing: check default printer setting
- fsb default size

+ docs:

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

+ obscure:

- bsh bugs:
  ; after else if()
  longs not read correctly if prefixed with 0x
- 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
- C+b -- click -- keys don't work
- how to handle S+0-9?
- clean up VFSManager.errorOccurred() -vs- BufferIORequest.ERROR_OCCURRED
- auto indent: don't de-indent on enter if no leading indent at all?
- remove-marker, select-next/prev-marker/bracket
- gzip & unicode, or gzip & <?xml encoding...
- new macro handler api
- 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?
- expand fold: try to expand even if already expanded
- format -- instead of \n\n, what if it has \n   \n?
- C+ENTER 3 C+2
- tall caret and tab
- don't show 'new directory' in favorites:
- auto indent:
  if(foo)
    while(bar)
    {
      //
    }
  <--- cursor here

+ performance:

- 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
- make vfs listing faster
- 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:
