Next: , Previous: Ascii, Up: User Guide


3.5 GNU Go mode in Emacs

You can run GNU Go from Emacs. This has the advantage that you place the stones using the cursor arrow keys or with the mouse, and (provided you have Emacs version 21 or later) you can have a nice graphical display of the board within emacs.

Load the file interface/gnugo.el and (if you want the graphical board) interface/gnugo-xpms.el. You may do this using the Emacs M-x load-file command.

In detail: Emacs uses Control and Meta keys. The “Meta” key is the Alt key on the PC keyboard. The Control and Meta keys are denoted C- and M-. Thus the M-x is obtained by holding the Alt key and typing `x'. In Emacs, this prompts you for another command. You can then type load-file, hit the Enter key, then type the path to gnugo.el and hit Enter again. Then repeat the process for gnugo-xpms.el.

To have the files gnugo.el and gnugo-xpms.el loaded automatically each time you run emacs, copy the files into your site-lisp directory (often /usr/share/emacs/site-lisp) and add lines

     (autoload 'gnugo "gnugo" "GNU Go" t)
     (autoload 'gnugo-xpms "gnugo-xpms" "GNU Go" t)

in your .emacs file.

The .xpm bitmaps for the default size Go stones are 30 pixels. For a larger board, alternative 36 pixel stones may be found in gnugo-big-xpms.el.

You may start GNU Go by M-x gnugo. You will be prompted for command line options (see Invoking GNU Go). Using these, you may set the handicap, board size, color and komi. For example if you want to play white and give a nine-stone handicap, use the options --handicap 9 --color white.

By default, Emacs gives you a graphical Go board. You can toggle an alternative ascii board (for example, if you want to paste a diagram into an email) with gnugo-toggle-image-display, which is bound to `i'. If you want a grid, `g' toggles the grid display on or off. The grid is not displayed by default.

You play a move either by moving to the location with the arrow keys, then hitting the SPACE key, or by clicking on an empty location with the mouse. You can save or load a game, and undo moves.

You can get help at any time by typing `?'. This will give a description of the default keybindings. If you want to find out what a particular function does, you can use `C-h f <function-name>' to get documentation on it. For example, after examining the default keybindings with `?' we learn that `v' is bound to gnugo-view-regression. To find out more information about this function we type `C-h f gnugo-view-regression' to view the help string for the function.

You may save the game you are playing as an sgf file with gnugo-write-sgf-file, which is bound to `s'. You may also restore a saved game with gnugo-read-sgf-file, bound to `l'. When the sgf file is loaded, it is assumed to be your move, since typically the game is saved on your move. You may resume play by entering a move.

At the end of the game, after both players pass, GNU Go will run gnugo-venerate to render all dead stones as ghostly shades. You can then type `F' to run gnugo-display-final-score, which will tell you the score. (You may get a score estimate at any time before the end of the game with gnugo-estimate-score, bound to `!'.

You may undo your move with gnugo-undo-two-moves, which is bound to `u'. This takes back your move, and also the last computer move, so it goes back to the position two moves ago. If you undo one or many moves, you may redo them with gnugo-redo-two-moves, which is bound to `r'.

Although if you are playing a game it is most natural to undo or redo two moves at a time, since this does not change the color of the player to move, you may also undo or redo a single move with gnugo-undo and gnugo-redo, bound to `b' and `f'. This is convenient for scrolling forward or backward in a game to review the moves. Note that if you undo once, then play a move (by clicking on the board, or by hitting the space or enter key), you have changed the color of the player to move. GNU Go will begin to generate moves as soon as you play.

You may also use gnugo-jump-to-move, bound to `j' to jump to a particular move in the game. You will be prompted for the game move. After you type the number of the move, Emacs will undo back to that move number. You may then redo or further undo using `f' and `f'. You may also jump to the beginning or end of the game with `<' and `>'.

Another way to undo back to a given move is to move the cursor to a stone (which must be one of your own), then execute gnugo-magic-undo, bound to `U'.

As we have noted, GNU Go normally answers each move that you play by generating a move of its own. If you want to suppress GNU Go's automatic generation of moves, you may toggle an `editing mode' with gnugo-toggle-edit-mode. In the editing mode, GNU Go does not automatically answer each move that you play. For example, you can use the editing mode to write an sgf file from scratch. If you are playing a game, you can turn off GNU Go's automatic responses, play a few moves in editing mode to see what the board position will look like, then back up to the last move, toggle the editing mode off, then resume the game.

You may view a GNU Go regression test with gnugo-view-regression, which will prompt you for the name of a test. You may type (for example) strategy:6. The first time you do this you will be prompted for the path to the regression/ directory. (Once Emacs knows this path, you will not be prompted again.) This command takes a while to execute since GNU Go will run the regression. When it is completed, Emacs will display the board position (with the grid) and a message below the board such as:

      loadsgf games/incident104.sgf 63
      strategy:6 reg_genmove white
      #? [E10]*
      =6 J13

This gives the actual test followed by the move that GNU Go generates when running the test.

You may also ask GNU Go to identify a dragon on the board. Click on one stone to move the cursor to that location. Then type `d'. The dragon in question will then be marked flashing. You may also type `D', which will report the dragon data. You may run other gtp commands with gnugo-command, which is bound to `:'.