From 6dbff7aab2de05f6c3c6022ff373ebf9c475abb7 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 27 Apr 2020 23:49:00 -0300 Subject: [PATCH] Adding missing "select-word" action. --- src/core/actions/table.c | 15 +++++++++++++++ src/core/bounds.c | 11 +++++++++-- src/include/lib3270/selection.h | 1 + src/selection/actions.c | 5 +++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/core/actions/table.c b/src/core/actions/table.c index a995e0d..af06861 100644 --- a/src/core/actions/table.c +++ b/src/core/actions/table.c @@ -37,6 +37,7 @@ #include #include #include +#include /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ @@ -250,6 +251,20 @@ .activatable = lib3270_is_connected }, + { + .name = "select-word", + .type = LIB3270_ACTION_TYPE_SELECTION, + + .keys = "w", + .icon = NULL, + .label = N_( "Select word" ), + .summary = N_( "Select word" ), + .activate = lib3270_select_word, + + .group = LIB3270_ACTION_GROUP_ONLINE, + .activatable = lib3270_is_connected + }, + // // Field actions. // diff --git a/src/core/bounds.c b/src/core/bounds.c index 9da7582..1adc221 100644 --- a/src/core/bounds.c +++ b/src/core/bounds.c @@ -76,8 +76,15 @@ LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *session, int baddr, int *start CHECK_SESSION_HANDLE(session); - if(!lib3270_is_connected(session) || isspace(session->text[baddr].chr)) - return -1; + if(baddr < 0) + baddr = lib3270_get_cursor_address(session); + + if(baddr > lib3270_get_length(session)) { + return errno = EINVAL; + } + + if(!lib3270_is_connected(session)) + return errno = ENOTCONN; if(start) { diff --git a/src/include/lib3270/selection.h b/src/include/lib3270/selection.h index 665bcc0..a2489c4 100644 --- a/src/include/lib3270/selection.h +++ b/src/include/lib3270/selection.h @@ -79,6 +79,7 @@ LIB3270_EXPORT int lib3270_unselect(H3270 *session); LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); + LIB3270_EXPORT int lib3270_select_word(H3270 *session); LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr); LIB3270_EXPORT int lib3270_select_field(H3270 *session); LIB3270_EXPORT int lib3270_select_all(H3270 *session); diff --git a/src/selection/actions.c b/src/selection/actions.c index eb7c93b..164c777 100644 --- a/src/selection/actions.c +++ b/src/selection/actions.c @@ -109,6 +109,11 @@ LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end) return 0; } +LIB3270_EXPORT int lib3270_select_word(H3270 *session) +{ + return lib3270_select_word_at(session,-1); +} + LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr) { int start, end; -- libgit2 0.21.2