From a40bd8adb20715582813fb8399dd37e4efee9b37 Mon Sep 17 00:00:00 2001 From: Rory Bradford Date: Sat, 10 Oct 2020 10:22:39 +0100 Subject: Improve Vim integration Signed-off-by: Rory Bradford --- .gitignore | 2 ++ Makefile | 13 +++++++-- README.md | 19 ++++++------- contrib/vim/README | 45 ------------------------------- contrib/vim/README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++ contrib/vim/plugin/rf.vim | 16 +++++++++-- rf.1 | 47 -------------------------------- rf.1.scd | 42 +++++++++++++++++++++++++++++ rfconfig.5 | 41 ---------------------------- rfconfig.5.scd | 43 ++++++++++++++++++++++++++++++ rfignore.5 | 20 -------------- rfignore.5.scd | 25 +++++++++++++++++ 12 files changed, 215 insertions(+), 166 deletions(-) delete mode 100644 contrib/vim/README create mode 100644 contrib/vim/README.md delete mode 100644 rf.1 create mode 100644 rf.1.scd delete mode 100644 rfconfig.5 create mode 100644 rfconfig.5.scd delete mode 100644 rfignore.5 create mode 100644 rfignore.5.scd diff --git a/.gitignore b/.gitignore index 529ad04..9651efe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /rf *.o +*.1 +*.5 \ No newline at end of file diff --git a/Makefile b/Makefile index 42b5b79..58b045d 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,16 @@ all: $(BIN) $(BIN): $(OBJS) $(CC) $(CFLAGS) -o $(BIN) $(OBJS) -install: $(BIN) +rf.1: rf.1.scd + scdoc < $< > $@ + +rfignore.5: rfignore.5.scd + scdoc < $< > $@ + +rfconfig.5: rfconfig.5.scd + scdoc < $< > $@ + +install: $(BIN) rf.1 rfignore.5 rfconfig.5 mkdir -p \ $(DESTDIR)$(PREFIX)/bin \ $(DESTDIR)$(PREFIX)/man/man1 \ @@ -28,4 +37,4 @@ install: $(BIN) install -m444 rfconfig.5 $(DESTDIR)$(PREFIX)/man/man5/ clean: - rm -vf $(BIN) *.o + rm -vf $(BIN) *.o *.1 *.5 diff --git a/README.md b/README.md index ffdd2d2..450e6b7 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,17 @@ > A tiny and simple cross-platform file finder -### Installation +## Installation -The only requirements are a libc and a C compiler. `rf` has been successfully -tested on OpenBSD, FreeBSD and Linux (with glibc and musl), on x86, amd64 and arm -and with clang and gcc. +### From Source -``` -$ make install -``` +Absolute minimum requirements are a C99 compiler. `rf` has been successfully +tested on OpenBSD, FreeBSD and Linux (with glibc and musl), on amd64 and arm +and with clang and gcc. For man pages you will require +[__scdoc__(1)](https://sr.ht/~sircmpwn/scdoc/). -### Usage + $ make install -See `man rf` for more details and examples. +## Usage + +See `man rf` for more details and examples. \ No newline at end of file diff --git a/contrib/vim/README b/contrib/vim/README deleted file mode 100644 index 5752ed0..0000000 --- a/contrib/vim/README +++ /dev/null @@ -1,45 +0,0 @@ -This directory provides basic rf integration in Vim. - -It can be installed from this directory using make: - - make install - -The plugin provides two functions: - -*rf* - - :RF - -This function runs a getchar() loop, allowing you to search from the -root of the current working directory, using only substring patterns, -the idea being that it is very quick and simple to use, rather than -exposing more of the functionality that rf provides. - -I usually bind the function like so: - - map :RF - -The function is very simple and will call rf with your pattern -*at every key stroke*. Usually this is performant enough, but -with extremely large directory trees, you may have to wait several -seconds for results, which isn't great. Aside from any improvements -to the implementation, just make sure that any .rfignore files, -whether local or global are ignoring everything that can be ignored. - -*rf grep* - - :RFGrep search-pattern filename-pattern - -This function is a wrapper around `grep -r` and rf. It allows you -to grep recursively over a smaller subset of files. Again the -implementation is very simple but with very large directory trees -or with filename patterns that match a lot of files you may -hit the argument limit for grep. - -*Issues* - -Aside from the above mentioned limitations and issues, if you -are using anything other than a "Bourne" shell (bash, ksh, zsh, sh) -the functions may not work, in that case you may want to explictly: - - set shell=sh diff --git a/contrib/vim/README.md b/contrib/vim/README.md new file mode 100644 index 0000000..f108c89 --- /dev/null +++ b/contrib/vim/README.md @@ -0,0 +1,68 @@ +# rf-vim + +> Simple `rf` Vim integration + +### Installation + +__Manual installation:__ + +If you are using default Vim paths (so not Neovim for example) you can +just run `make install`. Otherwise you should just be able to modify your +`runtimepath` and add `~/.vim/after/`. + +__Using vim-plug, Vundle, et al:__ + +```viml +Plug 'roryrjb/rf', { 'rtp': 'contrib/vim' } " vim-plug +Plugin 'roryrjb/rf', { 'rtp': 'contrib/vim' } " Vundle +``` + +Other plugin systems will likely have very similar options. In a nutshell +the vim plugin provided here isn't in the root of the repo and assumes +you have `rf` already installed and present in your `$PATH`. + +### Usage + +The plugin provides two functions: + +__RF:__ + +This function runs a getchar() loop, allowing you to search from the +root of the current working directory, using only substring patterns, +the idea being that it is very quick and simple to use, rather than +exposing more of the functionality that rf provides. + +I usually bind the function like so: + +``` +map :RF +``` + +The function is very simple and will call rf with your pattern +*at every key stroke*. Usually this is performant enough, but +with extremely large directory trees, you may have to wait several +seconds for results, which isn't great. Aside from any improvements +to the implementation, just make sure that any `.rfignore` files, +whether local or global are ignoring everything that can be ignored. + +__RFGrep:__ + +``` +:RFGrep search-pattern filename-pattern +``` + +This function is a wrapper around `grep -r` and rf. It allows you +to grep recursively over a smaller subset of files. Again the +implementation is very simple but with very large directory trees +or with filename patterns that match a lot of files you may +hit the argument limit for grep. + +### Issues + +Aside from the above mentioned limitations and issues, if you +are using anything other than a "Bourne" shell (bash, ksh, zsh, sh) +the functions may not work, in that case you may want to explictly: + +``` +set shell=sh +``` diff --git a/contrib/vim/plugin/rf.vim b/contrib/vim/plugin/rf.vim index cf4649b..4ea281c 100644 --- a/contrib/vim/plugin/rf.vim +++ b/contrib/vim/plugin/rf.vim @@ -3,6 +3,7 @@ if exists('loaded_rf') endif let loaded_rf = 1 +let g:rf_prefix = "" set errorformat+=%f @@ -60,15 +61,26 @@ function! g:RFPrompt() echo "RF: " . l:rf_pattern redraw - let results = system('rf -ws -- ' . shellescape(l:rf_pattern)) + if len(g:rf_prefix) + let results = system('rf -l9 -d ' . shellescape(g:rf_prefix) . ' -s -- ' . shellescape(l:rf_pattern)) + else + let results = system('rf -l9 -ws -- ' . shellescape(l:rf_pattern)) + endif + let results_list = split(results, '\n') let l:rf_results = results_list if len(results_list) > 0 - cgete results | copen 9 + if len(results_list) < 9 + execute "cgete results | copen " . len(results_list) + else + cgete results | copen 9 + endif + redraw else cexpr [] + cclose endif else let l:rf_cmd = 0 diff --git a/rf.1 b/rf.1 deleted file mode 100644 index a600e69..0000000 --- a/rf.1 +++ /dev/null @@ -1,47 +0,0 @@ -.TH rf 1 - -.SH NAME -rf \- a tiny and simple file finder - -.SH SYNOPSIS -.SY rf -.OP \-d directory -.OP \-c config -.OP \-lsvw -.OP pattern ... - -.SH DESCRIPTION -\fBrf\fR will find files or directories based on one or more glob (or optionally -substring) patterns, while respecting any ignore rules in \fBrfignore\fR files. - -.SH OPTIONS -.TP -.BI \-d directory -Search from specified directory, otherwise defaults to current working directory. -. -.TP -.BI \-c config -Override config file location. -. -.TP -.BI \-l count -Limit to specified matches count. -. -.TP -.B \-s -Match using substrings instead of globs. -. -.TP -.B \-v -Invert matches. -. -.TP -.B \-w -Match wholename, including path. - -.SH SEE ALSO -.BR rfignore (5), -.BR rfconfig (5) - -.SH COPYRIGHT -Copyright \(co 2019, 2020 Rory Bradford . diff --git a/rf.1.scd b/rf.1.scd new file mode 100644 index 0000000..0fb3c3c --- /dev/null +++ b/rf.1.scd @@ -0,0 +1,42 @@ +rf(1) + +# NAME + +rf - a tiny and simple file finder + +# SYNOPSIS + +*rf* [*-d* _directory_] [*-c* _config_] [*-lsvw*] [*pattern* _..._] + +# DESCRIPTION + +*rf* will find files or directories based on one or more glob (or optionally +substring) patterns, while respecting any ignore rules in *rfignore* files. + +# OPTIONS + +*-d* directory + Search from specified directory, otherwise defaults to current working directory. + +*-c* config + Override config file location. + +*-l* count + Limit to specified matches count. + +*-s* + Match using substrings instead of globs. + +*-v* + Invert matches. + +*-w* + Match wholename, including path. + +# SEE ALSO + +*rfignore*(5), *rfconfig*(5) + +# COPYRIGHT + +Copyright © 2019 - 2021 Rory Bradford . diff --git a/rfconfig.5 b/rfconfig.5 deleted file mode 100644 index 8ad7ab0..0000000 --- a/rfconfig.5 +++ /dev/null @@ -1,41 +0,0 @@ -.TH rfconfig 5 - -.SH NAME -rfconfig \- configure rf behaviour - -.SH SYNOPSIS -$XDG_CONFIG_HOME/rf/config - -.SH DESCRIPTION -An \fBrfconfig\fR file is used to override default behaviour and configure options. - -.SH FORMAT -The config file format is very simple. Comments are only available for a whole -line and start with #. Any lines that begin with a space are ignored. -Each valid config line consists of a key value pair with the key and value -separated by an = character and optionally a single space either side. Additional -spaces will become part of either the key and/or value. - -.SH OPTIONS -.TP -.B symlinks -Read symlinks (value: "true" or "false") -. -.TP -.B wholename -Match whole path (value "true" or "false") -. -.TP -.B limit -Limit amount of results (value: a positive integer) -. -.TP -.B wildcard -Define a custom wildcard character, used in place of * (value: a single ascii character) -. -.TP -.B unmatched error -Exit with non-zero exit code if there were no matches - -.SH COPYRIGHT -Copyright \(co 2019, 2020 Rory Bradford . diff --git a/rfconfig.5.scd b/rfconfig.5.scd new file mode 100644 index 0000000..64d021c --- /dev/null +++ b/rfconfig.5.scd @@ -0,0 +1,43 @@ +rfconfig(5) + +# NAME + +rfconfig - configure rf behaviour + +# SYNOPSIS + +$XDG_CONFIG_HOME/rf/config + +# DESCRIPTION + +An *rfconfig* file is used to override default behaviour and configure options. + +# FORMAT + +The config file format is very simple. Comments are only available for a whole +line and start with #. Any lines that begin with a space are ignored. +Each valid config line consists of a key value pair with the key and value +separated by an = character and optionally a single space either side. +Additional spaces will become part of either the key and/or value. + +# OPTIONS + +*symlinks* + Read symlinks (value: "true" or "false") + +*wholename* + Match whole path (value "true" or "false") + +*limit* + Limit amount of results (value: a positive integer) + +*wildcard* + Define a custom wildcard character, used in place of \* + (value: a single ascii character) + +*unmatched error* + Exit with non-zero exit code if there were no matches + +# COPYRIGHT + +Copyright © 2019 - 2021 Rory Bradford . diff --git a/rfignore.5 b/rfignore.5 deleted file mode 100644 index ec2524e..0000000 --- a/rfignore.5 +++ /dev/null @@ -1,20 +0,0 @@ -.TH rfignore 5 - -.SH NAME -rfignore \- ignore specified paths - -.SH SYNOPSIS -$XDG_CONFIG_HOME/rf/ignore, $HOME/.rfignore, .rfignore - -.SH DESCRIPTION -An \fBrfignore\fR file will be used by \fBrf\fR to ignore files and paths -when iterating through directories. Any matching patterns will not be displayed. -.sp -\fBrf\fR will look in all places specified in the synopsis for glob patterns -on each line and take them all into account. - -.SH SEE ALSO -.BR glob (7) - -.SH COPYRIGHT -Copyright \(co 2019, 2020 Rory Bradford . diff --git a/rfignore.5.scd b/rfignore.5.scd new file mode 100644 index 0000000..bf44440 --- /dev/null +++ b/rfignore.5.scd @@ -0,0 +1,25 @@ +rfignore(5) + +# NAME + +rfignore - ignore specified paths + +# SYNOPSIS + +$XDG_CONFIG_HOME/rf/ignore, $HOME/.rfignore, .rfignore + +# DESCRIPTION + +An *rfignore* file will be used by *rf* to ignore files and paths +when iterating through directories. Any matching patterns will not be displayed. + +*rf* will look in all places specified in the synopsis for glob patterns +on each line and take them all into account. + +# SEE ALSO + +*glob*(7) + +# COPYRIGHT + +Copyright © 2019 - 2021 Rory Bradford . -- cgit 1.4.1-2-gfad0