Age | Commit message (Collapse) | Author | Files | Lines |
|
* class2regexp() and pattern2regexp() now have clear semantics
regarding how they scan over a pattern string
* this bug has probably always been around
* memory leaks could happen in case of exceptions because the
pattern match conversion can itself yield errors.
* now search commands also fail for definitely invalid pattern
match constructs like unsupported ^Ex sequences.
* added some documentation
|
|
|
|
* this practically fixes the delay issues when using
the escape key since 25ms is too short for humans to notice.
Still it should be large enough for all practical terminal
emulators and transmission speeds to get escape sequences
transmitted.
* If the escape delay turns out to be too short, it can still
be overwritten using the (standard ncurses) $ESCDELAY environment
variable.
* fnkeys.tes will still provide the escape surrogate since the
insert key will often be in a better possition on computer
keyboards.
|
|
|
|
* we cannot use G_N_ELEMENTS in attribute declarations with Clang
unless declaring C++11. In this case, since the size of the orig_color_table
is fixed anyway, the declaration was simply fixed.
* some reordering was necessary in cmdline.cpp. This should not
have any influence on GCC when optimizations are enabled.
* Scintilla/Scinterm had to be updated as well.
|
|
|
|
|
|
* format_str() will now automatically right-truncate strings (with
formatted control characters) exceeding the window width (or provided
maximum width of formatted characters).
This means that Q-Register names in the info line are now properly
truncated.
* introduced format_filename() which takes care of canonicalizing
control characters in a given filename and truncate the filename
if necessary. Filenames are currently left-truncated since the file
name proper and the directory containing it is more significant
than the directory names closer to the root.
On Windows, we make sure that the drive letter is not truncated.
The truncation rules may have to be further tweaked later.
This feature properly truncated file names in the info line and
in the auto-completion popup.
|
|
|
|
* use small values for low precedence
|
|
|
|
* SciTECO now has the same operator precedence table as C.
* It is numerically important whether different operators
have the same precedence. E.g. "5*2/4" used to be evaluated
by SciTECO as "5*(2/4)" since division had a higher precedence
than multiplication. Within in real (!) numbers this would
be the expected evaluation order.
Users of other programming languages however would expect
the expression to be evaluated as "(5*2)/4" which makes
a numerical difference when working with integers.
* Operator precedence has been implemented by encoding it
into the enumeration values used to represent different
operators.
Calculating the precedence of a given operator can then
be done very efficiently and elegantly (in our case using
a plain right shift operation).
* documentation updated. We use a precedence table now.
|
|
* Haiku can be handled like UNIX in most respects
since it is POSIX compliant, has a UNIX-like terminal
emulator and uses ncurses.
* still the Glib platform macro is G_OS_HAIKU instead of
G_OS_UNIX, so the preprocessor conditionals had to be adapted.
* the only functional difference between a Haiku and UNIX build
is the default SCITECOCONFIG path.
We use the config path returned by Glib instead of $HOME,
so .teco_ini will be in ~/config/settings on Haiku.
Other UNIX ports appear to use the same conventions.
* Some Haiku-specific restrictions still apply:
* Haiku's terminal is xterm-compatible, but only supports
8 colors. Therefore only the terminal.tes color scheme
can be used and the terminal must be set up to
"Use bright instead of bold text".
* The terminal has artifacts. This appears to be a Haiku
bug and affects other curses applications as well.
* GTK is yet unsupported on Haiku, so there may never be
a GUI port (unless someone writes a QT GUI for SciTECO).
* SciTECO cannot be built with the legacy gcc2 used for
BeOS compatibility on Haiku. This would require too many
changes for an obsolete platform.
BeOS and the x86_gcc2 platform of Haiku will therefore
never be supported.
The PPC and ARM platforms of Haiku should work but are untested.
* a HaikuPorts recipe will be provided for the next regular
SciTECO release. This should hopefully allow installation via
HaikuDepot.
|
|
* the old implementation was totally broken, which was to be expected
* we can at least provide a version that always returns an absolute
path, even though it does not canonicalizes
* fixes e.g. Haiku builds for the time being.
Haiku however is mostly POSIX compliant and could be handled
like UNIX.
* simplified the UNIX implementation of get_absolute_path()
|
|
* there appears to be a bug in Haiku's glib v2.38
g_main_context_unref(). However I could not find a fix
in glib's log.
* as a workaround, simply do not unref the main context.
Memory is reclaimed after program termination anyway.
|
|
* necessary since in SciTECO every operator has a different
precedence. E.g. successive additions/subtractions cannot
be evaluated from left to right (by their associativity).
Perhaps this should be changed.
* subtraction must have a higher precedence than addition,
since (a+b)-c == a+(b-c)
* division must have a higher precedence than multiplication
since (a*b)/c == a*(b/c).
This is not quite true for integer arithmetics.
* this fixes expressions like 5-1+1 which were counterintuitively
evaluated like 5-(1+1)
|
|
* the lexer names used in SciTE property files are not SCLEX constants
but the internal LexerModule names, so auto-generated SciTECO lexer
configurations can only be set by name, i.e. via SETLEXERLANGUAGE,
since we cannot easily map those names to SCLEX constants.
* should be about as fast as using SCI_SETLEXER (since SciTECO has to
look up symbolic names as well at runtime).
* this especially fixes opening *.mak files -- often Makefiles
but identified as "Mako" files. The macro "lexer.set.mako" used
the wrong SCLEX_ symbol.
* will also fix the HTML and all other lexers that use the
SCLEX_HTML/hypertext lexer.
* all lexer files have been updated, to be more compatible
with scite2co.lua's output. This eases lexer updates in the
future.
|
|
* use black on light white as the default popup colors
(e.g. in --no-profile mode). this looks less annoying than
black on light blue and is more often more readable
(since light blue will be rendered quite dark often).
It's no longer necessary to highlight the popup with (distinct)
colors.
Keeping the foreground black ensures that there's a brighter
foreground color for bold entries in case the terminal does
not support bold fonts.
* the `terminal.tes` scheme keeps the default popup style.
However since it uses white on black as the default colors,
this will often still stand out from the message line
(on 16 color terminals).
* `solarized.tes` now uses a similar high-contrast popup style
with either a bright or dark background.
The foreground colors have been chosen so that bright variants
exist for non-bold terminals - although these bright variants
do not stand out very much.
|
|
* InterfaceCurses::Popup has been turned into a proper class.
This made sense since it is more complicated now and allows
us to isolate popup-related code.
This will also ease moving the popup code as a widget into
its own file later (it seems we will need subdirs per interface
anyway).
* the popup is now implemented using curses pads of which pages
are copied into the popup window (to implement cycling through
the list of entries). This simplifies things conceptually.
* instead of a trailing ellipsis, scrollbars are shown if the popup
area is too small to show all entries.
This looks much better and consistent with regard to Scinterm's
scrollbars. Also, the planned GTK+ popup widget rewrite will have
scroll bars, too for cycling through the list of entries.
Therefore, the popup window will now always be the same size
when cycling. This also looks better.
* Borders are drawn around the popup area.
This makes sense since the popup area had to be colored distinctly
just to be able to discern it from the rest of the UI (esp. the
Scintilla view). Now, less annoying colors may be used by default
or set up in color profiles while still maintaining good visibility.
Also, with the borders added, the popup area looks more consistent
when it covers the entire screen.
* Entries that are too long to fit on the screen (e.g. long file names)
are now truncated with a bold/underline ellipsis.
* Use scintilla_noutrefresh() to refresh the Scintilla view.
Since popups have to be refreshed __after__ the Scintilla view,
this improves performance significantly and reduces flickering
when displaying large popups.
|
|
* improves performance and reduces flickering when showing
large popup windows (on top of the Scintilla window).
* Unfortunately, even with scintilla_noutrefresh(), there is still
some flickering occasionally.
|
|
* it's used opaquely by SciTECO so it should be listed in the
overview of "special" Q-Registers.
|
|
* throws an error now instead of returning 0
* for <A> positions referring to the buffer end are invalid
(unlike many other commands).
* has been broken for a very long time (possibly always?)
|
|
* the problem comes from StateExpectQReg resetting the QRegMachine
too early. StateExpectQReg(QREG_OPTIONAL) states cannot call
machine.fail() in their got_register() callback.
In other words, commands with both optional or required registers
depending on runtime state cannot be modelled with StateExpectQReg.
* instead we derive from State directly - most functionality is
encapsulated in QRegSpecMachine anyway.
* might also fix crashes on some systems.
|
|
* palette changes are persistent on PDCurses/win32, too.
Fortunately, on this port we can reliably query the console palette.
This is done ONLY on PDcurses/win32 since on other ports (notably
ncurses), this can cause more harm than it helps.
* support palette restoration on xterm by hardcoding the appropriate
escape sequence. $TERM cannot be used to identify xterm, but
looking at $XTERM_VERSION is sufficient hopefully.
|
|
in other words, PDCurses/win32a now has programmable window-close
behaviour.
|
|
|
|
* see http://ethanschoonover.com/solarized
* I don't know if I want this port to be linked into
the main solarized repository as it is certainly not perfect.
* However both light and dark modes are supported and
usable since to SciTECO's new theming support.
* Set -U[solarized.light] before munging to enable light
mode.
* Registers function key F5 to toggle between light and
dark modes.
* Works on ncurses (with some restrictions) and almost all
other PDCurses ports.
GTK+ also works somewhat, but not all parts of the GTK+
UI are currently themable.
|
|
on Scintilla styles
* The first 16 colors of the terminal palette can be redefined
using the 3EJ property - with all restrictions that ncurses
and UNIX terminals impose on us.
It is still important to be able to redefine the palette for
some color schemes like Solarized since it may be difficult
for users to set up the terminal emulator's palette manually.
Also when using PDCurses, setting the palette is port-specific
or only possible using init_color(). In order to allow color
redefinitions across all curses ports it makes sense if SciTECO
gives access to the color initialization of curses even if it can
guarantee very little about its semantics in general.
* 3EJ is completely ignored for GTK+
* use the STYLE_DEFAULT of the current document to style the message line.
Fg and bg colors are reversed to guarantee a good contrast to the
Scintilla view.
Errors are still hardcoded to a red background, warnings to yellow
and info messages to green.
This allows color-scheming more of SciTECO given that the
red, yellow and green terminal colors are not changed fundamentally
in the terminal's palette.
* info line is now also styled using STYLE_DEFAULT (reverse colors).
The Q-Register and buffer names are now written out using format_str()
which means that control characters are written out in REVERSE just
like in the command line.
String::canonicalize_ctl() is still used to canonicalize window
titles.
* Command line is now modelled as a curses Pad and "blitted" to the
command line window. This allowed simplification of the command line
drawing code and introduction of format_str().
The command line is now styled according to STYLE_DEFAULT (original
fg and bg colors).
The rubbed-out part of the command line can now longer be shown in
bold black - or even bold light black - since that is not visible in
all color themes. Instead it is now only shown in bold.
Command line theming problems will be gone once we use a Scintilla
view for the command line.
* The popup widget is now styled according to STYLE_CALLTIP.
* This means that all relevant parts of SciTECO's user interface
can now be themed. This allows the creation of themes that redefine
the terminal palette radically (e.g. Solarized) and the creation of
"bright" themes (e.g. Solarized/bright).
* theming of the non-scintilla-view parts of SciTECO is currently
unsupported on GTK+. The reason is that both the popup widget
and command line widgets have to be rewritten completely in GTK+
and are work in progress, so adapting the current code would be
a waste of time.
* Added a manual section about the UI and theming.
|
|
* the RGB values of the 8 standard colors defined by color.tes
were wrong (i.e. did not correspond to the normal 8 color codes
defined by Scinterm but only the bright versions).
Except for `color.black` which referred to terminal color 0.
* now we define the 16 colors defined by Scinterm, allowing color
schemes to explicitly use bright color versions without using the
bold attribute. On 8 color terminals, the bold attribute might
still be the only way to get a bright color.
* terminal.tes: Use bright default color instead of relying on bold
to get bright color versions. This is especially important for
comments which where relied on bold black to be rendered grey.
This did not work by default on terminals supporting bold fonts
(e.g. OS X Terminal) or GTK+. The scheme now works on more
terminals out of the box and on GTK+ and is thus a good default
color scheme.
* Color schemes will now also define the default style, the line number
style and caret foreground/background.
`color.calltip` is now also defined for STYLE_CALLTIP and can later
be used to style SciTECO's custom popup widget.
|
|
the CURSES_CFLAGS variable from my patches has been renamed to
CURSES_FLAGS in the upstream commits, so this was broken in
SciTECO since 3770ea2e
|
|
|
|
latest patches have been merged upstream
|
|
implicit casts
|
|
* added a new OPTIONAL behaviour for QRegSpecMachines
* allows you to implement commands that have an optional Q-Register
argument that should not be initialized if undefined.
* Using QRegSpecMachine::fail() you may still check for existence of
the register conditionally to emulate the QREG_REQUIRED behaviour.
* Using :Q for checking for register existence makes sense, because
usually you will want to check for both existence and non-emptyness
as in :Qq">. So in this common case, you no longer have to
keep in mind that the register may also be undefined.
* This finally allows us to create arrays in the Q-Register
tables without keeping a separate entry for the number of elements.
E.g. an array.0 to array.N can be iterated like this:
0Ui <:Q[array.^E\i]:; ! work with element i ! %i>
|
|
* this means that QRegSpecMachine::input() no longer has to return
a dummy QRegister in parse-only mode.
This saves an unnecessary QRegister table lookup and speeds up
parsing.
* QRegSpecMachine can now be easily extended to behave differently
when returning a Q-Register, e.g. simply returning NULL if a register
does not exist, or returning a register by prefix.
This is important for some planned commands.
* StateExpectQReg::got_register() now gets a QRegister *.
It can theoretically be NULL - still we don't have to check
for NULL in most cases since NULL is only passed in parse-only mode.
|
|
* this turned out to be a totally-useless and confusing feature.
In general values should only be implied for commands if the
advantages of implying values (i.e. if you will often want to
imply a certain value) outweigh the reduced error checking.
* this was one of the bugs discussed in #4.
|
|
* this simplifies profile setup
* should anybody wish to load the default function key macros but
not enable function key support, he/she can still explicitly call
"64,0ED" to disable them again.
|
|
* it makes little sense to keep Scintilla's default for new views
which gives margin 1 (non-folding symbols) a fixed width of 16 pixels.
The interpretation of this width is UI-dependant.
* it is more consistent to disable all margins initially.
this is also the minimalist setup shown when you run e.g. with --no-profile.
* the default look of SciTECO will be more like classic TECOs.
This is also what has been requested in #4.
* sample.teco_ini does no longer have to disable margin 1 explicitly
|
|
* ^FCLOSE is inserted when the "Close" key is pressed.
It is used by the GTK+ UI to deliver window close requests
and SIGTERM occurrences.
(this replaces the "Break" key used before in the GTK+ UI).
* The default action of ^FCLOSE is to quit SciTECO, therefore
window closing is possible even in --no-profile mode for instance.
* fixed a minor memleak in Cmdline::fnmacro()
* added ^FCLOSE implementation to fnkeys.tes to insert EX.
This currently has the disadvantage of overwriting
the error message with syntax errors if there are modified buffers
but it will at least not close the window if there are modified
buffers.
* SIGTERM will now be similar to SIGINT by default instead of
terminating SciTECO right away.
* the GTK+ UI handles SIGTERM by emulating the "close" key while
still interrupting like SIGINT.
* GTK+: SIGTERM and ^C will interrupt by sending SIGINT to the
entire process group instead of simply setting `sigint_occurred`.
This fixes interrupting EC and EG commands with long-running
or hanging programs and is relevant to the solution of #4.
|
|
* both vmsg() and stdio_msg() behave like vprintf() are allowed
to leave their `va_list` in an undefined state.
* therefore when writing messages to stdio in addition to the
message line, we have to copy the argument list.
* fixes SEGFAULTs when trying to log any message
(but this bug did not manifest on every test system)
|
|
* there's no reason for formatting into a buffer of fixed length first,
since all that is done to the format string is adding a prefix and suffix
(line feed).
* the new implementation should also be slightly faster.
|
|
* now both Curses and GTK UIs start with a non-blinking block
caret
|
|
|
|
* it is installed into the package's data dir.
It is always installed, even for Curses builds.
This means when packaging for Debian, the icon could
be part of the "sciteco-common" package.
If there will ever be more GTK-specific files that
need to be installed, this will probably change and
the icon will be installed for GTK builds only and
become part of the "sciteco-gtk" Debian package.
* if the icon could not be loaded, we fail silently.
* will not work with windows builds. On Windows, we
should just use the icon resource linked into the binary
rather than loading the image from file.
|
|
* the Curses UI does that too
|
|
* the GTK UI shows the horizontal scrollbar by default,
while Scinterm doesn't.
Since showing them with Scintilla's default settings is
ugly but setting them up properly is costly and should
be decided by the user.
|
|
* this has long been broken in the GTK UI.
It must not be possible to let Scintilla react to mouse and
keyboard events since all side-effects on the buffer state
must be via the SciTECO language.
|
|
* the execution thread does not block the main thread (with
the main loop).
* therefore if SciTECO executes a long-running macro,
the UI stays "responsive".
* also this allows us to handle ^C interruptions.
This is part of the solution to #4 for GTK+ UIs.
* to speed up execution and avoid frequent UI redraws
(now that we run concurrently, there are even more redraws),
the view change is applied only after key presses.
* also we freeze all UI updates on the view during SciTECO's
key processing.
* Closing the window, requests a graceful execution thread
shut down. This may later be extended to allow programmable
window close-behaviour using a special function key macro
(e.g. mapped to the "Break" key).
|
|
|
|
* disable ED hook while exuting the "add" hook.
This avoids the "edit" hook being invoked recursively.
* the speed improvement was not measurable, but it also won't
hurt
|