Age | Commit message (Collapse) | Author |
|
|
|
Prevents two instances of catgirl from using the same save file and
clobbering each other's data.
|
|
Avoids another small TOCTOU. Rewind before loading since "a+" sets
the file position at the end. Remove unnecessary fseek after
truncation, since "a+" always writes at the end of the file.
|
|
Opening the same file *path* twice is a TOCTOU, although not a critical
one: worst case we load from one file and save to another - the impact
depends on how and when catgirl is started the next anyway.
More importantly, keeping the file handle open at runtime allows us to
drop all filesystem related promises for `-s/save' on OpenBSD.
uiLoad() now opens "r+", meaning "Open for reading and writing." up
front so uiSave() can write to it. In the case of a nonexistent save
file, it now opens with "w" meaning "Open for writing. The file is
created if it does not exist.", i.e. the same write/create semantics as
"w" except uiLoad() no longer truncates. existing files.
uiSave() now truncates the save file to avoid appending in general.
|
|
Separate churn from actual change in upcoming diff,
no functional change.
|
|
|
|
When waddnstr is called with a string that would extend past the
end of the window, the string is truncated, the cursor remains at
the last column, and ERR is returned. If this error is ignored and
the loop continues, the next call to waddnstr overwrites the character
at this column, resulting in a slight visual artifact. When the
window is too small to fit the full status line, it is effectively
truncated by one space on the right, since the string shown for
each channel begins with a space. Additionally, if the last window
is the current window, the space is shown with a colored background.
To fix this, when waddnstr returns ERR, exit the loop in styleAdd()
early return -1 to propogate this error down to the caller.
|
|
Reuse the /window command to preserve /wi abbreviation.
|
|
So you don't have to remember those dang numbers whose order makes
no sense!
|
|
Reflect what will actually be sent.
|
|
|
|
Apparently these are common. There's no terminfo for these, so
manually define the xterm sequences.
There's no documentation in the manual for the "intuitive" keys...
I'm not sure if that should continue to be the case or not.
|
|
Don't want to be touching window names much though, otherwise query
window names would interfere with tab completion within a channel.
|
|
A_BLINK has probably always existed, but there's no good reason to
ever use it, so make it do italics instead. Normally all attributes
are set by a single set_attributes string if it's set, so clear it
to force ncurses to use the reassigned enter_blink_mode string. If
the terminal has no enter_italics_mode string, then nothing will
happen.
This makes setting multiple attributes a bit less efficient, but I
don't think it's likely to make much of a difference since using
multiple attributes at once is so uncommon.
|
|
OpenBSD's xterm doesn't have bracketed paste mode, and it would be
nice to still be able to paste in several lines and collapse them
with M-q, provided one remembers to type C-z p first...
|
|
|
|
A little annoying to make it a "chord" like this, but C-v is already
used for scrolling, following Emacs-style key bindings (in order
to have a way to scroll without using "special" keys like the arrows
and page up/down), and C-z is at least already in the business of
inserting control characters. This makes it possible to manually
enter some things that are otherwise only possible with /exec printf.
|
|
Third time's the charm?
|
|
|
|
With the early return, mainUpdate doesn't get called in cases where
other functions expect windowShow to call it, such as when closing
or moving windows.
|
|
I don't know why I ruled this out originally, it's more visually
pleasing to me now especially that threshold is likely to remain
set at "+" for a long time.
|
|
|
|
This allows for non-ASCII characters in timestamps, and simplifies
things by including the trailing space in the width.
|
|
This respects the user's locale settings.
|
|
|
|
|
|
Finally! Changing the message visibility threshold doesn't totally
screw up scroll position. Neither do horizontal resizes, but vertical
resizes drift because the value of windowTop() changes before and
after...
The scroll position is anchored to the top of the window. It's
arbitrary whether to anchor the top or the bottom, but other scrolling
commands like M-p and C-r are anchored to the top, so this is
consistent.
|
|
|
|
|
|
catgirl shouldn't try to execute a command if it is misconfigured
with both restrict and notify.
|
|
|
|
No idea why I made that more complicated than it had to be looping
backwards.
|
|
|
|
Oops, forgot about these.
|
|
So they're not hidden by M-+.
|
|
|
|
So that pressing M-- repeatedly maintains the previous behavior.
|
|
|
|
|
|
Split UI initialization into two steps either side of the call to
connect, so that C-c works as interrupt while it's blocked.
|
|
|
|
getyx is so annoying this way.
|
|
This fixes the inconsistent M-u behaviour when catgirl is restarting and
reconnecting to pounce, for example.
|
|
It only used to use different code to avoid adding the blank line to the
soft buffer.
|
|
|
|
|
|
|
|
|
|
Otherwise the zero timestamps totally break save data loading! Bad!
|
|
This restores normal scrolling behaviour.
|