我正在为pcmanfm进行自定义操作,即时编辑文件“main-win.c”,这里是代码:
static void on_open(GtkAction* act, FmMainWin* win) {
FmFileInfoList *files = fm_folder_view_dup_selected_files(win->folder_view);
if (files) {
GList* l = fm_file_info_list_peek_head_link(files);
if (g_list_length(l) > 0)
fm_launch_files_simple(GTK_WINDOW(win), NULL, l, pcmanfm_open_folder, NULL);
fm_file_info_list_unref(files);
}
}
“FmFileInfoList * files”是文件管理器窗口中SELECTED FILES的列表。
“GList * l”是将列表转换为双重链接列表。
函数fm_launch_files_simple()使用默认程序运行链表中的所有文件,如“gedit /home/someuser/some.txt”或“totem /home/someuser/video.mp4”。
我需要谁?,我需要使用循环在所有SELECTED FILES中执行自定义命令或函数,这是commad吗?这是命令:
fm_launch_command_simple(GTK_WINDOW(win), NULL, 0, "somecommand", NULL);
fm_launch_command_simple(),是一个libfm函数,它在执行pcmanfm的控制台中运行bash命令...
这里是我想做的一个例子,使用“printf”函数:
static void on_open(GtkAction* act, FmMainWin* win) {
FmFileInfoList *files = fm_folder_view_dup_selected_files(win->folder_view);
if (files) {
//GList* l = fm_file_info_list_peek_head_link(files);
//if (g_list_length(l) > 0)
//fm_launch_files_simple(GTK_WINDOW(win), NULL, l, pcmanfm_open_folder, NULL);
for (file in files) {
printf("echo File selected: " + file[i]);
}
fm_file_info_list_unref(files);
}
}
这里使用函数“fm_launch_command_simple”的其他示例:
static void on_open(GtkAction* act, FmMainWin* win) {
FmFileInfoList *files = fm_folder_view_dup_selected_files(win->folder_view);
if (files) {
//GList* l = fm_file_info_list_peek_head_link(files);
//if (g_list_length(l) > 0)
//fm_launch_files_simple(GTK_WINDOW(win), NULL, l, pcmanfm_open_folder, NULL);
for (file in files) {
fm_launch_command_simple(GTK_WINDOW(win), NULL, 0, "echo File selected: " + file[i], NULL);
}
fm_file_info_list_unref(files);
}
}
我是这种编程语言的新手。
使用g_list_foreach https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-foreach
然后创建一个包含fm_launch_command_simple的void(* GFunc)函数(gpointer listItem,gpointer otherStuffEnteredInGListForeach)。