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