[Share Experiences] FSearch文件搜索工具打开文件夹行为的改进
Tofloor
poster avatar
MeGusta
deepin
2024-10-30 00:23
Author

更新20241114:
不需要更改代码,在配置文件里面添加设置即可:
https://bbs.deepin.org/post/281230

==================================================

在使用原版FSearch工具搜索文件时,在搜索到的文件上点击“右键->打开文件夹”,默认的行为是在文件管理器中打开文件/文件夹的上级文件夹,而不是定位到这个文件。
如果你是想通过FSearch定位到这个文件,就像Windows下的Everything一样,那就实现不了了。在默认的情况下,你得先定位到上级文件夹,然后再用文件管理器自带的搜索工具,再搜索一次。

这样太不方便了。

类似这样:

录屏_选择区域_20241029234326.gif

改造:

经过dde-file-manager -h查询,知道,Deepin的文件管理器定位到文件的命令是:

dde-file-manager --show-item /your/path

从github的fsearch项目上面把代码扒下来,查看了一下窗口调用的函数,再结合chatgpt,就有了如下的解决方案:

修改一:

// 修改 fsearch-0.2.3/src/fsearch_window_actions.c
// 在 fsearch_window_action_open_generic() 函数后面添加Deepin的文件定位函数 fsearch_window_action_open_de(),
// 如果不是deepin桌面环境,仍旧调用 fsearch_window_action_open_generic() 打开目录

void
fsearch_window_action_open_de(FsearchApplicationWindow *win, bool open_parent_folder, bool triggered_with_mouse) {
    const guint selected_rows = fsearch_application_window_get_num_selected(win);
    if (selected_rows == 0) {
        return; 
    }

    GList *paths = NULL;
    if (open_parent_folder) {
        fsearch_application_window_selection_for_each(win, (GHFunc)collect_selected_entry_parent_path, &paths);
    } else {
        fsearch_application_window_selection_for_each(win, (GHFunc)collect_selected_entry_path, &paths);
    }

    // 判断桌面环境是否为深度桌面,UOS v20 环境下$XDG_CURRENT_DESKTOP变量值为Deepin;Deepin v23 环境下变量值为 DDE
    const char *desktop_env = g_getenv("XDG_CURRENT_DESKTOP");
    bool is_deepin = desktop_env && (g_strcmp0(desktop_env, "Deepin") == 0 || g_strcmp0(desktop_env, "DDE") == 0);

    if (is_deepin) {
        // 使用 Deepin 文件管理器打开路径
        for (GList *l = paths; l != NULL; l = l->next) {
            char *path = (char *)l->data;
            g_autofree char *cmd = g_strdup_printf("dde-file-manager --show-item \"%s\"", path);
            int status = system(cmd);
            if (status != 0) {
                // 如果打开失败,可以选择是否要处理错误
                fprintf(stderr, "Failed to open path with Deepin file manager: %s\n", path);
            } else {
                // 这里可以根据需要进行后续操作
                action_after_open(triggered_with_mouse);
            }
        }
    } else {
        fsearch_window_action_open_generic(win, open_parent_folder, triggered_with_mouse);
    }

    g_list_free_full(paths, g_free);
}

修改二:

// 修改 fsearch-0.2.3/src/fsearch_window_actions.c 
// fsearch_window_action_open_folder() 函数,修改为使用fsearch_window_action_open_de()函数打开目录

static void
fsearch_window_action_open_folder(GSimpleAction *action, GVariant *variant, gpointer user_data) {
    FsearchApplicationWindow *self = user_data;
    fsearch_window_action_open_de(self, false, false);
}

修改三:

// 修改 fsearch-0.2.3/src/fsearch_window_actions.h
// 在行尾后面添加Deepin的文件定位函数名:
void
fsearch_window_action_open_de(FsearchApplicationWindow *win, bool open_parent_folder, bool triggered_with_mouse);

编译:

# 安装库:
sudo apt install build-essential meson itstool libtool \
pkg-config intltool libicu-dev libpcre2-dev libglib2.0-dev \
libgtk-3-dev libxml2-utilssudo apt install git build-essential \
meson itstool libtool pkg-config intltool libicu-dev libpcre2-dev \
libglib2.0-dev libgtk-3-dev libxml2-utils

# 编译:
cd fsearch-0.2.3
meson setup builddir --prefix=/opt/apps/io.github.fsearch/files
sudo ninja -C builddir install

效果如下:

录屏_选择区域_20241030001626.gif

Reply Favorite View the author
All Replies
Oli
deepin
2024-10-30 00:43
#1

like

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-30 01:18
#2

这东西似乎不需要DFM专用的参数

https://bbs.deepin.org.cn/phone/post/204133

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-30 01:23
#3

--select,现在好像DFM也支持这个用法了

https://bbs.deepin.org.cn/phone/zh/post/140698

你试试select好不好用,如果好用完全可以用select然后推上游,这样不是DDE的用户也能享受了

Reply View the author
小鱼贝壳
deepin
2024-10-30 01:31
#4

applaud

Reply View the author
MeGusta
deepin
2024-10-30 01:54
#5
神末shenmo

--select,现在好像DFM也支持这个用法了

https://bbs.deepin.org.cn/phone/zh/post/140698

你试试select好不好用,如果好用完全可以用select然后推上游,这样不是DDE的用户也能享受了

我今天在UOS v20和Deepin v23最新的内测版尝试过了,目前只有dde-file-manager --show-item /path管用,也许官方不准备再做一个重复的--select选项,不过问chatgpt,nautilus和dolphin是支持的。

另外,目前看来,dp官方好像没精力对这种第三方软件进行优化了。也是最近学了一点点点c++,才看得懂c,才想起来去改的。难受着用了快一年了,实在忍不了了。

Reply View the author
ggbond
deepin
2024-11-01 01:02
#6

like

Reply View the author
MeGusta
deepin
2024-11-12 11:59
#7
神末shenmo

--select,现在好像DFM也支持这个用法了

https://bbs.deepin.org.cn/phone/zh/post/140698

你试试select好不好用,如果好用完全可以用select然后推上游,这样不是DDE的用户也能享受了

今天有空,去项目页面发了Feature Request:
https://github.com/cboxdoerfer/fsearch/issues/586

Reply View the author