Release notes for the Open/ed editor and developers environment.
Commands, modes and function names are shown in upper case but are case insensitive in Open/ed.
Released version :
------------------
25.07.01
Available at :
--------------
Download from :
https://drive.google.com/file/d/1A57TXDs_8qAyo7s9kGsZt-ZtV8fzSIDZ/view?usp=sharing Support at :
https://groups.google.com/g/open-edNew features.
-------------
LOCAL and GLOBAL variables.
STRUCTUREs including GLOBAL STRUCTures.
WHEN MODIFIED and mode SAVRESMOD
WHEN reports
Tables and GETTABLE () function.
Tables :
actions When actions.
alarms When alarms
keymaps MAP settings.
DEFAULT command for setting a variable.
DEFKEY and UNDEFKEY
Named variables can now have names up to 32 characters.
This includes the full structured name of variables in a structure.
Meta keys.
Option + <any_key> is now MAP-able to any other key including Function keys.
Discussion
----------
This release adds scope to named variables which may now be LOCAL or GLOBAL.
This release adds STRUCTUREs and GLOBAL STRUCTUREs.
WHEN has had a significant update and its syntax slightly changed.
MAP and UNMAP have been updated with more key definitions.
MAP recognises :
all alphanumeric keys,
all curses keys KEY_xxxx
all curwin keys MOUSE_xxxx
all curses keys M-x meta keys
all curwin keys META_xxxx
curwin is the Open/ed extensions to curses.
Open/ed now recognises Meta keys, keys pressed with 8th bit on
in the range 0200 to 0377. You will need to turn these on
in your terminal program for Open/ed to see them.
Program options
---------------
None.
Commands
--------
New
---
STRUCTURE defines a data structure.
DEFKEY and UNDEFKEY
Allows additional escape sequence binding in screen mode.
DEFAULT int = integer expression
DEFAULT str = string expression
The DEFAULT command is an IF ( == 0 ) then LET command.
If a variable is 0 or NUL, then set it to the value.
Changes
-------
GLOBAL is renamed to EVERY which has an abbreviation of E.
GLOBAL is now a scope declaration.
STRUCTURE and ENDSTRUCTURE.
This allows for declaration of data structures.
STRUCT and ENDS are permitted abbreviations in macros.
GLOBAL and LOCAL is a scope declaration that precedes any named
variable such as INT, STRING, FSTREAM, DIRECT, TOKENS.
WHEN syntax changes.
Every WHEN (other than alarms) has syntax of :
WHEN condition seconds macro arguments.
WHEN condition reports on that condition.
WHEN <return> reports on all conditions.
Each action has a time recorded of the last time it executed.
LX now inserts to the line above so the DX lands on the current line.
HISTORY START is now begin.ned aware. If history is already recording
it just continues on that file. Previously when begin.ned saw each
HISTORY START it opened a new history file.
MAP EXEC Allows the execution of meta keys mapped to F-keys.
MAP LIST Lists meta keys mapped to F-keys.
MAP now allows META_ keys.
Abbreviations
-------------
The old GLOBAL command is now the EVERY command with an abbreviation of E.
Because they are macro language commands GLOBAL and LOCAL have no abbreviation.
Modes
-----
SAVRESMOD compliments the WHEN modified action.
It allows WHEN modified to run after every SAVE.
MENUFLAGS adds additional display flags to the Menu bar.
WARNING mode has been updated for MODE commands. Add mode WARNING
to the start of begin.ned and finish begin.ned with NO WARNING.
This will allow begin.ned to continue if there is a non serious
error in mode commands.
Functions
---------
New
---
Added GETTABLE ( 'tablename' , %item_sep% , %line_sep% )
int = CLOSEDIR ( dir ) to close a directory.
Six new integer functions to use on F-key values.
The first 4 can also be used by the MAP command.
FUNLOCATE ( 'string' )
FUNRLOCATE ( 'string' )
FUNFIND ( 'string' [ , n ] )
FUNRFIND ( 'string' [ , n ] )
FUNGET ( n , string_var )
FUNSET ( n , string_val )
Changes
-------
OPENDIR ( ) mask now defaults to 'All'.
The cast functions INT() and STR() have been updated.
Name change
-----------
ITEMS (), FIELDS (), and LINES () renamed to
COUNTITEMS (), COUNTFIELDS (), and COUNTLINES ().
ITEMS(), FIELDS(), LINES() is now similar to ITEM with count of items to get.
INSERTITEM (), DELETEITEM (), REPLACEITEM ().
INSERTFIELD (), DELETEFIELD (), REPLACEFIELD ().
INSERTLINE (), DELETELINE (), REPLACELINE ().
Insert, delete or replace an item, field or line in a list.
ISALTERN () and AREALTERN () are renamed to
ISMETA () and AREMETA ().
Deprecated
----------
Variables
---------
Named variables can now have names up to 32 characters.
This includes the full structured name of variables in a structure.
New :
%text.line% A text line including empty lines. 0/1.
%null.line% A top or bottom .null. line. 0/1.
Removed variables :
None.
Changed variables :
%printer% and %props% can now be set with LET.
%term% is now case sensitive.
Constants
---------
New constants :
None.
Changes :
None.
Maths operators
---------------
Like 'a' being used in integer arithmetic, '' can now be used for 0.
Symbols
-------
No change.
Macros
------
New macros.
-----------
led : Little editor to demo INSERT/DEL/REPLACE ITEM () functions
and GLOBAL structures.
sold : SAVe the disk file of the current work file name.
ls : The dir.ned macro is renamed to ls.ned.
ascii : Print the Ascii key code table.
Any argument becomes a simple search string.
Example ...
: ascii p
Dec Oct Hex Label
112 0160 0x0070 p
240 0360 0x00f0 M-p
Screen mode window.
-------------------
No change.
WHEN conditions
---------------
New :
-----
'modified' when the work file is first modified.
'sold.ned' is a sample macro for the modified condition.
Tables
------
New :
-----
'actions', 'alarms', and 'keymaps'.
Read with the GETTABLE () function.
Menus
-----
Mode MENUFLAGS adds extra display flags to the menu bar.
(m) in File for work file modified.
(a) in Block for an active block (FROM/TO).
(m) in Compile for "compile" macro enabled.
Keyboard
--------
Rev. 25 introduces meta keys.
These allow a way of executing Function keys, or MAPping to other keys.
The MAP command now recognises many META_ labels. See the MAP help page.
There is now 4 MAP functions which may be used as the 'action' part of a MAP command.
FUNLOCATE ( 'string' )
FUNRLOCATE ( 'string' )
FUNFIND ( 'string' [ , n ] )
FUNRFIND ( 'string' [ , n ] )
These may be used to locate which function key has the string.
The FIND functions may specify a column else it defaults to 1.
Help.
-----
New entries for new functions and commands.
Scripts
-------
No change.
Error codes
-----------
No change.
Bug fixes
---------
Fixed bugs
----------
24-009 NEW Invalid wildcard *(.c echoes stderr "syntax error near unexpected token".
25-001 gpl:listget () returns -1 when target size == source.
25-003 Line mode NEW *item* get memory fault.
25-004 string ins/del functions using glistins/glistdel () not working when source addr == target addr.
25-002 let ok = item ( word, -1 , %list1% ) gets unknown int function LIST.
25-005 ned *.c restarts history file each file. Fix docs. Done.
25-006 mode xterm none rejected by wrong length in strcmd (.,.,5).
25-007 INSERTITEM () etc not returning ITEM_ negative status.
25-009 whenreport () crashing when screencomo () used.
25-010 Win Klist () shows <EOF> on tiny files. curwin:winklist ().
25-011 intexpr () let 'd' + '' = 100. Tidy intexpr () quoted strings.
25-012 CHANGE==anything= is being ignored.
25-015 NEW map.h* returns no entries when map.hlp exists.
25-016 Some MODE commands use 'r' rest to check for superflous args. Use 't'.
25-017 BLOCK macro was doing in_a_block so renamed. Made IS_A_BLOCK for is anywhere.
25-018 HIS EXEC gets getfileyx () Could not open file name /tmp/xyz ! No such file.
Open bugs
---------
Open bugs.
----------
22-015 Shared mem still splits to different segments after crash.
22-018 WHICH double reports on "." and same directory in PATH.
23-007 Click on ALERT message sometimes does not register in alarm system.
23-029 MODE () help needs more constants for modes ...
LR,SR,TAB,WAITER,XT,EOL,MSG,SB,GREP,HISTORY,LP.
23-061 gshift errors when ... mode tab in ... unusual options ?
23-068 SCR_PAGE jumbles text on x86 Macos. To see do NO EPAGE on Macos x86.
Mode EPAGE added to all platforms. No explanation for bug.
23-069 ^200 up chars corrupt window borders and scroll bar. I think fixed.
23-070 flag.c : Internal error : TAG_LIST and tag.list = NUL
24-035 Single click is inconsistent in obar menus.
24-037 GREP() returns NUL on empty string and unchanged reg_status.
24-038 GREP() gets heap memory corruption crashing ned. I think fixed.
24-042 Screen mode getkey('message..') does not display message. I think fixed.
24-048 Linux start gets begin not a directory.
25-008 doubleclick Draw coMment fills with *'s. How ?
25-013 QUIT gets no such history file error when deleting.
? No such file or directory : "/tmp/temp.tavx0X".
Could not remove history file "/tmp/temp.tavx0X" !
I think this is Macos which occasionally cleans up temp files.
25-014 ESC-\ takes time to work. Perhaps 1 second. CUT is ok.
Happens for simple \ in scredit().
Seems to be a DEFKEY problem.
Open bugs discussion :
22-015
If Open/ed crashes and is restarted, it may start a new shared memory segment for alarms.
The only way around this is to exit all of your Open/ed sessions and
remove the control file : %alarms.control.file%.
22-018
The WHICH command examines each directory in PATH.
If '.' is specified and the same directory is also specified, then the
WHICH command will double report if the command is found.
23-068
If you page forward or back in screen mode and see jumbled text from previous
pages, then this is 23-068. This appeared just before release in Decmber 2023.
You should only see it on x86 Macos, not on Arm or Linux. There is a workaround
in place so you should not see it, but please report it if you do.
Source code Stats
-----------------
Version : 25.06.28 Sat 28 Jun 2025 14:33:33
ned is 116833 lines, 4M bytes, averaging 42 bytes per line.
gstlib is 14993 lines, 532K bytes, averaging 35 bytes per line.
shmlib is 1156 lines, 38K bytes, averaging 33 bytes per line.
strsort is 541 lines, 16K bytes, averaging 30 bytes per line.
curwin is 7079 lines, 267K bytes, averaging 37 bytes per line.
gpl is 13944 lines, 444K bytes, averaging 31 bytes per line.
include is 1720 lines, 106K bytes, averaging 61 bytes per line.
Open/ed is 156266 lines, 6M bytes, averaging 40 bytes per line.
Other
-----
--------------------------------------------------------------------------------