使 feh(类似于 xv 的图像查看器)只读吗?

使 feh(类似于 xv 的图像查看器)只读吗?

我使用 feh(类似于 xv 的图像查看器)查看图像,然后按键盘“>”查看旋转的图像,然后按“q”退出。feh用旋转后的图像覆盖原始图像

我该如何告诉 feh 我只想查看旋转的图像,而不是以那种方式保存它们?

换句话说,我希望 feh 的行为更像 xv,不会在未经我明确同意的情况下覆盖(或保存)图像。我确实喜欢 feh 的其他功能(如字幕和更好的调整大小功能),因此改用 xv 并不是一个解决方案。

我知道我可以将文件系统中的图像设为只读,但这似乎有些极端。feh 肯定有“只读”选项吧?

我确实看了man feh,但什么也没发现。

编辑:根据@AB 的出色建议,我找到了一种非常巧妙的方法,即通过修改源代码来禁用 feh 的“就地编辑” imlib.c。只需添加以下行:

FEH_FILE(w->file->data)->filename = "/tmp/fehhack";

在此之后(全部void feh_edit_inplace(winwidget w, int op)):

if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename)
    return;

旋转后的图像现在将存储在文件中并从中重新加载/tmp/fehhack。对这个“解决方案”不满意,但它对我有用。

答案1

这是设计使然。菜单项是File(旋转的菜单项是Edit in Place!!!)。

您有两个选择:

  1. 写一个变更请求,该包被维护这里

  2. 克隆存储库,编写补丁并创建拉取请求。

    我认为你必须改变feh_edit_inplace(winwidget w, int op)功能imlib.c

    void feh_edit_inplace(winwidget w, int op)
    {
            int ret;
            Imlib_Image old;
            Imlib_Load_Error err;
            if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename)
                    return;
    
            if (!strcmp(gib_imlib_image_format(w->im), "jpeg")) {
                    feh_edit_inplace_lossless(w, op);
                    feh_reload_image(w, 1, 1);
                    return;
            }
    
            ret = feh_load_image(&old, FEH_FILE(w->file->data));
            if (ret) {
                    if (op == INPLACE_EDIT_FLIP) {
                            imlib_context_set_image(old);
                            imlib_image_flip_vertical();
                    } else if (op == INPLACE_EDIT_MIRROR) {
                            imlib_context_set_image(old);
                            imlib_image_flip_horizontal();
                    } else
                            gib_imlib_image_orientate(old, op);
                    gib_imlib_save_image_with_error_return(old,
                            FEH_FILE(w->file->data)->filename, &err);
                    gib_imlib_free_image(old);
                    if (err)
                            feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename,
                                    w, err);
                    feh_reload_image(w, 1, 1);
            } else {
                    im_weprintf(w, "failed to load image from disk to edit it in place");
            }
    
            return;
    }
    

相关内容