Commit graph

3481 commits

Author SHA1 Message Date
Daniel Eklöf
4ebd58e388
wayland: track is-resizing state 2021-01-26 19:32:06 +01:00
Daniel Eklöf
77186d16e8
wayland: pack booleans in the “pending” configure struct 2021-01-26 19:32:06 +01:00
Daniel Eklöf
a6456911e7
Merge branch 'strip-control-characters-from-pasted-text'
Closes #306
2021-01-26 19:31:31 +01:00
Daniel Eklöf
49d6dbd761
selection: remove duplicate ‘ESC’ in switch case 2021-01-26 19:31:23 +01:00
Daniel Eklöf
e70776fc8c
selection: DEL is 0x7f, not 0x1f 2021-01-26 19:31:23 +01:00
Daniel Eklöf
9e5ef6efac
selection: codespell: stript -> strip 2021-01-26 19:31:23 +01:00
Daniel Eklöf
357af41d7e
selection: strip non-formatting C0, BS, HT and DEL from pasted text 2021-01-26 19:31:21 +01:00
Daniel Eklöf
b31d0c080b
selection: unbreak text/uri-list decoding: we’re not using \r, not \n
Before passing the pasted text to the decoder, we now replace \r\n,
and \n, with \r.

The URI decoder was looking for a \n, which meant we failed to split
up the list and instead pasted a single “multi-line” URI.
2021-01-26 19:31:12 +01:00
Daniel Eklöf
5168aa72cd
selection: replace \r\n and \n with \r, and strip \e from pasted text
Closes #305
Closes #306
2021-01-26 19:31:12 +01:00
Daniel Eklöf
74f92c3959
Merge branch 'ime-preedit-cursor-at-the-end-of-the-preedit-string' 2021-01-26 19:30:42 +01:00
Daniel Eklöf
a763531775
ime: fix rendering of pre-edit cursor when positioned after the pre-edit string
We failed to convert the byte-indices to cell indices, resulting in a
box cursor covering the entire pre-edit string.

Note that in addition to fixing the translation from byte index to
cell index, the rendered had to be updated to dirty one extra cell
from the original grid.

Without this, we left trailing cursors behind us when the user deleted
text from the pre-edit string.
2021-01-26 19:30:34 +01:00
Daniel Eklöf
27f9972880
Merge branch 'search-fix-rendering-of-combining-characters-with-positive-x-offsets' 2021-01-26 19:30:02 +01:00
Daniel Eklöf
8f3fcf8275
search: ad-hoc workaround for combining characters with positive x-offsets
When rendering the search input box, do the same ad-hoc workaround for
combining characters with a positive x-offset as we do when rendering
normal grid cells.

In this case, we don’t *know* when we’re dealing with combining
characters. But we can detect zero-width characters. For these, check
their glyph’s x-offset. If positive, adjust it like we do when
rendering combining glyphs in the main grid, to ensure the glyph is
positioned over the _previous_ character, not the next.
2021-01-26 19:29:55 +01:00
Daniel Eklöf
a306d37470
Merge branch 'search-dont-scan-scrollback-on-cursor-movement' 2021-01-26 19:29:24 +01:00
Daniel Eklöf
dd1df60160
changelog: high cpu usage while holding down e.g. arrow keys in search mode 2021-01-26 19:29:15 +01:00
Daniel Eklöf
dd8a6fdd4d
search: don’t re-scan the scrollback unless the search string actually has changed 2021-01-26 19:29:05 +01:00
Daniel Eklöf
89b810261e
Merge branch 'search-match-composed-characters' 2021-01-26 19:28:21 +01:00
Daniel Eklöf
0397e91eaa
Merge branch 'search-box-no-non-printables' 2021-01-26 19:27:43 +01:00
Daniel Eklöf
95551f902b
changelog: search input box no longer accepts non-printables 2021-01-24 12:13:37 +01:00
Daniel Eklöf
d3d5897bb7
search: fix matching against composed characters 2021-01-24 12:05:57 +01:00
Daniel Eklöf
cbf90d67a2
search: filter out non-printable characters
Don’t allow non-printable characters in the search input string.
2021-01-24 11:32:45 +01:00
Daniel Eklöf
e7b8f95af7
Merge branch 'selection-to-clipboard'
Closes #288
2021-01-23 10:44:45 +01:00
Daniel Eklöf
3d60600897
config: selection-target: space-optimize the static ‘value’ array 2021-01-23 10:44:19 +01:00
Daniel Eklöf
b8685e17ea
doc: foot.ini: selection-target=none|primary|clipboard|both 2021-01-23 10:44:19 +01:00
Daniel Eklöf
821935e5af
changelog: selection-target=none|primary|clipboard|both 2021-01-23 10:44:17 +01:00
Daniel Eklöf
4f578189cc
config: add ‘none’ as a possible value for ‘selection-target’
When ‘selection-target’ is set to ‘none’, selecting text does not copy
the text to _any_ clipboard.

This patch also refactors the value parsing to be data driven.
2021-01-23 10:43:59 +01:00
Daniel Eklöf
07f6b3b1af
selection: copy selected text to the target configured by ‘selection-target’
Closes #288
2021-01-23 10:43:59 +01:00
Daniel Eklöf
e69ca255b0
config: add new option ‘selection-target’
This option controls the clipboard target that selected text should be
copied to.
2021-01-23 10:43:59 +01:00
Daniel Eklöf
1253f5e27e
Merge branch 'mouse-button-encoding-of-button-6-7' 2021-01-23 10:41:35 +01:00
Daniel Eklöf
1bcee31398
changelog: add bug ref to the ‘FreeBSD support’ entry 2021-01-23 10:19:28 +01:00
Daniel Eklöf
a6b66b73b1
Merge branch 'freebsd'
Closes #238
2021-01-23 10:12:54 +01:00
Daniel Eklöf
124bc3c084
changelog: freebsd support 2021-01-23 10:12:39 +01:00
Daniel Eklöf
b2d0af7016
ci: freebsd-x64: compile with -Wno-missing-braces
The freebsd/latest image is still FreeBSD-12, with clang-8. It
generate false positive warnings:

../../foot/search.c:357:21: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
    mbstate_t ps = {0};
2021-01-23 10:07:02 +01:00
Daniel Eklöf
0d07ee03f5
shm: don’t check for __i386__ and __x86_64__ - there are other architectures out there
Instead, check for __SIZEOF_POINTER__ == 8, since what we’re really
interested in is whether we have enough virtual address space or not.
2021-01-23 09:52:42 +01:00
Daniel Eklöf
0bb928e02f
client: explicitly use a 64-bit type for ‘total_len’
This fixes an out-of-range comparison in 32-bit builds:

 client.c:289:19: error: result of comparison of constant 4294967296 with expression of type 'size_t' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
        if (total_len >= 1llu << (8 * sizeof(uint32_t)) ||
            ~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-01-23 09:52:42 +01:00
Jan Beich
73522cec27
completions/zsh: unbreak with BSD find(1)
find: -printf: unknown primary or operator
2021-01-23 09:52:42 +01:00
Jan Beich
dfc157e6b1
ci: enable freebsd-x64 job
- Add missing dependencies
- Disable terminfo to match downstream
2021-01-23 09:52:42 +01:00
Jan Beich
15f2bebdcb
meson: optionalize terminfo dependency
ncurses on FreeBSD still uses termcap(5) while foot works fine with
xterm-256color sans status line and visible bell. Having more than
one ncurses version installed may break other applications.

Document -Dterminfo=false uses --term=xterm-256color by default
2021-01-23 09:52:42 +01:00
Jan Beich
e3a1dfcf5a
meson: depend on wayland-client when using wayland-protocols
Base compiler on BSDs doesn't look where packages are installed to
avoid tainting build environment. When system fcft is installed to
the same prefix as wayland-client it passes CFLAGS that satisfy both
but when using subprojects/fcft there's a build error.

xdg-shell.c:33:10: fatal error: 'wayland-util.h' file not found
xdg-decoration-unstable-v1.c:28:10: fatal error: 'wayland-util.h' file not found
xdg-output-unstable-v1.c:28:10: fatal error: 'wayland-util.h' file not found
presentation-time.c:28:10: fatal error: 'wayland-util.h' file not found
primary-selection-unstable-v1.c:28:10: fatal error: 'wayland-util.h' file not found
text-input-unstable-v3.c:33:10: fatal error: 'wayland-util.h' file not found
In file included from ../../foot/grid.c:1:
In file included from ../../foot/grid.h:5:
In file included from ../../foot/terminal.h:19:
../../foot/wayland.h:8:10: fatal error: 'wayland-client.h' file not found
In file included from ../../foot/selection.c:1:
../../foot/selection.h:4:10: fatal error: 'wayland-client.h' file not found
2021-01-23 09:52:41 +01:00
Jan Beich
603bbcbcff
meson: require epoll-shim on BSDs
epoll/timerfd are Linux-only but BSDs have a shim via kqueue.
libwayland on FreeBSD uses epoll-shim by default, so the build may
fail at linking instead of compilation stage.

csi.c:13:10: fatal error: 'sys/timerfd.h' file not found
 #include <sys/timerfd.h>
          ^~~~~~~~~~~~~~~
selection.c:10:10: fatal error: 'sys/epoll.h' file not found
 #include <sys/epoll.h>
          ^~~~~~~~~~~~~
terminal.c:15:10: fatal error: 'sys/epoll.h' file not found
 #include <sys/epoll.h>
          ^~~~~~~~~~~~~
ld: error: undefined symbol: timerfd_create
>>> referenced by pgo.c:154 (pgo/pgo.c:154)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced by pgo.c:158 (pgo/pgo.c:158)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced by terminal.c:2022 (terminal.c:2022)
>>>               terminal.c.o:(cursor_blink_rearm_timer) in archive libpgolib.a
>>> referenced 7 more times

ld: error: undefined symbol: epoll_shim_close
>>> referenced by pgo.c:160 (pgo/pgo.c:160)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced by pgo.c:258 (pgo/pgo.c:258)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced by pgo.c:277 (pgo/pgo.c:277)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced 14 more times

ld: error: undefined symbol: epoll_shim_read
>>> referenced by pgo.c:251 (pgo/pgo.c:251)
>>>               pgo.p/pgo_pgo.c.o:(main)
>>> referenced by terminal.c:237 (terminal.c:237)
>>>               terminal.c.o:(fdm_ptmx) in archive libpgolib.a
>>> referenced by terminal.c:363 (terminal.c:363)
>>>               terminal.c.o:(fdm_blink) in archive libpgolib.a
>>> referenced 8 more times

ld: error: undefined symbol: timerfd_settime
>>> referenced by terminal.c:301 (terminal.c:301)
>>>               terminal.c.o:(fdm_ptmx) in archive libpgolib.a
>>> referenced by terminal.c:309 (terminal.c:309)
>>>               terminal.c.o:(fdm_ptmx) in archive libpgolib.a
>>> referenced by terminal.c:2041 (terminal.c:2041)
>>>               terminal.c.o:(cursor_blink_rearm_timer) in archive libpgolib.a
>>> referenced 11 more times

ld: error: undefined symbol: timerfd_gettime
>>> referenced by selection.c:1165 (selection.c:1165)
>>>               selection.c.o:(selection_start_scroll_timer) in archive libpgolib.a
2021-01-23 09:52:41 +01:00
Jan Beich
d97b538917
meson: libpthread may lack C11 threads e.g., on FreeBSD
ld: error: undefined symbol: mtx_init
>>> referenced by terminal.c:579 (terminal.c:579)
>>>               terminal.c.o:(initialize_render_workers) in archive libpgolib.a

ld: error: undefined symbol: thrd_create
>>> referenced by terminal.c:595 (terminal.c:595)
>>>               terminal.c.o:(initialize_render_workers) in archive libpgolib.a
>>> referenced by terminal.c:935 (terminal.c:935)
>>>               terminal.c.o:(reload_fonts) in archive libpgolib.a
>>> did you mean: thr_create
>>> defined in: /lib/libc.so.7

ld: error: undefined symbol: mtx_lock
>>> referenced by terminal.c:1410 (terminal.c:1410)
>>>               terminal.c.o:(term_destroy) in archive libpgolib.a

ld: error: undefined symbol: mtx_unlock
>>> referenced by terminal.c:1427 (terminal.c:1427)
>>>               terminal.c.o:(term_destroy) in archive libpgolib.a

ld: error: undefined symbol: thrd_join
>>> referenced by terminal.c:1462 (terminal.c:1462)
>>>               terminal.c.o:(term_destroy) in archive libpgolib.a
>>> referenced by terminal.c:947 (terminal.c:947)
>>>               terminal.c.o:(reload_fonts) in archive libpgolib.a

ld: error: undefined symbol: mtx_destroy
>>> referenced by terminal.c:1466 (terminal.c:1466)
>>>               terminal.c.o:(term_destroy) in archive libpgolib.a
2021-01-23 09:52:41 +01:00
Jan Beich
36b6cc020a
meson: don't force POSIX compliance
foot uses a number of functions not in any POSIX version. On non-glibc
systems defining _POSIX_C_SOURCE usually hides non-compliant interfaces.

In file included from grid.c:1:
In file included from grid.h:4:
terminal.h:45:15: error: expected parameter declarator
static_assert(sizeof(struct attributes) == 8, "bad size");
              ^
terminal.h:45:15: error: expected ')'
terminal.h:45:14: note: to match this '('
static_assert(sizeof(struct attributes) == 8, "bad size");
             ^
terminal.h:45:1: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
static_assert(sizeof(struct attributes) == 8, "bad size");
^
terminal.h:55:15: error: expected parameter declarator
static_assert(sizeof(struct cell) == 12, "bad size");
              ^
terminal.h:55:15: error: expected ')'
terminal.h:55:14: note: to match this '('
static_assert(sizeof(struct cell) == 12, "bad size");
             ^
terminal.h:55:1: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
static_assert(sizeof(struct cell) == 12, "bad size");
^
grid.c:317:32: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            int width = max(1, wcwidth(wc));
                               ^
grid.c:317:32: note: did you mean '__wcwidth'?
/usr/include/_ctype.h:161:1: note: '__wcwidth' declared here
__wcwidth(__ct_rune_t _c)
^
selection.c:1695:9: error: implicit declaration of function 'pipe2' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (pipe2(fds, O_CLOEXEC) == -1) {
        ^
selection.c:1695:9: note: did you mean 'pipe'?
/usr/include/unistd.h:358:6: note: 'pipe' declared here
int      pipe(int *);
         ^
selection.c:1842:9: error: implicit declaration of function 'pipe2' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (pipe2(fds, O_CLOEXEC) == -1) {
        ^
selection.c:2129:9: error: implicit declaration of function 'pipe2' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (pipe2(fds, O_CLOEXEC) == -1) {
        ^
vt.c:241:12: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    assert(wcwidth(c) == 1);
           ^
vt.c:241:12: note: did you mean '__wcwidth'?
/usr/include/_ctype.h:161:1: note: '__wcwidth' declared here
__wcwidth(__ct_rune_t _c)
^
vt.c:544:17: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    int width = wcwidth(wc);
                ^
csi.c:713:35: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                const int width = wcwidth(term->vt.last_printed);
                                  ^
csi.c:713:35: note: did you mean '__wcwidth'?
/usr/include/_ctype.h:161:1: note: '__wcwidth' declared here
__wcwidth(__ct_rune_t _c)
^
ime.c:169:25: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        int width = max(wcwidth(term->ime.preedit.text[i]), 1);
                        ^
ime.c:169:25: note: did you mean '__wcwidth'?
/usr/include/_ctype.h:161:1: note: '__wcwidth' declared here
__wcwidth(__ct_rune_t _c)
^
quirks.c:81:22: error: implicit declaration of function 'strcasestr' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            is_kde = strcasestr(cur_desktop, "kde") != NULL;
                     ^
quirks.c:81:53: error: comparison between pointer and integer ('int' and 'void *') [-Werror,-Wpointer-integer-compare]
            is_kde = strcasestr(cur_desktop, "kde") != NULL;
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~
config.c:89:15: error: expected ')'
static_assert(ALEN(binding_action_map) == BIND_ACTION_COUNT,
              ^
util.h:5:18: note: expanded from macro 'ALEN'
 #define ALEN(v) (sizeof(v) / sizeof((v)[0]))
                  ^
config.c:358:12: error: implicit declaration of function 'strcasecmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    return strcasecmp(s, "on") == 0 ||
           ^
config.c:358:12: note: did you mean 'wcscasecmp'?
/usr/include/wchar.h:223:5: note: 'wcscasecmp' declared here
int     wcscasecmp(const wchar_t *, const wchar_t *);
        ^
config.c:510:23: error: implicit declaration of function 'strcasecmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        bool center = strcasecmp(mode, "center") == 0;
                      ^
config.c:1243:13: error: implicit declaration of function 'strcasecmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        if (strcasecmp(value, "none") == 0) {
            ^
config.c:1330:13: error: implicit declaration of function 'strcasecmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        if (strcasecmp(value, "none") == 0) {
            ^
config.c:1534:13: error: implicit declaration of function 'strcasecmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        if (strcasecmp(value, "none") == 0) {
            ^
spawn.c:20:9: error: implicit declaration of function 'pipe2' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (pipe2(pipe_fds, O_CLOEXEC) < 0) {
        ^
spawn.c:20:9: note: did you mean 'pipe'?
/usr/include/unistd.h:358:6: note: 'pipe' declared here
int      pipe(int *);
         ^
spawn.c:52:5: error: implicit declaration of function 'static_assert' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    static_assert(sizeof(_errno) == sizeof(errno), "errno size mismatch");
    ^
server.c:309:21: error: implicit declaration of function 'accept4' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    int client_fd = accept4(
                    ^
server.c:309:21: note: did you mean 'accept'?
/usr/include/sys/socket.h:679:5: note: 'accept' declared here
int     accept(int, struct sockaddr * __restrict, socklen_t * __restrict);
        ^
server.c:310:59: error: use of undeclared identifier 'SOCK_CLOEXEC'
        server->fd, (struct sockaddr *)&addr, &addr_size, SOCK_CLOEXEC | SOCK_NONBLOCK);
                                                          ^
server.c:310:74: error: use of undeclared identifier 'SOCK_NONBLOCK'
        server->fd, (struct sockaddr *)&addr, &addr_size, SOCK_CLOEXEC | SOCK_NONBLOCK);
                                                                         ^
server.c:341:44: error: use of undeclared identifier 'SOCK_CLOEXEC'
    int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
                                           ^
server.c:341:59: error: use of undeclared identifier 'SOCK_NONBLOCK'
    int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
                                                          ^
server.c:371:44: error: use of undeclared identifier 'SOCK_CLOEXEC'
    int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
                                           ^
server.c:371:59: error: use of undeclared identifier 'SOCK_NONBLOCK'
    int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
                                                          ^
shm.c:138:26: error: use of undeclared identifier '_SC_PAGE_SIZE'
        long n = sysconf(_SC_PAGE_SIZE);
                         ^
shm.c:279:15: error: implicit declaration of function 'memfd_create' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
              ^
shm.c:279:15: note: did you mean 'timer_create'?
/usr/include/time.h:170:5: note: 'timer_create' declared here
int timer_create(clockid_t, struct sigevent *__restrict, timer_t *__restrict);
    ^
shm.c:279:60: error: use of undeclared identifier 'MFD_CLOEXEC'
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
                                                           ^
shm.c:279:74: error: use of undeclared identifier 'MFD_ALLOW_SEALING'
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
                                                                         ^
shm.c:350:15: error: use of undeclared identifier 'F_SEAL_GROW'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
              ^
shm.c:350:29: error: use of undeclared identifier 'F_SEAL_SHRINK'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
                            ^
shm.c:350:71: error: use of undeclared identifier 'F_SEAL_SEAL'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
                                                                      ^
shm.c:349:24: error: use of undeclared identifier 'F_ADD_SEALS'
    if (fcntl(pool_fd, F_ADD_SEALS,
                       ^
slave.c:151:28: error: implicit declaration of function 'ptsname' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    const char *pts_name = ptsname(ptmx);
                           ^
slave.c:151:28: note: did you mean 'ttyname'?
/usr/include/unistd.h:371:7: note: 'ttyname' declared here
char    *ttyname(int);
         ^
slave.c:151:17: error: incompatible integer to pointer conversion initializing 'const char *' with an expression of type 'int' [-Werror,-Wint-conversion]
    const char *pts_name = ptsname(ptmx);
                ^          ~~~~~~~~~~~~~
slave.c:153:9: error: implicit declaration of function 'grantpt' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (grantpt(ptmx) == -1) {
        ^
slave.c:157:9: error: implicit declaration of function 'unlockpt' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (unlockpt(ptmx) == -1) {
        ^
slave.c:252:9: error: implicit declaration of function 'pipe2' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (pipe2(fork_pipe, O_CLOEXEC) < 0) {
        ^
slave.c:252:9: note: did you mean 'pipe'?
/usr/include/unistd.h:358:6: note: 'pipe' declared here
int      pipe(int *);
         ^
render.c:1166:28: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        int width = max(1, wcwidth(cell->wc));
                           ^
render.c:1166:28: note: did you mean '__wcwidth'?
/usr/include/_ctype.h:161:1: note: '__wcwidth' declared here
__wcwidth(__ct_rune_t _c)
^
render.c:1932:9: error: implicit declaration of function 'gettimeofday' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        gettimeofday(&start_time, NULL);
        ^
render.c:2240:28: error: implicit declaration of function 'wcwidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        widths[i] = max(1, wcwidth(text[i]));
                           ^
render.c:2243:32: error: implicit declaration of function 'wcswidth' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    const size_t total_cells = wcswidth(text, text_len);
                               ^
render.c:2243:32: note: did you mean 'wcwidth'?
render.c:1166:28: note: 'wcwidth' declared here
        int width = max(1, wcwidth(cell->wc));
                           ^
util.h:7:27: note: expanded from macro 'max'
 #define max(x, y) ((x) > (y) ? (x) : (y))
                           ^
input.c:1540:9: error: implicit declaration of function 'gettimeofday' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        gettimeofday(&now, NULL);
        ^
2021-01-23 09:52:41 +01:00
Jan Beich
f2ad02aaab
render: set thread name in a portable way
prctl is Linux-only but pthread_setname_np is same as PR_SET_NAME.
Solaris and FreeBSD >= 13 have pthread_setname_np similar to Linux.
DragonFly, OpenBSD, FreeBSD < 13 lack pthread_setname_np but provide
pthread_set_name_np which doesn't return a value. NetBSD requires 3
arguments for pthread_setname_np where the last one is void *.

render.c:8:10: fatal error: 'sys/prctl.h' file not found
 #include <sys/prctl.h>
          ^~~~~~~~~~~~~
render.c🔢9: error: implicit declaration of function 'prctl' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (prctl(PR_SET_NAME, proc_title, 0, 0, 0) < 0)
        ^
render.c🔢15: error: use of undeclared identifier 'PR_SET_NAME'
    if (prctl(PR_SET_NAME, proc_title, 0, 0, 0) < 0)
              ^
2021-01-23 09:52:40 +01:00
Jan Beich
db9dc7e908
shm: unbreak build without memfd_create
New FreeBSD versions have memfd_create but other BSDs don't.

pgo/pgo.c:260:22: error: implicit declaration of function 'memfd_create' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        int mem_fd = memfd_create("foot-pgo-ptmx", MFD_CLOEXEC);
                     ^
pgo/pgo.c:260:52: error: use of undeclared identifier 'MFD_CLOEXEC'
        int mem_fd = memfd_create("foot-pgo-ptmx", MFD_CLOEXEC);
                                                   ^
shm.c:13:10: fatal error: 'linux/mman.h' file not found
 #include <linux/mman.h>
          ^~~~~~~~~~~~~~
shm.c:277:15: error: implicit declaration of function 'memfd_create' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
              ^
shm.c:277:60: error: use of undeclared identifier 'MFD_CLOEXEC'
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
                                                           ^
shm.c:277:74: error: use of undeclared identifier 'MFD_ALLOW_SEALING'
    pool_fd = memfd_create("foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
                                                                         ^
shm.c:339:15: error: use of undeclared identifier 'F_SEAL_GROW'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
              ^
shm.c:339:29: error: use of undeclared identifier 'F_SEAL_SHRINK'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
                            ^
shm.c:339:71: error: use of undeclared identifier 'F_SEAL_SEAL'
              F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
                                                                      ^
shm.c:338:24: error: use of undeclared identifier 'F_ADD_SEALS'
    if (fcntl(pool_fd, F_ADD_SEALS,
                       ^
2021-01-23 09:52:40 +01:00
Jan Beich
013e3c2d80
shm: disable fallocate optimization if not supported
shm.c:301:26: error: implicit declaration of function 'fallocate' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        can_punch_hole = fallocate(
                         ^
shm.c:302:22: error: use of undeclared identifier 'FALLOC_FL_PUNCH_HOLE'
            pool_fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 1) == 0;
                     ^
shm.c:302:45: error: use of undeclared identifier 'FALLOC_FL_KEEP_SIZE'
            pool_fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 1) == 0;
                                            ^
shm.c:432:9: error: implicit declaration of function 'fallocate' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (fallocate(
        ^
shm.c:434:13: error: use of undeclared identifier 'FALLOC_FL_PUNCH_HOLE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
            ^
shm.c:434:36: error: use of undeclared identifier 'FALLOC_FL_KEEP_SIZE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
                                   ^
shm.c:501:9: error: implicit declaration of function 'fallocate' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (fallocate(
        ^
shm.c:503:13: error: use of undeclared identifier 'FALLOC_FL_PUNCH_HOLE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
            ^
shm.c:503:36: error: use of undeclared identifier 'FALLOC_FL_KEEP_SIZE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
                                   ^
shm.c:597:9: error: implicit declaration of function 'fallocate' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    if (fallocate(
        ^
shm.c:599:13: error: use of undeclared identifier 'FALLOC_FL_PUNCH_HOLE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
            ^
shm.c:599:36: error: use of undeclared identifier 'FALLOC_FL_KEEP_SIZE'
            FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
                                   ^
2021-01-23 09:52:40 +01:00
Jan Beich
e35e98ea94
shm: silence -Wunused-function on i386
shm.c:134:1: error: unused function 'page_size' [-Werror,-Wunused-function]
page_size(void)
^
2021-01-23 09:52:40 +01:00
Daniel Eklöf
000ddd900a
terminal: fix encoding of mouse buttons 6 and 7 in mouse events
These two buttons were encoded using the *exact* same numbers as
button 4 and 5 (scroll wheel up/down), making it impossible to
distinguish them.

The relevant section from XTerm’s control sequences documentation is:

    Some wheel mice can send additional button events, e.g., by tilting the
    scroll wheel left and right.

    Additional buttons are encoded like the wheel mice,

    o  by adding 64 (for buttons 6 and 7), or

    o  by adding 128 (for buttons 8 through 11).
2021-01-22 17:07:14 +01:00
Craig Barnes
e642373658 themes: fix typos in themes/selenized-black 2021-01-22 05:07:28 +00:00
Daniel Eklöf
6167bf2e61
themes: add selenized 2021-01-21 15:11:08 +01:00
Jan Beich
67e713ff3a
slave: skip e310487dae if not supported
slave.c:188:26: error: use of undeclared identifier 'IUTF8'
        flags.c_iflag |= IUTF8;
                         ^
2021-01-21 12:00:02 +01:00