* System Inquiry
(defconst *is-a-windows* (eq system-type 'windows-nt))
(defconst *is-a-mac* (eq system-type 'darwin))
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(setq use-package-verbose t
use-package-always-ensure t)
(which-function-mode 1)
;; (when (featurep 'electric-pair-mode)
;; (electric-pair-mode))
(setq buffer-save-without-query t)
(fset 'yes-or-no-p 'y-or-n-p)
(global-auto-revert-mode t)
(show-paren-mode)
(setq load-prefer-newer t)
;; reduce the frequency of garbage collection by making it happen on
;; each 50MB of allocated data (the default is on every 0.76MB)
(setq gc-cons-threshold 50000000)
;; warn when opening files bigger than 100MB
(setq large-file-warning-threshold 100000000)
(global-set-key (kbd "RET") 'newline-and-indent)
(if *is-a-windows*
(setq find-program "C:/PortableGit-2.15.0-64-bit.7z/usr/bin/find.exe"))
(if *is-a-windows*
(setq exec-path (append exec-path '("C:/PortableGit-2.15.0-64-bit.7z/usr/bin"))))
(defalias 'fl 'find-library)
(defalias 'eb 'eval-buffer)
(defalias 'rt 'projectile-regenerate-tags)
(defvar d-emacs-dir "~/.emacs.d")
(unless (file-exists-p d-emacs-dir)
(make-directory d-emacs-dir))
(defvar emacs-lisp-dir (expand-file-name "lisp" d-emacs-dir))
(defvar emacs-temp-dir (expand-file-name "temp/" d-emacs-dir))
(unless (file-exists-p emacs-lisp-dir)
(make-directory emacs-lisp-dir))
(unless (file-exists-p emacs-temp-dir)
(make-directory emacs-temp-dir))
(setq temporary-file-directory emacs-temp-dir)
(setq backup-directory-alist
`((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
`((".*" ,temporary-file-directory t)))
(add-to-list 'load-path emacs-lisp-dir)
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
;; (if *is-a-mac*
;; (setenv "PATH"
;; (concat
;; "/usr/local/go/bin" path-separator
;; "/Users/cihangir/go/bin" path-separator
;; (getenv "PATH"))))
(require 'exec-path-from-shell)
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize))
(when *is-a-mac*
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'none)
(setq-default default-input-method "MacOSX")
;; Make mouse wheel / trackpad scrolling less jerky
(setq mouse-wheel-scroll-amount '(1
((shift) . 5)
((control))))
(dolist (multiple '("" "double-" "triple-"))
(dolist (direction '("right" "left"))
(global-set-key (read-kbd-macro (concat "<" multiple "wheel-" direction ">")) 'ignore))))
;; (if *is-a-mac*
;; (add-to-list 'exec-path "/usr/local/bin"))
(setq custom-file (expand-file-name "custom-settings.el" d-emacs-dir))
(if (file-exists-p custom-file )
(load custom-file))
Using the below config, you can run: my-org-publish-buffer to open current buffer as html in browser
;; (use-package ox-twbs)
org-bullets’ new version causing syntax highlighting problem in source blocks . So I want to keep org-bullets-20140918.1137 in my git repo .
(use-package org-bullets
:ensure t
:config
(progn
(require 'which-func)
;;(add-to-list 'which-func-mode 'org-mode)
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
))
(setq org-ellipsis " ⤵")
(setq org-hide-leading-stars t)
(setq org-agenda-files
'("~/org/projects.org"))
(add-hook 'org-mode-hook
(lambda ()
(local-set-key (kbd "C-c e") 'org-edit-src-code)))
(setq org-src-fontify-natively t)
popping open a new one (which shows the same information).
(setq org-src-window-setup 'current-window)
(add-to-list 'org-structure-template-alist
'("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"))
(setq org-publish-project-alist
'(("org-notes"
:base-directory "~/org/"
:publishing-directory "~/public_html/"
:publishing-function org-twbs-publish-to-html
:with-sub-superscript nil
)))
(defun my-org-publish-buffer ()
(interactive)
(save-buffer)
(save-excursion (org-publish-current-file))
(let* ((proj (org-publish-get-project-from-filename buffer-file-name))
(proj-plist (cdr proj))
(rel (file-relative-name buffer-file-name
(plist-get proj-plist :base-directory)))
(dest (plist-get proj-plist :publishing-directory)))
(browse-url (concat "file://"
(file-name-as-directory (expand-file-name dest))
(file-name-sans-extension rel)
".html"))))
(defun open-file-new-window ()
(interactive)
(with-helm-alive-p
(helm-exit-and-execute-action
(lambda (candidate)
(find-file-other-window candidate)))))
(defun minibuffer-keyboard-quit ()
"Abort recursive edit.
In Delete Selection mode, if the mark is active, just deactivate it;
then it takes a second \\[keyboard-quit] to abort the minibuffer."
(interactive)
(if (and delete-selection-mode transient-mark-mode mark-active)
(setq deactivate-mark t)
(when (get-buffer "*Completions*") (delete-windows-on "*Completions*"))
(abort-recursive-edit)))
(use-package evil
:init
(progn
(use-package evil-leader
:init
(global-evil-leader-mode)
:config
(progn
(setq evil-leader/in-all-states t)
(evil-leader/set-leader "SPC")
;; (evil-leader/set-key
;; "SPC" 'helm-M-x
;; ;; "g" 'ace-jump-mode
;; "e" 'eshell
;; "r" 'eval-buffer
;; "s" 'helm-swoop
;; "d" 'neotree-toggle
;; "w" 'save-all-buffers
;; "q" 'save-buffers-kill-terminal
;; "f f" 'helm-projectile-find-file
;; "o" 'other-window
;; "0" 'delete-window
;; "1" 'delete-other-windows
;; "2" 'split-window-below
;; "3" 'split-window-right
;; "b" 'switch-to-buffer
;; "k" 'kill-other-buffers)
))
(evil-mode 1))
:config
(progn
(evil-define-key 'normal 'compilation-mode-map "m" 'compile-goto-error)
(define-key evil-insert-state-map "j" #'evil-escape-f)
(define-key evil-normal-state-map [escape] 'keyboard-quit)
(define-key evil-visual-state-map [escape] 'keyboard-quit)
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)))
(evil-define-command evil-escape-f ()
:repeat change
(interactive)
(let ((modified (buffer-modified-p)))
(insert "j")
(let ((evt (read-event (format "Insert %c to exit insert state" ?j)
nil 0.5)))
(cond
((null evt) (message ""))
((and (integerp evt) (char-equal evt ?j))
(delete-char -1)
(set-buffer-modified-p modified)
(push 'escape unread-command-events))
(t (setq unread-command-events (append unread-command-events
(list evt))))))))
(use-package general
:config
(progn
;; bind a key globally in normal state; keymaps must be quoted
(general-evil-setup)
(setq general-default-keymaps 'evil-normal-state-map)))
neotree-project-root-dir-or-current-dir fit-window-to-buffer-horizontally
(defun neotree-project-root-dir-or-current-dir ()
"Open NeoTree using the project root, using projectile, or the
current buffer directory."
(interactive)
(let ((project-dir (ignore-errors (projectile-project-root)))
(file-name (buffer-file-name))
(neo-smart-open t))
(if (neo-global--window-exists-p)
(neotree-hide)
(progn
(neotree-show)
(if project-dir
(neotree-dir project-dir))
(if file-name
(neotree-find file-name))))))
(use-package neotree
:ensure t :ensure all-the-icons
:config
(progn
(require 'all-the-icons)
(setq fit-window-to-buffer-horizontally t)
(setq neo-smart-open t)
(setq neo-window-fixed-size nil)
(setq neo-theme (if (display-graphic-p) 'icons 'arrow))))
(add-hook 'neotree-mode-hook
(lambda ()
(define-key evil-normal-state-local-map (kbd "TAB") 'neotree-enter)
(define-key evil-normal-state-local-map (kbd "q") 'neotree-hide)
(define-key evil-normal-state-local-map (kbd "RET") 'neotree-enter)))
(defun neotree-resize-window (&rest _args)
"Resize neotree window. https://github.com/jaypei/emacs-neotree/pull/110"
(interactive)
(neo-buffer--with-resizable-window
(let ((fit-window-to-buffer-horizontally t))
(fit-window-to-buffer))))
(defun t/neotree-keep-size (fn &rest args)
"Reset neotree width after open, if user adjusted it's size."
(let ((w (window-width)))
(funcall fn)
(neo-global--set-window-width w)))
(advice-add 'neotree-enter :around 't/neotree-keep-size)
;; (defun neotree-resize-window
;; (neo-buffer--with-resizable-window
;; (let ((fit-window-to-buffer-horizontally t))
;; (fit-window-to-buffer))))
;;(add-hook 'neo-change-root-hook #'neotree-resize-window)
;;(add-hook 'neo-enter-hook #'neotree-resize-window)
;;(add-hook 'neo-change-root-hook #'fit-window-to-buffer)
;;(add-hook 'neo-enter-hook #'fit-window-to-buffer)
;;(require 'es-windows)
(use-package ace-window
:config
(global-set-key (kbd "M-p") 'ace-window))
(use-package which-key
:init (which-key-mode 1))
the blinking cursor is nothing, but an annoyance
(blink-cursor-mode -1)
(set-cursor-color "#EC0E0E")
(menu-bar-mode -1)
the toolbar is just a waste of valuable screen estate in a tty tool-bar-mode does not properly auto-load, and is already disabled anyway
(when (fboundp 'tool-bar-mode)
(tool-bar-mode -1))
(defun my-startup-layout ()
(interactive)
(delete-other-windows)
(split-window-horizontally)
(next-multiframe-window)
(switch-to-buffer "*Messages*")
(next-multiframe-window))
(my-startup-layout)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(setq inhibit-startup-screen t)
(setq visible-bell 1)
;; disable the annoying bell ring
(setq ring-bell-function 'ignore)
(setq scroll-margin 0
scroll-conservatively 100000
scroll-preserve-screen-position 1)
(line-number-mode t)
(column-number-mode t)
(size-indication-mode t)
(setq-default frame-title-format
'(:eval
(format "[%s] %s"
(projectile-project-name)
(cond
(buffer-file-truename
(concat " (" buffer-file-truename ")"))
(dired-directory
(concat " {" dired-directory "}"))
(t
"[no file]")))))
(when *is-a-windows*
(use-package beacon
:config (beacon-mode 1)))
;; (use-package tangotango-theme
;; :init (load-theme 'tangotango t))
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load-theme 'dracula t)
;; (defun hrs/apply-solarized-theme ()
;; (setq solarized-use-variable-pitch nil)
;; (setq solarized-height-plus-1 1.0)
;; (setq solarized-height-plus-2 1.0)
;; (setq solarized-height-plus-3 1.0)
;; (setq solarized-height-plus-4 1.0)
;; (setq solarized-high-contrast-mode-line t)
;; (load-theme 'solarized-dark t))
;; (hrs/apply-solarized-theme)
(use-package spaceline
:config
(progn
(require 'spaceline-config)
(setq powerline-height 20)
(setq ns-use-srgb-colorspace nil)
(setq powerline-default-separator 'wave)
(spaceline-spacemacs-theme)))
(defun my-irony-setup ()
(define-key irony-mode-map [remap completion-at-point]
'irony-completion-at-point-async)
(define-key irony-mode-map [remap complete-symbol]
'irony-completion-at-point-async)
(push 'java-mode irony-supported-major-modes))
(defun my-c-common-setup () ;; function called by c-mode-common-hook
(irony-mode 1)
(company-mode))
(use-package irony
:bind( :map company-active-map
([tab] . company-complete-selection)
("M-m" . company-complete-selection)
("C-j" . company-select-next)
("M-j" . company-select-next)
("C-k" . company-select-previous)
("M-k" . company-select-previous))
:init
(use-package company
:init
(progn
(add-hook 'after-init-hook 'global-company-mode)
(use-package company-irony)))
:config
(progn
(setq company-dabbrev-downcase nil)
(add-hook 'irony-mode-hook 'my-irony-setup)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
(add-hook 'c-mode-common-hook 'my-c-common-setup)
(when (boundp 'w32-pipe-read-delay)
(setq w32-pipe-read-delay 0))
(when (boundp 'w32-pipe-buffer-size)
(setq irony-server-w32-pipe-buffer-size (* 64 1024)))
(add-to-list 'company-backends 'company-irony)))
;; (defun my-flycheck-setup ()
;; (flycheck-mode)
;; (setq flycheck-check-syntax-automatically nil)
;; ;; (setq flycheck-check-syntax-automatically '(save) )
;; )
;; (use-package flycheck
;; :ensure t :ensure flycheck-irony :ensure flycheck-pos-tip
;; :commands my-flycheck-setup
;; :init
;; ;;(mapc (lambda (hook) ( add-hook hook 'my-flycheck-setup)) '(c-mode-common-hook emacs-lisp-mode-hook))
;; (add-hook 'c-mode-common-hook 'my-flycheck-setup)
;; (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
;; (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))
(defun accept-ido-line ()
(interactive)
(if (active-minibuffer-window)
(ido-exit-minibuffer)))
(defun bind-ido-keys ()
"Keybindings for ido mode."
(define-key global-map (kbd "M-m") 'accept-ido-line)
(define-key ido-completion-map (kbd "M-n") 'ido-next-match)
(define-key ido-completion-map (kbd "M-p") 'ido-prev-match)
(define-key ido-completion-map (kbd "C-j") 'ido-next-match)
(define-key ido-completion-map (kbd "C-k") 'ido-prev-match)
(define-key ido-completion-map (kbd "M-j") 'ido-next-match)
(define-key ido-completion-map (kbd "M-k") 'ido-prev-match))
(use-package ido-vertical-mode
:init
(use-package ido)
:config
(progn
;; (unbind-key "M-j" global-map)
(ido-mode t)
(ido-vertical-mode 1)
(add-hook 'ido-setup-hook #'bind-ido-keys)))
(defconst my-c-style
'((c-tab-always-indent . t)
(c-comment-only-line-offset . 4)
(c-hanging-braces-alist . ((substatement-open after)
(brace-list-open)))
(c-hanging-colons-alist . ((member-init-intro before)
(inher-intro)
(case-label after)
(label after)
(access-label after)))
(c-cleanup-list . (scope-operator
empty-defun-braces
defun-close-semi))
(c-offsets-alist . ((arglist-close . c-lineup-arglist)
(substatement-open . 0)
(case-label . 4)
(block-open . 0)
(knr-argdecl-intro . -)))
(c-echo-syntactic-information-p . t))
"My C Programming Style")
(c-add-style "PERSONAL" my-c-style)
(defun my-c-mode-common-hook ()
(c-set-style "PERSONAL")
(setq tab-width 2 indent-tabs-mode nil)
(c-toggle-auto-newline -1)
(local-unset-key "\C-c\C-c")
(local-unset-key "\C-c\C-e")
(local-unset-key "\C-c\C-s"))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
(add-hook 'prog-mode-hook 'linum-mode)
;;(add-to-list 'which-func-mode 'c-mode)
(use-package groovy-mode
:mode ("\\.gradle?\\'" . groovy-mode)
:config
(add-hook 'groovy-mode-hook (lambda ()
(groovy-electric-mode))))
(use-package kotlin-mode
:config
(progn
(electric-pair-mode)
(add-hook 'kotlin-mode-hook ( lambda ()
(setq-default indent-tabs-mode nil)
(setq kotlin-tab-width 4)))))
(load-library "my-kotlin-indent.el")
(defun kotlin-mode-use-my-kotlin-indent ()
(setq indent-line-function 'kotlin-mode--elk-indent-line))
(add-hook 'kotlin-mode-hook 'kotlin-mode-use-my-kotlin-indent)
(defvar java-function-regexp
(concat
"^[ \t]*" ; leading white space
"\\(public\\|private\\|protected\\|" ; some of these 8 keywords
"abstract\\|final\\|static\\|"
"synchronized\\|native"
"\\|[ \t\n\r]\\)*" ; or whitespace
"[a-zA-Z0-9_$]+" ; return type
"[ \t\n\r]*[[]?[]]?" ; (could be array)
"[ \t\n\r]+" ; whitespace
"\\([a-zA-Z0-9_$]+\\)" ; the name we want!
"[ \t\n\r]*" ; optional whitespace
"(" ; open the param list
"\\([ \t\n\r]*" ; optional whitespace
"\\<[a-zA-Z0-9_$]+\\>" ; typename
"[ \t\n\r]*[[]?[]]?" ; (could be array)
"[ \t\n\r]+" ; whitespace
"\\<[a-zA-Z0-9_$]+\\>" ; variable name
"[ \t\n\r]*[[]?[]]?" ; (could be array)
"[ \t\n\r]*,?\\)*" ; opt whitespace and comma
"[ \t\n\r]*" ; optional whitespace
")" ; end the param list
))
(defun my:next-java-method()
(interactive)
(re-search-forward java-function-regexp nil t))
(defun my:prev-java-method()
(interactive)
(re-search-backward java-function-regexp nil t))
;; (defun set-compile-command-for-go()
;; (if (not (string-match "go" compile-command))
;; (set (make-local-variable 'compile-command)
;; "go build -v && go test -v && go vet")))
(defun set-compile-command-for-go()
(if (not (string-match "go" compile-command))
(set (make-local-variable 'compile-command)
"go build -v")))
(use-package go-mode
:ensure t
:config (progn
(add-hook 'go-mode-hook
(lambda ()
(add-hook 'go-mode-hook 'go-eldoc-setup)
(evil-define-key 'normal go-mode-map (kbd "g d") 'godef-jump)
(set (make-local-variable 'company-backends) '(company-go))
(set-compile-command-for-go)
(company-mode)))
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)))
(use-package auto-complete
:ensure t
:commands go-mode
:config (ac-config-default))
(use-package go-autocomplete
:ensure t
:commands go-mode)
(use-package go-projectile
:ensure t
:init
(setq go-projectile-switch-gopath 'never))
(use-package company-go
:ensure t
:commands go-mode
:config (lambda ()
(setq company-tooltip-limit 20) ; bigger popup window
(setq company-idle-delay .3) ; decrease delay before autocompletion popup shows
(setq company-echo-delay 0) ; remove annoying blinking
(setq company-begin-commands '(self-insert-command)) ; start autocompletion only after typing
))
;; (defun set-compile-command-for-go()
;; ;; (interactive)
;; ;; (if (not (string-match "go" compile-command))
;; ;; (set (make-local-variable 'compile-command)
;; ;; "go build -v && go test -v && go vet")))
(custom-set-faces
'(company-preview
((t (:foreground "darkgray" :underline t))))
'(company-preview-common
((t (:background "lightgray" :foreground "black"))))
'(company-tooltip
((t (:background "lightgray" :foreground "black"))))
'(company-tooltip-selection
((t (:background "steelblue" :foreground "white"))))
'(company-tooltip-common
((t (:background "lightgray" :foreground "red"))))
'(company-tooltip-common-selection
((((type x)) (:inherit company-tooltip-selection :weight bold))
(t (:inherit company-tooltip-selection)))))
(use-package json-mode
:mode "\\.json$"
:config (setq js-indent-level 4))
(use-package js2-mode
:mode (("\\.js$" . js2-mode)
("\\.jsx$" . js2-mode))
:interpreter ("node" . js2-mode)
:bind (("C-a" . back-to-indentation-or-beginning-of-line)
("C-M-h" . backward-kill-word))
:config
(progn
(add-hook 'js2-mode-hook (lambda () (setq js2-basic-offset 4)))
(add-hook 'js2-mode-hook (lambda ()
(bind-key "M-j" 'join-line-or-lines-in-region js2-mode-map)))))
(use-package web-mode
:ensure t
:config
(progn
(setq web-mode-ac-source-alist
'(("css" . (ac-source-css-property))
("html" . (ac-source-words-in-buffer ac-source-abbrev))))
(setq web-mode-enable-current-element-highlight t)
;; (setq web-mode-enable-current-column-highlight t)
(setq web-mode-enable-auto-closing t))
:mode ("\\.html?\\'" . web-mode))
(defun setup-tide-mode ()
(interactive)
(tide-setup)
(flycheck-mode +1)
(setq flycheck-check-syntax-automatically '(save mode-enabled))
(eldoc-mode +1)
(tide-hl-identifier-mode +1)
;; company is an optional dependency. You have to
;; install it separately via package-install
;; `M-x package-install [ret] company`
(setq company-tooltip-align-annotations t)
(add-hook 'before-save-hook 'tide-format-before-save)
(company-mode +1))
(use-package tide
:ensure t
:commands typescript-mode
:config (setup-tide-mode))
;; aligns annotation to the right hand side
;; formats the buffer before saving
;; (add-hook 'typescript-mode-hook #'setup-tide-mode)
(use-package aggressive-indent
:config
(progn
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
(add-hook 'css-mode-hook #'aggressive-indent-mode)))
(require 'format-spec)
(defun ignore-my-dirs ()
(add-to-list 'projectile-globally-ignored-directories "~/.emacs.d/elpa")
;; (add-to-list 'projectile-globally-ignored-directories "CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Debug/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/com/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/inc/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/prj/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/src/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/obj/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/res/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/bonus/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "MainModule/Debug/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "res/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "prj/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Simul/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "kuanta/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Simul/ImportLib/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Simul/ImportLib/Src/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Simul/ImportLib/Debug/CVS")
;; (add-to-list 'projectile-globally-ignored-directories "Simul/ModuleStartUp/CVS"))
)
(defun projectile-ignore-files ()
(add-to-list 'projectile-globally-ignored-files "GPATH")
(add-to-list 'projectile-globally-ignored-files "GRTAGS")
(add-to-list 'projectile-globally-ignored-files "GTAGS"))
(use-package projectile
:config
(progn
(setq projectile-completion-system 'helm)
(projectile-global-mode)
(helm-projectile-on)
(projectile-ignore-files)
(setq projectile-enable-caching t)))
;; (use-package helm-core
;; :ensure t)
;; https://github.com/tonini/emacs.d/blob/master/init.el
(use-package helm
:bind (("M-x" . helm-M-x)
("C-SPC" . helm-dabbrev)
("C-x b" . helm-buffers-list)
("C-x C-f" . helm-find-files))
:bind (:map helm-map
("M-m" . helm-maybe-exit-minibuffer)
("C-k" . helm-previous-line)
("C-j" . helm-next-line)
("M-k" . helm-previous-line)
("M-j" . helm-next-line))
:config
(progn
(setq helm-buffers-fuzzy-matching t)
(helm-mode 1)
(setq helm-split-window-in-side-p t
helm-buffers-fuzzy-matching t
helm-split-window-in-side-p t
helm-completion-in-region-fuzzy-match t
;;helm-move-to-line-cycle-in-source t
helm-ff-search-library-in-sexp t
helm-ff-file-name-history-use-recentf t
helm-ag-fuzzy-match t)
(substitute-key-definition 'find-tag 'helm-etags-select global-map)
(setq projectile-completion-system 'helm))
;; Display helm buffers always at the bottom
;; Source: http://www.lunaryorn.com/2015/04/29/the-power-of-display-buffer-alist.html
(add-to-list 'display-buffer-alist
`(,(rx bos "*helm" (* not-newline) "*" eos)
(display-buffer-reuse-window display-buffer-in-side-window)
(reusable-frames . visible)
(side . bottom)
(window-height . 0.4)))
:diminish (helm-mode))
(use-package helm-projectile
:config
(ignore-my-dirs)
(helm-projectile-on)
(setq-default
projectile-mode-line
'(:eval
(if (file-remote-p default-directory)
" Proj"
(format " Proj[%s]" (projectile-project-name))))))
(use-package helm-swoop
:bind (
( "M-i" . helm-swoop )
("M-I" . helm-swoop-back-to-last-point))
:config
;; (setq helm-swoop-pre-input-function (lambda () ""))
)
(when (boundp 'grep-find-ignored-files)
(progn
(add-to-list 'grep-find-ignored-files "*.msg")
(add-to-list 'grep-find-ignored-files "*.eps")
(add-to-list 'grep-find-ignored-files "GPATH")
(add-to-list 'grep-find-ignored-files "GRTAGS")
(add-to-list 'grep-find-ignored-files "GTAGS")
(add-to-list 'grep-find-ignored-files ".teliumProject*")
(add-to-list 'grep-find-ignored-files "*.mk")
(add-to-list 'grep-find-ignored-files "*.docx")
(add-to-list 'grep-find-ignored-files "*.doc")
(add-to-list 'grep-find-ignored-files "*.exe")))
(use-package yasnippet
:config
(progn
(add-hook 'after-save-hook
(lambda ()
(when (eql major-mode 'snippet-mode)
(yas-reload-all))))
(yas-global-mode 1))
:mode ("\\.yasnippet" . snippet-mode))
;; Add yasnippet support for all company backends
;; https://github.com/syl20bnr/spacemacs/pull/179
(defvar company-mode/enable-yas t
"Enable yasnippet for all backends.")
(defun company-mode/backend-with-yas (backend)
(if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
backend
(append (if (consp backend) backend (list backend))
'(:with company-yasnippet))))
(setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))
(when *is-a-mac*
(setq-default locate-command "mdfind"))
(use-package "ag"
:ensure t :ensure projectile
:init (use-package wgrep-ag
:config
(progn
(setq ag-ignore-list '("*.*~"
"*.map"
"TAGS"
"dist"
"node_modules"))
(setq ag-project-root-function
(lambda (d) (let ((default-directory d)) (projectile-project-root))))
(setq-default ag-highlight-search t
grep-scroll-output t) ))
;; :config
;; (setq ag-ignore-list (cons projectile-globally-ignored-directories projectile-globally-ignored-files)
)
(use-package ace-jump-mode
:config
(evil-leader/set-key "g" ace-jump-mode))
;; (use-package magit)
(defun add-auto-mode (mode &rest patterns)
"Add entries to `auto-mode-alist' to use `MODE' for all given file `PATTERNS'."
(dolist (pattern patterns)
(add-to-list 'auto-mode-alist (cons pattern mode))))
(defun delete-this-file ()
"Delete the current file, and kill the buffer."
(interactive)
(unless (buffer-file-name)
(error "No file is currently being edited"))
(when (yes-or-no-p (format "Really delete '%s'?"
(file-name-nondirectory buffer-file-name)))
(delete-file (buffer-file-name))
(kill-this-buffer)))
(defun rename-this-file-and-buffer (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive "sNew name: ")
(let ((name (buffer-name))
(filename (buffer-file-name)))
(unless filename
(error "Buffer '%s' is not visiting a file!" name))
(progn
(when (file-exists-p filename)
(rename-file filename new-name 1))
(set-visited-file-name new-name)
(rename-buffer new-name))))
(defun sanityinc/string-all-matches (regex str &optional group)
"Find all matches for `REGEX' within `STR', returning the full match string or group `GROUP'."
(let ((result nil)
(pos 0)
(group (or group 0)))
(while (string-match regex str pos)
(push (match-string group str) result)
(setq pos (match-end group)))
result) )
(defun eval-region-or-buffer ()
"Evaluate the selection, or, if empty, the whole buffer."
(interactive)
(let ((debug-on-error t))
(cond
(mark-active
(call-interactively 'eval-region)
(setq deactivate-mark t))
(t
(eval-buffer)))))
(dolist (command '(yank yank-pop evil-paste-before evil-paste-after))
(eval `(defadvice ,command (after indent-region activate)
(and (not current-prefix-arg)
(member major-mode '(emacs-lisp-mode lisp-mode kotlin-mode
clojure-mode scheme-mode
haskell-mode ruby-mode
rspec-mode python-mode
c-mode c++-mode
objc-mode latex-mode
plain-tex-mode web-mode))
(let ((mark-even-if-inactive transient-mark-mode))
(indent-region (region-beginning) (region-end) nil))))))
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(eshell)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
(defun save-all-buffers()
(interactive)
(save-some-buffers t))
(defun kill-this-buffer-and-window ()
(interactive)
(when (get-buffer "*Help*")
(progn
(kill-buffer "*Help*")
(return)))
(kill-this-buffer)
(if (> (count-windows) 1)
(delete-window)))
(defun open-config-org ()
(interactive)
(find-file "~/.emacs.d/horoz.org"))
(defun open-init-el ()
(interactive)
(find-file "~/.emacs.d/init.el"))
(define-key dired-mode-map (kbd "M-m") 'dired-find-file)
(define-key dired-mode-map "c" 'find-file)
(use-package expand-region
:bind( "C-=" . er/expand-region))
(use-package perspective
:config
(progn (persp-mode)
(require 'persp-projectile)
(custom-set-faces
'(persp-selected-face ((t (:foreground "cornflower blue" :weight bold)))))))
;; (custom-set-faces
;; '(persp-selected-face ((t (:foreground "cornflower blue" :weight bold)))))
(eval-after-load "evil-leader"
'(progn
(evil-leader/set-key
"p s" 'projectile-persp-switch-project)))
(add-hook 'prog-mode-hook #'hs-minor-mode)
(add-hook 'sgml-mode-hook #'hs-minor-mode)
;; Fix XML folding
(add-to-list 'hs-special-modes-alist
(list 'nxml-mode
"<!--\\|<[^/>]*[^/]>"
"-->\\|</[^/>]*[^/]>"
"<!--"
'nxml-forward-element
nil))
;; Fix HTML folding
(dolist (mode '(sgml-mode
html-mode
html-erb-mode))
(add-to-list 'hs-special-modes-alist
(list mode
"<!--\\|<[^/>]*[^/]>"
"-->\\|</[^/>]*[^/]>"
"<!--"
'sgml-skip-tag-forward
nil)))
(evil-define-key 'normal prog-mode-map (kbd "t") 'hs-toggle-hiding)
(use-package helm-gtags
:init
(progn
(setq helm-gtags-fuzzy-match t)
(add-hook 'c-mode-hook #'helm-gtags-mode)
(add-hook 'c++-mode-hook #'helm-gtags-mode)
(add-hook 'go-mode-hook #'helm-gtags-mode)))
;; (use-package smartparens
;; :config
;; (progn
;; (require 'smartparens-html)
;; (show-smartparens-global-mode 1)
;; (smartparens-global-mode 1)
;; (setq smartparens-strict-mode t)
;; (sp-local-pair 'emacs-lisp-mode "`" nil :when '(sp-in-string-p)))
;; :bind
;; (("C-M-k" . sp-kill-sexp-with-a-twist-of-lime)
;; ("C-M-f" . sp-forward-sexp)
;; ("C-M-b" . sp-backward-sexp)
;; ("C-M-n" . sp-up-sexp)
;; ("C-M-d" . sp-down-sexp)
;; ("C-M-u" . sp-backward-up-sexp)
;; ("C-M-p" . sp-backward-down-sexp)
;; ("C-M-w" . sp-copy-sexp)
;; ("M-s" . sp-splice-sexp)
;; ("M-r" . sp-splice-sexp-killing-around)
;; ("C-)" . sp-forward-slurp-sexp)
;; ("C-}" . sp-forward-barf-sexp)
;; ("C-(" . sp-backward-slurp-sexp)
;; ("C-{" . sp-backward-barf-sexp)
;; ("M-S" . sp-split-sexp)
;; ("M-J" . sp-join-sexp)
;; ("C-M-t" . sp-transpose-sexp)))
(use-package undo-tree
:ensure t)
(setq compilation-read-command nil)
;; (setq split-height-threshold nil)
;; (setq split-width-threshold most-positive-fixnum)
;; (setq compilation-window-height 20)
(defun my-nexterrorloop ()
(interactive)
(next-error 1 t))
(use-package popwin
:config (popwin-mode 1))
(use-package switch-window)
https://github.com/gabesoft/evil-mc
(use-package evil-mc)
(global-evil-mc-mode 1) ;; enable
(setq cc-other-file-alist
'(("\\.c" (".h"))
("\\.cpp" (".h"))
("\\.h" (".c"".cpp"))))
;; (setq ff-search-directories
;; '("." "../src" "../inc" "../MainModule/inc" "../MainModule/src"))
(add-to-list 'cc-search-directories "../../MainModule/inc")
(add-to-list 'cc-search-directories "../../MainModule/src")
(add-to-list 'cc-search-directories "../../MainModule/bonus")
(global-set-key (kbd "C-c i") (lambda ()
(interactive)
(find-file user-init-file)))
(global-set-key (kbd "C-c c") (lambda ()
(interactive)
(find-file "~/.emacs.d/horoz.org")))
(global-set-key (kbd "C-c I") (lambda ()
(interactive)
(dired emacs-lisp-dir)) )
(global-set-key (kbd "C-c r") (lambda ()
(interactive)
(find-file "~/org/projects.org")))
(define-key helm-projectile-find-file-map (kbd "M-o") 'open-file-new-window)
(global-set-key (kbd "C-x m") 'eshell)
(global-set-key (kbd "C-x M") (lambda () (interactive) (eshell t)))
(global-set-key (kbd "C-x M-m") 'shell)
(global-set-key (kbd "M-[") (lambda (delta)
(interactive "p")
(enlarge-window-horizontally delta)))
(global-set-key (kbd "M-]") (lambda (delta)
(interactive "p")
(shrink-window-horizontally delta)))
(define-key global-map (kbd "M-o") 'evil-jump-backward)
(define-key global-map (kbd "M-g") 'keyboard-quit)
(define-key helm-projectile-projects-map (kbd "M-g") 'helm-keyboard-quit)
(define-key helm-projectile-projects-map (kbd "M-m") 'helm-maybe-exit-minibuffer)
(define-key helm-map (kbd "M-g") 'helm-keyboard-quit)
(define-key helm-find-files-map (kbd "M-g") 'helm-keyboard-quit)
(define-key helm-projectile-find-file-map (kbd "M-g") 'helm-keyboard-quit)
(define-key helm-projectile-find-file-map (kbd "M-m") 'helm-ff-RET)
(define-key compilation-button-map (kbd "M-m") 'compile-goto-error)
(define-key minibuffer-local-map (kbd "M-m") #'exit-minibuffer)
(eval-after-load "evil-leader"
'(progn
(evil-leader/set-key
"SPC" 'helm-M-x
"f" 'helm-projectile-find-file
"a" 'ace-jump-mode
"e" 'eshell
"c" 'open-config-org
"i" 'open-init-el
"r" 'ag-project
"s" 'save-all-buffers
"d" 'dired-jump
"D" 'dired-jump-other-window
"n" 'neotree-project-root-dir-or-current-dir
"q" 'kill-this-buffer-and-window
"o" 'other-window
"0" 'delete-window
"1" 'delete-other-windows
"2" 'split-window-below
"3" 'split-window-right
"b" 'switch-to-buffer
"t" 'hs-toggle-hiding
"mm" 'compile
"mn" 'my-nexterrorloop
"w" 'switch-window
"h i" 'ff-find-other-file
"h v" 'describe-variable
"h f" 'describe-function
"h k" 'describe-key
";" 'comment-line
"p p" 'helm-projectile-switch-project
"x c" 'save-buffers-kill-terminal
"g p" 'go-set-project
"g r" 'go-run
"l a" 'helm-all-mark-rings
"k" 'kill-this-buffer)))
(use-package dimmer
:ensure t
:config (dimmer-mode))
;;first part
(use-package cmake-mode
:mode ("CMakeLists\\.txt\\'" "\\.cmake\\'"))
;; (use-package cmake-ide
;; :ensure t
;; :init (cmake-ide-setup))
;; (defun set-compile-key ()
;; (message "set-compile-key")
;; )
;; (defadvice cmake-ide--mode-hook (after cmake-ide--mode-hook-after activate)
;; (evil-leader/set-key "mm" 'cmake-ide-compile)
;; (message "cihangir advice"))
;; ;; second part
;; (use-package cmake-project
;; :ensure t)
;; (defun start-cmake-project-mode()
;; (if (locate-dominating-file default-directory "CMakeLists.txt")
;; (cmake-project-mode)))
;; (add-hook 'c-mode-hook 'start-cmake-project-mode)
;; (add-hook 'c++-mode-hook 'start-cmake-project-mode)