我正在尝试使用gtkmm生成进程,但遇到了问题。以下是我的代码的具体摘要:
std::vector<std::string> args, envp;
args.push_back("/usr/libexec/mc/ext.d/doc.sh");
args.push_back("open");
args.push_back("pdf");
envp.push_back("MC_EXT_FILENAME="DATADIR"/bsbguide.pdf");
Glib::spawn_async("", args, envp, Glib::SPAWN_SEARCH_PATH);`
任务是打开DATADIR
中安装的pdf文件(此var由automake定义)。这个在envp中推送的变量对于使用Midnight Commander的东西打开文件至关重要。命令
MC_EXT_FILENAME="some_file" /usr/libexec/mc/ext.d/doc.sh open pdf
将使用PDF查看器完全打开some_file
。
程序编译并运行,但是当我尝试使用这些函数调用程序时,我得到了这个:
(zathura:3014): Gtk-WARNING **: cannot open display:
没有任何反应。来自控制台的相同命令导致我的PDF查看器(Zathura)打开了pdf文件。我在Devhelp找到了这个:
如果您正在编写GTK +应用程序,并且您正在生成的程序也是图形应用程序,那么您可能需要使用
gdk_spawn_on_screen()
来确保生成的程序在右侧屏幕上打开其窗口。
但我找不到这样的功能。也许有一个更优雅和正确的方法来打开文件与用户的默认PDF,没有MC部分的查看器?如果没有,我该怎么做呢?如果没有gdk_spawn_on_screen
,它将是C ++风格的更好。
答案 0 :(得分:0)
因此,作为一个简单的解决方法,我发现了这样的代码
setenv("MC_EXT_FILENAME", DATADIR"/bsbguide.pdf", true);
Glib::spawn_command_line_async("/usr/libexec/mc/ext.d/doc.sh open pdf");