mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-28 07:58:00 -04:00
flash: convert our own 'flash' from a CSI to an OSC
This commit is contained in:
parent
aa4cf1873b
commit
61409d40e2
3 changed files with 25 additions and 17 deletions
16
csi.c
16
csi.c
|
|
@ -5,8 +5,6 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include <sys/timerfd.h>
|
|
||||||
|
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -598,20 +596,6 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
||||||
}
|
}
|
||||||
|
|
||||||
case 1001: {
|
case 1001: {
|
||||||
/* Our own private - flash */
|
|
||||||
unsigned duration_ms = vt_param_get(term, 1, 100);
|
|
||||||
LOG_DBG("FLASH for %ums", duration_ms);
|
|
||||||
|
|
||||||
struct itimerspec alarm = {
|
|
||||||
.it_value = {.tv_sec = 0, .tv_nsec = duration_ms * 1000000},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (timerfd_settime(term->flash_timer_fd, 0, &alarm, NULL) < 0)
|
|
||||||
LOG_ERRNO("failed to arm flash timer");
|
|
||||||
else {
|
|
||||||
term->flash_active = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ foot+base|foot base fragment,
|
||||||
ed=\E[J,
|
ed=\E[J,
|
||||||
el=\E[K,
|
el=\E[K,
|
||||||
el1=\E[1K,
|
el1=\E[1K,
|
||||||
flash=\E[1001;100t,
|
flash=\E]555\007,
|
||||||
home=\E[H,
|
home=\E[H,
|
||||||
hpa=\E[%i%p1%dG,
|
hpa=\E[%i%p1%dG,
|
||||||
ht=^I,
|
ht=^I,
|
||||||
|
|
|
||||||
24
osc.c
24
osc.c
|
|
@ -3,6 +3,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include <sys/timerfd.h>
|
||||||
|
|
||||||
#define LOG_MODULE "osc"
|
#define LOG_MODULE "osc"
|
||||||
#define LOG_ENABLE_DBG 0
|
#define LOG_ENABLE_DBG 0
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
@ -200,6 +202,24 @@ osc_selection(struct terminal *term, char *string)
|
||||||
osc_to_clipboard(term, string, p);
|
osc_to_clipboard(term, string, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
osc_flash(struct terminal *term)
|
||||||
|
{
|
||||||
|
/* Our own private - flash */
|
||||||
|
unsigned duration_ms = vt_param_get(term, 1, 100);
|
||||||
|
LOG_DBG("FLASH for %ums", duration_ms);
|
||||||
|
|
||||||
|
struct itimerspec alarm = {
|
||||||
|
.it_value = {.tv_sec = 0, .tv_nsec = duration_ms * 1000000},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (timerfd_settime(term->flash_timer_fd, 0, &alarm, NULL) < 0)
|
||||||
|
LOG_ERRNO("failed to arm flash timer");
|
||||||
|
else {
|
||||||
|
term->flash_active = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
osc_dispatch(struct terminal *term)
|
osc_dispatch(struct terminal *term)
|
||||||
{
|
{
|
||||||
|
|
@ -244,6 +264,10 @@ osc_dispatch(struct terminal *term)
|
||||||
case 112: /* Reset text cursor color */
|
case 112: /* Reset text cursor color */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 555:
|
||||||
|
osc_flash(term);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LOG_ERR("unimplemented: OSC: %.*s",
|
LOG_ERR("unimplemented: OSC: %.*s",
|
||||||
(int)term->vt.osc.idx, term->vt.osc.data);
|
(int)term->vt.osc.idx, term->vt.osc.data);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue