【问题标题】:Custom action or command in C using libfm Linux?使用 libfm Linux 在 C 中自定义操作或命令?
【发布时间】:2019-08-25 16:14:04
【问题描述】:

我正在为 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 中执行自定义命令或函数,逗号是什么?这是命令:

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);
    }
}

我是这种编程语言的新手。

【问题讨论】:

    标签: c++ c linked-list gtk glib


    【解决方案1】:

    使用 g_list_foreach https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-foreach

    然后你创建一个 void (*GFunc) (gpointer listItem, gpointer otherStuffEnteredInGListForeach) 的函数来包装 fm_launch_command_simple。

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多