-
Notifications
You must be signed in to change notification settings - Fork 0
/
50scala.el
150 lines (115 loc) · 5.3 KB
/
50scala.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
(require 'hyone-util)
(require 'hyone-key-combo)
(require 'scala-mode-auto)
(add-to-list 'auto-mode-alist '("\\.sbt" . scala-mode))
(setq scala-interpreter "scala -Dfile.encoding=UTF-8")
;; (setq scala-interpreter "scala -Xprint:typer")
(defvar my-scala-current-buffer nil)
(defun scala-run-scala-practice ()
(interactive)
(setq scala-interpreter-default scala-interpreter)
(setq scala-interpreter (concat scala-interpreter " -cp " (expand-file-name "~/program/scala")))
(scala-run-scala scala-interpreter)
(setq scala-interpreter scala-interpreter-default))
(defun my-scala-switch-to-interpreter ()
(interactive)
(setq my-scala-current-buffer (current-buffer))
(unless (scala-interpreter-running-p-1)
(scala-run-scala scala-interpreter))
(scala-switch-to-interpreter))
(defun my-scala-back-to-editing-buffer ()
(interactive)
(if my-scala-current-buffer
(switch-to-buffer my-scala-current-buffer)))
(when (require 'scala-mode-feature-electric nil t)
(add-hook 'scala-mode-hook
(lambda ()
(scala-electric-mode))))
(defun setup-scala-mode-key-combo (map)
(evil-key-combo-define 'insert map (kbd ":") '(": " " :: "))
(evil-key-combo-define 'insert map (kbd "-") 'key-combo-execute-orignal)
(evil-key-combo-define 'insert map (kbd "->") " -> ")
(evil-key-combo-define 'insert map (kbd "<%") " <% ")
(evil-key-combo-define 'insert map (kbd "*") " * ")
;; (evil-key-combo-define 'insert map (kbd ":=") " := ")
)
(add-hook 'scala-mode-hook
'(lambda ()
(local-set-key (kbd "RET") 'reindent-then-newline-and-indent)
(local-set-key (kbd "C-c C-z") 'my-scala-switch-to-interpreter)
; avoid to map C-tab to scala-undent-line.
(local-set-key (kbd "<C-tab>") nil)
(setup-scala-mode-key-combo scala-mode-map)))
(defun scala-inf-mode-setting (map)
(define-key map (kbd "C-c C-z") 'my-scala-back-to-editing-buffer)
(define-key map (kbd "<C-tab>") nil)
(setup-scala-mode-key-combo map)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8))
(add-hook 'scala-mode-inf-hook
(lambda ()
(scala-inf-mode-setting scala-mode-inf-map)))
(when (require 'popwin nil t)
(push '("*inferior-scala*" :stick t) popwin:special-display-config))
;;-----------------------------------------------------------------------
;; Fix scala mode indentation
;;-----------------------------------------------------------------------
(defadvice scala-block-indentation (around improve-indentation-after-brace activate)
(if (eq (char-before) ?\{)
(setq ad-return-value (+ (current-indentation) scala-mode-indent:step))
ad-do-it))
(defun scala-newline-and-indent ()
(interactive)
(delete-horizontal-space)
(let ((last-command nil))
(newline-and-indent))
(when (scala-in-multi-line-comment-p)
(insert "* ")))
(add-hook 'scala-mode-hook
(lambda ()
(define-key scala-mode-map (kbd "RET") 'scala-newline-and-indent)))
;;-----------------------------------------------------------------------
;; for android SDK
;;-----------------------------------------------------------------------
(if (file-directory-p "~/local/apps/android-sdk-mac_86")
(setenv "ANDROID_SDK_HOME" (expand-file-name "~/local/apps/android-sdk-mac_86")))
;;-----------------------------------------------------------------------
;; ensime
;;-----------------------------------------------------------------------
(require 'ensime)
;; This step causes the ensime-mode to be started whenever
;; scala-mode is started for a buffer. You may have to customize this step
;; if you're not using the standard scala mode.
;; (add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; MINI HOWTO:
;; Open .scala file. M-x ensime (once per project)
(add-hook 'ensime-inf-mode-hook
(lambda ()
(scala-inf-mode-setting ensime-inf-mode-map)))
;; Fix ac-sources when turn ensime-mode on
;; referred to http://d.hatena.ne.jp/pokutuna/20110526/1306394768
(defadvice ensime (after my-ensime-mode activate)
(when ensime-mode
(setq ac-sources
(append ac-sources '(ac-source-dictionary
ac-source-yasnippet
ac-source-words-in-buffer
ac-source-words-in-same-mode-buffers
ac-source-filename)))))
(add-hook 'ensime-mode-hook
(lambda ()
;; ensime mode
(let ((prefix-map (lookup-key ensime-mode-map ensime-mode-key-prefix)))
(if (keymapp prefix-map)
(define-key prefix-map (kbd "C-v b") 'ensime-builder-build)))
;; search mode
(define-key ensime-search-mode-map (kbd "C-w") 'hyone:backward-kill-word-like-vim)
(define-key ensime-search-mode-map (kbd "C-u") 'hyone:backward-kill-line)
;; inspector mode
(when (featurep 'evil)
;; To ',' and '.' keys work properly on ensime inspector
(evil-make-overriding-map ensime-popup-inspector-map 'normal t))))
(when (require 'popwin nil t)
(push '("*ensime-inferior-scala*" :stick t) popwin:special-display-config)
(push '("^\*ensime-sbt\*" :regexp t :stick t) popwin:special-display-config)
(push '("*ENSIME-Compilation-Result*" :height 15) popwin:special-display-config))