emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master a16a665 01/26: Initial commit


From: João Távora
Subject: [elpa] master a16a665 01/26: Initial commit
Date: Fri, 19 Dec 2014 19:07:22 +0000

branch: master
commit a16a665328a25905909d29eefc419591ff47d376
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Initial commit
---
 darkroom.el |   99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 99 insertions(+), 0 deletions(-)

diff --git a/darkroom.el b/darkroom.el
new file mode 100644
index 0000000..e1c59c0
--- /dev/null
+++ b/darkroom.el
@@ -0,0 +1,99 @@
+(defvar darkroom-margins 0.15
+  "Margins to use in darkroom-mode.
+
+It's value can be:
+
+- a floating point value betweeen 0 and 1, specifies percentage of
+  window width in columns to use as a margin.
+
+- a cons cell (LEFT RIGHT) specifying the left and right margins
+  in columns.
+
+- a function that returns a cons cell interpreted like the
+  previous option.
+
+Value is effective when `darkroom-minor-mode' is toggled, when
+changing window or by calling `darkroom-set-margins'")
+
+(defvar darkroom-turns-on-visual-line-mode t
+  "If non-nil pair `visual-line-mode' with
+  `darkroom-minor-mode'")
+(defvar darkroom-fringes-outside-margins t
+  "If non-nil use fringes outside margins for `darkroom-minor-mode'")
+
+(defun darkroom-margins ()
+  (cond ((functionp darkroom-margins)
+         (funcall darkroom-margins))
+        ((consp darkroom-margins)
+         darkroom-margins)
+        ((and (floatp darkroom-margins)
+              (< darkroom-margins 1))
+         (let ((delta (darkroom-float-to-columns darkroom-margins)))
+           (cons delta delta)))))
+
+(defun darkroom-float-to-columns (f)
+  (ceiling (* (let ((edges (window-edges)))
+                (- (nth 2 edges) (nth 0 edges)))
+              f)))
+
+(defun darkroom-set-margins (&optional margins)
+  "Adjust margins to `darkroom-margins' or optional MARGINS."
+  (let ((margins
+         (or margins
+             (darkroom-margins))))
+    (when margins
+      (set-window-margins (selected-window) (car margins) (cdr margins)))))
+
+(defun darkroom-increase-margins ()
+  (interactive)
+  (when (floatp darkroom-margins)
+    (setq darkroom-margins (+ 0.05 darkroom-margins))
+    (darkroom-set-margins)))
+
+(defun darkroom-decrease-margins ()
+  (interactive)
+  (when (floatp darkroom-margins)
+    (setq darkroom-margins (- darkroom-margins 0.05))
+    (darkroom-set-margins)))
+
+(defun darkroom-confirm-fill-paragraph ()
+  (interactive)
+  (when (yes-or-no-p "Really fill paragraph?")
+    (call-interactively 'fill-paragraph)))
+
+(defvar darkroom-minor-mode-map (let ((map (make-sparse-keymap)))
+                                  (define-key map (kbd "C-M-+") 
'darkroom-increase-margins)
+                                  (define-key map (kbd "C-M--") 
'darkroom-decrease-margins)
+                                  (define-key map (kbd "M-q") 
'darkroom-confirm-fill-paragraph)
+                                  map))
+
+(defvar darkroom-saved-mode-line-format nil)
+(defvar darkroom-saved-visual-mode nil)
+(define-minor-mode darkroom-minor-mode
+  "A minor mode that emulates the darkroom editor."
+  nil
+  " dark"
+  nil
+  (cond (darkroom-minor-mode
+         (setq darkroom-saved-mode-line-format mode-line-format
+               mode-line-format nil)
+         (setq fringes-outside-margins darkroom-fringes-outside-margins)
+         (add-hook 'window-configuration-change-hook 'darkroom-set-margins nil 
t)
+         (darkroom-set-margins)
+         (setq header-line-format t)
+         ;; a hack shoulnd't be needed but apparently is
+         (set-window-buffer (selected-window) (current-buffer))
+         (when darkroom-turns-on-visual-line-mode
+           (visual-line-mode 1)))
+        (t
+         (setq header-line-format nil)
+         (setq mode-line-format darkroom-saved-mode-line-format)
+         (when darkroom-turns-on-visual-line-mode
+           (visual-line-mode -1))
+         (remove-hook 'window-configuration-change-hook 'darkroom-set-margins 
t)
+         (set-window-margins (selected-window) 0 0))))
+
+
+
+
+(provide 'darkroom)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]