+;;; Where is point?
+
+(defvar mdw-point-overlay
+ (let ((ov (make-overlay 0 0))
+ (s "."))
+ (overlay-put ov 'priority 2)
+ (put-text-property 0 1 'display '(left-fringe vertical-bar) s)
+ (overlay-put ov 'before-string s)
+ (delete-overlay ov)
+ ov)
+ "An overlay used for showing where point is in the selected window.")
+
+(defun mdw-remove-point-overlay ()
+ "Remove the current-point overlay."
+ (delete-overlay mdw-point-overlay))
+
+(defun mdw-update-point-overlay ()
+ "Mark the current point position with an overlay."
+ (if (not mdw-point-overlay-mode)
+ (mdw-remove-point-overlay)
+ (overlay-put mdw-point-overlay 'window (selected-window))
+ (if (bolp)
+ (move-overlay mdw-point-overlay
+ (point) (1+ (point)) (current-buffer))
+ (move-overlay mdw-point-overlay
+ (1- (point)) (point) (current-buffer)))))
+
+(defvar mdw-point-overlay-buffers nil
+ "List of buffers using `mdw-point-overlay-mode'.")
+
+(define-minor-mode mdw-point-overlay-mode
+ "Indicate current line with an overlay."
+ :global nil
+ (let ((buffer (current-buffer)))
+ (setq mdw-point-overlay-buffers
+ (mapcan (lambda (buf)
+ (if (and (buffer-live-p buf)
+ (not (eq buf buffer)))
+ (list buf)))
+ mdw-point-overlay-buffers))
+ (if mdw-point-overlay-mode
+ (setq mdw-point-overlay-buffers
+ (cons buffer mdw-point-overlay-buffers))))
+ (cond (mdw-point-overlay-buffers
+ (add-hook 'pre-command-hook 'mdw-remove-point-overlay)
+ (add-hook 'post-command-hook 'mdw-update-point-overlay))
+ (t
+ (mdw-remove-point-overlay)
+ (remove-hook 'pre-command-hook 'mdw-remove-point-overlay)
+ (remove-hook 'post-command-hook 'mdw-update-point-overlay))))
+
+(define-globalized-minor-mode mdw-global-point-overlay-mode
+ mdw-point-overlay-mode
+ (lambda () (if (not (minibufferp)) (mdw-point-overlay-mode t))))
+
+;;;--------------------------------------------------------------------------
+;;; Fullscreen-ness.
+
+(defvar mdw-full-screen-parameters
+ '((menu-bar-lines . 0)
+ ;(vertical-scroll-bars . nil)
+ )
+ "Frame parameters to set when making a frame fullscreen.")
+
+(defvar mdw-full-screen-save
+ '(width height)
+ "Extra frame parameters to save when setting fullscreen.")
+
+(defun mdw-toggle-full-screen (&optional frame)
+ "Show the FRAME fullscreen."
+ (interactive)
+ (when window-system
+ (cond ((frame-parameter frame 'fullscreen)
+ (set-frame-parameter frame 'fullscreen nil)
+ (modify-frame-parameters
+ nil
+ (or (frame-parameter frame 'mdw-full-screen-saved)
+ (mapcar (lambda (assoc)
+ (assq (car assoc) default-frame-alist))
+ mdw-full-screen-parameters))))
+ (t
+ (let ((saved (mapcar (lambda (param)
+ (cons param (frame-parameter frame param)))
+ (append (mapcar #'car
+ mdw-full-screen-parameters)
+ mdw-full-screen-save))))
+ (set-frame-parameter frame 'mdw-full-screen-saved saved))
+ (modify-frame-parameters frame mdw-full-screen-parameters)
+ (set-frame-parameter frame 'fullscreen 'fullboth)))))
+
+;;;--------------------------------------------------------------------------