Raku Land

Edit::Files

zef:lizmat

Actions Status

NAME

Edit::Files - edit a given set of files

SYNOPSIS

use Edit::Files;

edit-files(@files, :editor<vim>);

DESCRIPTION

Edit::Files attempts to provide an abstract interface to editing a set of files, with optional line number and column number specifications.

EXPORTED SUBROUTINES

edit-files

# edit files "foo" and "bar" with vim
edit-files(<foo bar>, :editor<vim>);

# edit file "foo" at line 42, file "bar" at line 666 with default editor
edit-files( (foo => 42,  bar => 666) );

# edit file "foo" at line 42, column 3 and file "bar" with default editor
edit-files( (foo => 42 => 3,  "bar") );

The edit-files subroutine slurps the given file specifications and calls the (implicitely) specified editor to edit these files.

The files can be specified in 3 ways:

The following additional optional named arguments can be specified:

:editor

Specifies the editor to be used. Defaults to the contents of $*EDITOR or %*ENV<EDITOR> or 'vim'.

:tag

An optional tag to be added to each location specified. Defaults to " " (aka a space).

SUPPORTED EDITORS

These editors are currently supported:

SUPPORTING YOUR OWN EDITOR

use Edit::Files;

my sub feditor(@specs, $tag) {
    # handle specs
    run 'feditor', ...
}

edit-files <foo bar>, :editor(&feditor); # edit "foo" and "bar" with "feditor"

You can add your own editor to the list of editors supported by Edit::Files by creating a sub that accepts an array with file / line / column specifications and a tag to be applied. Then you can specify that subroutine in the :editor argument to edit-files.

ADDING AN EDITOR TO THIS DISTRIBUTION

Create a sub as described above, and create a Pull Request to have that subroutine added to this distribution.

ACKNOWLEDGEMENTS

Thanks to Damian Conway for showing the way to handle multiple files / lines using the compilation error -q feature of vim.

AUTHOR

Elizabeth Mattijsen liz@raku.rocks

Source can be located at: https://github.com/lizmat/Edit-Files . Comments and Pull Requests are welcome.

If you like this module, or what I’m doing more generally, committing to a small sponsorship would mean a great deal to me!

COPYRIGHT AND LICENSE

Copyright 2022 Elizabeth Mattijsen

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.