From 6131191bca3acfa698e7562d84933fe02422dbd7 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 25 Nov 2010 18:26:07 +0100 Subject: Completion: respecting tab-always-indent ... and actually using it to implement geiser-smart-tab-mode. Always nice to un-reinvent-the-wheel. --- elisp/geiser-completion.el | 26 +++++++++----------------- elisp/geiser-mode.el | 3 ++- elisp/geiser-repl.el | 5 ++++- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el index b308a6d..c04cc34 100644 --- a/elisp/geiser-completion.el +++ b/elisp/geiser-completion.el @@ -148,12 +148,11 @@ we're looking for a module name.") (defun geiser-completion--for-module (&optional predicate) (geiser-completion--thing-at-point t predicate)) -(defun geiser-completion--complete-symbol () - "Complete the symbol at point." - (interactive) - (let ((completion-at-point-functions '(geiser-completion--for-symbol - geiser-completion--for-module))) - (call-interactively 'completion-at-point))) +(defun geiser-completion--setup (enable) + (set (make-local-variable 'completion-at-point-functions) + (if enable + '(geiser-completion--for-symbol geiser-completion--for-module) + (default-value 'completion-at-point-functions)))) (defun geiser-completion--complete-module () "Complete module name at point." @@ -168,16 +167,6 @@ we're looking for a module name.") (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) - (not (memq (syntax-class (syntax-after (1- (point)))) - '(2 3)))))) - (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. @@ -190,7 +179,10 @@ and will try completing symbol at point otherwise." :init-value nil :lighter geiser-smart-tab-mode-string :group 'geiser-mode - :keymap `((,(kbd "TAB") . geiser-completion--maybe-complete))) + (set (make-local-variable 'tab-always-indent) + (if geiser-smart-tab-mode + 'complete + (default-value 'tab-always-indent)))) (provide 'geiser-completion) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 9ef568e..9759c7b 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -242,6 +242,7 @@ interacting with the Geiser REPL is at your disposal. (setq geiser-autodoc-mode-string "/A") (setq geiser-smart-tab-mode-string "/T") (geiser-company--setup (and geiser-mode geiser-mode-company-p)) + (geiser-completion--setup geiser-mode) (when geiser-mode-autodoc-p (geiser-autodoc-mode (if geiser-mode 1 -1))) (when geiser-mode-smart-tab-p @@ -295,7 +296,7 @@ interacting with the Geiser REPL is at your disposal. ("Edit symbol at point" "\M-." geiser-edit-symbol-at-point :enable (symbol-at-point)) ("Go to previous definition" "\M-," geiser-pop-symbol-stack) - ("Complete symbol" ((kbd "M-TAB")) geiser-completion--complete-symbol + ("Complete symbol" ((kbd "M-TAB")) completion-at-point :enable (symbol-at-point)) ("Complete module name" ((kbd "M-`") (kbd "C-.")) geiser-completion--complete-module) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 7308a6e..7c89df2 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -480,7 +480,7 @@ there's no symbol at point). Otherwise, go to next error in the REPL buffer." (interactive "p") (if (> (point) (geiser-repl--last-prompt-end)) - (geiser-completion--maybe-complete) + (completion-at-point) (compilation-next-error n))) (defun geiser-repl--previous-error (n) @@ -501,6 +501,9 @@ buffer." (set (make-local-variable 'comint-input-ignoredups) geiser-repl-history-no-dups-p) (setq geiser-eval--get-module-function 'geiser-repl--module-function) + (geiser-completion--setup t) + (setq geiser-smart-tab-mode-string "") + (geiser-smart-tab-mode t) (geiser-company--setup geiser-repl-company-p) ;; enabling compilation-shell-minor-mode without the annoying highlighter (compilation-setup t)) -- cgit v1.2.3