请问深度系统是如何传递命令行参数的?
Tofloor
poster avatar
linkaizheng
deepin
2018-09-23 03:00
Author
本帖最后由 linkaizheng 于 2018-9-24 06:25 编辑

我习惯了使用自己编的编辑器,但使用中发现无法用右键点击“打开方式”->“选择默认程序”来打开文档。经测试发现系统并没有传递命令行参数到程序中。测试代码如下:

#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 文件中没有它。



Reply Favorite View the author
All Replies
avatar
wtz
deepin
2018-09-23 04:41
#1
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?
Reply View the author
Comments
linkaizheng
2018-09-24 14:03
谢谢您的参与
avatar
linkaizheng
deepin
2018-09-23 04:59
#2
https://bbs.deepin.org/post/169180
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?

在命令行输入是可以的,但我需要的是双击文本文件就能打开文档
Reply View the author
avatar
linusboyle
deepin
2018-09-23 06:24
#3
desktop 文件的问题吧
Reply View the author
Comments
linkaizheng
2018-09-24 14:00
尽管回复的稍显简单,但指明了问题的解决方向,谢谢了
avatar
listenerri
deepin
2018-09-23 06:26
#4
检测一下desktop文件
Reply View the author
Comments
linkaizheng
2018-09-24 14:01
尽管回复的稍显简单,但指明了问题的解决方向,谢谢了
avatar
wangzhentao
deepin
2019-10-14 19:48
#5
你好,为什么我的.desktop的application类型不能添加到打开方式呢?
Reply View the author