Torna feh (visualizador de imagens semelhante a xv) readonly?

2

Eu usei feh (um visualizador de imagens semelhante a xv) para visualizar uma imagem e, em seguida, o teclado ">" para ver a imagem rodada e, em seguida, "q" para sair. feh sobrescreveu a imagem original com a imagem girada !

Como posso dizer que só quero ver minhas imagens giradas, não salvá-las dessa maneira?

Em outras palavras, quero que o feh se comporte mais como xv e não sobrescreva (ou salve) imagens sem o meu explícito ditado. Eu gosto de outros recursos do feh (como legendas e melhor capacidade de redimensionamento), então usar xv não é uma solução.

Eu percebo que eu poderia fazer as imagens somente leitura no sistema de arquivos, mas isso parece extremo. Certamente, o feh tem uma opção "somente leitura"?

Eu olhei para "man feh" e não encontrei nada.

EDITAR : seguindo a excelente sugestão do @ A.B., encontrei uma maneira super hacky de desabilitar a "edição in-loco" do feh ajustando a fonte do imlib.c. Basta adicionar esta linha:

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

após este (todos em void feh_edit_inplace(winwidget w, int op) ):

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

A imagem girada agora será armazenada e recarregada a partir do arquivo /tmp/fehhack . Não está feliz com essa "solução", mas funciona para mim.

    
por barrycarter 08.11.2015 / 17:17

1 resposta

2

É por design. A entrada do menu é File (!) e a entrada do menu para rotação é Editar no Local ( !!! ).

Você tem duas opções:

  1. Escreva um pedido de alteração, o pacote é mantido aqui

  2. Clone o repositório, escreva um patch e crie uma solicitação de pull.

    Acho que você precisa alterar a função feh_edit_inplace(winwidget w, int op) em 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;
    }
    
por A.B. 08.11.2015 / 17:44