Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
tweak(1)			  Simon Tatham				tweak(1)

NAME
     tweak - efficient hex editor

SYNOPSIS
     tweak [-l | -f] [-e] [-w width] [-o offset] filename

DESCRIPTION
     tweak is a hex editor. It allows you to edit a file at very low level, let-
     ting you see the full and exact binary contents of the file. It can be use-
     ful  for modifying binary files such as executables, editing disk or CD im-
     ages, debugging programs that generate binary file formats incorrectly, and
     many other things.

     Unlike simpler hex editors, tweak possesses a fully functional insert mode.
     This is not useful when editing many of the types of file described  above,
     but  can  be useful in other situations. Also, an insert mode makes it easy
     to use tweak to construct new files from scratch.

     When you open a file in tweak, you can expect to see  the	screen	contents
     looking something like this:

     00000000	7F 45 4C 46 01 01 01 00   .ELF....
     00000008	00 00 00 00 00 00 00 00   ........
     00000010	02 00 03 00 01 00 00 00   ........
     00000018	D0 8E 04 08 34 00 00 00   ....4...
     00000020	2C EF 01 00 00 00 00 00   ,.......

     The central column shows you the hexadecimal value of each byte in the file
     you  are editing. The column on the right shows the ASCII interpretation of
     those bytes, where applicable. In the example above, the sequence 45 4C  46
     on  the  first line translates into the ASCII upper-case letters `ELF', but
     the subsequent sequence 01 01 01 00 does not have any printable ASCII  rep-
     resentation and so the right-hand column simply prints dots.

     The  column  on the left shows the position within the file of the start of
     each row.

     In fact, when you start tweak, you will usually see 16 bytes  of  the  file
     per row, not 8 as shown above. However, this is configurable if your screen
     is  narrower - or wider - than the usual 80 columns, or if the file you are
     editing consists of fixed-size records of some other size.

     By default, tweak does not load its entire input file into memory. Instead,
     it loads it lazily, reading from the file on disk when you request  a  view
     of  a part of the file it doesn't have stored. When you modify the file, it
     stores your modifications in memory, but continues to refer to the original
     disk file for the parts you have not touched. This means you can  edit  ex-
     tremely  large  files  (for  example, entire CD images) without difficulty;
     opening such a file is instantaneous, making modifications  causes  tweak's
     memory  usage  to grow with the size of the changes rather than the size of
     the whole file, and only when saving the altered version will tweak have to
     read through the entire input file to write the output.

     However, this mode of operation has a disadvantage, which is  that  if  the
     input  file  is modified by another program while tweak is running, tweak's
     internal data structures will not be sufficient to keep track,  and  it  is
     likely  that the file written out will contain a mixture of the old and new
     contents of the input file. Therefore, you can disable this lazy loading if
     you need to; see the -e option below.

OPTIONS
     This section lists the command-line options supported by tweak.

     -f     Runs tweak in `fix' mode, i.e. with  the  insert  function	entirely
	    disabled.  This  might  be useful if you are editing a file in which
	    the insert mode is of no use (executables, for example, tend to have
	    strong dependencies on precise file offsets which make it almost im-
	    possible to insert data in one without rendering  it  unusable)  and
	    you want to avoid turning it on by mistake.

     -l     Runs  tweak in `look' mode. In this mode tweak does not allow you to
	    modify the data at all; it becomes simply a  tool  for  examining  a
	    file in detail.

     -e     Runs  tweak in `eager' mode. In this mode tweak will read its entire
	    input file when starting up. This causes it to take up more  memory,
	    but  means that it has no dependency on the input file remaining un-
	    modified, and other programs can alter it if they  need  to  without
	    causing trouble.

     -w width
	    Specifies  the  number of bytes tweak will display per line. The de-
	    fault is 16, which fits neatly in an 80-column screen.

     -o offset
	    If this option is specified, tweak will ensure that the  given  file
	    offset  occurs  at the start of a line. For example, if you loaded a
	    file using the options -w 8 -o 0x13, you might see a display  a  bit
	    like this:

	    00000000		      7F 45 4C	      .EL
	    00000003   46 01 01 01 00 00 00 00	 F.......
	    0000000B   00 00 00 00 00 02 00 03	 ........
	    00000013   00 01 00 00 00 D0 8E 04	 ........
	    0000001B   08 34 00 00 00 2C EF 01	 .4...,..

	    By	putting  only  three  bytes  of the file on the very first line,
	    tweak has arranged that the file offset 0x13 (19 in decimal) appears
	    at the beginning of the fourth line.

	    You might use this option if you knew you were editing a file  in  a
	    particular	format.  For  example,	if your file contained a 53-byte
	    header followed by a series of 22-byte records, you  might	find  it
	    useful  to	specify the options -w 22 -o 53. This would arrange that
	    after the header, each individual record of the file would appear on
	    precisely one line of tweak's display.

     -D     If this option is specified, tweak will not attempt to load and edit
	    a file at all, but will simply produce its default .tweakrc file  on
	    standard  output.  This  is a useful way to give yourself a starting
	    point if you want to begin reconfiguring tweak's keyboard layout.

KEYS
     This section describes all the editing keys supported by tweak by	default.
     The default key bindings for tweak are basically Emacs-like.

   Movement keys
     The  Emacs  cursor movement keys should all work, and their counterparts in
     ordinary function keys ought to work too:

     *	    ^P and ^N go to the previous and next lines; Up and Down  should  do
	    the same.

     *	    ^B	and  ^F go back and forward one character; Left and Right should
	    do the same.

     *	    M-v and ^V go up and down one screenful at a time; Page Up and  Page
	    Down should do the same.

     *	    ^A	and  ^E  go  to  the beginning and end of the line; Home and End
	    should do the same.

     Press M-< and M-> go to the beginning and end of the file.

     Press ^X g to go to a particular byte position in the  file;  you	will  be
     asked  to type in the position you want. You can enter it in decimal, or as
     a hex number with `0x' before it.

   Editing keys
     Press Return to move the cursor between the hex section of the  screen  and
     the ASCII section.

     When  in  the  hex section, you can enter hexadecimal digits to alter data;
     when in the ASCII section, you can directly type ASCII text.

     In ASCII mode, you can also press ^Q to  literally  quote	the  next  input
     character;  for  example,	if you want to insert a Control-V, you can press
     ^Q^V and tweak will automatically insert the byte value 0x16.

     Press ^X^I, or the Insert key if you have one, to toggle between  overwrite
     mode and insert mode. In insert mode, typing hex or ASCII input will insert
     new bytes containing the values you provide. Also, you can then press Back-
     space  to	delete	the  byte  to the left of the cursor, or ^D or Delete to
     delete the byte under the cursor.

   Cut and paste
     Press ^@ (this character may be generated by the key combination Control-@,
     or Control-2, or Control-Space) to mark the end of a selection region.  Af-
     ter  you  do this, the bytes between that mark and the cursor will be high-
     lighted. Press ^@ again to abandon the selection.

     Press M-w while a selection is active to  copy  the  selected  region  into
     tweak's cut buffer.

     In insert mode, you also have the option of pressing ^W to cut the selected
     region completely out of the file and place it in the cut buffer.

     Finally, press ^Y to paste the cut buffer contents back into the file (this
     will overwrite or insert depending on the current mode).

   Searching
     Press  ^S	to  search  for a byte sequence. You will be asked to enter some
     text to search for on the bottom line of the screen. You can type this text
     in ASCII, or as a sequence of hex byte  values  prefixed  with  backslashes
     (\).  For example, if you wanted to search for the byte value 5 followed by
     the word `hello', you might enter \05hello. If you want to specify  a  lit-
     eral  backslash character, you can either enter it in hex (as \5C), or sim-
     ply double it on input (\\).

     Press ^R to search backwards instead of forwards from  the  current  cursor
     position.

     Since tweak deals in pure binary data, searches are always case-sensitive.

   Controlling the display
     If you press ^X w, you will be asked to enter a new display width. This has
     the  same	effect	as passing the -w option on the command line. Similarly,
     pressing ^X o allows you to enter a new display offset, equivalent  to  the
     -o option.

     By  default,  the	current  file  position  and  file size are displayed on
     tweak's status line in hex. If you prefer them in decimal, you can press ^X
     x or ^X h to toggle them between hex and decimal.

   Miscellaneous
     Press ^L to redraw the screen and recentre the cursor. Press ^Z to  suspend
     tweak and return temporarily to the shell.

     Press ^X^S to save the file you are editing.

     Press ^X^C to exit tweak. (If you do this with changes unsaved, you will be
     asked whether you want to save them.)

CONFIGURATION FILE
     tweak's  keyboard bindings are configurable. It will attempt to read a file
     from your home directory called .tweakrc, and if it finds one it  will  use
     the keyboard bindings described in it. If it does not find one, it will use
     its internal default bindings.

     Most of the directives in .tweakrc are of the form `bind command-name key'.
     For  example,  `bind  exit  ^X^C'. Additionally, there are two other direc-
     tives, width and offset, which give the default display parameters if no -w
     and -o options are specified.

     The easiest way to learn about the .tweakrc file  is  to  begin  by  having
     tweak output its internal default one:

     tweak -D > $HOME/.tweakrc

     Then you can read the default file, learn the tweak internal command names,
     and edit the file to do what you want.

BUGS
     This  man	page probably ought to contain an explicit list of internal com-
     mand names, rather than simply referring you to the default .tweakrc.

Simon Tatham			   2004-11-05				tweak(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=tweak&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help