Compare commits

...

13 Commits

Author SHA1 Message Date
f9a102456f Fix certain non-GNU build configurations
All checks were successful
Alpine 3.19 Success
2024-04-10 18:33:23 +02:00
63dde38bff CMakeLists.txt: declare compatibility with 3.27
All checks were successful
Alpine 3.19 Success
Sadly, the 3.5 deprecation warning doesn't go away after this.
2023-08-01 03:23:25 +02:00
8844026f26 Silence compiler warnings in test targets
-Wunused-parameter
2023-08-01 03:06:39 +02:00
c64457d4cd Find ncursesw on OpenIndiana 2023-07-24 08:09:41 +02:00
97cbd7e80c Make the generated pkg-config file more reliable 2023-06-29 02:39:28 +02:00
2518b53e5a Fix usage of a nonstandard escape sequence 2023-06-14 16:23:08 +02:00
8265f075b1 Fix mouse when key_mouse contains 1006 sequence 2021-11-04 14:14:56 +01:00
2f348c79b7 Update .gitignore 2021-10-30 03:29:59 +02:00
18d16c1edb Add clang-format configuration, clean up 2021-10-30 02:53:18 +02:00
94a77a10d8 Ensure we turn off focus tracking on exit 2021-06-29 05:28:04 +02:00
d39c35e59e Enable focus tracking opportunistically 2021-06-29 05:10:33 +02:00
d47bcfb203 Make note of urxvt 9.25's 1006 support 2021-06-29 05:00:43 +02:00
ff08195973 Fix formatting 2021-06-29 04:59:15 +02:00
25 changed files with 109 additions and 23 deletions

27
.clang-format Normal file
View File

@@ -0,0 +1,27 @@
# clang-format is fairly limited, and these rules are approximate:
# - array initializers can get terribly mangled with clang-format 12.0,
# - sometimes it still aligns with space characters,
# - struct name NL { NL ... NL } NL name; is unachievable.
BasedOnStyle: GNU
ColumnLimit: 80
IndentWidth: 4
TabWidth: 4
UseTab: ForContinuationAndIndentation
BreakBeforeBraces: Allman
SpaceAfterCStyleCast: true
AlignAfterOpenBracket: DontAlign
AlignOperands: DontAlign
AlignConsecutiveMacros: Consecutive
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
IndentGotoLabels: false
# IncludeCategories has some potential, but it may also break the build.
# Note that the documentation says the value should be "Never".
SortIncludes: false
# This is a compromise, it generally works out aesthetically better.
BinPackArguments: false
# Unfortunately, this can't be told to align to column 40 or so.
SpacesBeforeTrailingComments: 2

2
.gitignore vendored
View File

@@ -7,3 +7,5 @@
/termo.files
/termo.creator*
/termo.includes
/termo.cflags
/termo.cxxflags

View File

@@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 3.0)
cmake_minimum_required (VERSION 3.0...3.27)
project (termo VERSION 0.1.0 LANGUAGES C)
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
@@ -61,6 +61,8 @@ else ()
endif ()
# -liconv may or may not be a part of libc
find_path (iconv_INCLUDE_DIRS iconv.h)
include_directories (${iconv_INCLUDE_DIRS})
find_library (iconv_LIBRARIES iconv)
if (iconv_LIBRARIES)
list (APPEND lib_libraries ${iconv_LIBRARIES})
@@ -164,9 +166,9 @@ file (WRITE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc"
"Name: ${PROJECT_NAME}\n"
"Description: Terminal key input library\n"
"Version: ${PROJECT_VERSION}\n"
"Libs: -L${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} -l${project_LIB_NAME}\n"
"Libs: -L${CMAKE_INSTALL_FULL_LIBDIR} -l${project_LIB_NAME}\n"
"Libs.private: ${lib_libraries}\n"
"Cflags: -I${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${project_INCLUDE_NAME}\n")
"Cflags: -I${CMAKE_INSTALL_FULL_INCLUDEDIR}/${project_INCLUDE_NAME}\n")
install (FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

View File

@@ -1,5 +1,5 @@
Copyright (c) 2007-2014 Paul Evans <leonerd@leonerd.org.uk>
Copyright (c) 2014-2020 Přemysl Eric Janouch <p@janouch.name>
Copyright (c) 2014-2021 Přemysl Eric Janouch <p@janouch.name>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -7,7 +7,7 @@ pkg_check_modules (Ncursesw QUIET ncursesw)
set (required_vars Ncursesw_LIBRARIES)
if (NOT Ncursesw_FOUND)
find_library (Ncursesw_LIBRARIES NAMES ncursesw)
find_path (Ncursesw_INCLUDE_DIRS ncurses.h)
find_path (Ncursesw_INCLUDE_DIRS ncurses.h PATH_SUFFIXES ncurses)
list (APPEND required_vars Ncursesw_INCLUDE_DIRS)
endif (NOT Ncursesw_FOUND)

2
demo.c
View File

@@ -10,7 +10,7 @@
#include "termo.h"
int
main(int argc, char *argv[])
main (int argc, char *argv[])
{
TERMO_CHECK_VERSION;
setlocale (LC_CTYPE, "");

View File

@@ -246,33 +246,32 @@ load_terminfo (termo_ti_t *ti, const char *term)
set_mouse_string = tigetstr ("XM");
#endif
if (!set_mouse_string || set_mouse_string == (char *) -1)
ti->set_mouse_string = strdup ("\E[?1000%?%p1%{1}%=%th%el%;");
ti->set_mouse_string = strdup ("\x1b[?1000%?%p1%{1}%=%th%el%;");
else
ti->set_mouse_string = strdup (set_mouse_string);
bool have_mouse = false;
if (!mouse_report_string && strstr (term, "xterm"))
mouse_report_string = "\x1b[M";
// We handle 1006 and 1015 unconditionally in driver-csi.c,
// and don't want to have the handling diverted by recent terminfo;
// let's hardcode the ancient 1000 sequence locally
if (mouse_report_string)
{
have_mouse = true;
trie_node_t *node = malloc (sizeof *node);
if (!node)
goto fail;
node->type = TYPE_MOUSE;
if (!insert_seq (ti, mouse_report_string, node))
if (!insert_seq (ti, "\x1b[M", node))
{
free (node);
goto fail;
}
}
if (!have_mouse)
if (!mouse_report_string && strstr (term, "xterm") != term)
ti->tk->guessed_mouse_proto = TERMO_MOUSE_PROTO_NONE;
else if (strstr (term, "rxvt") == term)
// urxvt generally doesn't understand the SGR protocol.
// urxvt didn't understand the SGR protocol until version 9.25,
// it's safest to keep using 1015.
ti->tk->guessed_mouse_proto = TERMO_MOUSE_PROTO_RXVT;
else
// SGR (1006) is the superior protocol. If it's not supported by the
@@ -363,6 +362,8 @@ mouse_reset (termo_ti_t *ti)
&& write_string (ti->tk, "\x1b[?1002l")
&& write_string (ti->tk, "\x1b[?1003l")
&& write_string (ti->tk, "\x1b[?1004l")
&& write_string (ti->tk, "\x1b[?1005l")
&& write_string (ti->tk, "\x1b[?1006l")
&& write_string (ti->tk, "\x1b[?1015l");
@@ -410,8 +411,12 @@ start_driver (termo_t *tk, void *info)
// Disable everything mouse-related first
if (!mouse_reset (ti))
return false;
// Enable focus tracking opportunistically and automatically,
// as it basically doesn't have any negative consequences at all
return mouse_set_proto (ti, tk->mouse_proto, true)
&& mouse_set_tracking_mode (ti, tk->mouse_tracking, true);
&& mouse_set_tracking_mode (ti, tk->mouse_tracking, true)
&& write_string (ti->tk, "\x1b[?1004h");
}
static int
@@ -425,7 +430,8 @@ stop_driver (termo_t *tk, void *info)
if (tk->mouse_proto == TERMO_MOUSE_PROTO_NONE)
return true;
return mouse_set_proto (ti, tk->mouse_proto, false)
&& mouse_set_tracking_mode (ti, tk->mouse_tracking, false);
&& mouse_set_tracking_mode (ti, tk->mouse_tracking, false)
&& write_string (ti->tk, "\x1b[?1004l");
}
static void *

View File

@@ -1695,9 +1695,9 @@ termo_strpkey_generic (termo_t *tk, const char *str, termo_key_t *key,
if (!str
|| key->type != TERMO_TYPE_KEY
|| key->code.codepoint < '@'
|| key->code.codepoint < '@'
|| key->code.codepoint > '_'
|| key->modifiers != 0)
|| key->modifiers != 0)
return NULL;
if (key->code.codepoint >= 'A'
@@ -1856,4 +1856,3 @@ termo_keycmp (termo_t *tk,
}
return key1.modifiers - key2.modifiers;
}

View File

@@ -5,6 +5,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
plan_tests (6);

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;

View File

@@ -5,6 +5,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;

View File

@@ -9,6 +9,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
int fd[2];
termo_t *tk;
termo_key_t key;

View File

@@ -2,8 +2,12 @@
#include "../termo.h"
#include "taplib.h"
int main (int argc, char *argv[])
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_sym_t sym;
const char *end;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
char buffer[16];

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
const char *endp;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key1, key2;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
const char *endp;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
termo_mouse_event_t ev;

View File

@@ -1,8 +1,12 @@
#include "../termo.h"
#include "taplib.h"
int main (int argc, char *argv[])
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
int line, col;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
int initial, mode, value;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;

View File

@@ -4,6 +4,9 @@
int
main (int argc, char *argv[])
{
(void) argc;
(void) argv;
termo_t *tk;
termo_key_t key;
long args[16];

View File

@@ -73,7 +73,7 @@ is_str (const char *got, const char *expect, char *name)
}
int
exit_status(void)
exit_status (void)
{
return g_exit_status;
}