CodeEdit Specifications (last updated: 28/12/07 19:33 UTC)

Breaking news: Emacs.Net.

Go to first new post Something Awful Thread

A significant number of programmers are generally dissatisfied with the current status of text editors.  Text editors available do not have features required, are too hard to configure, take too long to load, and/or cost too much money.  This is a problem that can be resolved by providing an excellent, free, extensible text editor.

The choice of language is currently under discussion.  The two major contendors are C# and C++.  C# would probably be the easiest to code and debug in; C++ would offer more extensibility options and would load more quickly.  How much load time improvement is questionable, as the .NET CLR does some optimations for repeating loading of .NET assemblies.

Interested developers:

Below is a feature list.  The list has been split into categories.  In order to be most efficient in specifying which item you are referencing, please refer to items like this: "What does 'regular' mean in I.1.a?" The idea of the list is that the first version will contain most of the core features in some form or another. Some items might need switching between the main categories.

Expand all   |   Contract all
  1. Core Features
    1. configuration
      1. all contained in human-readable format (XML?)
      2. could depend on file extension (and could be overriden on a per-file basis)
      3. changes can be made with GUI or by command line
      4. almost any option can be turned off/on easily
    2. text selection
      1. 'regular' selection
      2. block selection
      3. multiple selections
    3. undo/redo
      1. extensive undo/redo capabilities
      2. perhaps extensive enough to store all undos and redos, so that if one redos, then does a different action, one could undo, then choose the redo path
      3. save undo/redo history to a file so that the entire history of a document can be recorded, perhaps down to the keystroke
      4. option to, when undoing, undo the entire word, or letter at a time (could depend on time intervals)
      5. option to control what gets stored in the undo buffer
      6. undo/redo on cursor position and text selections
      7. option to set points in undo/redo history, like version history on steroids
      8. perhaps store a tree of undo's, so original text->undo->type new text can be restored to original text
      9. makes generating diff's easy if file was created and always updated with this editor
      10. could store userid for each undo entry, making collaboration easy and inherently trackable
    4. auto-selection
      1. define what constitutes a 'word'
      2. could treat strings as words when cursor is on an outside-boundary of the string
      3. automatically selects/most cursor past/deletes one word
      4. turn feature on and off
    5. find/replace
      1. within selection, 'block' (syntax defined), file, open files, directory
      2. don't search comments (syntax defined)
      3. don't search strings (also syntax defined)
      4. regular expressions (natively .NET, but option to convert syntax from other regex versions)
      5. type ahead find (match the string currently being typed)
      6. flag matches with bookmarks
      1. per-line or per-text basis
      2. persist to file
    7. keyboard mapping
      1. completely customizable
      2. provide several standard mappings ('Windows', vim, emacs, etc.)
      3. option to repeat the next command multiple times
    8. view whitespace
      1. spaces, carriage returns, linefeeds
    9. splitting
      1. vertical and/or horizontal (so up to 4 'panes')
    10. macros
      1. very customizable, perhaps with using a scripting language
    11. auto save
      1. options to save periodically, perhaps with some number of backups
    12. command line
      1. command line that has all the capabilities of the GUI
    13. plugin API
      1. allows for the creation of all sorts of new features which would otherwise contribute to 'feature bloat'
    14. color schemes
      1. fully customizable
      2. contained in separate files for easy sharing
    15. case changing
      1. reverse
      2. upper
      3. lower
      4. title
    16. vertical line(s)
      1. for example, at the 80-character mark
    17. highlight current line
      1. can this be any more self-explanatory?
    18. navigation
      1. when navigating vertically with keys, remember where cursor was (can be turned off)
      2. holding down meta key+arrow keys moves screen and only cursor to keep cursor on screen
    19. block indent
      1. need I say more?
    20. current line
      1. delete (option to default to cutting to clipboard or simply deleting, perhaps with shortcuts for both)
      2. duplicate (separate keys for placing the duplicate above and below)
    21. goto line
      1. simple number or +/- for moving relatively
    22. line numbering
      1. option to start at 1 or 0
    23. file locking/monitoring
      1. option to lock a file while editing
      2. notify if file has been changed outside of environment
    24. file modified notification
      1. e.g. a little star by the filename
      2. prompt for save before exiting
    25. word wrap
      1. option to display when lines are wrapped
    26. font support
      1. support both fixed-width and variable-width fonts
    27. cr/lf
      1. deal with carriage return/linefeed intelligently, perhaps offer to report inconsistencies
    28. display current line/column
      1. perhaps even character position in file
    29. unicode support
      1. whether or not the editor always uses two bytes per character is up for question
  2. Nice to Have
    1. syntax highlighting
      1. basic version: strings, comments, multi-line comments, keywords
      2. more: bold proper parentheses/brackets/braces/etc.
      3. more: bold what is inside current grouping symbols
      4. more: multi-language documents
    2. grouping symbol based navigation
      1. go to beginning/end of string/block/paranetheses/etc.
    3. cached viewing
      1. ability to only load portions of large files, while making it appear that the whole file is loaded
    4. spell check
      1. only spellcheck valid text (e.g. only strings/comments)
      2. Hamming distances?
    5. auto-correct
      1. perhaps extensive rules on when to auto-correct
      2. correct case on symbols (requires parse tree)
    6. code folding
      1. collapse and expand sections of text based on syntax
      2. randomly define blocks of code to collapse
    7. tabbed editing
      1. hotkeys for moving through tabs
      2. right-click on tabs for menus
      3. drag tabs around
    8. VFS layer
      1. (virtual file system)
      2. hard drive
      3. (s)ftp
      4. ssh
      5. WebDAV
    9. dockable components
      1. file browser
      2. documentation viewer
    10. project management
      1. define workspaces consisting of multiple files
      2. perhaps CVS
    11. integration with external tools
      1. HTML Tidy
    12. [function] list
      1. basically a dynamic find-with-list, displayed in a dockable window
    13. regex helper
      1. colorizes regular expressions
      2. test-as-you-type
      3. bonus mass-rename files
    14. comment/uncomment block
      1. always uses single-line comments
    15. sidebar for open files
      1. can close/save/etc. files here
    16. insert number
      1. standard formats (decimal, floating point, hex, octal
      2. specify one's own formatting characters + base of number
    17. shell
      1. window, menu, or shortcut
      2. fully specify command-line string
      3. capture output, perhaps parsing
    18. pretty print/tabbing
      1. automatically indent according to syntax
      2. format a block of text to conform to tab rules
  3. Requires Language-dependant Parsing
    1. automate
      1. detect repetative task and offer to continue
    2. intellisense/autocomplete
      1. based on syntax and a parse tree
      2. only offer items of the correct type
      3. save last-used item and default to that in intellisense list
      4. generate intellisense data for external files
    3. rename object
      1. variables, functions, etc.
    4. goto definition/list references
      1. variables, functions, etc.
    5. type checking
      1. underline errors with squiggly underline
    6. documentation auto-generation
      1. use 'special' comments to denote documentation
      2. links between code and documentation
    7. language verb spellcheck
      1. check for, while, if, etc.
  4. Definitely Plugins
    1. FTP client
      1. presents a VFS to editor
    2. hex editor
      1. contains a plethora of choices
    3. visual diffs
      1. compare files with two different panes
      2. use text mode or hex editor
      3. ignore whitespace, etc.
    4. database query testing
      1. option to convert query to syntax of the current language (and perhaps back again)
      2. advanced: provide intellisense while writing the query