Notable changes in gEDA/gaf 1.10.0
==================================
General changes
---------------
* Added the library "xornstorage" and the Python package "gaf" as a
(currently quite minimal) way to access gEDA/gaf functionality from
outside of gschem. These are on the long term intended to replace
libgeda, making the core gEDA/gaf functionality available as a
library to both gschem and other applications.
* Added command-line tool `xorn' for low-level schematic and symbol
file manipulation.
* Added experimental XML file format (currently only supported by
gnetlist and the `xorn' command line utility).
* Objects colors are limited to 21 (up to and including FREESTYLE4).
More recent colors added for GUI purposes can be set in colormaps
but aren't automatically added to the file format specification.
* The symbol directories "gnetman", "verilog", and "vhdl" are now
installed to the new location PREFIX/share/gEDA/extra-sym/. This
allows adding the default library with "component-library-search".
* The directory to which gEDA programs write log transcripts can be
changed by setting the environment variable `GEDALOG' (the default
being ~/.gEDA/logs/).
* All tests now use the parallel test harness, speeding up `make
check' runs considerably when used with multiple jobs (-jN).
* Fixed bugs:
- lp-698501 gschem file preview function renders files twice
- lp-698524 gnetlist ignores duplicate inout-symbols
- lp-698768 No ordering requirement for attribute attach/detach
- lp-701637 gschem "Scheme Interaction" window
- lp-1266316 gschem exits on color value < 0
- lp-1367462 undo messes with the view even though undo panzoom is disabled
- lp-1492834 These docked dialogs should remember their size
- lp-1496899 gschem: dock window wishlist
- lp-1497659 gnetlist -v -g spice-sdb generates bad verbose netlist
- lp-1514209 gschem: multiattrib Value textview improvements
- lp-1532794 Build fails on missing colors.h
- lp-1576918 Memory and file handle leak in libgeda
- lp-1590757 partlist3 yields wrong netlist in some cases
- lp-1625474 xorn does not build on FreeBSD
- lp-1661961 "format not a string literal and no format arguments" warning
...and a lot more which never made it to the bugtracker.
gschem changes
--------------
* Tool windows are now "dockable", i.e., they can be either used as
modal/non-modal dialogs or docked to the edges of the main window.
* The action mechanism used for menu items, tool buttons, and key
bindings has been redesigned, making several improvements possbile:
- Actions can now be used interchangeably in the main menu, toolbar,
context menu, and keymap. They are defined in a single place
("actions.c" for C actions and "builtins.scm" for Guile actions),
including metadata like name, icon, and tooltip.
- Menu items and tool buttons representing options have a little
check or radio box beside them indicating their current state.
- Menu items and tool buttons are greyed out while they can't be
used.
- Toolbar and context menu are customizable.
- Menu and toolbar definitions are simple Scheme variables, allowing
users to add actions to the menu without having to copy the menu
definition. Actions are represented in Scheme code as applicable
SMOBs, allowing them to be called like procedures while retaining
the action information necessary for rendering the menus/toolbar.
- "Repeat Last Action" (usually bound to ".") uses the same logic as
the middle mouse button repeat action does, i.e., only actions
that "make sense" qualify for repeating.
* The menus, toolbar, and keymap have been revamped to more closely
resemble the "standards" for a desktop application. Some actions
have been assigned more accessible or memorable keys.
* Added a command-line option "--control-fd=stdin|FD" which allows
remote-controlling gschem via a file descriptor. This is intended
for project managers like Igor2's "genxproj".
* File operations have been consolidated: opening, saving, closing a
file and so on should now behave identical regardless of how the
operation was initiated. Related improvements:
- When opening multiple files, the first one (instead of the last
one) is initially shown.
- The symversion= mismatch dialog is shown whenever a symversion=
mismatch is detected while opening a file, not just for files
specified on the command line.
- gschem now keeps track of which files are untitled, listing them
as "untitled page" instead of assigning them a temporary filename.
The Scheme procedure `page-filename' returns #f for untitled
pages.
- "Save all" used to produce spurious "untitled_1.sch" files. This
was due to three issues working together, which have been fixed:
- When gschem is invoked without specifying filenames on the
command line, an untitled page is created. This page wasn't
removed when opening files, staying invisibly in the background.
- "Save all" didn't check which files needed saving but just
unconditionally saved anything.
- "Save all" didn't behave like the interactive "Save", asking for
a filename for untitled pages, but just saved each page to its
internally stored filename.
- The file chooser dialog on "Open" and "Save As" is now always
opened in the current directory.
- When opening a file which is already open but has since been
changed on disk, the user is asked whether to reload the file.
- When the currently edited file has been modified on disk, a
notification is shown offering the user to reload the file.
- If the user enters a filename with an unusual extension while
saving, a confirmation dialog is shown.
- When trying to open a file or descend into a subschematic which
doesn't exist, gschem now offers to create a new file with that
name.
* Some improvements have been made to the multi-attribute editor:
- Editing a single attribute invokes the multi-attribute editor.
- Trying to edit an inherited attribute edits the attached attribute
with the same name if it exists, or promotes the attribute and
edits its value if it doesn't exist yet.
- Attributes are shown in the order in which they are listed in the
configuration (via "attribute-name").
* Attaching and detaching attributes now work as expected:
- "Attributes / Attach Attributes" used to depend on the order in
which objects were selected, taking the first selected object as
the base object to attach attributes to, regardless of its type.
Now, the selected objects are searched for a base object of
suitable type, and only if exactly one is found, the attributes
are attached to it.
- "Attributes / Detach Attributes" used to work on selected
components and nets, detaching all attributes from these objects.
It now works on the selected *attributes*, allowing the user to
selectively detach specific attributes while leaving the rest
attached.
* "Lock Component" used to lock components as well as non-component
objects, bringing the latter into an invalid state that would last
until the next "Undo" (or until the page was saved and loaded back
from file manually).
This has been fixed: "Lock Component" and "Unlock Component" now
only operate on components, changing the color of attached
attributes as they used to do with any selected text.
* The "Light Color Scheme" (V L) selected from the menu now has a
truly white background. For compatibility, selecting the "lightbg"
colormap in gschemrc loads the old, light-gray color scheme; the new
color scheme can be selected as "whitebg".
* The library window has been made fit to be used as a dock window:
- When the dialog is resized to be taller than a certain aspect
ratio, it switches automatically to a stacked layout where the
preview and attribute panes are located below the symbol selector.
- While in stacked layout, the bottom panes can be expanded and
collapsed to give more room to the symbol selector.
- The window is automatically refreshed on library updates.
* Symbol editing has been improved:
- The page can now be scrolled to negative coordinates, making it
feasible to edit symbols without moving them away from the origin,
then translating them back. This also allows to consciously
choose something that makes sense for the symbol as the location
of the origin.
- The coordinate origin is now indicated with slightly darker grid
lines. (This can be enabled/disabled via "View / Show Origin".)
- The "Symbol Translate" action has been replaced with "Place
Origin" which lets the user select the position of the origin
interactively.
* Added support for back-annotation from pcb-rnd.
* Double-clicking a subschematic component enters the subschematic.
* Right-clicking in path mode works as expected.
* Pins are allowed to have zero length.
* "File / Revert" only asks for confirmation if the file has been
modified.
* The "repeat" function of the middle mouse button now evaluates
actions at the current mouse position.
* Mouse gestures work properly again.
* libstroke has been merged into gEDA/gaf. This removes the
dependency on libstroke and makes mouse gestures always available.
* Added new mouse gestures for page navigation:
- swiping left goes to the previous, swiping right to the next page
- swiping right and then down enters a subschmatic
- swiping left and then down enters a symbol
- swiping up and sideways (in any combination) goes back to the
parent schematic
* The coordinate dialog has been replaced with an option to display
the coordinates in the status bar.
* Added further menu items:
- "Add / Last Component" (A C)
- "Object / Toggle Text Overbar" (T O)
- "View / Show Menubar" (V M)
- "View / Show Toolbar" (V T)
- "View / Show Scrollbars" (V S)
- "Tools / Select Locked Objects" (T L)
* Fixed various issues related to undo/redo:
- The menu items "Edit / Undo" and "Edit / Redo" now show the name
of the action that will be undone/redone.
- The current viewport used to be restored on undo/redo regardless
of the "undo-panzoom" setting (which prevents pan and zoom
operations from being recorded in the undo history). This turned
out to confuse users, so if the setting is enabled, undo/redo now
doesn't change the viewport at all.
- The default mode ("undo-panzoom" disabled) now works correctly.
- After undoing the first action which changed a page, the page will
be considered "unchanged" again.
- Adding an attribute, changing the slot of a component, replacing
the contents of a picture, and selecting "Pan" from the menu used
not to be correctly un-doable. This has been fixed.
- Selecting a picture to be added doesn't cause the page to be
treated as changed any more.
- "Object / Update Symbol" can't be undone with the current undo/
redo system, so it isn't listed as something that can be undone
any more.
- Several actions (attach/detach attribute, text actions, embed/
unembed, lock/unlock component, show/hide specific text) changed
the undo history even in the case that they didn't have any
effect. This has been fixed.
- Several actions (attach/detach, embed/unembed) didn't update the
"changed" flag correctly; this has been fixed.
gnetlist changes
----------------
* Refactored gnetlist:
- gnetlist is now part of the Python package "gaf" and uses the new
libraries instead of libgeda to work with gEDA files.
- Netlist backends can also be written in Python.
- When reading broken schematics and/or symbols, gnetlist doesn't
silently fail or produce bad output any more. Conversely, this
means gnetlist has become more picky about input files: whenever
it occurs something that is likely to result in bad output, it
issues a warning or an error.
- In case there should be any problems with the refactored codebase,
the "old" gnetlist is still available as "gnetlist-legacy".
* If gnetlist is invoked with the `pcbfwd' backend or the new option
`--report-gui', errors and warnings are displayed in a GUI dialog
instead of printing them to stderr.
* There are new semantics for power and I/O port symbols:
- Power symbols can now use a netname=NET instead of a net=NET:1
attribute. This allows using the attribute value as a visible
label, removing the need for power symbols for individual rails.
- I/O port symbols in subschematics can now use a portname=PORT
instead of a refdes=PORT attribute to distinguish them from
regular components. This allows checking that unconnected port
symbols aren't silently included in the netlist as components.
* Hierarchical schematics can now use a simple form of parametrization
where the instantiating component contains an attribute of the form
`param=NAME=VALUE' and some attribute value in the subschematic
contains the pattern `$(NAME)', which will be replaced with `VALUE'.
This only works with regular attribute lookup from netlist backends
and won't affect special attributes like slot= or netname=, though.
* The netlisting options "hierarchy-traversal", "net-naming-priority",
"unnamed-netname", and "unnamed-busname" are once again configured
via gnetlistrc, making them consistent with the refdes=, net=, and
netname= mangling options.
* Duplicate I/O ports in subschematics and duplicate I/O pins in
subschematic symbols are now treated correctly.
* Added a netlist backend for pcb-rnd's tEDAx format.
* Added backends which dump the netlist in various generic formats
(dumpindent, dumpjson, dumplihata, dumptext, dumpxml).