Created
December 5, 2013 16:20
-
-
Save kurohuku/7808376 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'cl) | |
(defgroup popup-forward-backward nil | |
"Minor mode for popping up lines which surround forward/backward point") | |
(defcustom popup-forward-backward:idle-delay 5 | |
"Number of seconds of idle time to wait before popping up" | |
:type 'number | |
:group 'popup-forward-backward) | |
(define-minor-mode popup-forward-backward-mode | |
"Minor mode for popping up lines which surround forward/backward point" | |
:lighter " PFB" | |
:init-value nil | |
:group popup-forward-backward | |
:global nil | |
(if popup-forward-backward-mode | |
(popup-forward-backward:enable) | |
(popup-forward-backward:disable))) | |
(defun popup-forward-backward:turn-on () | |
(interactive) | |
(popup-forward-backward-mode 1)) | |
(defvar popup-forward-backward:idle-timer nil) | |
(defvar popup-forward-backward:open-tokens '("(" "{" "[" "<")) | |
(defvar popup-forward-backward:close-tokens '(")" "}" "]" ">")) | |
(defvar popup-forward-backward:forward 'forward-sexp) | |
(defvar popup-forward-backward:backward 'backward-sexp) | |
(defvar popup-forward-backward:lines 1) | |
(defun popup-forward-backward:enable () | |
(make-local-variable 'popup-forward-backward:open-tokens) | |
(make-local-variable 'popup-forward-backward:close-tokens) | |
(make-local-variable 'popup-forward-backward:forward) | |
(make-local-variable 'popup-forward-backward:backward) | |
(make-local-variable 'popup-forward-backward:lines) | |
(add-hook 'post-command-hook 'popup-forward-backward:run-idle-timer)) | |
(defun popup-forward-backward:disable () | |
(remove-hook 'post-command-hook 'popup-forward-backward:run-idle-timer)) | |
(defun popup-forward-backward:run-idle-timer () | |
(when (timerp popup-forward-backward:idle-timer) | |
(cancel-timer popup-forward-backward:idle-timer)) | |
(when popup-forward-backward-mode | |
(setq popup-forward-backward:idle-timer | |
(run-with-idle-timer popup-forward-backward:idle-delay | |
t | |
'popup-forward-backward | |
)))) | |
(defun popup-forward-backward () | |
"popup 1+`lines'*2 lines" | |
(interactive) | |
(cond | |
((find (string (char-before)) popup-forward-backward:close-tokens | |
:test 'string-equal) | |
(popup-backward popup-forward-backward:lines)) | |
((find (string (char-after)) popup-forward-backward:open-tokens | |
:test 'string-equal) | |
(popup-forward popup-forward-backward:lines)))) | |
(defun popup-forward (lines) | |
(let ((text (save-excursion | |
(call-interactively popup-forward-backward:forward) | |
(unless (and (<= (window-start) (point)) | |
(< (point) (window-end))) | |
(popup-forward-backward:get-lines lines))))) | |
(when text | |
(popup-tip text)))) | |
(defun popup-backward (lines) | |
(let ((text (save-excursion | |
(call-interactively popup-forward-backward:backward) | |
(unless (and (<= (window-start) (point)) | |
(< (point) (window-end))) | |
(popup-forward-backward:get-lines lines))))) | |
(when text | |
(popup-tip text)))) | |
(defun popup-forward-backward:get-lines (lines) | |
(let ((beg (save-excursion (ignore-errors (previous-line lines)) | |
(line-beginning-position))) | |
(end (save-excursion (ignore-errors (next-line lines)) | |
(line-end-position)))) | |
(buffer-substring beg end))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment