Make 'keep_eol' behaviour more intuitive (Closes: #1294).
[mp-5.x.git] / RELEASE_NOTES
blob941d24106bbfb90c603d170c42756d08803bdcd5
1 Minimum Profit Release Notes
2 ============================
4 5.2.2
5 -----
7  - Major improvements:
8    - Added Version Control commands (bound by default to `ctrl-p').
9      The supported systems are (adding new ones is very easy):
10      - Git
11      - Subversion
12      - Mercurial
13    - If any file being edited is modified externally, the situation
14      is detected and the user is prompted for file reloading.
15    - GTK library detection: Uses 3.x if available, then 2.x.
16    - Special information gathering on help: if the file being edited
17      is C/C++ and asking for help (by pressing `F1') do not return
18      a `man' page, a special routine inspects all source files and
19      headers looking for structures, variables and function prototypes
20      to be shown as help.
21    - New "Pipes" game.
22  - Minor improvements:
23    - The `build' action remembers the last Makefile target.
24    - The `section_list' action sets the list selector to the most
25      appropriate section regarding the current cursor position.
26  - Fixed bugs:
27    - Make `keep_eol' behaviour more intuitive (bug #1294).
29 5.2.1
30 -----
32  - New actions:
33    - `indent_block': Indents the current line or the selected block.
34    - `unindent_block': Reverse of `indent_block'.
35  - New features:
36    - ~/.mp_templates can be a directory. If it is, the `global' file
37    there is always read (and those templates put at the top) and it
38    will also read a file named like the current syntax highlight
39    definition (so different templates appear if your editing C, Perl,
40    etc.).
41  - New configuration options:
42    - `mp.config.smart_bol': if set to nonzero, the `move_bol' action
43      now moves to the first non-blank character in the line instead of
44      to column 0 (unless the cursor is already on the first non-blank).
45  - Other improvements:
46    - The following actions accept additional arguments when called
47      as functions (and do not ask for them, if present):
48      - `goto'
49      - `save_as'
50      - `exec_command'
51      - `filter_selection'
53 5.2.0
54 -----
56  - New actions:
57    - `filter_selection': to filter the selection (or the
58      full document if no selection is done) through a system command.
59    - `exec_action': that shows a list of actions to execute
60      on the current document.
61    - `cut_lines_with_string': that cuts to the clipboard all lines
62      in a document or block that matches a regular expression.
63    - `insert_real_tab': bound to `shift-tab', to insert a tab
64      character (\t) regardless of whatever is set in the
65      `tabs_as_spaces' configuration variable.
66    - `insert_next_item': to insert a new enumeration item in
67      a document.
68  - Bugfixes:
69    - Fixed insert / overwrite mode.
70    - If a selection is invisible (incomplete or with the start and end
71      in the same character), a new keystroke does not jump to it.
72  - New configuration options:
73    - `mp.config.hw_cursor': to activate the hardware cursor in
74      text environments (disabled by default).
75  - Text user interface improvements:
76    - File opening list is fully navegable (directories up and down),
77    - Selection lists accept letter keys to jump to elements,
78    - If a text mode menu panel do not fit vertically on the screen,
79      menu items are scrolled as needed.
80  - New command line options:
81    - `-txt': force text mode (instead of GUI).
82  - General improvements:
83    - If a block is selected, actions `word_wrap_paragraph',
84      `join_paragraph' and `eval_doc' act only on it.
85    - The internal engine has been partly rewritten, so it requires
86      less memory and it's a bit faster.
88 5.1.4
89 -----
91  * If a block is selected, any keystroke substitutes it.
92  * Support for Alt + keys (ASCII and movement) has been added,
93    and mostly left unbound to be used by the user for his own
94    keybindings.
95  * A new tab mode, which uses the previous line as a template
96    for tab columns.
97  * Fixed action `open_under_cursor'.
98  * The `mp.paste()' function returns the clipboard content
99    as a string if called without arguments.
100  * New Grutatxt syntax highlighter.
101  * Fix F10 in Win32.
102  * Fix a bug when calculating the drawing position in the
103    selected block, that were leading to crashes.
105 5.1.3
106 -----
108  * A new Qt4 driver (adapted from the KDE4 driver).
109  * A new hexadecimal viewer.
110  * New action `open_dropped_files', to open files dropped from
111    the underlying system GUI.
112  * Improved file encoding autodetection by looking at the
113    UTF BOM marks.
114  * New configuration option `keep_eol', to keep the original
115    end of line sequence each document had.
116  * Fixed some clipboard issues, as replacing the selected block
117    when pasting and some crashes.
118  * win32 executable has been renamed to `mp-5.exe'.
119  * The status line format string can also include the %e token
120    to show the encoding used by the document.
121  * Fixed win32 input processing in non-latin environments.
122  * Setting an empty encoding (to fall back to system defaults)
123    always work.
125 5.1.2
126 -----
128  * The `grep' action can now be recursive.
129  * New syntax color for special documentation blocks.
130  * Fix searching into empty selected blocks (this was bug #1269).
131  * New action `section_list', that shows a list of _sections_
132    in the current document to jump to. Sections are usually
133    function definitions and special marks in programming
134    languages.
135  * New action `seek_misspelled', to search the next
136    misspelled word. It has been assigned to keycode `f5'.
137  * New action `ignore_last_misspell', to add the last misspelled
138    word found by `seek_misspelled' to a whitelist so it won't
139    be found again.
140  * New action `seek_repeated_word', to search for words starting
141    or ending with the same number of letters up to a maximum
142    distance. It's controlled by the new configuration directives
143    `mp.config.rw_num_chars' and `mp.config.rw_max_dist'.
144    It has been assigned to keycode `f6' (this keycode was
145    previously assigned to `join_paragraph', which has no
146    keybinding now).
147  * The action `open_templates_file' has been fixed.
148  * Several GTK interface updates by fellow developer Sebastian Vöcking.
149  * New command line option `-d', to change the working directory.
150  * Several fixes to the win32 driver; word wrapping, combobox
151    drop-down sizes, underlined text.
152  * Avoid hanging if the external ispell program is broken.
153  * The `dump()' function now dumps its argument as MPSL code.
155 5.1.1
156 -----
158  * Internationalization works in all platforms (including KDE4,
159    were it was faulty, and win32, where it was non-existent since
160    the 3.x series).
161  * The status line format string can also include the %w token
162    to show the number of words in the current document or selection
163    (can be slow).
164  * Search and replace is now limited to the selected block, if any.
166 5.1.0
167 -----
169 Fixes to the KDE4 driver:
171  * Underlined text works.
172  * Text fields in forms now have history.
173  * If no xserver can be contacted, fall back to the curses interface.
175 5.1.0-rc1
176 ---------
178  * KDE4 support.
179  * Rectangular block copy/paste support.
180  * New syntax highlight for the Euphoria language.
182 5.0.3
183 -----
185  * New action `open_under_cursor', that picks the word in the
186    current document under the cursor, accepts it as a document
187    name and tries to open it. If it's in the format string:number,
188    is accepted as a file name and a line number. It's bound by
189    default to `ctrl-enter' (`alt-enter' under Curses).
190  * The `grep' action bevahaviour has changed; instead of in a form,
191    matches are shown in a read-only document that is only closed
192    explicitly. Each change can be moved to by using the new
193    `open_under_cursor' (`ctrl-enter' or `alt-enter') action shown above.
194  * In a similar way, the `build' action also shows its output in a
195    read-only document instead of a form that is not automatically closed,
196    making the browsing and editing of compilation errors more useful.
197  * Forms in the Curses driver have changed their look. All fields in a
198    form are shown simultaneously on screen. This is one step to close
199    bug #1249.
200  * A set of character encoding converters have been natively implemented,
201    improving those platforms where the 'iconv' library is not available
202    (i.e. Windows and old Unix systems). The available encodings can be
203    shown by executing
205         dump(EMBEDDED_ENCODINGS);
207 5.0.2
208 -----
210  * New option to mark end of line characters, with its associated
211    configuration directive (mp.config.mark_eol).
212  * The end of line string (mp.config.eol) is now system-dependent (so,
213    on win32, it's set by default to \r\n).
214  * Copy and paste on GTK has been fixed (this was bug #1205).
215  * Fixed some redrawing issues (bug #1236 and others).
216  * Ctrl-keys no longer fail on GTK (bug #1252).
217  * New document _Minimum Profit Action Reference_.
218  * New action `build', for building Makefile-based projects. See the
219    action reference for details.
221 5.0.1
222 -----
224  * Improved line edition in the Curses interface (full edition plus file
225    expansion using the `tab' key in open / save file prompts).
226  * Auto-indenting is temporarily disabled while pasting (bug #1250).
227  * New document _Minimum Profit Function Reference_ (contributed by Lee Page).
229 5.0.0
230 -----
232  * The search hit is highlighted.
233  * When invoked from the menu, the `record_macro' action dropped
234    the last key (bug #1245).
235  * A Curses configuration detection has been fixed that made
236    some things behave strangely, as the drop-down menu not
237    responding under some terminal configurations (bug #1247).
238  * The Curses menu no longer crashes if it doesn't fit on
239    the screen (bug #1195).
240  * The -f (execute script) command line argument really works
241    (bug #1240).
242  * New manual page (bug #1219) and README files (bug #1218).
243  * Updated documents, _MPSL Overview_ and _Minimum Profit Cookbook_.
244  * New documents, _Minimum Profit Data Model_ and
245    _Creating interactive dialog boxes_.
247 5.0.0-rc3
248 ---------
250  * New session support. All open documents and its current position
251    can be stored / retrieved with the new `save_session' and
252    `load_session' actions. Two new configuration flags has
253    been added: `mp.config.auto_sessions', to automatically load / save
254    sessions, and `mp.config.local_sessions', to save sessions in the
255    currently active directory instead of in the home directory.
256  * Multiple key sequences for invoking actions (ala Emacs) are
257    now possible. To create them, just assign a hash to a keycode
258    instead of an action. For example, to assign the key sequence
259    Ctrl-x Ctrl-f to `open' and Ctrl-x Ctrl-s to `save', you can use
261         mp.keycodes['ctrl-x'] = {
262                 'ctrl-f'        => 'open',
263                 'ctrl-s'        => 'save'
264         };
266  * In the curses version, confirmations now have default values
267    (shown in brackets), activated with the ENTER key.
268  * New action `close_all', that closes all documents.
270 5.0.0-rc2
271 ---------
273  * New `complete' action, that asks for completion on the current
274    word using any of the words found in the same document.
275  * New `redo' action, to revert undo operations.
276  * The global configuration file `/etc/mp.mpsl' is also executed.
277  * In the `replace' action, the substitution string can contain
278    the special character &, that will be replaced by the matched
279    string (as in the `sed' command line tool).
281 5.0.0-rc1
282 ---------
284  * New support for translating key sequences into MP keycodes, mainly
285    for redefining ANSI sequences not supported by current terminfo /
286    termcap. For example, if your terminal sends the ANSI sequence [6;5~
287    whenever you press Ctrl+page down, you can add to your config file
288    the following line:
290         mp.add_keyseq("[6;5~", 'ctrl-page-down');
292  * A new `system_command' action, to pipe from and to system commands
293    (Closed bug #1120).
294  * A new `word_count' action, to count the number of lines and words
295    in a document (or in the selected block).
296  * Incorrect word wrapping has been fixed (Closed bug #1137).
297  * Search and replace expand backslashed characters like \n and \t
298    (Closed bug #1214).
299  * New timer functionality has been added; a user function can be called
300    each time a specified period of milliseconds have elapsed. If, for
301    example, you want to print a string on standard output each two
302    seconds, you can run
304         mp.timer(2000, sub { print("Hi, world!\n"); });
306 5.0.0-pre1
307 ----------
309  * Password-protected files fully work.
310  * Moving to next / previous instance of character (bound to ctrl-page-down
311    and ctrl-page-up) works (Closed bug #1131).
312  * Files open MUCH faster.
313  * Selection can be done by pressing shift + any movement key (Closed bug #1182).
314  * Dialog boxes work under Windows 98 (Closed bugs #1196, #1197).
315  * Block selection can be done by dragging the mouse (Closed bugs #1200, #1201).
316  * New `grep' functionality (Closed bug #1116).
317  * New action `sync' (save all modified documents, closed bug #1206).
318  * New action `document_list' (show a box with all open documents, allowing
319    the selection of the active one; closed bug #1211).
320  * Translations ported from mp 3.x (closed bug #1169).
321  * Most syntax highlight definitions ported from mp 3.x (closed bug #1168).
323 4.99.12
324 -------
326  * The menu in the Curses interface has been (finally) implemented.
327  * Interfaces have changed internally; a new driver function, mp.drv.form()
328    serves as a dialog box generic generator, resulting in more useful queries
329    for data (for example, all data required for a `replace' operation is
330    queried in only one dialog box). The Curses implementation, though
331    functional, is still just a wrapper to the old interface functions
332    and fields are queried one-by-one (which is annoying). This is an example
333    of a call to mp.drv.form(); the r variable will contain an array of 5
334    elements (one per widget) containing the values, or NULL if user cancelled:
336         local r = mp.drv.form( [
337         
338                 /* a 'text' widget */
339                 { 'label'       => "Replace this:",
340                   'type'        => 'text',
341                   'history'     => 'search',
342                   'value'       => 'THIS' },
343         
344                 /* another one */
345                 { 'label'       => "With:",
346                   'type'        => 'text',
347                   'history'     => 'replace',
348                   'value'       => 'THAT' },
349         
350                 /* a 'password' widget */
351                 { 'label'       => 'Password:',
352                   'type'        => 'password' },
353         
354                 /* a 'checkbox' widget */
355                 { 'label'       => "Case sensitive:",
356                   'type'        => 'checkbox',
357                   'value'       => mp.config.case_sensitive_search },
358         
359                 /* a 'list' widget */
360                 { 'label'       => 'All C files:',
361                   'type'        => 'list',
362                   'list'        => glob('*.c'),
363                   'value'       => 10 }
364         ] );
366  * Password protecting files works (but they cannot be opened yet, so this
367    is far from useful, unless you use mp 3.x to open them).
368  * Case sensitivity in searches can be controlled with the new
369    config flag mp.config.case_sensitive_search.
370  * Replace (and global replace by use of the new config flag
371    `mp.config.global_replace') works.
373 4.99.11
374 -------
376  * Syntax highlight definition have changed (again, hopefully for the last
377    time). Definitions are now an array of attribute name / regexes in which
378    the order is significative.
379  * Template insertion works.
380  * Tag selection (open the file where a symbol is defined) works.
381  * Symbol completion (using tags) works.
382  * Closed bugs #1159, #1158, #1153, #1161.
384 4.99.10
385 -------
387  * A big advance in the Curses interface; alerts, confirmations, and open
388    file, save file, search and generic prompts are working. Still lacking
389    the selection lists (as the rest of interfaces) and the menu.
390  * Improved menus; if an invalid action is added to a menu, it's shown
391    followed by a ?; if a key is bound to that action, it's shown between
392    square brackets.
393  * For systems lacking iconv support (MS Windows), a crappy, ad-hoc utf-8
394    converter has been added. This means that hitting `escape' and typing
395    `encoding('utf-8');' makes reading and writing utf-8 encoded files
396    possible on every system.
397  * New action `join_paragraph', to join current paragraph all in one line.
398  * New action `word_wrap_paragraph', that re-word-wraps current paragraph.
399    Word wrapping must be set ('mp.config.word_wrap = number;') for this to
400    work.
402 4.99.9
403 ------
405  * The GTK and win32 drivers now include a native open/save file dialog.
406  * Interactive help (help for the word under the cursor, triggered by
407    pressing `f1') works.
408  * The menu in GTK and win32 works.
409  * New icon!
410  * Some bugs that caused random crashes has been fixed.
411  * New action `exec-doc', that executes the active open document as
412    MPSL code.
414 4.99.8
415 ------
417  * New configuration option `mp.config.tabs_as_spaces', to store tabs
418    as spaces.
419  * Each syntax highlight definition can contain an optional function
420    called detect() that receives the document as argument and can be used
421    to tailor special detection rules.
422  * A big part of the internal storage of colors and attributes have
423    been rewritten to make it more dynamic.
424  * Tag target for the word over the cursor is shown in the status line.
425  * Move word left works.
426  * Opening an already open file makes it the active one instead of
427    re-opening it.
428  * The `execute code' action has been remapped from `ctrl-f1' to escape.
429  * Spellchecking via ispell works (though it's SLOW!). Activate it by
430    hitting escape and typing:
432         mp.ispell(1);
434  * By default, files are now unlinked before (re)written. File permissions
435    and ownership are restored if available. This behaviour can be disabled
436    by setting `mp.config.unlink' to zero.
437  * The GTK driver drawing code has been optimized, so it's much more
438    responsive now.
440 4.99.7
441 ------
443  * The `modified' flag of documents is maintained, so now closing files
444    with pending modifications ask for confirmation. Also, the %m status
445    line directive works (marking modified files with an asterisk).
446  * Flex and bison are no longer needed to build.
447  * The `close window' button in GUIs (win32 and GTK) now generate the
448    special keycode `close-window'.
449  * The `exit' action now closes all open documents, asking for saving
450    confirmation on those modified.
451  * Temporary versions of the `open' ans `save' actions (using
452    mp.drv.readline() instead of an ad-hoc open file dialog) have
453    been implemented.
454  * The GUI interfaces now can have their font preferences configured
455    by using mp.config.font_face and mp.config.font_size.
456  * The actions `zoom-in' and `zoom-out' (font size rescaling, bound to
457    `f11/f12' and `ctrl-kp-minus/ctrl-kp-plus') have been implemented.
458  * New mouse-related actions; `move-to-mouse-position', `move-mouse-wheel-up'
459    and `move-mouse-wheel-down'.
461 4.99.6
462 ------
464 This is an EXPERIMENTAL version for evaluation purposes only. There are
465 many things that aren't implemented, others fail miserably and many more
466 do it incorrectly. Basically, what is known to work is:
468  * Basic text editing fully works. I've been using it for six months or so
469    to maintain itself, and there has not been a crash in three months,
470    more or less.
471  * Scripting works fine (90% of Minimum Profit 5.x itself is implemented
472    in MPSL, its internal scripting language).
473  * Undo works fine. It's bound to ctrl-z.
474  * Works cleanly in an UTF-8 environment.
476 I do development on the GTK version, so it's where it works best. The
477 curses version lacks many of the interface (alerts, confirmations,
478 asking for text, etc.), so it's barely usable. The win32 version seem
479 to work, but it needs to be manually installed and probably need some
480 tweaking.
482 What it doesn't work:
484  * The dialogs to open or save a file by its name aren't implemented.
485    There are workarounds for this: files can be opened from the command
486    line and save works correctly if the edited file has a name. Also,
487    files can be opened by hitting `ctrl-f1' (execute script code) and
488    typing:
490         mp.open("file-to-be-opened");
492  * There is no menu.
493  * No ispell support.
494  * No password protected files.
495  * No grep.
496  * No external commands (so no support for help, tags, etc.).
497  * Some movement commands as moving a word left, moving to matching
498    brackets, etc. are still not implemented.
499  * Only a few syntax highlight definitions are implemented.
500  * Many other things I cannot remember.
502 Documentation is still scarce: the more interesting bits are inside the
503 mpsl/doc directory. This is where the scripting language is documented,
504 with some basic overviews and implementation notes (there is even an
505 embryo of a PostScript quick reference guide).
507 Customizing can be done by writing MPSL commands in the ~/.mp.mpsl file,
508 which is read on startup.
510 I have not tried to optimize the internal engine, so it's probably some
511 magnitudes slower than the 3.x version.