Recently, I've released a simple Sparrow plugin called find to search text in source code, which is based on find and grep core linux utilities.
The rest of the document shows how to perform search in terminal by using Tomtit task runner.
Installation
To install the plugin, we need to use Tomtit task runner with profiles - preset of Raku scenarios that grouped by topics:
#!bash cd /to/you/source/code tom --init # initialize Tomtit for the first time tom --profile code # install code profile scenarios
Now once we've installed code
profile scenarios (for now it's just a single one), we have an access to search
scenario which is just a Raku wrapper to do search with find
plugin:
#!bash tom --cat search
#!raku my $ext = prompt("ext (go): "); $ext = "go" unless $ext; my $search1 = prompt("search1: "); my $search2 = prompt("search2: "); my $exclude = prompt("exclude: "); say "find [$search1] [$search2] !$exclude in $ext"; task-run "find $search1 $search2 in $ext", "find", %( :$ext, :$search1, search2 => $search2 || "", exclude => $exclude || "", );
The logic is following:
‘search1’ filters results out by first string and then ‘search2’ filter is applied for final results, ‘ext’ defines files extension to search.
Customization
Stub code shipped with Tomtit profile is good enough, we only need to change it a bit, to make default choice for file extenstion suitable for Raku project:
#!bash export EDITOR=nano tom --edit search
#!raku my $ext = prompt("ext (rakumod): "); $ext = "rakumod" unless $ext; # ... the rest of the code is the same
Search
Now let's search files in my Tomtit repository. Say, I want to find all exported functions.
#!bash tom search
load configuration from /home/melezhik/projects/Tomtit/.tom/env/config.raku ext (rakumod): search1: sub search2: is export exclude: find [sub] [is export] ! in rakumod 23:09:06 :: find [sub] [is export] [!] in *.rakumod 23:09:06 :: === 23:09:06 :: find . -name *.rakumod -exec grep --color -H 'sub' {} \; | grep 'is export' 23:09:06 :: case2 23:09:06 :: ./lib/Tomtit/Completion.rakumod:sub complete () is export { 23:09:06 :: ./lib/Tomtit.rakumod:our sub check-if-init ( $dir ) is export { 23:09:06 :: ./lib/Tomtit.rakumod:our sub init ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:our sub load-conf () is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub tomtit-usage () is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub tomtit-help () is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub tomtit-clean ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-last ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-run ($dir,$scenario,%args?) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-remove ($dir,$scenario) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-cat ($dir,$scenario,%args?) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-edit ($dir,$scenario) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub environment-edit ($dir,$env) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub environment-list ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub environment-set ($dir,$env) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub environment-show ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub environment-cat ($dir,$env,%args?) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-doc ($dir,$scenario) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-list ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub scenario-list-print ($dir) is export { 23:09:06 :: ./lib/Tomtit.rakumod:multi sub profile-list is export { 23:09:06 :: ./lib/Tomtit.rakumod:multi sub profile-list($dir,$profile is copy) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub profile-install ($dir, $profile is copy, %args?) is export { 23:09:06 :: ./lib/Tomtit.rakumod:sub completion-install () is export {
That is it. Follow plugin documentation to get familiar with plugin parameters.
Thanks for reading
Top comments (0)