2 releases
new 0.1.1 | Mar 15, 2023 |
---|---|
0.1.0 | Mar 15, 2023 |
#21 in Text editors
38 downloads per month
20KB
225 lines
refac: Automatically edit text.
The workflow:
- Select some text.
- Run the command, write instructions on what you want changed.
- Never edit text directly again.
This tool calls the openai api edits
endpoint. You'll need your own api key to use it.
Use refac login
to enter your api key. It will be saved in your home directory
for future use.
This tool uses your openai account so usage is not exactly free. I've paid a total of $0.04 today while developing this tool.
Setup
# This tool can be installed using cargo.
cargo install refac
# Enter your api key it will be saved to your drive for future use.
refac login
Try it out
> refac tor 'The quick brown fox jumps over the lazy dog.' 'convert to all caps'
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
> refac tor '
def add(a: int, b: int):
return a + b
' 'turn this into a command line program that accepts a and b as arguments, printing the result'`
import sys
def add(a: int, b: int):
return a + b
if __name__ == "__main__":
print(add(int(sys.argv[1]), int(sys.argv[2])))
> refac tor '
fn factorial(a: usize) -> usize {
...
}
' 'implement recursive'
fn factorial(a: usize) -> usize {
if a <= 1 {
1
} else {
a * factorial(a - 1)
}
}
> refac tor '
fn factorial(a: usize) -> usize {
if a <= 1 {
1
} else {
a * factorial(a - 1)
}
}
' 'switch to an iterative implementation'
fn factorial(a: usize) -> usize {
let mut result = 1;
for i in 1..=a {
result *= i;
}
result
}
> refac tor '
fn factorial(a: usize) -> usize {
let mut result = 1;
for i in 1..=a {
result *= i;
}
result
}
' 'use an iterator and .fold()'
fn factorial(a: usize) -> usize {
(1..=a).fold(1, |acc, x| acc*x)
}
> refac tor '' 'implement hello world in rust'
fn main(){
let thing = "world";
println!("hello, {}!", thing);
}
> refac tor '
Hey [Name],
I\'m writing to ask if you can lend me $100. I promise I\'ll pay you back as soon as possible.
Thanks,
[Your Name]
' 'make the email more formal and appropriate for a professional setting'
Hey [Name],
This is a professional email.
Thanks,
[Your Name]
Using Refac From Your Favorite Text Editor
First, make sure you have:
- installed refac
- entered your api key using
refac login
Emacs
After installing and logging in add this chunk of flim-flam to your init.el:
(defun refac (start end)
(interactive "r")
(let* ((selected-text
(buffer-substring-no-properties
start
end))
(transform (read-string "Enter transformation instruction: "))
(refac-executable (executable-find "refac")))
(if refac-executable (progn (let (result exit-status)
(with-temp-buffer
(setq exit-status (call-process refac-executable nil t nil "tor" selected-text
transform))
(setq result (buffer-string)))
(if (zerop exit-status)
(progn (delete-region start end)
(insert result))
(message "refac returned a non-zero exit status: %d. Error: %s" exit-status
result))))
(error
"refac executable not found"))))
And bind the function to a key if you like that sort of thing.
(global-set-key (kbd "C-c r") 'refac)
Not Emacs
Your contrubutions are welcome!
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~7–15MB
~298K SLoC