blob: 2745bfaa366a7f2c9db49310bd4ff06f66fce557 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
.pragma library
// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// cliphist's list output, parsed and filtered. Pure, so test_clip.js runs it
// under node.
// One entry per line of `cliphist list`: "<id>\t<preview>". The whole line is
// kept, because decode and delete take it back verbatim on stdin. An image is
// a preview cliphist writes as "[[ binary data <size> <type> <WxH> ]]".
function parse(text) {
const out = [];
for (const line of text.split("\n")) {
const tab = line.indexOf("\t");
if (tab <= 0) continue;
const preview = line.slice(tab + 1);
out.push({
line: line,
id: line.slice(0, tab),
text: preview,
image: /^\[\[ binary data .* (png|jpe?g|gif|webp|bmp) /.test(preview),
});
}
return out;
}
// Case-insensitive substring match on the preview; an empty query keeps all.
function filter(entries, query) {
const q = query.trim().toLowerCase();
if (q === "") return entries;
return entries.filter(e => e.text.toLowerCase().indexOf(q) >= 0);
}
|