NAME App::FzfUtils - Utilities related to fzf VERSION This document describes version 0.001 of App::FzfUtils (from Perl distribution App-FzfUtils), released on 2026-04-08. DESCRIPTION This distribution includes the following CLI utilities related to fzf: * cs-select * cs-select-helper * fzf2clip * fzf2clip-loop FUNCTIONS cs_select Usage: cs_select(%args) -> [$status_code, $reason, $payload, \%result_meta] Select entries from template to clipboard. This is basically similar to: % fzf --bind 'enter:execute(clipadd {})' < template.txt except that it does some pre-processing to let each template entry be a multiple-line text, and later do post-processing so the original entry is added to the clipboard. Template format Template is an Org file with a particular format, where each entry is put under a level-2 heading. The level-1 heading can be used for grouping/categorizing. For example: * Product > P1 ** Does P1 need to be replaced every 5 years? :replacement:clipadd_1: Yes, ideally every 3-5 years. ** How to maintain P1 so it is in a good condition and can last longer? Wash after every use, then dry. Keep it clean. And of course replace after 3-5 years. * Product > P2 ** Entry 1 :clipadd_2: ... ** Entry 2 ... * General > Support ** Entry 3 ... ** Entry 4 ... Before feeding to "fzf", this utility will convert each entry into a single line: [id=1][title=Does P1 need to be replaced every 5 years?]Yes, ideally every 3-5 years.[category=Product > P1][tag=replacement][tag=clipadd_1] [id=2][title=How to maintain P1 so it is in a good condition and can last longer?]Wash after every use, then dry. Keep it clean. And of course replace after 3-5 years.[category=Product > P1] [id=3][title=Entry 1]...[tag=clipadd_2][category=Product > P2] [id=4][title=Entry 2]...[category=Product > P2] [id=5][title=Entry 3]...[category=General > Support] [id=6][title=Entry 4]...[category=General > Support] after selection, another script (cs-select-helper) will turn back the single-line entry into the original. This function is not exported. Arguments ('*' denotes required arguments): * template => *str* (No description) * wrap => *posint* (No description) Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) fzf2clip Usage: fzf2clip(%args) -> [$status_code, $reason, $payload, \%result_meta] Select using fzf, then add selection to clipboard. This is basically a shortcut for: % fzf < input.txt | clipadd where clipadd is a utility from App::ClipboardUtils. This function is not exported. Arguments ('*' denotes required arguments): * input => *str* (No description) * tee => *bool* In addition to adding to clipboard, also print to STDOUT. Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) fzf2clip_loop Usage: fzf2clip_loop(%args) -> [$status_code, $reason, $payload, \%result_meta] Like fzf2clip, but loop/repeat. This is basically a shortcut for: % fzf --bind 'enter:execute(clipadd {})' < input.txt where clipadd is a utility from App::ClipboardUtils. This function is not exported. Arguments ('*' denotes required arguments): * input => *str* (No description) Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . AUTHOR perlancar CONTRIBUTING To contribute, you can send patches by email/via RT, or send pull requests on GitHub. Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via: % prove -l If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me. COPYRIGHT AND LICENSE This software is copyright (c) 2026 by perlancar . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. BUGS Please report any bugs or feature requests on the bugtracker website When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.