Added "Close view on exit" functionality.
diff --git a/com.google.eclipse.terminal.local/plugin.xml b/com.google.eclipse.terminal.local/plugin.xml
index 3f6669b..bb6ac98 100644
--- a/com.google.eclipse.terminal.local/plugin.xml
+++ b/com.google.eclipse.terminal.local/plugin.xml
@@ -44,9 +44,15 @@
    <extension
          point="org.eclipse.ui.preferencePages">
       <page
+            category="com.google.eclipse.terminal.local.page.root"
             class="com.google.eclipse.terminal.local.ui.preferences.ColorsAndFontsPreferencePage"
-            id="com.google.eclipse.terminal.local.colors"
-            name="Local Terminal Colors and Fonts">
+            id="com.google.eclipse.terminal.local.page.colorsAndFonts"
+            name="Colors and Fonts">
+      </page>
+      <page
+            class="com.google.eclipse.terminal.local.ui.preferences.RootPreferencePage"
+            id="com.google.eclipse.terminal.local.page.root"
+            name="Local Terminal">
       </page>
    </extension>
    <extension
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorPreferencesChangeListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorsAndFontsPreferencesChangeListener.java
similarity index 88%
rename from com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorPreferencesChangeListener.java
rename to com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorsAndFontsPreferencesChangeListener.java
index 8b8724e..3fa7b48 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorPreferencesChangeListener.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractColorsAndFontsPreferencesChangeListener.java
@@ -15,7 +15,7 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public abstract class AbstractColorPreferencesChangeListener implements IPropertyChangeListener {
+public abstract class AbstractColorsAndFontsPreferencesChangeListener implements IPropertyChangeListener {
   @Override public final void propertyChange(PropertyChangeEvent event) {
     String property = event.getProperty();
     if (BACKGROUND_COLOR.equals(property) || FOREGROUND_COLOR.equals(property)) {
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java
index 5c0144c..9643fbe 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferencePage.java
@@ -12,7 +12,6 @@
 import static com.google.eclipse.terminal.local.ui.preferences.Messages.*;
 import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
 import static org.eclipse.jface.preference.ColorSelector.PROP_COLORCHANGE;
-import static org.eclipse.swt.SWT.*;
 
 import java.io.InputStream;
 import java.util.Scanner;
@@ -36,15 +35,12 @@
   private ColorSelector foregroundColorSelector;
   private ColorSelector backgroundColorSelector;
 
-  public ColorsAndFontsPreferencePage() {
-  }
-
   @Override public void init(IWorkbench workbench) {
     setPreferenceStore(preferenceStore());
   }
 
   @Override protected Control createContents(Composite parent) {
-    Composite contents = new Composite(parent, NONE);
+    Composite contents = new Composite(parent, SWT.NONE);
     contents.setLayout(new GridLayout(1, false));
     Label lblDescription = new Label(contents, SWT.NONE);
     lblDescription.setText(colorsAndFontsTitle);
@@ -60,12 +56,12 @@
     new Label(contents, SWT.NONE);
     Label lblPreview = new Label(contents, SWT.NONE);
     lblPreview.setText(previewPrompt);
-    previewer = new ProjectionViewer(contents, null, null, false, V_SCROLL | H_SCROLL);
+    previewer = new ProjectionViewer(contents, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL);
     previewer.setEditable(false);
     previewer.setDocument(new Document(loadContentsFrom("ColorSettingPreviewText.txt"))); //$NON-NLS-1$
     StyledText previewerText = previewer.getTextWidget();
     previewerText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-    Cursor arrowCursor = previewerText.getDisplay().getSystemCursor(CURSOR_ARROW);
+    Cursor arrowCursor = previewerText.getDisplay().getSystemCursor(SWT.CURSOR_ARROW);
     previewerText.setCursor(arrowCursor);
     backgroundColorSelector.addListener(new ColorChangeListener() {
       @Override void onColorChanged(RGB newValue) {
@@ -83,9 +79,7 @@
         }
       }
     });
-    displayValue(BACKGROUND_COLOR, backgroundColorSelector);
-    displayValue(FOREGROUND_COLOR, foregroundColorSelector);
-    updatePreview();
+    updateContents();
     return contents;
   }
 
@@ -124,6 +118,12 @@
     setValid(true);
   }
 
+  private void updateContents() {
+    displayValue(BACKGROUND_COLOR, backgroundColorSelector);
+    displayValue(FOREGROUND_COLOR, foregroundColorSelector);
+    updatePreview();
+  }
+
   private void displayValue(String preferenceName, ColorSelector colorSelector) {
     RGB color = PreferenceConverter.getColor(getPreferenceStore(), preferenceName);
     colorSelector.setColorValue(color);
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
new file mode 100644
index 0000000..2046772
--- /dev/null
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.terminal.local.ui.preferences;
+
+import static com.google.eclipse.terminal.local.Activator.preferenceStore;
+import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.CLOSE_VIEW_ON_EXIT;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public final class GeneralPreferences {
+  public static boolean closeViewOnExit() {
+    return preferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT);
+  }
+
+  private GeneralPreferences() {}
+}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
index 039252b..6b01d7f 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
@@ -16,8 +16,10 @@
 public class Messages extends NLS {
   public static String backgroundAndForegroundCannotBeTheSame;
   public static String backgroundPrompt;
+  public static String closeViewOnExit;
   public static String colorsAndFontsTitle;
   public static String foregroundPrompt;
+  public static String generalPreferencesTitle;
   public static String previewPrompt;
   public static String unableToLoadPreviewContent;
 
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
index 9791705..fa8d2ec 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
@@ -1,6 +1,8 @@
 backgroundAndForegroundCannotBeTheSame=Background and foreground colors cannot be the same
 backgroundPrompt=Background:
+closeViewOnExit=Close view when terminal exits
 colorsAndFontsTitle=Local terminal colors and fonts preferences.
 foregroundPrompt=Foreground:
+generalPreferencesTitle=General preferences.
 previewPrompt=Preview:
 unableToLoadPreviewContent=Unable to load preview content
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
index 6c72331..4ec4517 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
@@ -8,24 +8,24 @@
  */
 package com.google.eclipse.terminal.local.ui.preferences;
 
+import static com.google.eclipse.terminal.local.Activator.preferenceStore;
 import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.*;
 
 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.swt.graphics.RGB;
 
-import com.google.eclipse.terminal.local.Activator;
-
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class PreferenceInitializer extends AbstractPreferenceInitializer {
   @Override public void initializeDefaultPreferences() {
+    preferenceStore().setDefault(CLOSE_VIEW_ON_EXIT, true);
     setDefault(BACKGROUND_COLOR, new RGB(0, 0, 0));
     setDefault(FOREGROUND_COLOR, new RGB(229, 229, 229));
   }
 
   private void setDefault(String name, RGB value) {
-    PreferenceConverter.setDefault(Activator.preferenceStore(), name, value);
+    PreferenceConverter.setDefault(preferenceStore(), name, value);
   }
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
index 929dac3..2d6ec61 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
@@ -12,8 +12,9 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 final class PreferenceNames {
-  static final String BACKGROUND_COLOR = "background.color";
-  static final String FOREGROUND_COLOR = "foreground.color";
+  static final String CLOSE_VIEW_ON_EXIT = "exitViewOnExit";
+  static final String BACKGROUND_COLOR = "backgroundColor";
+  static final String FOREGROUND_COLOR = "foregroundColor";
 
   private PreferenceNames() {}
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
new file mode 100644
index 0000000..74655b4
--- /dev/null
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.terminal.local.ui.preferences;
+
+import static com.google.eclipse.terminal.local.Activator.preferenceStore;
+import static com.google.eclipse.terminal.local.ui.preferences.Messages.*;
+import static com.google.eclipse.terminal.local.ui.preferences.PreferenceNames.CLOSE_VIEW_ON_EXIT;
+
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class RootPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+  private Button btnCloseViewOnExit;
+
+  @Override public void init(IWorkbench workbench) {
+    setPreferenceStore(preferenceStore());
+  }
+
+  @Override protected Control createContents(Composite parent) {
+    Composite contents = new Composite(parent, SWT.NONE);
+    contents.setLayout(new GridLayout(1, false));
+
+    Label lblGeneralPreferences = new Label(contents, SWT.NONE);
+    lblGeneralPreferences.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+    lblGeneralPreferences.setText(generalPreferencesTitle);
+    new Label(contents, SWT.NONE);
+
+    btnCloseViewOnExit = new Button(contents, SWT.CHECK);
+    btnCloseViewOnExit.setText(closeViewOnExit);
+
+    updateContents();
+    return contents;
+  }
+
+  private void updateContents() {
+    btnCloseViewOnExit.setSelection(getPreferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT));
+  }
+
+  @Override public boolean performOk() {
+    getPreferenceStore().setValue(CLOSE_VIEW_ON_EXIT, btnCloseViewOnExit.getSelection());
+    return true;
+  }
+
+  @Override protected void performDefaults() {
+    btnCloseViewOnExit.setSelection(getPreferenceStore().getDefaultBoolean(CLOSE_VIEW_ON_EXIT));
+  }
+}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index b444666..96a4972 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -10,6 +10,7 @@
 
 import static com.google.eclipse.terminal.local.Activator.*;
 import static com.google.eclipse.terminal.local.ui.preferences.ColorsAndFontsPreferences.*;
+import static com.google.eclipse.terminal.local.ui.preferences.GeneralPreferences.closeViewOnExit;
 import static com.google.eclipse.terminal.local.ui.util.Displays.runInDisplayThread;
 import static com.google.eclipse.terminal.local.ui.view.Messages.defaultViewTitle;
 import static com.google.eclipse.terminal.local.util.Platform.userHomeDirectory;
@@ -26,7 +27,7 @@
 import org.eclipse.ui.part.ViewPart;
 
 import com.google.eclipse.terminal.local.core.connector.LifeCycleListener;
-import com.google.eclipse.terminal.local.ui.preferences.AbstractColorPreferencesChangeListener;
+import com.google.eclipse.terminal.local.ui.preferences.AbstractColorsAndFontsPreferencesChangeListener;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -55,7 +56,15 @@
   }
 
   @Override public void executionFinished() {
-    // TODO Close view on exit
+    if (closeViewOnExit() && terminalWidget != null && !terminalWidget.isDisposed()) {
+      // must run in UI thread.
+      terminalWidget.getDisplay().asyncExec(new Runnable() {
+        @Override public void run() {
+          IWorkbenchPartSite site = getSite();
+          site.getPage().hideView((IViewPart) site.getPart());
+        }
+      });
+    }
   }
 
   @Override public void init(IViewSite site, IMemento memento) throws PartInitException {
@@ -90,7 +99,7 @@
     });
     IViewSite viewSite = getViewSite();
     terminalWidget.setUpGlobalEditActionHandlers(viewSite.getActionBars());
-    colorPreferencesChangeListener = new AbstractColorPreferencesChangeListener() {
+    colorPreferencesChangeListener = new AbstractColorsAndFontsPreferencesChangeListener() {
       @Override protected void onColorChanged() {
         resetColors();
       }