Compare commits

...

4 Commits

Author SHA1 Message Date
Přemysl Eric Janouch dd3f77a0aa
Get rid of one CMake dev warning 2020-09-14 18:00:31 +02:00
Přemysl Eric Janouch 0bfb13655c
Implement de/focus event parsing
So far there is no way to set it up, I'm not sure how to go about it.
2020-09-14 17:55:41 +02:00
Přemysl Eric Janouch 78c0cd443d
Name change 2020-09-14 15:20:50 +02:00
Přemysl Eric Janouch 6a99d97ad0
Remove .travis.yml
We don't depend on any proprietary services no longer.  I'll have to
make my own replacements with blackjack and hookers.  Until then,
the file stays in the commit log as an example.
2018-06-24 05:29:06 +02:00
9 changed files with 86 additions and 57 deletions

View File

@ -1,39 +0,0 @@
language: c
notifications:
irc:
channels: "irc.janouch.name#dev"
use_notice: true
skip_join: true
template:
- "%{repository_name}#%{build_number} on %{branch}: %{message}"
- " %{compare_url}"
- " %{build_url}"
on_success: change
on_failure: always
env:
global:
- secure: "rzavv9NhQeZ3Zn6g9WgabUuTsXG1ncc+dWyXw3ytN15uWa4UelVzjAYvr31XeyXwsqZi3rDRHuz8ooIi1NLeLewozpEdkyakLjZOAnggqCnkF/yw/secuRo8MzweGXAefF+7cR2JYyH/E/PfMfAY8Qb0NnfEV1j7X9GCN2sJcxA="
addons:
coverity_scan:
project:
name: "pjanouch/termo"
description: "Terminal key input library"
notification_email: p.janouch@gmail.com
build_command_prepend: "cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON"
build_command: "make all demos"
branch_pattern: coverity_scan
compiler:
- clang
- gcc
before_install:
- sudo apt-get update -qq
install:
- sudo apt-get install -y libncursesw5-dev libglib2.0-dev
before_script:
- mkdir build
- cd build
script:
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_TESTING=ON
- make all demos
- ctest -V
- cpack -G DEB

View File

@ -49,20 +49,20 @@ set (lib_headers
# Project libraries
# We need ncurses for one of the demos, so we're always looking
if (NCURSESW_FOUND)
include_directories (${NCURSESW_INCLUDE_DIRS})
set (curses_libraries ${NCURSESW_LIBRARIES})
if (Ncursesw_FOUND)
include_directories (${Ncursesw_INCLUDE_DIRS})
set (curses_libraries ${Ncursesw_LIBRARIES})
elseif (CURSES_FOUND)
include_directories (${CURSES_INCLUDE_DIR})
set (curses_libraries ${CURSES_LIBRARY})
endif (NCURSESW_FOUND)
endif (Ncursesw_FOUND)
if (unibilium_FOUND)
include_directories (${unibilium_INCLUDE_DIRS})
set (lib_libraries ${unibilium_LIBRARIES})
add_definitions (-DHAVE_UNIBILIUM)
elseif (curses_libraries)
include_directories (${NCURSESW_INCLUDE_DIRS})
include_directories (${Ncursesw_INCLUDE_DIRS})
set (lib_libraries ${curses_libraries})
else (CURSES_FOUND)
message (SEND_ERROR "Unibilium not found, Curses not found")
@ -147,6 +147,7 @@ set (project_tests
30mouse
31position
32modereport
33focus
39csi)
if (BUILD_TESTING)
@ -173,8 +174,8 @@ install (FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc"
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Terminal key input library")
set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p@janouch.name>")
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR})
set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR})

View File

@ -1,5 +1,5 @@
Copyright (c) 2007-2014 Paul Evans <leonerd@leonerd.org.uk>
Copyright (c) 2014 Přemysl Janouch <p@janouch.name>
Copyright (c) 2014-2020 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

@ -68,7 +68,7 @@ Bitcoin donations are accepted at: 12r5uEWEgcHC46xd64tt3hHt9EUvYYDHe9
License
-------
'termo' is based on the 'termkey' library, originally written by Paul Evans
<leonerd@leonerd.org.uk>, with additional changes made by Přemysl Janouch
<leonerd@leonerd.org.uk>, with additional changes made by Přemysl Eric Janouch
<p@janouch.name>.
You may use the software under the terms of the MIT license, the text of which

View File

@ -1,17 +1,17 @@
# Public Domain
find_package (PkgConfig REQUIRED)
pkg_check_modules (NCURSESW QUIET ncursesw)
pkg_check_modules (Ncursesw QUIET ncursesw)
# OpenBSD doesn't provide a pkg-config file
set (required_vars NCURSESW_LIBRARIES)
if (NOT NCURSESW_FOUND)
find_library (NCURSESW_LIBRARIES NAMES ncursesw)
find_path (NCURSESW_INCLUDE_DIRS ncurses.h)
list (APPEND required_vars NCURSESW_INCLUDE_DIRS)
endif (NOT NCURSESW_FOUND)
set (required_vars Ncursesw_LIBRARIES)
if (NOT Ncursesw_FOUND)
find_library (Ncursesw_LIBRARIES NAMES ncursesw)
find_path (Ncursesw_INCLUDE_DIRS ncurses.h)
list (APPEND required_vars Ncursesw_INCLUDE_DIRS)
endif (NOT Ncursesw_FOUND)
include (FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS (NCURSESW DEFAULT_MSG ${required_vars})
FIND_PACKAGE_HANDLE_STANDARD_ARGS (Ncursesw DEFAULT_MSG ${required_vars})
mark_as_advanced (NCURSESW_LIBRARIES NCURSESW_INCLUDE_DIRS)
mark_as_advanced (Ncursesw_LIBRARIES Ncursesw_INCLUDE_DIRS)

View File

@ -331,6 +331,33 @@ handle_csi_m (termo_t *tk, termo_key_t *key, int cmd, long *arg, int args)
return TERMO_RES_NONE;
}
//
// Handler for CSI I / CSI O focus events
//
static termo_result_t
handle_csi_IO (termo_t *tk, termo_key_t *key, int cmd, long *arg, int args)
{
(void) tk;
(void) arg;
(void) args;
switch (cmd &= 0xff)
{
case 'I':
key->type = TERMO_TYPE_FOCUS;
key->code.focused = true;
return TERMO_RES_KEY;
case 'O':
key->type = TERMO_TYPE_FOCUS;
key->code.focused = false;
return TERMO_RES_KEY;
default:
return TERMO_RES_NONE;
}
return TERMO_RES_NONE;
}
termo_result_t
termo_interpret_mouse (termo_t *tk, const termo_key_t *key,
termo_mouse_event_t *event, int *button, int *line, int *col)
@ -671,6 +698,9 @@ register_keys (void)
csi_handlers['M' - 0x20] = &handle_csi_m;
csi_handlers['m' - 0x20] = &handle_csi_m;
csi_handlers['I' - 0x20] = &handle_csi_IO;
csi_handlers['O' - 0x20] = &handle_csi_IO;
csi_handlers['R' - 0x20] = &handle_csi_R;
csi_handlers['y' - 0x20] = &handle_csi_y;

View File

@ -156,6 +156,9 @@ print_key (termo_t *tk, termo_key_t *key)
ev, button, line, col);
break;
}
case TERMO_TYPE_FOCUS:
fprintf (stderr, "%s\n", key->code.focused ? "Focused" : "Defocused");
break;
case TERMO_TYPE_POSITION:
{
int line, col;
@ -1572,6 +1575,8 @@ termo_strfkey_generic (termo_t *tk, char *buffer, size_t len,
}
break;
}
case TERMO_TYPE_FOCUS:
l = snprintf (buffer + pos, len - pos, "Focus(%d)", key->code.focused);
case TERMO_TYPE_POSITION:
l = snprintf (buffer + pos, len - pos, "Position");
break;
@ -1826,6 +1831,8 @@ termo_keycmp (termo_t *tk,
return cmp;
break;
}
case TERMO_TYPE_FOCUS:
return key1.code.focused - key2.code.focused;
case TERMO_TYPE_POSITION:
{
int line1, col1, line2, col2;

View File

@ -97,6 +97,7 @@ enum termo_type
TERMO_TYPE_MOUSE,
TERMO_TYPE_POSITION,
TERMO_TYPE_MODEREPORT,
TERMO_TYPE_FOCUS,
// add other recognised types here
TERMO_TYPE_UNKNOWN_CSI = -1
@ -159,6 +160,7 @@ struct termo_key
uint32_t codepoint; // TERMO_TYPE_KEY
int number; // TERMO_TYPE_FUNCTION
termo_sym_t sym; // TERMO_TYPE_KEYSYM
int focused; // TERMO_TYPE_FOCUS
// TERMO_TYPE_MODEREPORT
// opaque, see termo_interpret_modereport()

28
tests/33focus.c Normal file
View File

@ -0,0 +1,28 @@
#include "../termo.h"
#include "taplib.h"
int
main (int argc, char *argv[])
{
termo_t *tk;
termo_key_t key;
plan_tests (6);
tk = termo_new_abstract ("vt100", NULL, 0);
termo_push_bytes (tk, "\e[I", 3);
is_int (termo_getkey (tk, &key), TERMO_RES_KEY,
"getkey yields RES_KEY for focus in");
is_int (key.type, TERMO_TYPE_FOCUS, "key.type for focus in");
is_int (key.code.focused, 1, "focused indicator for focus in");
termo_push_bytes (tk, "\e[O", 3);
is_int (termo_getkey (tk, &key), TERMO_RES_KEY,
"getkey yields RES_KEY for focus out");
is_int (key.type, TERMO_TYPE_FOCUS, "key.type for focus out");
is_int (key.code.focused, 0, "focused indicator for focus out");
termo_destroy (tk);
return exit_status ();
}