我使用 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(!!!)。
您有两个选择:
写一个变更请求,该包被维护这里
克隆存储库,编写补丁并创建拉取请求。
我认为你必须改变
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; }