Exclui dados do meio de um arquivo binário com o modo hexl

10

Eu tenho um arquivo binário razoavelmente grande (algumas dezenas de MB) e gostaria de remover alguns KB em algum lugar no meio, eles são dados intercalados, não o começo nem o fim.

Idealmente, eu gostaria de usar o emacs e o modo hexl parece um candidato provável.

É possível excluir uma linha do buffer hexl? Ctrl - k não parece fazer o trabalho. Estou feliz em olhar para o código, mas por qualquer motivo procurando por hexl-mode.el tudo o que eu encontro é o arquivo .elc compilado em minha máquina Ubuntu 10.04 Emacs 23.1.

Além disso: em uma jogada furtiva, eu gostaria de adicionar outra pergunta no modo hexl que não esteja diretamente relacionada à pergunta como está no título, mas que faz parte do problema completo que estou enfrentando: Seria muito útil para mim se eu pudesse mostrar X caracteres hexadecimais por linha onde X obviamente muda com o formato do arquivo binário que estou editando, eu não consegui encontrar uma maneira de fazer isso com o modo hexl e pensei jogue a questão aqui.

    
por Mcradle 29.10.2010 / 01:50

2 respostas

6

O modo Hexl não permite excluir caracteres. Esta resposta do estouro de pilha sugere uma solução: sobrescreva os caracteres que você deseja excluir com outro caractere (digamos "X"), mude para o modo hexl, encontre os caracteres e apague-os.

    
por 29.01.2013 / 19:06
2

Use o nhexl-mode (que pode ser instalado como um pacote do ELPA). O modo nhexl é um modo menor; o texto permanece editável no modo principal em que o buffer já estava.

Por padrão, o modo nhexl ativa o modo de sobrescrição, mas você ainda pode excluir. Para inserir texto, desative o modo de substituição com M-x binary-overwrite-mode .

Você pode colocar o seguinte trecho de código no seu arquivo init ( ~/.emacs ) para ligar a tecla Insert para alternar o modo de sobrescrever no modo nhexl.

(unless (boundp 'nhexl-mode-map)
  (defvar nhexl-mode-map (make-sparse-keymap)
    "Keymap used when 'nhexl-mode' is active."))
(define-key nhexl-mode-map [insert] 'binary-overwrite-mode)

Isso também pode ser interessante se você usar o modo nhexl.

    
por 06.01.2016 / 00:52