Commit Graph

822 Commits (8f578ee73d8a8b4b2f94782425cca11c2455a506)

Author SHA1 Message Date
C. McEnroe 8f578ee73d Add bindings for C-Left and C-Right
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.
2021-03-07 18:18:37 -05:00
C. McEnroe d88ffd9f3f Add all window names to global completion
Don't want to be touching window names much though, otherwise query
window names would interfere with tab completion within a channel.
2021-03-02 14:45:01 -05:00
C. McEnroe f4e8f055fb Add workaround for lack of A_ITALIC in old ncurses
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.
2021-02-27 16:28:21 -05:00
C. McEnroe 06fb025496 Error if hash bound is less than 2
Bad things happen otherwise.
2021-02-25 22:36:06 -05:00
C. McEnroe 761979d33e Use separate reply counts for automatic join topics/names
This restores showing the topic and names for automatic joined
channels, while still avoiding touching the windows, by using Cold
heat.
2021-02-21 14:23:17 -05:00
C. McEnroe 4b26ae23cd Add C-z p to manually toggle paste mode
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...
2021-02-15 19:15:38 -05:00
C. McEnroe 66c67542ff Refactor Focus and Paste mode strings 2021-02-15 19:15:38 -05:00
C. McEnroe 3b9e778dac Don't insert wchar_t if it can't be converted to mbs
Otherwise it could hit the assertion in editBuffer while converting
to mbs for consumption by the rest of the program.

It's possibly to trigger this with LC_ALL=C and typing C-z C-v M-a,
for example.
2021-02-15 19:15:38 -05:00
C. McEnroe a92f1260ea Don't expand macro if it can't be converted to mbs
Otherwise expanding a macro could hit the assertion in editBuffer
while converting to mbs for consumption by the rest of the program.
2021-02-15 18:41:46 -05:00
C. McEnroe 7130177f9a Add donation link to README 2021-02-08 20:27:49 -05:00
C. McEnroe d3ab2ff2e7 Fix /help LESS setting for updated manual
The new reference to the COMMANDS section at the beginning of the
manual would get matched instead.
2021-02-08 18:49:39 -05:00
Klemens Nanni ab744d74e1 chat.tmux.conf: Add help window for restricted mode, use neww -S
Provide a hotkey to browser the manual in its own window.

After input, nicm (tmux upstream) added "-S" to tmux(1) such that
the "new-window" command (in combination with "-d") first looks
for the given window name and selects the window if it exists
instead of trying to create a window that already exists.

Given that this makes chat.tmux.conf idempotent, we can now also reload
it at runtime to refresh settings.
2021-02-08 18:31:06 -05:00
C. McEnroe 180287164c Only treat a single -j join as explicit
In other words, only automatically switch to an automatically joined
channel window if there's only one. Otherwise, stay on the <network>
window and avoid touching the channel windows with their automatic
topic and names replies.

This fixes unintentionally clearing saved window unread counts when
rejoining channels automatically by switching to them as they are
joined.
2021-02-04 21:25:59 -05:00
C. McEnroe 7807848bda Add C-z C-v for literal next
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.
2021-02-03 14:52:16 -05:00
Klemens Nanni 0c5730708f chat.tmux.conf: Improve respawn, fix comment
Only respawn the pane not the entire window to avoid killing other
possibly existing panes in the same window.
2021-02-03 14:31:44 -05:00
C. McEnroe 32bf43660f Also skip marking swap window
Third time's the charm?
2021-01-31 15:33:41 -05:00
C. McEnroe beeddcb11f Actually scroll to first line for "scroll to top" 2021-01-29 23:32:47 -05:00
C. McEnroe 89a2fac05a Only skip setting swap in windowShow
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.
2021-01-29 23:24:58 -05:00
C. McEnroe d16ee121e5 Add Repology links to README
LibreTLS in particular is gaining traction in packaging, so point
to Repology pages to make users' lives easier.
2021-01-28 16:13:52 -05:00
Klemens Nanni e1da93b0aa Add key bindings to chat.tmux.conf, nits 2021-01-28 16:00:04 -05:00
C. McEnroe 75b0c02227 Add 335 to WHOIS responses
This is used by InspIRCd to indicate if a user is a bot (if it set
user mode +B).
2021-01-28 15:31:00 -05:00
C. McEnroe 422fe6cd29 Move threshold and mute indicators directly after number
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.
2021-01-28 01:49:41 -05:00
C. McEnroe 5dde56d692 Save window time display toggle 2021-01-27 15:35:26 -05:00
C. McEnroe b4c26a2cab Measure timestamp width using ncurses
This allows for non-ASCII characters in timestamps, and simplifies
things by including the trailing space in the width.
2021-01-27 14:55:31 -05:00
C. McEnroe d6ff9e53cf Change default timestamp format to %X
This respects the user's locale settings.
2021-01-27 14:18:20 -05:00
C. McEnroe c118c594e3 Add toggleable display of timestamps 2021-01-27 00:15:46 -05:00
C. McEnroe 604de4ff5a Only list up until scroll position with M-l 2021-01-26 23:08:58 -05:00
C. McEnroe d7d4572220 Preserve scroll position across reflows
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.
2021-01-26 22:33:16 -05:00
C. McEnroe 52c58128c8 Add numbers to buffer lines
This directly correlates hard-wrapped lines with the soft lines
they were wrapped from.

Choosing uint here because it doesn't change the size of struct
Line. It doesn't at all matter since buffers only hold 1024 lines
at a time anyway.
2021-01-26 22:14:12 -05:00
C. McEnroe a18ced53df Rename and move scroll functions closer to where they are used 2021-01-26 19:53:38 -05:00
C. McEnroe 76670b2fb1 Factor out windowReflow 2021-01-26 19:33:17 -05:00
C. McEnroe 6cab788e6a Use Warm heat for replies to user-initiated commands
Otherwise they are invisible with M-+ and commands having no output
is confusing.
2021-01-26 17:24:05 -05:00
C. McEnroe bee17a8278 Clarify configuration path interpretations 2021-01-26 16:40:16 -05:00
C. McEnroe e89e6dda99 Tighten up XDG base directory path handling
Don't search base directories if path starts with "/", "./" or
"../", but still do if the path simply starts with ".". Bail early
if HOME is needed but unset. Don't attempt to open the original
path in configOpen and dataOpen.
2021-01-26 15:51:40 -05:00
C. McEnroe 1a2a1e59dd Expand the opening paragraph of the manual 2021-01-26 14:54:13 -05:00
C. McEnroe bd210e0f35 Disable notify in restricted mode
catgirl shouldn't try to execute a command if it is misconfigured
with both restrict and notify.
2021-01-25 18:27:07 -05:00
C. McEnroe 86b79096e0 Don't print timestamps for blank lines in bufferList 2021-01-25 17:27:54 -05:00
C. McEnroe 609c9bd0ac Do not copy time to wrapped lines 2021-01-25 17:23:17 -05:00
C. McEnroe d7fdc5d36b Add protocol coverage to non-features list
I don't feel that 100% protocol extension support should at all be
a goal.
2021-01-25 14:45:30 -05:00
C. McEnroe 61b42713e6 Move mention of pledge(2) and unveil(2) to README
The manual is the wrong place to document platform support.
2021-01-25 13:58:02 -05:00
C. McEnroe 61bd4079a0 Preserve order of filters when removing
Filters should be kept in order since the first one that matches,
wins. This lets highlights or ignores take priority over each other,
if desired.
2021-01-23 16:15:39 -05:00
C. McEnroe 9adedc660b Fix /unignore command
Yikes, copy-paste fail.
2021-01-23 16:12:25 -05:00
C. McEnroe bc29082f9d Remove use of "%n" to appease de Raadt
Sure, it was completely unnecessary, but I resent being told how
to use snprintf.

https://cvsweb.openbsd.org/src/lib/libc/stdio/vfprintf.c?rev=1.79&content-type=text/x-cvsweb-markup
2021-01-23 12:34:30 -05:00
Klemens Nanni bc3bd95648 Drop filesystem access iff possible
Log files and state save/restore both require read/write access to
the filesystem, both during start and exit.

If neither features are used, catgirl may run with "stdio tty".
2021-01-23 00:48:19 -05:00
Klemens Nanni 837c9efce4 Drop exec capability iff restricted
Nothing must be executed when running /copy, et al.
2021-01-23 00:48:19 -05:00
Klemens Nanni c93c56e4e5 Drop network capability after ircConnect()
catgirl has no reconnect feature and generally must not do
anything but read/write from/to the connected socket which
does not require "inet" or "dns" promises.
2021-01-23 00:48:19 -05:00
Klemens Nanni a19f48d840 Call pledge(2) after unveil(2)
Simplify logic, be more idiomatic and finalize by pledging after
all unveiling is done by omitting the "unveil" promise and thereby
not allowing further calls to it.
2021-01-23 00:48:19 -05:00
C. McEnroe 95bb627ffb Separate kiosk mode from restrict mode
Restrict mode will focus on sandboxing, while kiosk will continue
to restrict IRC access through a public kiosk. Kiosk mode without
restrict mode allows execution of man 1 catgirl with /help, assuming
external sandboxing.

The /list and /part commands are also added to the list of disabled
commands in kiosk mode, since they are pointless without access to
/join.
2021-01-23 00:48:15 -05:00
C. McEnroe 6ee0aea9e5 Simplify windowUpdate loops and factor out windowTop
No idea why I made that more complicated than it had to be looping
backwards.
2021-01-21 11:57:23 -05:00
C. McEnroe 6a6456a0dc Document that M-l shows timestamps 2021-01-21 10:36:29 -05:00