From 239e1742a463a634bddd77e308e6e509bd80f18c Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Mon, 30 Jul 2018 19:52:16 +0200 Subject: [PATCH] Continue moving to the Org config --- configuration.org | 885 +++++++++++++++++++++++++++++++++++++++++++++- init.el | 545 ---------------------------- 2 files changed, 884 insertions(+), 546 deletions(-) diff --git a/configuration.org b/configuration.org index 17436e8..412376d 100644 --- a/configuration.org +++ b/configuration.org @@ -1,6 +1,6 @@ * Emacs configuration -** Configure ~use-package~ +** Configure ~use-package~ and preload ~bind-key~ #+BEGIN_SRC emacs-lisp (unless (package-installed-p 'use-package) @@ -11,6 +11,8 @@ use-package-verbose t) (require 'use-package) + +(use-package bind-key) #+END_SRC ** Set up my personal keymap @@ -66,6 +68,18 @@ I set it up early so I can use it in ~use-package~ calls immediately. (mapcar (lambda (x) (and (stringp x) x)) var)))))) #+END_SRC +** Check if we are running under Termux + +We need to do things differently, if so. + +#+BEGIN_SRC emacs-lisp +(defun termux-p () + "Check if Emacs is running under Termux." + (string-match-p + (regexp-quote "/com.termux/") + (expand-file-name "~"))) +#+END_SRC + ** Misc text manipulation functions *** Delete the current line @@ -605,6 +619,16 @@ Copied from https://ryuslash.org/posts/C-d-to-close-eshell.html `(gpolonkai/idm-get-field-for-account ,account 'account-id)) #+END_SRC +** Automatically zone out after 60 seconds + +#+BEGIN_SRC emacs-lisp +(defun gpolonkai/zone-enable () + "Enable zoning out." + (interactive) + (zone-when-idle 60) + (message "I will zone out after idling for 60 seconds.")) +#+END_SRC + * UI preferences ** Tweak window chrome @@ -625,9 +649,24 @@ Also, maximise the frame. ** Set the default font and configure font resizing +Before this can be used, make sure the [[https://zhm.github.io/symbola/][Symbola]] font is installed. + #+BEGIN_SRC emacs-lisp (set-face-attribute 'default t :font "Hack-10") (set-frame-font "Hack-10" nil t) + +(defun --set-emoji-font (frame) + "Adjust the font setting of FRAME so Emacs can display Emoji properly." + (when (fboundp 'set-fontset-font) + (if (eq system-type 'darwin) + ;; For NS/Cocoa + (set-fontset-font t 'symbol + (font-spec :family "Apple Color Emoji") + frame 'prepend) + ;; For Linux + (set-fontset-font t 'symbol + (font-spec :family "Symbola") + frame 'prepend)))) #+END_SRC * Set up global minor modes provided by Emacs @@ -697,8 +736,160 @@ Because we can. `((".*" ,temporary-file-directory t)))) #+END_SRC +** ~whitespace~ + +~whitespace-mode~ is turned on by default, and can be toggled with ~F10~. + +#+BEGIN_SRC emacs-lisp +(defun prevent-whitespace-mode-for-magit () + "Prevent whitespace-mode from running in magit derived modes." + (not (derived-mode-p 'magit-mode))) + +(use-package whitespace + :demand + :config + (add-function :before-while whitespace-enable-predicate 'prevent-whitespace-mode-for-magit) + (global-whitespace-mode 1) + (setq whitespace-line-column 100) + :bind + (([f10] . whitespace-mode) + ([(shift f10)] . global-whitespace-mode) + :map gpolonkai/pers-map + ("w" . whitespace-cleanup))) +#+END_SRC + +** ~eshell~ + +#+BEGIN_SRC emacs-lisp +(use-package eshell + :config + (add-hook 'eshell-mode-hook + (lambda () (local-set-key (kbd "C-d") #'eshell-C-d))) + :bind + (:map gpolonkai/pers-map + ("e" . eshell))) +#+END_SRC + +** ~saveplace~ + +#+BEGIN_SRC emacs-lisp +;; Save place +(use-package saveplace + :config + (setq-default save-place t) + (setq save-place-file (expand-file-name ".places" user-emacs-directory))) +#+END_SRC + +** ID manager + +Manage credentials, AKA password manager. + +#+BEGIN_SRC emacs-lisp +(use-package id-manager + :config + (setq idm-database-file (expand-file-name "idm-db.gpg" user-emacs-directory)) + :bind + (:map gpolonkai/pers-map + ("i" . idm-open-list-command))) +#+END_SRC + +** EDiff + +#+BEGIN_SRC emacs-lisp +(use-package ediff + :init + (setq-default ediff-merge-split-window-function 'split-window-horizontally + ediff-split-window-function 'split-window-vertically + ediff-window-setup-function 'ediff-setup-windows-plain)) +#+END_SRC + +** Automatically revert changed files + +…unless they are modified, of course. + +#+BEGIN_SRC emacs-lisp +(use-package autorevert + :config + (global-auto-revert-mode 1)) +#+END_SRC + +** Eww + +For in-Emacs browsing needs. + +#+BEGIN_SRC emacs-lisp +(use-package eww + :config + (setq eww-search-prefix "https://www.google.com/?q=")) +#+END_SRC + +** Electric indent mode + +#+BEGIN_SRC emacs-lisp +(use-package electric + :config + ;; This seems to be the default, but let’s make sure… + (electric-indent-mode 1)) +#+END_SRC + +** Save history + +#+BEGIN_SRC emacs-lisp +(use-package savehist + :config + (savehist-mode 1)) +#+END_SRC + +** Web jump + +#+BEGIN_SRC emacs-lisp +(use-package webjump + :bind + (:map gpolonkai/pers-map + ("j" . webjump))) +#+END_SRC + +** Which function am I in? + +#+BEGIN_SRC emacs-lisp +(use-package which-func + :config + (add-hook 'prog-mode-hook + (lambda () + (if (fboundp 'which-function-mode) + (which-function-mode) + (which-func-mode)))) + (setq which-func-unknown "∅")) +#+END_SRC + +** Fortune cookies + +The cookies are from the Hungarian version an ancient MS-DOS based program called ~TAGLINE~. + +#+BEGIN_SRC emacs-lisp +(use-package cookie1 + :demand t + :config + (setq cookie-file (concat user-emacs-directory "fortune-cookies.txt")) + :bind + (:map gpolonkai/pers-map + ("k" . cookie))) +#+END_SRC + * ~use-package~ packages +** Automatically upgrade packages every week + +#+BEGIN_SRC emacs-lisp +(use-package auto-package-update + :config + (setq auto-package-update-interval 7 + auto-package-update-delete-old-versions t) + ;; Let’s do this in after-init-hook, as use-package invocations may modify + ;; the list of installed packages + (add-hook 'after-init-hook 'auto-package-update-maybe)) +#+END_SRC + ** Nyanyanyanyanya *** Nyan-cat style position marker @@ -736,6 +927,109 @@ Unfortunately, this works only in a graphical mode. (setq zone-programs (vconcat zone-programs [zone-nyan])))) #+END_SRC +** Eye candy + +*** Smart mode-line + +#+BEGIN_SRC emacs-lisp +(use-package smart-mode-line + :after + org + :config + (add-to-list 'sml/replacer-regexp-list + '("^~/Projects/" ":Proj:") + t) + (add-to-list 'sml/replacer-regexp-list + '("^~/Projektek/" ":Proj:") + t) + (add-to-list 'sml/replacer-regexp-list + (list (concat "^" (regexp-quote user-documents-directory)) + ":Doc:") + t) + (add-to-list 'sml/replacer-regexp-list + '("^:Proj:jekyll/gergelypolonkai.github.io/" ":Blog:") + t) + (add-to-list 'sml/replacer-regexp-list + (list "^:Proj:python/" ":Proj:Py:") + t) + (sml/setup) + (require 'cl-lib) + (setq-default header-line-format + '("" + mode-line-mule-info + mode-line-client + mode-line-modified + mode-line-remote + mode-line-frame-identification + mode-line-buffer-identification + sml/pos-id-separator + (vc-mode vc-mode) + mode-line-position)) + (delete '(vc-mode vc-mode) mode-line-format) + (delete 'mode-line-frame-identification mode-line-format) + (delete 'mode-line-buffer-identification mode-line-format) + (delete 'mode-line-position mode-line-format) + (delete 'mode-line-mule-info mode-line-format) + (delete 'mode-line-modified mode-line-format) + (delete 'mode-line-client mode-line-format) + (delete 'mode-line-remote mode-line-format) + ;; Add sml/pre-id-separator after mode-line-front-space + (let* ((front-space-position (1+ (cl-position 'mode-line-front-space mode-line-format))) + (mode-line-rest (nthcdr front-space-position mode-line-format)) + (mode-line-beg (cl-subseq mode-line-format 0 front-space-position))) + (setq-default mode-line-format (nconc mode-line-beg + (list sml/pre-id-separator) + mode-line-rest)))) +#+END_SRC + +*** Powerline theme for ~smart-mode-line~ + +#+BEGIN_SRC emacs-lisp +(use-package smart-mode-line-powerline-theme + :init + (setq-default sml/theme 'powerline)) +#+END_SRC + +*** Spinner, e.g. to display running background tasks + +#+BEGIN_SRC emacs-lisp +(use-package spinner) +#+END_SRC + +*** Beacon + +Highlight point. Sometimes it’s not easy to see. + +#+BEGIN_SRC emacs-lisp +(use-package beacon + :demand + :config + (beacon-mode 1) + :bind + (:map gpolonkai/pers-map + ("b" . beacon-blink))) +#+END_SRC + +*** Display the status of the last command in the fringe of EShell + +#+BEGIN_SRC emacs-lisp +(when (display-graphic-p) + (use-package eshell-fringe-status + :config + (add-hook 'eshell-mode-hook 'eshell-fringe-status-mode))) +#+END_SRC + +*** Extras for the EShell prompt + +#+BEGIN_SRC emacs-lisp +(use-package eshell-prompt-extras + :config + (with-eval-after-load "esh-opt" + (autoload 'epe-theme-lambda "eshell-prompt-extras") + (setq eshell-highlight-prompt nil + eshell-prompt-function 'epe-theme-lambda))) +#+END_SRC + ** Highlight the current line #+BEGIN_SRC emacs-lisp @@ -806,6 +1100,12 @@ Because one is never enough. ("C-c m =" . mc/compare-chars))) #+END_SRC +*** Add extra cursors via ~ace-jump~ + +#+BEGIN_SRC emacs-lisp +(use-package ace-mc) +#+END_SRC + ** Magit #+BEGIN_SRC emacs-lisp @@ -825,6 +1125,575 @@ I also want FlySpell to be enabled during Git commit message editing. (add-hook 'git-commit-mode-hook 'turn-on-flyspell) #+END_SRC +** Zone + +#+BEGIN_SRC emacs-lisp +(use-package zone + :demand + :config + (zone-when-idle 60) + :bind + (:map gpolonkai/pers-map + ("zi" . gpolonkai/zone-enable) + ("zq" . zone-leave-me-alone))) +#+END_SRC + +** Origami + +#+BEGIN_SRC emacs-lisp +(use-package origami + :demand + :config + (define-prefix-command 'origami-mode-map) + (define-key ctl-x-map (kbd "z") 'origami-mode-map) + (global-origami-mode) + :bind + (:map origami-mode-map + ("o" . origami-open-node) + ("O" . origami-open-node-recursively) + ("c" . origami-close-node) + ("C" . origami-close-node-recursively) + ("a" . origami-toggle-node) + ("A" . origami-recursively-toggle-node) + ("R" . origami-open-all-nodes) + ("M" . origami-close-all-nodes) + ("v" . origami-show-only-node) + ("k" . origami-previous-fold) + ("j" . origami-forward-fold) + ("x" . origami-reset))) +#+END_SRC + +** Smart parens + +#+BEGIN_SRC emacs-lisp +(use-package smartparens + :demand + :config + (show-smartparens-global-mode t) + (add-hook 'prog-mode-hook + 'turn-on-smartparens-strict-mode) + (add-hook 'markdown-mode-hook + 'turn-on-smartparens-strict-mode) + :bind + (([f9] . smartparens-strict-mode) + ("C-c s u" . sp-unwrap-sexp) + ("C-c s k" . sp-kill-sexp))) +#+END_SRC + +** Projectile + +#+BEGIN_SRC emacs-lisp +(use-package projectile + :pin melpa-stable + :config + (projectile-global-mode t)) +#+END_SRC + +*** Repository-based ToDo management with Org mode + +#+BEGIN_SRC emacs-lisp +(use-package org-projectile) +#+END_SRC + +** Drag stuff + +To move lines around. + +#+BEGIN_SRC emacs-lisp +(use-package drag-stuff + :config + (drag-stuff-global-mode t) + (drag-stuff-define-keys)) +#+END_SRC + +** Ace window + +Besides its standard functionality, I also make add key bindings for burying or scrolling another +window. + +#+BEGIN_SRC emacs-lisp +(use-package ace-window + :config + (setq aw-background nil + aw-dispatch-always t) + (add-to-list 'aw-dispatch-alist + '(?s gpolonkai/scroll-window-up " Scroll window up") + t) + (add-to-list 'aw-dispatch-alist + '(?S gpolonkai/scroll-window-down " Scroll window down") + t) + (add-to-list 'aw-dispatch-alist + '(?q gpolonkai/bury-window " Bury (quit) window") + t) + :bind + (:map ctl-x-map + ("o" . ace-window))) +#+END_SRC + +** Avy + +#+BEGIN_SRC emacs-lisp +(use-package avy + :demand + :config + (avy-setup-default) + :bind + (("M-g c" . avy-goto-char) + ("C-'" . avy-goto-char-2) + ("M-g f" . avy-goto-line) + ("M-g w" . avy-goto-word-1) + ("M-g e" . avy-goto-word-0))) +#+END_SRC + +** Focus mode + +It is similar to narrow mode, except the narrowing part; it dims everything outside of the current +context. + +#+BEGIN_SRC emacs-lisp +(use-package focus + :bind + (([f8] . focus-mode))) +#+END_SRC + +** Command logging mode + +For occasional screen casting recordings. + +#+BEGIN_SRC emacs-lisp +(use-package command-log-mode) +#+END_SRC + +** Emamux + +For controlling tmux from within Emacs. + +#+BEGIN_SRC emacs-lisp +(use-package emamux) +#+END_SRC + +** Use StackExchange sites in an Emacs window + +#+BEGIN_SRC emacs-lisp +(use-package sx + :demand + :bind + (:map gpolonkai/pers-map + ("qi" . sx-inbox) + ("qs" . sx-search))) +#+END_SRC + +** Goto last change + +#+BEGIN_SRC emacs-lisp +(use-package goto-last-change + :bind + (("M-g /" . goto-last-change))) +#+END_SRC + +** Rainbow mode + +To highlight colours based on their name or hex code. + +#+BEGIN_SRC emacs-lisp +(use-package rainbow-mode + :config + (add-hook 'css-mode-hook 'rainbow-mode) + (add-hook 'scss-mode-hook 'rainbow-mode) + (add-hook 'sass-mode 'rainbow-mode)) +#+END_SRC + +** Zygospore + +Toggle other windows for maximum focus. When focus is no longer needed, they can be toggled back. +~C-x 1~ is conveniently bound to it. + +#+BEGIN_SRC emacs-lisp +(use-package zygospore + :bind + (:map ctl-x-map + ("1" . zygospore-toggle-delete-other-windows))) +#+END_SRC + +** Kanban board + +#+BEGIN_SRC emacs-lisp +(use-package kanban) +#+END_SRC + +** Highlight dired buffer by file size, modified time, git status + +#+BEGIN_SRC emacs-lisp +(use-package dired-k + :bind + (:map dired-mode-map + ("K" . dired-k))) +#+END_SRC + +** Show number of matches in the mode line while searching + +#+BEGIN_SRC emacs-lisp +(use-package anzu + :config + (global-anzu-mode 1)) +#+END_SRC + +** Gradually expand region + +#+BEGIN_SRC emacs-lisp +(use-package expand-region + :bind + (("C-@" . er/expand-region))) +#+END_SRC + +** Read and Edit MediaWiki pages in an Emacs window + +#+BEGIN_SRC emacs-lisp +(use-package mediawiki + :after + id-manager + :config + (add-to-list 'mediawiki-site-alist + '("WikEmacs" + "http://wikemacs.org/wiki/" + (gpolonkai/idm-get-id-for-account "WikEmacs") + (gpolonkai/idm-get-password-for-account "WikEmacs")))) +#+END_SRC + +** Display unread GitHub notification count in the mode line + +#+BEGIN_SRC emacs-lisp +(use-package github-notifier + :after + id-manager + :config + (setq github-notifier-token (gpolonkai/idm-get-password-for-account "GitHub")) + (github-notifier-mode)) +#+END_SRC + +** Interact with GitHub gists + +#+BEGIN_SRC emacs-lisp +(use-package gist) +#+END_SRC + +** An Emacs Dashboard + +#+BEGIN_SRC emacs-lisp +(use-package dashboard + :after + projectile + :config + (add-to-list 'dashboard-items '(projects . 5) t) + (dashboard-setup-startup-hook)) +#+END_SRC + +* Make programming a bit easier + +** Electric case + +Insert snake_case and camelCase without using the Shift key. It is automatically enabled in C +mode. + +#+BEGIN_SRC emacs-lisp +(use-package electric-case + :config + (add-hook 'c-mode-hook 'electric-case-c-init)) +#+END_SRC + +** Electric operator + +Automatically add spaces around operators. + +#+BEGIN_SRC emacs-lisp +(use-package electric-operator + :config + (add-hook 'c-mode-common-hook 'electric-operator-mode) + ;; Apply electric-operator-mode to vala-mode, too + (apply #'electric-operator-add-rules-for-mode 'vala-mode + electric-operator-prog-mode-rules)) +#+END_SRC + +** Yasnippets + +#+BEGIN_SRC emacs-lisp +(use-package yasnippet + :demand + :config + (yas-global-mode 1) + (add-hook 'post-command-hook 'sachachua/change-cursor-color-when-can-expand)) +#+END_SRC + +*** Extra snippets for Vala + +#+BEGIN_SRC emacs-lisp +(use-package vala-snippets + :after + yasnippet) +#+END_SRC + +*** Miscellanous extra snippets + +#+BEGIN_SRC emacs-lisp +(use-package yasnippet-snippets) +#+END_SRC + +** Colourful delimiters + +#+BEGIN_SRC emacs-lisp +(use-package rainbow-delimiters + :config + (add-hook 'prog-mode-hook + #'rainbow-delimiters-mode)) +#+END_SRC + +** REST Client + +#+BEGIN_SRC emacs-lisp +(use-package restclient) +#+END_SRC + +** Highlight current symbol + +A big help during refactoring. + +#+BEGIN_SRC emacs-lisp +(use-package auto-highlight-symbol + :config + (global-auto-highlight-symbol-mode t)) +#+END_SRC + +** Make ReallyLongCamelCaseWords more readable + +#+BEGIN_SRC emacs-lisp +(use-package glasses + :config + (add-hook 'prog-mode-hook 'glasses-mode)) +#+END_SRC + +* FlyCheck + +#+BEGIN_SRC emacs-lisp +(use-package flycheck + :config + (global-flycheck-mode)) +#+END_SRC + +** FlyCheck for pkg-config files + +#+BEGIN_SRC emacs-lisp +(use-package flycheck-pkg-config) +#+END_SRC + +* Org mode + +This is a big one; I use a lot of customisation here. + +#+BEGIN_SRC emacs-lisp +(use-package org + :demand + :init + (require 'xdg-paths) + (setq-default org-crypt-key "B0740C4C" + org-default-notes-file (concat user-documents-directory + (convert-standard-filename + "/orgmode/notes.org")) + org-directory (concat user-documents-directory + (convert-standard-filename "/orgmode/")) + org-agenda-files (concat user-documents-directory + (convert-standard-filename + "/orgmode/agenda_files")) + org-ellipsis "…#" + org-startup-folded 'content + org-mobile-directory (concat user-documents-directory + (convert-standard-filename + "/orgmode/mobile/")) + org-mobile-inbox-for-pull (concat + user-documents-directory + (convert-standard-filename + "/orgmode/from-mobile.org")) + org-log-done 'time + org-src-preserve-indentation t + org-log-into-drawer t + org-tags-column 0 + org-startup-indented t + org-special-ctrl-a/e t) + :config + (require 'ox-md) + (unless (boundp 'org-capture-templates) + (setq org-capture-templates nil)) + (add-to-list 'org-capture-templates + '("p" "Blog post" + entry (file+olp+datetree (concat org-directory "blog.org")) + "* %^{Title} :blog:\n :PROPERTIES:\n :on: %T\n :END:\n %i%?")) + (add-to-list 'org-capture-templates + '("g" "GT2 note" + entry (file+headline (concat org-directory "gt2-notes.org") + "Captures") + "** %^{Title}\n :PROPERTIES:\n :on: %T\n :END:\n %i%?")) + (setq org-time-stamp-formats '("<%Y-%m-%d>" . "<%Y-%m-%d %H:%M>") + org-todo-keywords '((sequence "TODO(t)" + "DOING(w@/!)" + "BLOCKED(b@/!)" + "|" + "CANCELED(c@/!)" + "REVIEW(r@/!)" + "DONE(d@/!)")) + org-goto-interface 'outline-path-completion + org-goto-max-level 10 + org-html-checkbox-type 'unicode + org-html-checkbox-types + '((unicode (on . "") + (off . "") + (trans . ""))) + org-src-window-setup 'current-window) + (add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element) + (add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree) + :bind + (:map gpolonkai/pers-map + ("a" . org-agenda-list) + ("c" . org-capture) + ("l" . org-store-link) + :map org-mode-map + ("SPC" . org-space-key) + ("C-c l" . org-toggle-link-display) + ("C-a" . gpolonkai/move-to-beginning-of-line) + ("C-e" . gpolonkai/move-to-end-of-line))) +#+END_SRC + +** Org bullets + +To display fancy bullets in graphics mode. + +#+BEGIN_SRC emacs-lisp +(use-package org-bullets + :init + (add-hook 'org-mode-hook + (lambda () + (if (display-graphic-p) org-bullets-mode)))) +#+END_SRC + +** Show a random ToDo every hour + +#+BEGIN_SRC emacs-lisp +(use-package org-random-todo + :demand + :config + ;; Don’t bug me too often… + (setq org-random-todo-how-often 3600) + :bind + (:map gpolonkai/pers-map + ("r" . org-random-todo))) +#+END_SRC + +* Git & Co. + +** Git status on the fringe + +In graphical modes we use ~git-gutter-fringe~, and ~git-gutter~ otherwise. + +#+BEGIN_SRC emacs-lisp +;; Git gutter +;; If we are in text-only mode, there is no fringe. +(let ((gitgutter-package + (if (display-graphic-p) + "git-gutter-fringe" + "git-gutter"))) + (eval `(use-package ,gitgutter-package + :demand + :config + (global-git-gutter-mode t) + :bind + (:map gpolonkai/pers-map + ("gg" . git-gutter:update-all-windows) + ("gn" . git-gutter:next-hunk) + ("gp" . git-gutter:previous-hunk))))) +#+END_SRC + +** Git messenger + +AKA blame current line. + +#+BEGIN_SRC emacs-lisp +(use-package git-messenger + :bind + (:map gpolonkai/pers-map + ("gm" . git-messenger:popup-message))) +#+END_SRC + +** Git time machine + +See previous versions of the current file. + +#+BEGIN_SRC emacs-lisp +(use-package git-timemachine + :bind + (([f6] . git-timemachine-toggle))) +#+END_SRC + +* Company & Co. + +#+BEGIN_SRC emacs-lisp +(use-package company + :config + (setq company-idle-delay nil + company-frontends '(company-pseudo-tooltip-frontend + company-echo-metadata-frontend) + company-dabbrev-downcase nil) + (put 'company-clang-arguments 'safe-local-variable #'nil-or-list-of-strings-p) + (global-company-mode)) +#+END_SRC + +** Company completion based on local C headers + +#+BEGIN_SRC emacs-lisp +(use-package company-c-headers) +#+END_SRC + +** Company mode in the shell + +#+BEGIN_SRC emacs-lisp +(use-package company-shell) +#+END_SRC + +** REST Client completion via Company + +#+BEGIN_SRC emacs-lisp +(use-package company-restclient) +#+END_SRC + +** Insert Emoji with Company + +#+BEGIN_SRC emacs-lisp +(use-package company-emoji + :after + company + :init + (--set-emoji-font nil) + :config + (add-to-list 'company-backends 'company-emoji) + (add-hook 'after-make-frame-functions + '--set-emoji-font)) +#+END_SRC + +** Anaconda backend for Company + +#+BEGIN_SRC emacs-lisp +(use-package company-anaconda + :after + company + :config + (add-to-list 'company-backends 'company-anaconda)) +#+END_SRC + +** Web mode (~web-mode~ and ~emmet-mode~, too) backend for Company + +#+BEGIN_SRC emacs-lisp +(use-package company-web + :config + (require 'company-web-html)) +#+END_SRC + * Helm & Co. ** Helm @@ -1100,3 +1969,17 @@ I also want FlySpell to be enabled during Git commit message editing. #+BEGIN_SRC emacs-lisp (use-package gitignore-mode) #+END_SRC + +** ~po-mode~ + +#+BEGIN_SRC emacs-lisp +(use-package po-mode + :mode "\\.po\\'") +#+END_SRC + +** C# + +#+BEGIN_SRC emacs-lisp +(use-package csharp-mode + :mode "\\.cs\\'") +#+END_SRC diff --git a/init.el b/init.el index 9a546cb..f2b3ec1 100644 --- a/init.el +++ b/init.el @@ -31,176 +31,6 @@ (load "zim") (load "window-manip") -(defun termux-p () - "Check if Emacs is running under Termux." - (string-match-p - (regexp-quote "/com.termux/") - (expand-file-name "~"))) - -;; Whitespace mode -;; -;; It is turned on by default, and can be toggled with F10 -(use-package whitespace - :demand - :config - (defun prevent-whitespace-mode-for-magit () - (not (derived-mode-p 'magit-mode))) - (add-function :before-while whitespace-enable-predicate 'prevent-whitespace-mode-for-magit) - (global-whitespace-mode 1) - (setq whitespace-line-column 100) - :bind - (([f10] . whitespace-mode) - ([(shift f10)] . global-whitespace-mode) - :map gpolonkai/pers-map - ("w" . whitespace-cleanup))) - -(use-package eshell - :config - (add-hook 'eshell-mode-hook - (lambda () (local-set-key (kbd "C-d") #'eshell-C-d))) - :bind - (:map gpolonkai/pers-map - ("e" . eshell))) - -;; Save place -(use-package saveplace - :config - (setq-default save-place t) - (setq save-place-file (expand-file-name ".places" user-emacs-directory))) - -(defun gpolonkai/zone-enable () - "Enable zoning out." - (interactive) - (zone-when-idle 60) - (message "I will zone out after idling for 60 seconds.")) - -(use-package zone - :demand - :config - (zone-when-idle 60) - :bind - (:map gpolonkai/pers-map - ("zi" . gpolonkai/zone-enable) - ("zq" . zone-leave-me-alone))) - -(use-package origami - :demand - :config - (define-prefix-command 'origami-mode-map) - (define-key ctl-x-map (kbd "z") 'origami-mode-map) - (global-origami-mode) - :bind - (:map origami-mode-map - ("o" . origami-open-node) - ("O" . origami-open-node-recursively) - ("c" . origami-close-node) - ("C" . origami-close-node-recursively) - ("a" . origami-toggle-node) - ("A" . origami-recursively-toggle-node) - ("R" . origami-open-all-nodes) - ("M" . origami-close-all-nodes) - ("v" . origami-show-only-node) - ("k" . origami-previous-fold) - ("j" . origami-forward-fold) - ("x" . origami-reset))) - -(use-package smartparens - :demand - :config - (show-smartparens-global-mode t) - (add-hook 'prog-mode-hook - 'turn-on-smartparens-strict-mode) - (add-hook 'markdown-mode-hook - 'turn-on-smartparens-strict-mode) - :bind - (([f9] . smartparens-strict-mode) - ("C-c s u" . sp-unwrap-sexp) - ("C-c s k" . sp-kill-sexp))) - -(use-package smart-mode-line - :after - org - :config - (add-to-list 'sml/replacer-regexp-list - '("^~/Projects/" ":Proj:") - t) - (add-to-list 'sml/replacer-regexp-list - '("^~/Projektek/" ":Proj:") - t) - (add-to-list 'sml/replacer-regexp-list - (list (concat "^" (regexp-quote user-documents-directory)) - ":Doc:") - t) - (add-to-list 'sml/replacer-regexp-list - '("^:Proj:jekyll/gergelypolonkai.github.io/" ":Blog:") - t) - (add-to-list 'sml/replacer-regexp-list - (list "^:Proj:python/" ":Proj:Py:") - t) - (sml/setup) - (require 'cl-lib) - (setq-default header-line-format - '("" - mode-line-mule-info - mode-line-client - mode-line-modified - mode-line-remote - mode-line-frame-identification - mode-line-buffer-identification - sml/pos-id-separator - (vc-mode vc-mode) - mode-line-position)) - (delete '(vc-mode vc-mode) mode-line-format) - (delete 'mode-line-frame-identification mode-line-format) - (delete 'mode-line-buffer-identification mode-line-format) - (delete 'mode-line-position mode-line-format) - (delete 'mode-line-mule-info mode-line-format) - (delete 'mode-line-modified mode-line-format) - (delete 'mode-line-client mode-line-format) - (delete 'mode-line-remote mode-line-format) - ;; Add sml/pre-id-separator after mode-line-front-space - (let* ((front-space-position (1+ (cl-position 'mode-line-front-space mode-line-format))) - (mode-line-rest (nthcdr front-space-position mode-line-format)) - (mode-line-beg (cl-subseq mode-line-format 0 front-space-position))) - (setq-default mode-line-format (nconc mode-line-beg - (list sml/pre-id-separator) - mode-line-rest)))) - -(use-package company - :config - (setq company-idle-delay nil - company-frontends '(company-pseudo-tooltip-frontend - company-echo-metadata-frontend) - company-dabbrev-downcase nil) - (put 'company-clang-arguments 'safe-local-variable #'nil-or-list-of-strings-p) - (global-company-mode)) - -(use-package projectile - :pin melpa-stable - :config - (projectile-global-mode t)) - -(use-package drag-stuff - :config - (drag-stuff-global-mode t) - (drag-stuff-define-keys)) - -;; Git gutter -;; If we are in text-only mode, there is no fringe. -(let ((gitgutter-package - (if (display-graphic-p) - "git-gutter-fringe" - "git-gutter"))) - (eval `(use-package ,gitgutter-package - :demand - :config - (global-git-gutter-mode t) - :bind - (:map gpolonkai/pers-map - ("gg" . git-gutter:update-all-windows) - ("gn" . git-gutter:next-hunk) - ("gp" . git-gutter:previous-hunk))))) - ;; From gmane.emacs.orgmode ;; (http://article.gmane.org/gmane.emacs.orgmode/75222) (defun f-ediff-org-showhide (buf command &rest cmdargs) @@ -223,83 +53,6 @@ (f-ediff-org-showhide ediff-buffer-B 'hide-sublevels 1) (f-ediff-org-showhide ediff-buffer-C 'hide-sublevels 1)) -;; Org mode -(use-package org - :demand - :init - (require 'xdg-paths) - (setq-default org-crypt-key "B0740C4C" - org-default-notes-file (concat user-documents-directory - (convert-standard-filename - "/orgmode/notes.org")) - org-directory (concat user-documents-directory - (convert-standard-filename "/orgmode/")) - org-agenda-files (concat user-documents-directory - (convert-standard-filename - "/orgmode/agenda_files")) - org-ellipsis "…#" - org-startup-folded 'content - org-mobile-directory (concat user-documents-directory - (convert-standard-filename - "/orgmode/mobile/")) - org-mobile-inbox-for-pull (concat - user-documents-directory - (convert-standard-filename - "/orgmode/from-mobile.org")) - org-log-done 'time - org-src-preserve-indentation t - org-log-into-drawer t - org-tags-column 0 - org-startup-indented t - org-special-ctrl-a/e t) - :config - (require 'ox-md) - (unless (boundp 'org-capture-templates) - (setq org-capture-templates nil)) - (add-to-list 'org-capture-templates - '("p" "Blog post" - entry (file+olp+datetree (concat org-directory "blog.org")) - "* %^{Title} :blog:\n :PROPERTIES:\n :on: %T\n :END:\n %i%?")) - (add-to-list 'org-capture-templates - '("g" "GT2 note" - entry (file+headline (concat org-directory "gt2-notes.org") - "Captures") - "** %^{Title}\n :PROPERTIES:\n :on: %T\n :END:\n %i%?")) - (setq org-time-stamp-formats '("<%Y-%m-%d>" . "<%Y-%m-%d %H:%M>") - org-todo-keywords '((sequence "TODO(t)" - "DOING(w@/!)" - "BLOCKED(b@/!)" - "|" - "CANCELED(c@/!)" - "REVIEW(r@/!)" - "DONE(d@/!)")) - org-goto-interface 'outline-path-completion - org-goto-max-level 10 - org-html-checkbox-type 'unicode - org-html-checkbox-types - '((unicode (on . "") - (off . "") - (trans . ""))) - org-src-window-setup 'current-window) - (add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element) - (add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree) - :bind - (:map gpolonkai/pers-map - ("a" . org-agenda-list) - ("c" . org-capture) - ("l" . org-store-link) - :map org-mode-map - ("SPC" . org-space-key) - ("C-c l" . org-toggle-link-display) - ("C-a" . gpolonkai/move-to-beginning-of-line) - ("C-e" . gpolonkai/move-to-end-of-line))) - -(use-package org-bullets - :init - (add-hook 'org-mode-hook - (lambda () - (if (display-graphic-p) org-bullets-mode)))) - ;; Waka-waka (use-package wakatime-mode :init @@ -307,112 +60,14 @@ :config (global-wakatime-mode t)) -(use-package ace-window - :config - (setq aw-background nil - aw-dispatch-always t) - (add-to-list 'aw-dispatch-alist - '(?s gpolonkai/scroll-window-up " Scroll window up") - t) - (add-to-list 'aw-dispatch-alist - '(?S gpolonkai/scroll-window-down " Scroll window down") - t) - (add-to-list 'aw-dispatch-alist - '(?q gpolonkai/bury-window " Bury (quit) window") - t) - :bind - (:map ctl-x-map - ("o" . ace-window))) - -(use-package avy - :demand - :config - (avy-setup-default) - :bind - (("M-g c" . avy-goto-char) - ("C-'" . avy-goto-char-2) - ("M-g f" . avy-goto-line) - ("M-g w" . avy-goto-word-1) - ("M-g e" . avy-goto-word-0))) - -(use-package focus - :bind - (([f8] . focus-mode))) - -(use-package command-log-mode) - -(use-package company-c-headers) - -(use-package company-shell) - -(use-package electric-case - :config - (add-hook 'c-mode-hook 'electric-case-c-init)) - -(use-package electric-operator - :config - (add-hook 'c-mode-common-hook 'electric-operator-mode) - ;; Apply electric-operator-mode to vala-mode, too - (apply #'electric-operator-add-rules-for-mode 'vala-mode - electric-operator-prog-mode-rules)) - -(use-package emamux) - -(use-package flycheck - :config - (global-flycheck-mode)) - -(use-package flycheck-pkg-config) - -(use-package git-messenger - :bind - (:map gpolonkai/pers-map - ("gm" . git-messenger:popup-message))) - -(use-package git-timemachine - :bind - (([f6] . git-timemachine-toggle))) - (use-package gnugo) (use-package gobgen) -(use-package goto-last-change - :bind - (("M-g /" . goto-last-change))) - -(use-package id-manager - :config - (setq idm-database-file (expand-file-name "idm-db.gpg" user-emacs-directory)) - :bind - (:map gpolonkai/pers-map - ("i" . idm-open-list-command))) - (use-package identica-mode) -(use-package org-projectile) - -(use-package smart-mode-line-powerline-theme - :init - (setq-default sml/theme 'powerline)) - -(use-package spinner) - -(use-package sx - :demand - :bind - (:map gpolonkai/pers-map - ("qi" . sx-inbox) - ("qs" . sx-search))) - (use-package xlicense) -(use-package ediff - :init - (setq-default ediff-merge-split-window-function 'split-window-horizontally - ediff-split-window-function 'split-window-vertically - ediff-window-setup-function 'ediff-setup-windows-plain)) - (use-package plantuml-mode :init (setq plantuml-jar-path @@ -430,39 +85,10 @@ 'org-babel-load-languages '((plantuml . t)))) -(use-package org-random-todo - :demand - :config - ;; Don’t bug me too often… - (setq org-random-todo-how-often 3600) - :bind - (:map gpolonkai/pers-map - ("r" . org-random-todo))) - -(use-package yasnippet - :demand - :config - (yas-global-mode 1) - (add-hook 'post-command-hook 'sachachua/change-cursor-color-when-can-expand)) - -(use-package yasnippet-snippets) - -(use-package vala-snippets - :after - yasnippet) - (use-package hungarian-holidays :config (hungarian-holidays-add)) -(use-package beacon - :demand - :config - (beacon-mode 1) - :bind - (:map gpolonkai/pers-map - ("b" . beacon-blink))) - (use-package flyspell :config (add-hook 'prog-mode-hook @@ -470,38 +96,10 @@ (add-hook 'text-mode-hook 'flyspell-mode)) -(use-package autorevert - :config - (global-auto-revert-mode 1)) - -(use-package rainbow-delimiters - :config - (add-hook 'prog-mode-hook - #'rainbow-delimiters-mode)) - -(use-package rainbow-mode - :config - (add-hook 'css-mode-hook 'rainbow-mode) - (add-hook 'scss-mode-hook 'rainbow-mode) - (add-hook 'sass-mode 'rainbow-mode)) - (use-package hungry-delete :config (global-hungry-delete-mode)) -(use-package eww - :config - (setq eww-search-prefix "https://www.google.com/?q=")) - -(use-package electric - :config - ;; This seems to be the default, but let’s make sure… - (electric-indent-mode 1)) - -(use-package restclient) - -(use-package company-restclient) - (use-package alert :config (setq alert-default-style @@ -561,101 +159,18 @@ INFO plist." (use-package cheatsheet) -(use-package savehist - :config - (savehist-mode 1)) - -;; Before this can be used, make sure the Symbola font is installed: -;; https://zhm.github.io/symbola/ -(defun --set-emoji-font (frame) - "Adjust the font setting of FRAME so Emacs can display Emoji properly." - (when (fboundp 'set-fontset-font) - (if (eq system-type 'darwin) - ;; For NS/Cocoa - (set-fontset-font t 'symbol - (font-spec :family "Apple Color Emoji") - frame 'prepend) - ;; For Linux - (set-fontset-font t 'symbol - (font-spec :family "Symbola") - frame 'prepend)))) - -(use-package company-emoji - :after - company - :init - (--set-emoji-font nil) - :config - (add-to-list 'company-backends 'company-emoji) - (add-hook 'after-make-frame-functions - '--set-emoji-font)) - -(use-package zygospore - :bind - (:map ctl-x-map - ("1" . zygospore-toggle-delete-other-windows))) - -(use-package webjump - :bind - (:map gpolonkai/pers-map - ("j" . webjump))) - -(use-package which-func - :config - (add-hook 'prog-mode-hook - (lambda () - (if (fboundp 'which-function-mode) - (which-function-mode) - (which-func-mode)))) - (setq which-func-unknown "∅")) - (use-package ace-popup-menu :config (ace-popup-menu-mode 1)) -(use-package bind-key) - -(use-package kanban) - (use-package achievements :config (achievements-mode 1)) -(use-package auto-highlight-symbol - :config - (global-auto-highlight-symbol-mode t)) - -(use-package auto-package-update - :config - (setq auto-package-update-interval 7 - auto-package-update-delete-old-versions t) - ;; Let’s do this in after-init-hook, as use-package invocations may modify - ;; the list of installed packages - (add-hook 'after-init-hook 'auto-package-update-maybe)) - -(use-package cookie1 - :demand t - :config - (setq cookie-file (concat user-emacs-directory "fortune-cookies.txt")) - :bind - (:map gpolonkai/pers-map - ("k" . cookie))) - -(use-package ace-mc) - -(use-package dired-k - :bind - (:map dired-mode-map - ("K" . dired-k))) - (use-package form-feed :config (add-hook 'emacs-lisp-mode-hook 'form-feed-mode)) -(use-package anzu - :config - (global-anzu-mode 1)) - (use-package auto-virtualenv :config (add-hook 'python-mode-hook 'auto-virtualenv-set-virtualenv) @@ -666,73 +181,13 @@ INFO plist." (use-package hl-todo) -(use-package glasses - :config - (add-hook 'prog-mode-hook 'glasses-mode)) - -(when (display-graphic-p) - (use-package eshell-fringe-status - :config - (add-hook 'eshell-mode-hook 'eshell-fringe-status-mode))) - -(use-package eshell-prompt-extras - :config - (with-eval-after-load "esh-opt" - (autoload 'epe-theme-lambda "eshell-prompt-extras") - (setq eshell-highlight-prompt nil - eshell-prompt-function 'epe-theme-lambda))) - -(use-package expand-region - :bind - (("C-@" . er/expand-region))) - (use-package anaconda-mode :config (add-hook 'python-mode-hook 'anaconda-mode) (add-hook 'python-mode-hook 'anaconda-eldoc-mode)) -(use-package company-anaconda - :after - company - :config - (add-to-list 'company-backends 'company-anaconda)) - -(use-package mediawiki - :after - id-manager - :config - (add-to-list 'mediawiki-site-alist - '("WikEmacs" - "http://wikemacs.org/wiki/" - (gpolonkai/idm-get-id-for-account "WikEmacs") - (gpolonkai/idm-get-password-for-account "WikEmacs")))) - -(use-package github-notifier - :after - id-manager - :config - (setq github-notifier-token (gpolonkai/idm-get-password-for-account "GitHub")) - (github-notifier-mode)) - -(use-package gist) - -(use-package company-web - :config - (require 'company-web-html)) - (use-package enlive) -(use-package po-mode) - -(use-package dashboard - :after - projectile - :config - (add-to-list 'dashboard-items '(projects . 5) t) - (dashboard-setup-startup-hook)) - -(use-package csharp-mode) - (use-package emmet-mode :config (setq emmet-self-closing-tag-style "")