mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-27 07:58:07 -04:00
osc: implement foreground/background query
This commit is contained in:
parent
9dafab981c
commit
13d3985ba8
1 changed files with 34 additions and 3 deletions
37
osc.c
37
osc.c
|
|
@ -1,20 +1,46 @@
|
||||||
#include "osc.h"
|
#include "osc.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "terminal.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"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
|
#include "terminal.h"
|
||||||
|
#include "vt.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
osc_query(struct terminal *term, unsigned param)
|
||||||
|
{
|
||||||
|
switch (param) {
|
||||||
|
case 10:
|
||||||
|
case 11: {
|
||||||
|
char reply[16];
|
||||||
|
snprintf(
|
||||||
|
reply, sizeof(reply), "\033]%u;%06x\x07",
|
||||||
|
param,
|
||||||
|
(param == 10 ? term->foreground : term->background) & 0xffffff);
|
||||||
|
vt_to_slave(term, reply, strlen(reply));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOG_ERR("unimplemented: OSC query: %.*s",
|
||||||
|
(int)term->vt.osc.idx, term->vt.osc.data);
|
||||||
|
abort();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
osc_dispatch(struct terminal *term)
|
osc_dispatch(struct terminal *term)
|
||||||
{
|
{
|
||||||
int param = 0;
|
unsigned param = 0;
|
||||||
int data_ofs = 0;
|
int data_ofs = 0;
|
||||||
|
|
||||||
for (size_t i = 0; i < term->vt.osc.idx; i++) {
|
for (size_t i = 0; i < term->vt.osc.idx; i++) {
|
||||||
int c = term->vt.osc.data[i];
|
char c = term->vt.osc.data[i];
|
||||||
|
|
||||||
if (c == ';') {
|
if (c == ';') {
|
||||||
data_ofs = i + 1;
|
data_ofs = i + 1;
|
||||||
|
|
@ -35,6 +61,11 @@ osc_dispatch(struct terminal *term)
|
||||||
|
|
||||||
const char *string = (const char *)&term->vt.osc.data[data_ofs];
|
const char *string = (const char *)&term->vt.osc.data[data_ofs];
|
||||||
|
|
||||||
|
if (strlen(string) == 1 && string[0] == '?') {
|
||||||
|
osc_query(term, param);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case 0: render_set_title(term, string); break; /* icon + title */
|
case 0: render_set_title(term, string); break; /* icon + title */
|
||||||
case 1: break; /* icon */
|
case 1: break; /* icon */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue