Compare commits

...

7 Commits

9 changed files with 54 additions and 18 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.files
/termo.creator* /termo.creator*
/termo.includes /termo.includes
/termo.cflags
/termo.cxxflags

View File

@@ -1,5 +1,5 @@
Copyright (c) 2007-2014 Paul Evans <leonerd@leonerd.org.uk> 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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

2
demo.c
View File

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

View File

@@ -250,29 +250,28 @@ load_terminfo (termo_ti_t *ti, const char *term)
else else
ti->set_mouse_string = strdup (set_mouse_string); ti->set_mouse_string = strdup (set_mouse_string);
bool have_mouse = false; // We handle 1006 and 1015 unconditionally in driver-csi.c,
if (!mouse_report_string && strstr (term, "xterm")) // and don't want to have the handling diverted by recent terminfo;
mouse_report_string = "\x1b[M"; // let's hardcode the ancient 1000 sequence locally
if (mouse_report_string) if (mouse_report_string)
{ {
have_mouse = true;
trie_node_t *node = malloc (sizeof *node); trie_node_t *node = malloc (sizeof *node);
if (!node) if (!node)
goto fail; goto fail;
node->type = TYPE_MOUSE; node->type = TYPE_MOUSE;
if (!insert_seq (ti, mouse_report_string, node)) if (!insert_seq (ti, "\x1b[M", node))
{ {
free (node); free (node);
goto fail; goto fail;
} }
} }
if (!have_mouse) if (!mouse_report_string && strstr (term, "xterm") != term)
ti->tk->guessed_mouse_proto = TERMO_MOUSE_PROTO_NONE; ti->tk->guessed_mouse_proto = TERMO_MOUSE_PROTO_NONE;
else if (strstr (term, "rxvt") == term) 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; ti->tk->guessed_mouse_proto = TERMO_MOUSE_PROTO_RXVT;
else else
// SGR (1006) is the superior protocol. If it's not supported by the // 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[?1002l")
&& write_string (ti->tk, "\x1b[?1003l") && write_string (ti->tk, "\x1b[?1003l")
&& write_string (ti->tk, "\x1b[?1004l")
&& write_string (ti->tk, "\x1b[?1005l") && write_string (ti->tk, "\x1b[?1005l")
&& write_string (ti->tk, "\x1b[?1006l") && write_string (ti->tk, "\x1b[?1006l")
&& write_string (ti->tk, "\x1b[?1015l"); && write_string (ti->tk, "\x1b[?1015l");
@@ -410,8 +411,12 @@ start_driver (termo_t *tk, void *info)
// Disable everything mouse-related first // Disable everything mouse-related first
if (!mouse_reset (ti)) if (!mouse_reset (ti))
return false; 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) 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 static int
@@ -425,7 +430,8 @@ stop_driver (termo_t *tk, void *info)
if (tk->mouse_proto == TERMO_MOUSE_PROTO_NONE) if (tk->mouse_proto == TERMO_MOUSE_PROTO_NONE)
return true; return true;
return mouse_set_proto (ti, tk->mouse_proto, false) 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 * static void *

View File

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

View File

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

View File

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

View File

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