Next: Working with function and arrow keys, Previous: Invalid prefix characters, Up: Key bindings

### 10.3 Why doesn't this [terminal or window-system setup] code work in my `.emacs` file, but it works just fine after Emacs starts up?

During startup, Emacs initializes itself according to a given code/file order. If some of the code executed in your `.emacs` file needs to be postponed until the initial terminal or window-system setup code has been executed but is not, then you will experience this problem (this code/file execution order is not enforced after startup).

To postpone the execution of Emacs Lisp code until after terminal or window-system setup, treat the code as a lambda list and set the value of either the `term-setup-hook` or `window-setup-hook` variable to this lambda function. For example,

         (add-hook 'term-setup-hook
                   (lambda ()
                    (when (string-match "\\`vt220" (or (getenv "TERM") ""))
                      ;; Make vt220's "Do" key behave like M-x:
                      (global-set-key [do] 'execute-extended-command))))

For information on what Emacs does every time it is started, see the `lisp/startup.el` file.