-
Notifications
You must be signed in to change notification settings - Fork 0
/
.emacs
135 lines (122 loc) · 4.52 KB
/
.emacs
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
;; Chrome / Blink style
(load-file "~/utilities/elisp/google-c-style.el")
(require 'google-c-style)
(load-file "~/git/dartium/src/tools/emacs/flymake-chromium.el")
(load-file "~/git/dartium/src/tools/emacs/chrome-filetypes.el")
(add-hook 'change-log-mode-hook
(function (lambda () (setq indent-tabs-mode nil))))
(c-add-style "WebKit" '("Google"
(c-basic-offset . 4)
(c-offsets-alist . ((innamespace . 0)
(access-label . -)
(case-label . 0)
(member-init-intro . +)
(topmost-intro . 0)))))
;; For dealing with WebKit long lines and word wrapping.
(defun c-mode-adaptive-indent (beg end)
"Set the wrap-prefix for the the region between BEG and END with adaptive filling."
(goto-char beg)
(while
(let ((lbp (line-beginning-position))
(lep (line-end-position)))
(put-text-property lbp lep 'wrap-prefix (concat (fill-context-prefix lbp lep) (make-string c-basic-offset ? )))
(search-forward "\n" end t))))
(define-minor-mode c-adaptive-wrap-mode
"Wrap the buffer text with adaptive filling for c-mode."
:lighter ""
(save-excursion
(save-restriction
(widen)
(let ((buffer-undo-list t)
(inhibit-read-only t)
(mod (buffer-modified-p)))
(if c-adaptive-wrap-mode
(jit-lock-register 'c-mode-adaptive-indent)
(jit-lock-unregister 'c-mode-adaptive-indent)
(remove-text-properties (point-min) (point-max) '(wrap-prefix pref)))
(restore-buffer-modified-p mod)))))
(defun c-adaptive-wrap-mode-for-webkit ()
"Turn on visual line mode and adaptive wrapping for WebKit source files."
(if (or (string-equal "webkit" c-indentation-style)
(string-equal "WebKit" c-indentation-style))
(progn
(visual-line-mode t)
(c-adaptive-wrap-mode t))))
(add-hook 'c-mode-common-hook 'c-adaptive-wrap-mode-for-webkit)
(add-hook 'hack-local-variables-hook 'c-adaptive-wrap-mode-for-webkit)
(defun cc-other-file()
"Toggles source/header file"
(interactive)
(let ((buf (current-buffer))
(name (file-name-sans-extension (buffer-file-name)))
(other-extens
(cadr (assoc (concat "\\."
(file-name-extension (buffer-file-name))
"\\'")
cc-other-file-alist))))
(dolist (e other-extens)
(if (let ((f (concat name e)))
(and (file-exists-p f) (find-file f)))
(return)))
)
)
(require 'whitespace)
(setq whitespace-style '(face indentation::space trailing empty lines-tail))
(setq whitespace-line-column nil)
(set-face-attribute 'whitespace-line nil
:background "purple"
:foreground "white"
:weight 'bold)
(global-whitespace-mode 1)
(defun ami-summarize-indentation-at-point ()
"Echo a summary of how one gets from the left-most column to
POINT in terms of indentation changes."
(interactive)
(save-excursion
(let ((cur-indent most-positive-fixnum)
(trace '()))
(while (not (bobp))
(let ((current-line (buffer-substring (line-beginning-position)
(line-end-position))))
(when (and (not (string-match "^\\s-*$" current-line))
(< (current-indentation) cur-indent))
(setq cur-indent (current-indentation))
(setq trace (cons current-line trace))
(if (or (string-match "^\\s-*}" current-line)
(string-match "^\\s-*else " current-line)
(string-match "^\\s-*elif " current-line))
(setq cur-indent (1+ cur-indent)))))
(forward-line -1))
(message "%s" (mapconcat 'identity trace "\n")))))
(require 'cl)
(defun ami-summarize-preprocessor-branches-at-point ()
"Summarize the C preprocessor branches needed to get to point."
(interactive)
(flet ((current-line-text ()
(buffer-substring (line-beginning-position) (line-end-position))))
(save-excursion
(let ((eol (or (end-of-line) (point)))
deactivate-mark directives-stack)
(goto-char (point-min))
(while (re-search-forward "^#\\(if\\|else\\|endif\\)" eol t)
(if (or (string-prefix-p "#if" (match-string 0))
(string-prefix-p "#else" (match-string 0)))
(push (current-line-text) directives-stack)
(if (string-prefix-p "#endif" (match-string 0))
(while (string-prefix-p "#else" (pop directives-stack)) t))))
(message "%s" (mapconcat 'identity (reverse directives-stack) "\n"))))))
; Turn off VC git for chrome
(when (locate-library "vc")
(defadvice vc-registered (around nochrome-vc-registered (file))
(message (format "nochrome-vc-registered %s" file))
(if (string-match ".*chrome/src.*" file)
(progn
(message (format "Skipping VC mode for %s" % file))
(setq ad-return-value nil)
)
ad-do-it)
)
(ad-activate 'vc-registered)
)
;; Dart
(require 'dart-mode)