linux-如何使用Rust打开用户的默认编辑器并获取编辑后的内容?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-如何使用Rust打开用户的默认编辑器并获取编辑后的内容?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1648字,纯文字阅读大概需要3分钟。
内容图文
![linux-如何使用Rust打开用户的默认编辑器并获取编辑后的内容?](/upload/InfoBanner/zyjiaocheng/949/6cad265bab81429392902d44acf3b278.jpg)
当您使用不带-m标志的git commit时,它将打开默认编辑器,该编辑器由$EDITOR环境变量设置.这样做使您可以编辑多行,使用箭头导航并在完成后提交文本.我想对我的命令行程序做类似的事情.它可能正在打开默认编辑器或具有我上面刚刚提到的功能的东西.
我尝试使用open crate,但它会打开$VISUAL编辑器,并且似乎没有指定打开哪个编辑器的参数.
我尝试将io :: stdin()与read_to_end()结合使用.它允许输入多行并使用Ctrl-D提交文本,但不允许使用箭头移动和编辑文本.
我尝试使用rustyline crate,但是在能够编辑前几行的同时我找不到如何获取多行的方法.
解决方法:
我可能是错的,但是我认为git commit的工作方式是创建一个临时文件(.git / COMMIT_EDITMSG),然后作为子进程,在用户的$EDITOR中打开该文件,然后等待编辑器进程退出/返回.只有在用户关闭其编辑器时才会发生这种情况.从根本上讲,这意味着他们可以使用自己选择的编辑器的全部功能,即在文件中导航,保存所做的更改等.
因此,在Rust中,您可以使用std::process::Command打开用户的编辑器,您可以通过std::env::var获得该编辑器.如果您的应用程序有一个临时文件(例如git或?/的.git目录),则可以将临时文件存储在特定位置. config /< your-app> /< your-file>等),也可以在std::env::temp_dir返回的系统临时目录中创建一个临时目录.(或者,您可以使用出色的第三方包装箱直接仅创建一个临时文件:tempfile)
这是一个使用上述技术的工作示例:
use std::{
env::{temp_dir, var},
fs::File,
io::Read,
process::Command,
};
fn main() {
let editor = var("EDITOR").unwrap();
let mut file_path = temp_dir();
file_path.push("editable");
File::create(&file_path).expect("Could not create file");
Command::new(editor)
.arg(&file_path)
.status()
.expect("Something went wrong");
let mut editable = String::new();
File::open(file_path)
.expect("Could not open file")
.read_to_string(&mut editable);
println!("File content:\n{}", editable);
}
内容总结
以上是互联网集市为您收集整理的linux-如何使用Rust打开用户的默认编辑器并获取编辑后的内容?全部内容,希望文章能够帮你解决linux-如何使用Rust打开用户的默认编辑器并获取编辑后的内容?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。