]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
include/ttyutils: add terminal hyperlink ESC sequences
authorKarel Zak <kzak@redhat.com>
Thu, 28 Nov 2024 11:18:22 +0000 (12:18 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 28 Nov 2024 11:18:22 +0000 (12:18 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/ttyutils.h

index 39182b66bb77628142615b447c352b78af7d1b63..46df3cddd218964fb30f955392d85d12e56879b8 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef UTIL_LINUX_TTYUTILS_H
 #define UTIL_LINUX_TTYUTILS_H
 
+#include <stdio.h>
 #include <stdlib.h>
 #include <termios.h>
 #include <limits.h>
@@ -210,4 +211,30 @@ static inline void reset_virtual_console(struct termios *tp, int flags)
        tp->c_cc[VEOL2]    = _POSIX_VDISABLE;
 }
 
+#define UL_OSC8                "\033]8"        /* operating system command) */
+#define UL_ST          "\033\\"        /* string terminator */
+
+/* OSC8 hyperlink is composed from:
+ *
+ *  UL_HYPERLINK_START UL_HYPERLINK_PARAMS <uri> UL_HYPERLINK_LINK <link-text> UL_HYPERLINK_END
+ *
+ * Alternatively, BEL (\a) can be used instead of ST.
+ */
+#define UL_HYPERLINK_START             UL_OSC8
+#define UL_HYPERLINK_PARAMS            ";;"
+#define UL_HYPERLINK_LINK              UL_ST
+#define UL_HYPERLINK_END               (UL_OSC8 ";;" UL_ST)
+
+static inline void ul_fputs_hyperlink(const char *uri, const char *link, FILE *out)
+{
+       fputs(UL_HYPERLINK_START, out);
+       fputs(UL_HYPERLINK_PARAMS, out);
+       fputs(uri, out);
+
+       fputs(UL_HYPERLINK_LINK, out);
+       fputs(link, out);
+
+       fputs(UL_HYPERLINK_END, out);
+}
+
 #endif /* UTIL_LINUX_TTYUTILS_H */