It seems that you cannot set separate color themes for different buffers, but you can set it for different frames. Instructions for setting color themes in the frame can be found here http://www.emacswiki.org/emacs/ColorTheme#toc8 .
You can use load-hook to automatically change the color theme when loading a mode, but it will apply the change to all buffers.
You can change the color theme when the mode is loaded using the loading hook. eg.
(add-hook 'dired-mode-hook 'color-theme-emacs-nw)
Edit: here is a function that opens a shell in a new frame using a different color theme:
(defun my-shell () (interactive) (let ((color-theme-is-global nil)) (select-frame (make-frame)) (color-theme-gnome) (shell)))
Matti pastell
source share