@ -1,56 +0,0 @@ | |||
return { | |||
"yetone/avante.nvim", | |||
event = "VeryLazy", | |||
version = false, | |||
enabled = false, | |||
keys = { | |||
"<leader>A", | |||
"<cmd>AvanteToggle<cr>" | |||
}, | |||
opts = { | |||
behaviour = { | |||
auto_suggestions = false, -- Experimental stage | |||
auto_set_highlight_group = true, | |||
auto_set_keymaps = false, | |||
auto_apply_diff_after_generation = false, | |||
support_paste_from_clipboard = false, | |||
minimize_diff = true, -- Whether to remove unchanged lines when applying a code block | |||
enable_token_counting = true, -- Whether to enable token counting. Default to true. | |||
}, | |||
}, | |||
build = "make", | |||
dependencies = { | |||
"nvim-treesitter/nvim-treesitter", | |||
"stevearc/dressing.nvim", | |||
"nvim-lua/plenary.nvim", | |||
"MunifTanjim/nui.nvim", | |||
"echasnovski/mini.pick", | |||
"nvim-telescope/telescope.nvim", | |||
"nvim-tree/nvim-web-devicons", | |||
{ | |||
-- support for image pasting | |||
"HakonHarnes/img-clip.nvim", | |||
event = "VeryLazy", | |||
opts = { | |||
-- recommended settings | |||
default = { | |||
embed_image_as_base64 = false, | |||
prompt_for_file_name = false, | |||
drag_and_drop = { | |||
insert_mode = true, | |||
}, | |||
-- required for Windows users | |||
use_absolute_path = true, | |||
}, | |||
}, | |||
}, | |||
-- { | |||
-- -- Make sure to set this up properly if you have lazy=true | |||
-- 'MeanderingProgrammer/render-markdown.nvim', | |||
-- opts = { | |||
-- file_types = { "markdown", "Avante" }, | |||
-- }, | |||
-- ft = { "markdown", "Avante" }, | |||
-- }, | |||
}, | |||
} |
@ -1,19 +0,0 @@ | |||
return { | |||
"soemre/commentless.nvim", | |||
cmd = "Commentless", | |||
keys = { | |||
{ | |||
"<leader>/", | |||
function() | |||
require("commentless").toggle() | |||
end, | |||
desc = "Toggle Comments", | |||
}, | |||
}, | |||
dependencies = { | |||
"nvim-treesitter/nvim-treesitter", | |||
}, | |||
opts = { | |||
-- Customize Configuration | |||
}, | |||
} |
@ -0,0 +1,9 @@ | |||
return { | |||
"m4xshen/hardtime.nvim", | |||
lazy = false, | |||
dependencies = { | |||
"MunifTanjim/nui.nvim", | |||
"rcarriga/nvim-notify", | |||
}, | |||
opts = {}, | |||
} |
@ -1,10 +0,0 @@ | |||
return { | |||
{ | |||
"nvim-lua/plenary.nvim", | |||
event = "VeryLazy", | |||
}, | |||
{ | |||
"ray-x/guihua.lua", | |||
event = "VeryLazy", | |||
}, | |||
} |
@ -0,0 +1,7 @@ | |||
return { | |||
"rcarriga/nvim-notify", | |||
lazy = false, | |||
config = function () | |||
vim.notify = require("notify") | |||
end | |||
} |
@ -0,0 +1,317 @@ | |||
#!/usr/bin/perl | |||
use strict; | |||
use warnings; | |||
use constant | |||
{ | |||
PROG_EDIT => 'vim', | |||
}; | |||
sub open_smart; | |||
sub edit; | |||
sub stdin_to_editor; | |||
sub reveal; | |||
sub header_edit; | |||
sub wait_or_not; | |||
sub usage | |||
{ | |||
print STDERR <<"!"; | |||
Usage: $0 -[efWwRh] | |||
-e: edit | |||
-f: stdin-edit | |||
-W: wait for exit (true by default for editing) | |||
-w: don't wait for exit | |||
-R: reveal | |||
-h: header search | |||
! | |||
exit 1; | |||
} | |||
my $cmd = \&open_smart; | |||
my(@files, @args); | |||
my %opts = ( | |||
'e' => 0, | |||
'f' => 0, | |||
'W' => 0, | |||
'R' => 0, | |||
'h' => 0, | |||
); | |||
my $wait_set = 0; | |||
usage() unless @ARGV; | |||
for(my $i = 0; $i < @ARGV; ++$i){ | |||
$_ = $ARGV[$i]; | |||
if($_ eq '--'){ | |||
push @files, @ARGV[$i + 1 .. $#ARGV]; | |||
last; | |||
} | |||
if(/^-([a-z])$/i){ | |||
my $k = $1; | |||
if(exists $opts{$k}){ | |||
$opts{$k} = 1; | |||
$wait_set = 1 if $k eq 'W'; | |||
}elsif($k eq 'w'){ | |||
$opts{W} = 0; | |||
$wait_set = 1; | |||
}else{ | |||
usage(); | |||
} | |||
}elsif($_ eq '--args'){ | |||
push @args, @ARGV[$i + 1 .. $#ARGV]; | |||
last; | |||
}elsif(/^-/){ | |||
usage(); | |||
}else{ | |||
push @files, $_; | |||
} | |||
} | |||
if($opts{e} + $opts{f} + $opts{R} + $opts{h} > 1){ | |||
print STDERR "Can't combine -e, -f, -R and -h\n"; | |||
usage(); | |||
} | |||
my $should_wait = 1; | |||
if($opts{e}){ | |||
$cmd = \&edit; | |||
}elsif($opts{f}){ | |||
# <STDIN> | $EDITOR - | |||
$cmd = \&stdin_to_editor; | |||
}elsif($opts{R}){ | |||
# open with rox | |||
$cmd = \&reveal; | |||
$should_wait = 0; | |||
}elsif($opts{h}){ | |||
# search /usr/include/$_ for @files | |||
$cmd = \&header_edit; | |||
} | |||
$opts{W} = 1 if $should_wait and not $wait_set; | |||
exit(&{$cmd}(( | |||
wait => !!$opts{W}, | |||
args => [@args], | |||
files => [@files]))); | |||
# end --- | |||
sub read_maps | |||
{ | |||
my $rc = "$ENV{HOME}/.openrc"; | |||
open F, '<', $rc or die "open $rc: $!\n"; | |||
my %maps; | |||
my $prog_reveal = ''; | |||
my $mode = 0; | |||
while(<F>){ | |||
chomp; | |||
s/#.*//; | |||
if(/^\[(.*)\]$/){ | |||
if($1 eq 'full'){ | |||
$mode = $1; | |||
}elsif($1 eq 'suffix'){ | |||
$mode = $1; | |||
}elsif($1 eq 'directories'){ | |||
$mode = $1; | |||
}else{ | |||
die "invalid section \"$1\" in $rc\n"; | |||
} | |||
}elsif(!($mode eq 'directories') and my($prog, $matches) = /^([^:]+): *(.*)/){ | |||
sub getenv | |||
{ | |||
my $k = shift; | |||
return $ENV{$k} if $ENV{$k}; | |||
my %backup = ( | |||
"TERM" => "urxvt", | |||
"VISUAL" => "vim", | |||
); | |||
return $backup{$k} if $backup{$k}; | |||
return "\$$k"; | |||
} | |||
my @matches = split / *, */, $matches; | |||
$prog =~ s/\$([A-Z_]+)/getenv($1)/e; | |||
my $key = $prog; | |||
if($mode eq 'suffix'){ | |||
# compare file extensions case insensitively | |||
$key = lc $key; | |||
} | |||
push @{$maps{$key}}, [ $_, $mode ] for @matches; | |||
}elsif($mode eq 'directories' && length){ | |||
if(length($prog_reveal)){ | |||
die "already have dir program, in $rc\n"; | |||
} | |||
$prog_reveal = $_; | |||
}elsif(length){ | |||
die "invalid confiuration line: \"$1\" in $rc\n"; | |||
} | |||
} | |||
if(!length($prog_reveal)){ | |||
die "no directory program specified, in $rc\n"; | |||
} | |||
close F; | |||
return $prog_reveal, \%maps; | |||
} | |||
sub open_smart | |||
{ | |||
my $ec = 0; | |||
my %h = @_; | |||
my @to_open; | |||
my ($prog_reveal, $maps) = read_maps(); | |||
file: | |||
for my $fnam (@{$h{files}}){ | |||
#print "maps:\n"; | |||
if(-d $fnam){ | |||
push @to_open, [($h{wait}, $prog_reveal, @{$h{args}}, $fnam)]; | |||
next file; | |||
} | |||
(my $fnam_for_test = $fnam) =~ s/\.[a-zA-Z]+$/lc($&)/e; | |||
for my $prog (keys %$maps){ | |||
#print " $_:\n"; | |||
for(@{$maps->{$prog}}){ | |||
my($reg, $mode) = ($_->[0], $_->[1]); | |||
if($mode eq 'suffix'){ | |||
$reg = "\\.$reg\$"; | |||
} | |||
#print " $reg\n" | |||
if($fnam_for_test =~ /$reg/){ | |||
push @to_open, [($h{wait}, $prog, @{$h{args}}, $fnam)]; | |||
next file; | |||
} | |||
} | |||
} | |||
die "no program found for $fnam\n"; | |||
} | |||
wait_or_not(@{$_}) for @to_open; | |||
return 0; | |||
} | |||
sub wait_or_not | |||
{ | |||
my($wait, @rest) = @_; | |||
my $pid = fork(); | |||
die "fork(): $!\n" unless defined $pid; | |||
if($pid == 0){ | |||
if($rest[0] =~ / /){ | |||
my $a = shift @rest; | |||
unshift @rest, split / +/, $a; | |||
} | |||
exec @rest; | |||
die; | |||
}else{ | |||
# parent | |||
if($wait){ | |||
my $reaped = wait(); | |||
my $ret = $?; | |||
die "wait(): $!\n" if $reaped == -1; | |||
warn "unexpected dead child $reaped (expected $pid)\n" if $reaped != $pid; | |||
return $ret; | |||
} | |||
} | |||
} | |||
sub edit | |||
{ | |||
my %h = @_; | |||
my $e = $ENV{VISUAL} || $ENV{EDITOR} || PROG_EDIT; | |||
return wait_or_not($h{wait}, $e, @{$h{args}}, @{$h{files}}); | |||
} | |||
sub stdin_to_editor | |||
{ | |||
my $tmp = "/tmp/stdin_$$"; | |||
open F, '>', $tmp or die "open $tmp: $!\n"; | |||
print F $_ while <STDIN>; | |||
close F; | |||
my %h = @_; | |||
push @{$h{files}}, $tmp; | |||
my $r = edit(%h); | |||
unlink $tmp; | |||
return $r; | |||
} | |||
sub reveal | |||
{ | |||
my %h = @_; | |||
my ($prog_reveal) = read_maps(); | |||
return wait_or_not($h{wait}, $prog_reveal, @{$h{args}}, @{$h{files}}); | |||
} | |||
sub header_edit | |||
{ | |||
my %h = @_; | |||
my @files = @{$h{files}}; | |||
@{$h{files}} = (); | |||
for my $name (@files){ | |||
sub find_header | |||
{ | |||
my @inc = ("", "arpa", "net", "sys"); | |||
my $r = shift; | |||
my @matches; | |||
for(my @tmp = @inc){ | |||
push @inc, "x86_64-linux-gnu/$_"; | |||
} | |||
for my $inc (@inc){ | |||
$inc = "/usr/include/$inc"; | |||
opendir D, $inc or next; | |||
push @matches, map { "$inc/$_" } grep /$r/, readdir D; | |||
closedir D; | |||
} | |||
return @matches; | |||
} | |||
my @paths = find_header($name); | |||
push @{$h{files}}, @paths if @paths; | |||
} | |||
return edit(%h); | |||
} |
@ -0,0 +1,116 @@ | |||
#!/usr/bin/perl | |||
use warnings; | |||
$hostchars = '[a-z0-9-._+]'; | |||
$pathchars = '[a-z0-9-._+#=?&:;%/!,~]'; | |||
sub scan($$$) | |||
{ | |||
my ($file, $lineno, $line) = @_; | |||
chomp $line; | |||
while($line =~ s! | |||
([a-z]+://)? | |||
# http:// | |||
$hostchars+\.[a-z]+ | |||
# www.tim.google.com - the [a-z].com is the main anchor for the whole regex - incase http:// is omitted | |||
# note no trailing slash | |||
($pathchars+/\?)* | |||
# check for the index.php? part | |||
($pathchars+|\($pathchars+\))* | |||
# check for pathchars, or a set of nested parens | |||
!!xoi){ # allow space + comments, compile once, strcasecmp | |||
my($p,$m,$e) = ($`,$&,$'); | |||
$e = '.' . $e if $m =~ s/\.$//; | |||
if($opt{fname} && $file){ | |||
print "$col{red}$file$col{none}:"; | |||
} | |||
if($opt{lineno}){ | |||
print "$col{green}$lineno$col{none}: "; | |||
}elsif($opt{fname} && $file){ | |||
print ' '; | |||
} | |||
if($opt{hl}){ | |||
print "$p$col{brown}$m$col{none}$e\n"; | |||
}else{ | |||
print "$m\n"; | |||
} | |||
} | |||
} | |||
sub usage(){ | |||
$printme =<<"!"; | |||
Usage: $0 -[Chn] [FILES...] | |||
-h: highlight | |||
-c: force colour on (for pipes) | |||
-C: colour off (only makes sense with -h) | |||
-n: show line number | |||
! | |||
print STDERR $printme; | |||
exit 1; | |||
} | |||
%opt = ( | |||
colour => 1, | |||
lineno => 0, | |||
fname => 0, | |||
hl => 0 | |||
); | |||
%col = ( | |||
brown => "\e[0;31m", # hl | |||
red => "\e[0;35m", # fname | |||
green => "\e[0;32m", # lineno | |||
none => "\e[0;0m" | |||
); | |||
for $arg (@ARGV){ | |||
if($arg eq '-h'){ | |||
$opt{hl} = 1; | |||
}elsif($arg eq '-n'){ | |||
$opt{lineno} = 1; | |||
}elsif($arg eq '-C'){ | |||
$opt{colour} = 0; | |||
}elsif($arg eq '-c'){ | |||
usage() if $opt{colour} == 0; | |||
$opt{colour} = 2; # force on | |||
}elsif($arg eq '--help'){ | |||
usage(); | |||
}else{ | |||
push @files, $arg; | |||
} | |||
} | |||
usage() if $opt{hl} && !$opt{colour}; | |||
$opt{fname} = 1 if $#files > 0 || $opt{lineno}; | |||
if(!$opt{colour} || ($opt{colour} == 1 && !-t STDOUT)){ | |||
$col{$_} = '' for keys %col; | |||
} | |||
$| = 1; | |||
if(@files){ | |||
for my $f (@files){ | |||
my $n = 1; | |||
open F, '<', $f or warn "$f: $!\n"; | |||
scan($f, $n++, $_) for <F>; | |||
close F; | |||
} | |||
}else{ | |||
scan(undef, $., $_) while <STDIN>; | |||
} |
@ -0,0 +1,22 @@ | |||
[full] | |||
brave: ^https?://, www\., \.com, \.co\.uk, \.net | |||
#in_terminal yplay.pl: ^(http://)?(www\.)?youtube\.com/watch\?v= | |||
in_terminal $VISUAL: \.[^/]*rc$ | |||
[suffix] | |||
soffice: odp, pptx?, docx? | |||
#in_terminal $VISUAL: txt, c, cpp, nfo, pl, py, s, conf | |||
in_terminal less: log | |||
mplayer: mp3, wav, mp4, wmv | |||
mupdf: pdf | |||
firefox: html? | |||
soffice: odt | |||
mupdf: pdf | |||
sxiv: png, jpg, jpeg, gif | |||
viking: gpx | |||
# openshot-qt: mp4 | |||
#xterm -e wget: http://.*.(tar|gz|bz2) - not called due to hash ordering | |||
[directories] | |||
pcmanfm |