.pragma library // Copyright (C) 2026 Danilo M. // // 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`: "\t". 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 ]]". 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); }