2010年2月8日月曜日

Emacs で DarkRoom

 DarkRoom とはフルスクリーンでただ文章を書くことのみに集中させるというシンプルなエディタです。
 しかしこれが言うのとやるのとでは全然違います。最近のPCは画面も大きくなり、横長になり、様々なウィジットをデスクトップにちりばめ、タスクトレイにいろんアイコンが並んでいる。気がつくと情報過多なデスクトップになっているのです。その事に気づかされました。


でまあ、当然これをEmacsでもできないかとなと思い、やってみました。



 以下の Emacs lisp を darkroom.el という名前で load path の通った場所に保存してください。
 次に ~/.emacs に、
(require 'darkroom)
(global-set-key [f11] 'darkroom-mode)
と追記すればOKです。
 後は F11 キーを押せばフルスクリーンでDarkRoomモードになります。
;;; darkroom.el --- 
;; Copyright (C) 2010  yama
;; Author: yama ;; Keywords: 
;;  $Id: darkroom.el,v 1.10 2010/02/25 10:22:02 yama Exp $ 
;; This program is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation, either version 3 of the License, or;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; use color-theme
;;; Usage
;;; (require 'darkroom);;; M-x darkroom
;;; Code:(require 'color-theme)


;;; Config ---------------------------------------------------------(defvar darkroom-left-margin  30
  "left margin")

(defvar darkroom-right-margin 30
  "right margin")

(defvar dark-mode-on nil
  "Non-nil if DarkRoom mode is enabled.
Don't change this variable directly, you must change it by one of the
functions that enable or disable Dark Room mode.")

;;; -------------------------------------------------------------------

(defun fullscreen (&optional f)
  "Chenge FullScreen. for Emacs23"
      (interactive)
      (set-frame-parameter f 'fullscreen
                           (if (frame-parameter f 'fullscreen) nil 'fullboth)))

(defun darkroom-mode ()
  "simple writing environment."
  (interactive)
  (if (equal dark-mode-on t) (darkroom-mode-disable)
    (darkroom-mode-enable)))

(defun darkroom-mode-enable ()
  (setq dark-mode-on t)
  (setq darkroom-default-background-color
        (cdr (assoc 'background-color default-frame-alist)))
  (fset 'color-theme-snapshot (color-theme-make-snapshot))
  (sleep-for 0.05)
  (color-theme-simple-1)
  (fullscreen )
  (set-cursor-color "yellow") ;; cursor color  (tool-bar-mode 0)
  (menu-bar-mode 0)
  (display-time-mode 1)
  (scroll-bar-mode)
  (set-face-foreground 'mode-line "gray25")
  (set-face-background 'mode-line "gray1")
  (if (equal (intern-soft "elscreen-version") nil) nil
    (elscreen-toggle-display-tab))
  (auto-fill-mode 1))

(defun darkroom-mode-disable ()
  (setq dark-mode-on nil)
  (add-to-list 'default-frame-alist
               '(background-color . darkroom-default-background-color))
  (color-theme-snapshot)
  (scroll-bar-mode)
    (if (equal (intern-soft "elscreen-version") nil) nil
    (elscreen-toggle-display-tab))
  (display-time-mode 0)
  (sleep-for 0.05)
  (fullscreen ))
    
(defun window-count ()
  (length (window-list (selected-frame) 1)))

(defun set-margin ()
  (set-window-margins (selected-window)
                      darkroom-left-margin
                      darkroom-right-margin))

(defun dark-window-update ()
  (if (equal dark-mode-on t)
      (if (> (window-count) 1)
          (progn
            (set-window-margins (selected-window) 0 0)
            (set-window-margins (previous-window) 0 0))
        (set-margin))
  (set-window-margins (selected-window) 0 0)))

(add-hook 'window-configuration-change-hook 'dark-window-update)


(provide 'darkroom)
;;; darkroom.el ends here




 低機能です。フルスクリーンにする部分がEmacs23からの機能を使っているので、emacs23以上で使用してください。そこを書き換えればemacs22とかでも動作するはず。
 あらためて こうして全画面で作業をしていると、twitter や ウェブブラウズとかしなくなり、気が散らずに作業できるんだなあと。というか今までどんだけ注意力散漫だったんだろうと思いましたw


 さあ皆さんも思う存分執筆に集中して下さいw


ps.
# 端末で起動してフルスクリーンにすればいいじゃんという突っ込みはなしで;;



●追記:
 color-theme の設定書いただけで反映するの忘れてた(^_^;) 修正しましたので落とした方は再度落とし直して下さい。

●2012/08/30 追記:
 続き→ http://ubulog.blogspot.jp/2012/08/darkroomel.html

0 件のコメント: