linkaizheng
deepin
2018-09-23 04:59 https://bbs.deepin.org/post/169180
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?
在命令行输入是可以的,但我需要的是双击文本文件就能打开文档
Reply Like 0 View the author
https://bbs.deepin.org/post/169180
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?
Popular Ranking
ChangePopular Events
More
我习惯了使用自己编的编辑器,但使用中发现无法用右键点击“打开方式”->“选择默认程序”来打开文档。经测试发现系统并没有传递命令行参数到程序中。测试代码如下:
#include
int
main (int argc, char **argv)
{
GtkWidget *window;
int i;
gtk_init (&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
for(j = 0; j < argc; j ++)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_CLOSE,
"argc=%d\nargv[%d]=\"%s\"",
argc,
j,
argv[j]);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy (dialog);
}
gtk_widget_show(window);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
得到的结果如下图:
可以看到系统传递给程序的命令行参数只有一条,就是程序本身。其它的系统还会有第二条,应该是要打开的文件的路径。不知道深度的系统为什么没有?要说没有吧,深度自带的编辑器gedit就能用同样的方式打开文件,真的是好奇怪呀?
在命令行输入 argtest/argtest ./test.txt 就可以得到命令行参数,结果如下图:
尽管我可以在程序打开后,再去打开文档。但总是有些别扭。请问我该如何做,才能让系统把命令行参数传递过来?
感谢 linusboyle 和 listtenerRi 两位坛友的回帖提示,问题终于解决了!
参考 giftdawn的文档,找到了问题的解决方法,原文链接:
https://blog.csdn.net/giftdawn/article/details/7917982
解决方法如下:
在桌面上建立 argtest.desktop 文件,添加如下内容:
[Desktop Entry]
Encoding=UTF-8
Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F
Icon=application-x-desktop
MimeType=text/plain
Name=argtest
Terminal=false
Type=Application
右键点击要打开的文档,点击“打开方式”、“选择默认程序”,然后点“添加其他程序”,选择刚建立的 argtest.desktop 文件,即可打开文档了,结果如下图:
重点是“Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F” 这句中的 “%F” ,它就是传递命令行参数的关键符号,系统在自动创建的desktop 文件中没有它。