summaryrefslogtreecommitdiff
path: root/elisp/geiser-completion.el
diff options
context:
space:
mode:
Diffstat (limited to 'elisp/geiser-completion.el')
-rw-r--r--elisp/geiser-completion.el37
1 files changed, 37 insertions, 0 deletions
diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el
index 2f1aa36..814a587 100644
--- a/elisp/geiser-completion.el
+++ b/elisp/geiser-completion.el
@@ -215,6 +215,43 @@ With prefix, complete module name."
(geiser-completion--display-or-scroll completions
partial)))))))
+(defun geiser-completion--complete-module ()
+ (interactive)
+ (geiser-completion--complete-symbol t))
+
+
+;;; Smart tab mode:
+
+(make-variable-buffer-local
+ (defvar geiser-smart-tab-mode-string " SmartTab"
+ "Modeline indicator for geiser-smart-tab-mode"))
+
+(defun geiser-completion--maybe-complete ()
+ "Indent if at beginning of line or after a white space or
+closing parenthesis, try completion otherwise."
+ (interactive)
+ (let ((indent (or (bolp) (memq (syntax-class (syntax-after (1- (point))))
+ '(0 5)))))
+ (if indent (indent-according-to-mode) (geiser-completion--complete-symbol))))
+
+(define-minor-mode geiser-smart-tab-mode
+ "Toggle smart tab mode.
+With no argument, this command toggles the mode.
+Non-null prefix argument turns on the mode.
+Null prefix argument turns off the mode.
+
+When this mode is enable, TAB will indent if at point is at
+beginning of line or after a white space or closing parenthesis,
+and will try completing symbol at point otherwise. In addition,
+M-TAB will try module name completion."
+ :init-value nil
+ :lighter geiser-smart-tab-mode-string
+ :group 'geiser-mode
+ :keymap `((,(kbd "TAB") . geiser-completion--maybe-complete)
+ (,(kbd "M-TAB") . geiser-completion--complete-module)))
+
+
+
(provide 'geiser-completion)
;;; geiser-completion.el ends here