Dominik Behr has uploaded a new change for review.
https://chromium-review.googlesource.com/341514
Change subject: libtsm: add a patch for OSC string callback
......................................................................
libtsm: add a patch for OSC string callback
For frecon to be able to implement custom escape codes.
BUG=chromium:598480
TEST=
Change-Id: Ia71f31dd69ed89454eb13d37ef4403a746391f1e
Signed-off-by: Dominik Behr <
db...@chromium.org>
---
A sys-apps/libtsm/files/0001-libtsm-add-OSC-string-callback.patch
R sys-apps/libtsm/libtsm-3-r1.ebuild
2 files changed, 121 insertions(+), 0 deletions(-)
diff --git
a/sys-apps/libtsm/files/0001-libtsm-add-OSC-string-callback.patch
b/sys-apps/libtsm/files/0001-libtsm-add-OSC-string-callback.patch
new file mode 100644
index 0000000..b334cef
--- /dev/null
+++ b/sys-apps/libtsm/files/0001-libtsm-add-OSC-string-callback.patch
@@ -0,0 +1,115 @@
+From 9a5a534ca9fec4bf5839ab2d2ed6076d8246a598 Mon Sep 17 00:00:00 2001
+From: Dominik Behr <
db...@chromium.org>
+Date: Fri, 29 Apr 2016 17:55:38 -0700
+Subject: [PATCH] libtsm: add OSC string callback
+
+Signed-off-by: Dominik Behr <
db...@chromium.org>
+---
+ src/libtsm.h | 9 +++++++++
+ src/tsm_vte.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 50 insertions(+)
+
+diff --git a/src/libtsm.h b/src/libtsm.h
+index 39dda26..d47e4f4 100644
+--- a/src/libtsm.h
++++ b/src/libtsm.h
+@@ -312,6 +312,15 @@ bool tsm_vte_handle_keyboard(struct tsm_vte *vte,
uint32_t keysym,
+ uint32_t ascii, unsigned int mods,
+ uint32_t unicode);
+
++typedef void (*tsm_vte_osc_cb) (struct tsm_vte *vte,
++ const uint32_t *osc_string,
++ size_t osc_len,
++ void *data);
++
++void tsm_vte_set_osc_cb(struct tsm_vte *vte,
++ tsm_vte_osc_cb osc_cb,
++ void *data);
++
+ /** @} */
+
+ #ifdef __cplusplus
+diff --git a/src/tsm_vte.c b/src/tsm_vte.c
+index 70d34d9..4ac396d 100644
+--- a/src/tsm_vte.c
++++ b/src/tsm_vte.c
+@@ -137,6 +137,8 @@ enum parser_action {
+ #define FLAG_PREPEND_ESCAPE 0x00010000 /* Prepend escape character to
next output */
+ #define FLAG_TITE_INHIBIT_MODE 0x00020000 /* Prevent switching to
alternate screen buffer */
+
++#define OSC_SIZE_INC 1024
++
+ struct vte_saved_state {
+ unsigned int cursor_x;
+ unsigned int cursor_y;
+@@ -181,6 +183,12 @@ struct tsm_vte {
+ struct vte_saved_state saved_state;
+ unsigned int alt_cursor_x;
+ unsigned int alt_cursor_y;
++
++ uint32_t *osc_string;
++ size_t osc_size;
++ size_t osc_pos;
++ tsm_vte_osc_cb osc_cb;
++ void *osc_cb_data;
+ };
+
+ enum vte_color {
+@@ -388,6 +396,8 @@ int tsm_vte_new(struct tsm_vte **out, struct
tsm_screen *con,
+ vte->def_attr.fccode = COLOR_FOREGROUND;
+ vte->def_attr.bccode = COLOR_BACKGROUND;
+ to_rgb(vte, &vte->def_attr);
++ vte->osc_string = NULL;
++ vte->osc_cb_data = NULL;
+
+ ret = tsm_utf8_mach_new(&vte->mach);
+ if (ret)
+@@ -1809,10 +1819,32 @@ static void do_action(struct tsm_vte *vte,
uint32_t data, int action)
+ case ACTION_DCS_END:
+ break;
+ case ACTION_OSC_START:
++ if (!vte->osc_string) {
++ vte->osc_string = malloc(sizeof(*vte->osc_string) * OSC_SIZE_INC);
++ vte->osc_size = vte->osc_string ? OSC_SIZE_INC : 0;
++ }
++ vte->osc_pos = 0;
+ break;
+ case ACTION_OSC_COLLECT:
++ if (vte->osc_string) {
++ if (vte->osc_pos < vte->osc_size) {
++ vte->osc_string[vte->osc_pos] = data;
++ vte->osc_pos++;
++ }
++ if (vte->osc_pos >= vte->osc_size) {
++ uint32_t *tmp = realloc(vte->osc_string, sizeof(*tmp) *
(vte->osc_size + OSC_SIZE_INC));
++ if (tmp) {
++ vte->osc_size += OSC_SIZE_INC;
++ vte->osc_string = tmp;
++ llog_warning(vte, "out of memory for OSC string");
++ }
++ }
++ }
+ break;
+ case ACTION_OSC_END:
++ if (vte->osc_cb && vte->osc_string && vte->osc_pos) {
++ vte->osc_cb(vte, vte->osc_string, vte->osc_pos, vte->osc_cb_data);
++ }
+ break;
+ default:
+ llog_warn(vte, "invalid action %d", action);
+@@ -2790,3 +2822,12 @@ bool tsm_vte_handle_keyboard(struct tsm_vte *vte,
uint32_t keysym,
+ vte->flags &= ~FLAG_PREPEND_ESCAPE;
+ return false;
+ }
++
++SHL_EXPORT
++void tsm_vte_set_osc_cb(struct tsm_vte *vte,
++ tsm_vte_osc_cb osc_cb,
++ void *data)
++{
++ vte->osc_cb = osc_cb;
++ vte->osc_cb_data = data;
++}
+--
+2.8.0.rc3.226.g39d4020
+
diff --git a/sys-apps/libtsm/libtsm-3.ebuild
b/sys-apps/libtsm/libtsm-3-r1.ebuild
similarity index 79%
rename from sys-apps/libtsm/libtsm-3.ebuild
rename to sys-apps/libtsm/libtsm-3-r1.ebuild
index 579d23f..e4747d9 100644
--- a/sys-apps/libtsm/libtsm-3.ebuild
+++ b/sys-apps/libtsm/libtsm-3-r1.ebuild
@@ -4,6 +4,8 @@
EAPI=5
+inherit eutils
+
DESCRIPTION="Terminal Emulator State Machine"
HOMEPAGE="
http://cgit.freedesktop.org/~dvdhrm/libtsm"
SRC_URI="
http://www.freedesktop.org/software/kmscon/releases/${P}.tar.xz"
@@ -15,3 +17,7 @@
DEPEND="!!=sys-apps/kmscon-7"
RDEPEND="${DEPEND}"
+
+src_prepare() {
+ epatch "${FILESDIR}"/0001-libtsm-add-OSC-string-callback.patch
+}
--
To view, visit
https://chromium-review.googlesource.com/341514
To unsubscribe, visit
https://chromium-review.googlesource.com/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia71f31dd69ed89454eb13d37ef4403a746391f1e
Gerrit-PatchSet: 1
Gerrit-Project: chromiumos/overlays/chromiumos-overlay
Gerrit-Branch: master
Gerrit-Owner: Dominik Behr <
db...@chromium.org>