blob: af0f5db29f844bea16acc4dac90a9b261f932473 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
Known Bugs:
* ??? Dot is not always restored properly (e.g. after closing file)
need test case!!!
* Null-byte in strings not always handled transparently
* saving another user's file will only preserve the user when run as root
(WON'T FIX!?)
* crashes on large files: S^EM^X$ (regexp: .*)
* m,nX crashes if m > n
Features:
* some missing useful VideoTECO/TECO-11 commands:
* EF with buffer id
* ER command: read file into current buffer at dot
* $$, ^C: return from macro
* nEW to save a buffer by id
* use CRTP for RBTrees
* "~" expansion in file names
* Buffer ids should be "circular", i.e. interpreted modulo the
number of buffers in the ring. This allows "%*" to wrap at the
end of the buffer list.
* Revert rubout: Instead of discarding rubbed out characters,
they should be kept in the command line placing the command line
cursor before them.
The rubbed out characters could then be re-inserted with a special
immediate editing command or by retyping them allowing you to move
back and forth in the editor state resulting from a command line.
This would be SciTECO's version of Redo.
* properly support Unicode encodings and the character-based model
* link against libncursesw if possible
* translate documents to Unicode strings
* a position refers to a character/codepoint
* Progress indication in commandline cursor
* undo-tokens per char limit (additional infinite loop safety)
* Command to free Q-Register (remove from table)
* autocompletion of long Q-Reg names
* Q-Register aliasing/linking
* TECO syntax highlighting
* multiline commandline
* perhaps use Scintilla view as mini buffer
* improve GTK interface
* backup files, or even better Journal files:
could write a Macro file for each modified file containing
only basic commands (no loops etc.). it is removed when the file is
saved. in case of an abnormal program termination the
journal file can be replayed. This could be done automatically
in the profile.
* Add special Q-Register for dot:
Would simplify inserting dot with string building and saving/restoring
dot on the QReg stack
* automatic EOL detection of buffers; easy EOL setting
* command to change the current working directory. This will
influence tab-completion and relative file names.
* exclusive access to all opened files/buffers (locking):
SciTECO will never be able to notice when a file has been
changed externally. Also reversing a file write will overwrite
any changes another process could have done on the file.
Therefore open buffers should be locked using the flock(), fcntl()
or lockf() interfaces. On Windows we can even enforce mandatory locks.
Optimizations:
* refactor search commands (create proper base class)
* refactor match-char state machine using MicroStateMachine class
* simplify parser (static jump tables are unnecessary!)
* search and other commands can be significantly optimized:
in batch mode, or in loops/macros there is no need to rematch every character!
-> immediate vs. non-immediate command execution
* can be handled automatically in StateExpectString
* batch mode can be optimized by preventing unnecessary allocations/deallocations
for UNDO token creation. Check for undo.enabled in constructors like
undo.push_msg|var() where the undo token destruction does not have any
significant side effects.
* use "friend" functions for C-linkage callbacks that must access a class'
member instead of making that member public.
Alternatively, I can use public context structures that are private
attributes.
Documentation:
* Code docs (Doxygen)
* clean up/fix generate-docs.tes
|