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.
```bash
cargo install refac
refac login ```
```bash
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| accx) }
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] ```
First, make sure you have:
- [ ] installed refac
- [ ] entered your api key using refac login
After installing and logging in add this chunk of flim-flam to your init.el:
elisp
(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.
elisp
(global-set-key (kbd "C-c r") 'refac)
Your contrubutions are welcome!
Licensed under either of
at your option.
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.