Emacs default font does not work with new frames

I have this code in my .emacs file (set-default-font "Monaco 16"). When I start emacs when it is not open (by clicking on the shortcut for instance) it starts with Monaco 16 but when I create a new frame with C-x 5 2 it starts with the old default font, which is too small to read for me. Is there a way around this?



EDIT

When loading emacs throws an error and the problem appears to be with (set-default-font "Monaco 16" nil t) in my .emacs. What is wrong? I copy the emacs debug copy:

Debugger entered--Lisp error: (wrong-number-of-arguments #[(font-name &optional$
\203^X^@\305\304\306\"\307 _^Q\305\304\310\"\311 _^P\312\313 \314^KBC\"\210
\2039^@\312\313 \306\315        \307 \"B\310\315^H\311 \"BD\"\210*\316\317\320\$
  set-default-font("Monaco 16" nil t)
  eval-buffer(#<buffer  *load*> nil "/Users/a/.emacs" nil t)  ; Reading at buff$
  load-with-code-conversion("/Users/a/.emacs" "/Users/a/.emacs" t t)
  load("~/.emacs" t t)
  #[nil "^H\205\276^@   \306=\203^Q^@\307^H\310Q\202A^@ \311=\2033^@\312\307\31$
  command-line()
  normal-top-level()

Solution 1:

set-default-font is deprecated. But anyway, it sounds like it is doing for you what the doc string says. The way you are calling it, it should change the font only for the current frame.

If you want it to change the default font for all frames, then pass it t as the third argument. For example: (set-default-font "Monaco 16" nil t).

Do C-h f set-default-font and you will see something like this:

,----
| set-default-font is an alias for `set-frame-font' in `frame.el'.
| 
| (set-default-font FONT &optional KEEP-SIZE FRAMES)
| 
| This function is obsolete since 23.1;
| use `set-frame-font' instead.
| 
| Set the default font to FONT.
| When called interactively, prompt for the name of a font, and use
| that font on the selected frame.  When called from Lisp, FONT
| should be a font name (a string), a font object, font entity, or
| font spec.
| 
| If KEEP-SIZE is nil, keep the number of frame lines and columns
| fixed.  If KEEP-SIZE is non-nil (or with a prefix argument), try
| to keep the current frame size fixed (in pixels) by adjusting the
| number of lines and columns.
| 
| If FRAMES is nil, apply the font to the selected frame only.
| If FRAMES is non-nil, it should be a list of frames to act upon,
| or t meaning all graphical frames.  Also, if FRAME is non-nil,
| alter the user's Customization settings as though the
| font-related attributes of the `default' face had been "set in
| this session", so that the font is applied to future frames.
`----

Solution 2:

If this doesn't work for a GUI version of Emacs, then another setting is likely conflicting with it:

(set-face-attribute 'default nil :background "black" :foreground "white"
  :font "Courier" :height 180)