[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/osc 1a81753 5/8: Support for binary blobs
From: |
Stefan Monnier |
Subject: |
[elpa] externals/osc 1a81753 5/8: Support for binary blobs |
Date: |
Tue, 1 Dec 2020 18:00:15 -0500 (EST) |
branch: externals/osc
commit 1a817532d00970b9033acd42f8d6dd4dde5a170e
Author: Mario Lang <mlang@blind.guru>
Commit: Mario Lang <mlang@blind.guru>
Support for binary blobs
* packages/osc/osc.el: (osc-blob, osc-read-blob): New functions.
* (osc-send-message, osc-filter): Adjust.
---
osc.el | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/osc.el b/osc.el
index e88f135..5450751 100644
--- a/osc.el
+++ b/osc.el
@@ -35,7 +35,7 @@
;; BUGS/TODO:
;;
-;; * Timetags and binary blobs are not supported yet.
+;; * Timetags are not supported yet.
;; Usage:
;;
@@ -55,6 +55,12 @@
(setq string (encode-coding-string string 'binary))
(concat string (make-string (1+ (- 3 (% (length string) 4))) 0)))
+(defun osc-blob (vector)
+ (let ((length (length vector)))
+ (concat (osc-int32 length)
+ vector
+ (make-string (% (- 4 (% length 4)) 4) 0))))
+
(defun osc-float32 (value)
(let (s (e 0) f)
(cond
@@ -112,6 +118,7 @@
((floatp arg) "f")
((integerp arg) "i")
((stringp arg) "s")
+ ((vectorp arg) "b")
(t (error "Invalid argument: %S" arg))))
args)))
(mapcar
@@ -119,7 +126,8 @@
(cond
((floatp arg) (osc-float32 arg))
((integerp arg) (osc-int32 arg))
- ((stringp arg) (osc-string arg))))
+ ((stringp arg) (osc-string arg))
+ ((vectorp arg) (osc-blob arg))))
args))))
(defun osc-read-string ()
@@ -129,6 +137,16 @@
(forward-char (- 4 (% (length string) 4)))
string))
+(defun osc-read-blob ()
+ (let* ((length (osc-read-int32))
+ (pos (point))
+ (vector (progn
+ (forward-char length)
+ (string-to-vector (buffer-substring pos (point)))))
+ (padding (% (- 4 (% length 4)) 4)))
+ (forward-char padding)
+ vector))
+
(defun osc-read-int32 ()
(let ((value 0))
(dotimes (i 4)
@@ -179,13 +197,14 @@ the generic handler for SERVER."
(goto-char (point-min))
(let ((path (osc-read-string)))
(if (not (string= path "#bundle"))
- (when (looking-at ",")
+ (when (= (char-after) ?,)
(save-excursion
(apply (osc-server-get-handler proc path)
path
(mapcar
(lambda (type)
(cl-case type
+ (?b (osc-read-blob))
(?f (osc-read-float32))
(?i (osc-read-int32))
(?s (osc-read-string))))
- [elpa] branch externals/osc created (now b927860), Stefan Monnier, 2020/12/01
- [elpa] externals/osc 869841d 1/8: Add osc.el., Stefan Monnier, 2020/12/01
- [elpa] externals/osc 4652f37 7/8: * packages/osc/osc.el: Enable lexical-binding, Stefan Monnier, 2020/12/01
- [elpa] externals/osc 4b28a3c 4/8: Concatenate messages instead of using a temp-buffer and buffer-string, Stefan Monnier, 2020/12/01
- [elpa] externals/osc 8d2b124 3/8: Improve single precision floating point serialisation, Stefan Monnier, 2020/12/01
- [elpa] externals/osc 1a81753 5/8: Support for binary blobs,
Stefan Monnier <=
- [elpa] externals/osc 092b443 6/8: Release version 0.2, Stefan Monnier, 2020/12/01
- [elpa] externals/osc 970f417 2/8: * packages/osc/osc.el (osc-filter): Fix up old `cl' name., Stefan Monnier, 2020/12/01
- [elpa] externals/osc b927860 8/8: * .gitignore: New file, Stefan Monnier, 2020/12/01