Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1012 lines (887 sloc) 27.7 KB

Global configutation

Variables

(setq-default fill-column 100)
(scroll-bar-mode -1)

Keep backup files in \~/.emacs.d/backup

(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))
  backup-by-copying t    ; Don't delink hardlinks
  version-control t      ; Use version numbers on backups
  delete-old-versions t  ; Automatically delete excess backups
  kept-new-versions 20   ; how many of the newest versions to keep
  kept-old-versions 5    ; and how many of the old
  )

Key bindings

;(setq mac-command-modifier 'control)
;(setq mac-control-modifier 'command)
;(setq mac-caps-modifiers 'esc)
(set-register ?r '(file . "~/Dropbox/Notes/posts/posts_drafts.org")) ;open with ~C-x r j r~
(setq org-support-shift-select (quote always)) ;Non-nil means make shift-cursor commands select text when possible
(define-key global-map [remap list-buffers] 'buffer-menu-other-window) ;this will move focus to the buffer list when doing ~C-x C-b~

Fontify code blocks

Not sure what it is doing, but had it in the original init file, and don’t think it was implemented anywhere.

;; fontify code in code blocks
(setq org-src-fontify-natively t)

Smooth scrolling

(setq scroll-step 1)
(setq scroll-conservatively 1000)
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1)))
(setq mouse-wheel-progressive-speed nil)
(setq mouse-wheel-follow-mouse t)

Electric Pair Mode

(electric-pair-mode 1)
;; make electric-pair-mode work on more brackets
(setq electric-pair-pairs '(
			    (?\" . ?\")
			    (?\` . ?\`)
			    (?\~ . ?\~)
			    (?\( . ?\))
			    (?\{ . ?\})
			    ) )

Delete selection mode

Act like a modern editor - when making a selection and then starting to type, the selected text will be deleted, and replaced by the new one being typed.

(delete-selection-mode 1)

Funcions

package-list-installed-packages

(setq jpk-packages
      (package-refresh-contents))


(defun package-list-installed-packages ()
  "Like `package-list-packages', but shows only the packages that
  are installed and are not in `jpk-packages'.  Useful for
  cleaning out unwanted packages."
  (interactive)
  (package-show-package-list
   (remove-if-not (lambda (x) (and (not (memq x jpk-packages))
			    (not (package-built-in-p x))
			    (package-installed-p x)))
		  (mapcar 'car package-archive-contents))))

Load init.el

(global-set-key (kbd "<f5>") (lambda() (interactive)(load-file "~/.emacs.d/init.el")))

VI - open line

Reference

Code

(defun vi-open-line-above ()
  "Insert a newline above the current line and put point at beginning."
  (interactive)
  (unless (bolp)
    (beginning-of-line))
  (newline)
  (forward-line -1)
  (indent-according-to-mode))

(defun vi-open-line-below ()
  "Insert a newline below the current line and put point at beginning."
  (interactive)
  (unless (eolp)
    (end-of-line))
  (newline-and-indent))

(defun vi-open-line (&optional abovep)
  "Insert a newline below the current line and put point at beginning.
With a prefix argument, insert a newline above the current line."
  (interactive "P")
  (if abovep
      (vi-open-line-above)
    (vi-open-line-below)))

Keybinding

(define-key global-map [f7] 'vi-open-line)

Rename file on spot

Reference

This is a funcion to change the name of the current buffer. I got it from this stackoverflow thread: http://stackoverflow.com/questions/384284/how-do-i-rename-an-open-file-in-emacs

Code

(defun rename-current-buffer-file ()
  "Renames current buffer and file it is visiting."
  (interactive)
  (let ((name (buffer-name))
	(filename (buffer-file-name)))
    (if (not (and filename (file-exists-p filename)))
	(error "Buffer '%s' is not visiting a file!" name)
      (let ((new-name (read-file-name "New name: " filename)))
	(if (get-buffer new-name)
	    (error "A buffer named '%s' already exists!" new-name)
	  (rename-file filename new-name 1)
	  (rename-buffer new-name)
	  (set-visited-file-name new-name)
	  (set-buffer-modified-p nil)
	  (message "File '%s' successfully renamed to '%s'"
		   name (file-name-nondirectory new-name)))))))

; Define the key-binding
(global-set-key (kbd "C-x C-r") 'rename-current-buffer-file)

Comment or uncomment a line

Reference

Code

(defun comment-or-uncomment-region-or-line ()
    "Comments or uncomments the region or the current line if there's no active region."
    (interactive)
    (let (beg end)
	(if (region-active-p)
	    (setq beg (region-beginning) end (region-end))
	    (setq beg (line-beginning-position) end (line-end-position)))
	(comment-or-uncomment-region beg end)))

Transpose buffer

(defun transpose-buffers (arg)
  "Transpose the buffers shown in two windows."
  (interactive "p")
  (let ((selector (if (>= arg 0) 'next-window 'previous-window)))
    (while (/= arg 0)
      (let ((this-win (window-buffer))
	    (next-win (window-buffer (funcall selector))))
	(set-window-buffer (selected-window) next-win)
	(set-window-buffer (funcall selector) this-win)
	(select-window (funcall selector)))
      (setq arg (if (plusp arg) (1- arg) (1+ arg))))))

Show file name and path

(defun show-file-name ()
  "Show the full path file name in the minibuffer."
  (interactive)
  (message (buffer-file-name))
  (kill-new (file-truename buffer-file-name))
)
(global-set-key "\C-cz" 'show-file-name)

Packages

El-get

;;; Load el-get to path, otherwise use-package won't work
(add-to-list 'load-path "~/.emacs.d/el-get/el-get/")

(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")
    (goto-char (point-max))
    (eval-print-last-sexp)))
(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")
(el-get 'sync)

Exec-Path-From-Shell

Get environment variables such as $PATH from the shell

(use-package exec-path-from-shell
:ensure t
)

Persistent sctratch

Learned about this package here. In essence, it keeps the content of the scratch buffer accross sessions. This way I can put things in scratch without losing them. Github repository

(use-package persistent-scratch
:ensure t
:config
  (persistent-scratch-setup-default)
)

Deft

Reference

http://jblevins.org/projects/deft/

Package loading

;; Deft (this is an nvAlt like plugin)

(use-package deft
:ensure t
:init
:config
(setq deft-default-extension "md")
(setq deft-extensions '("org" "tlxt" "text" "md" "markdown"))
(setq deft-directory "~/Dropbox/Notes/")
(setq deft-archive-directory "~/Dropbox/Notes/archive/")
(setq deft-text-mode 'markdown-mode)
(setq deft-use-filename-as-title t)
(setq deft-use-filter-string-for-filename t)
;(setq deft-recursive t)  ;this will search also within sub-directories
)

Keybindings

(global-set-key [f8] 'deft); open Deft with F8
(global-set-key (kbd "C-x C-g") 'deft-new-file)

Dired-x

Package loading

(autoload 'dired-jump "dired-x"
  "Jump to Dired buffer corresponding to current buffer." t)

(autoload 'dired-jump-other-window "dired-x"
  "Like \\[dired-jump] (dired-jump) but in other window." t)

(define-key global-map "\C-x\C-j" 'dired-jump)
(define-key global-map "\C-x4\C-j" 'dired-jump-other-window)

htmlize

Package loading

(use-package htmlize
:ensure t)

Ace Jump Mode

Package loading

(use-package ace-jump-mode
:ensure t
:init
(bind-key "C-c C-," 'ace-jump-mode))

Magit

Documentation

Load package

(use-package magit
:ensure t
:init
(global-set-key (kbd "C-x g") 'magit-status))

org2blog

Loading package

;(use-package org2blog
;:ensure t)

(setq org2blog/wp-blog-alist
      '(("prodissues.com"
	 :url "http://prodissues.com/xmlrpc.php"
	 :username "yaniv"
	 :default-title "Hello World"
	 :default-categories ("org2blog" "emacs")
	 :tags-as-categories nil)
	("localhost"
	 :url "http://localhost:8888/xmlrpc.php"
	 url: "localhost:8888/xmlrpc.php"
	 :username "yaniv")))

Ivy-mode

Reference

Load package

(use-package swiper
:ensure t
:init
(ivy-mode 1)
(global-set-key "\C-s" 'swiper)
(setq ivy-use-virtual-buffers t)
(setq ivy-count-format "(%d/%d) "))

Avy-mode

(use-package avy
:ensure t
:config
(global-set-key (kbd "C-c j") 'avy-goto-word-or-subword-1)
(global-set-key (kbd "s-.") 'avy-goto-word-or-subword-1)
(global-set-key (kbd "s-w") 'ace-window)
)

yasnippets

(use-package yasnippet
:ensure t
:init
(yas-global-mode 1))

Abbrev

;; Note that emacs chooses, by default, the filename
;; "~/.abbrev_defs", so don't try to be too clever
;; by changing its name
(setq-default abbrev-mode t)
(read-abbrev-file "~/.emacs.d/.abbrev_defs")
(setq save-abbrevs t)

Undo-tree

Reference

cestlaz

Package loading

(use-package undo-tree
:ensure t
:init
(global-undo-tree-mode)
)

Writing aids

Ispell

;; Add path to homebrew packages (that's where ispell installed)
(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
(setq exec-path (append exec-path '("/usr/local/bin")))

Typewriter mode

  • If there are any problems with that mode, for example cursor move to a new line every so often, make sure that the following variables aren’t set to true:

mode-require-final-newline require-final-newline

Load package

 (use-package draft-mode
 :ensure t
)

Dictionaries

External dictionary

(autoload 'ispell-get-word "ispell")
(defun lookup-word (word)
  (interactive (list (save-excursion (car (ispell-get-word nil)))))
  (browse-url (format "http://en.wiktionary.org/wiki/%s" word)))

(global-set-key (kbd "M-#") 'lookup-word)

Synosaurus

Load package

(use-package synosaurus
:ensure t)

synonymous

Load package

(use-package synonymous
:ensure t)

Keybinding

(global-set-key (kbd "C-c s") 'synonymous-synonyms)
(global-set-key (kbd "C-c S") 'synonymous-antonyms)

define-word package

Load package

(use-package define-word
  :ensure t
  :pin melpa)

Keybinding

(global-set-key (kbd "C-c d") 'define-word-at-point)
(global-set-key (kbd "C-c D") 'define-word)

wordsmith-mode

This is an iA Writer alternative for Emacs. It’s a gramaric syntax highlighter. I use it when writing anything that isn’t code, to get an overview of the verbs, nouns and adjectives that I’ve used.

Reference

Package loading

(use-package wordsmith-mode
:ensure t)

Fronend developement

HTML and CSS

emmet

*****Package loading

(use-package emmet-mode
:ensure t
:config
(add-hook 'sgml-mode-hook 'emmet-mode) ;; Auto-start on any markup modes
(add-hook 'css-mode-hook  'emmet-mode) ;; enable Emmet's css abbreviation.
)

php

(use-package php-mode
:ensure t)

MoveText

Enables moving text around using M-up and M-down, as possible in org-mode.

Reference

Github

Package loading

(use-package move-text
:ensure t
:config
(move-text-default-bindings))

Visual Fill Column

(use-package visual-fill-column
  :ensure t
  :defer t
  :bind (("C-c t v" . visual-fill-column-mode))
  :init
  (dolist (hook '(visual-line-mode-hook
		  prog-mode-hook
		  text-mode-hook))
    (add-hook hook #'visual-fill-column-mode))
  :config (setq-default visual-fill-column-center-text t
			visual-fill-column-fringes-outside-margins nil))

Writeroom-mode

(use-package writeroom-mode
:ensure t
)

Modes

Markdown

;; Markdown mode
;; Markdown
(autoload 'markdown-mode "markdown-mode"
   "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.text\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.txt\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
(put 'narrow-to-region 'disabled nil)

Org

Package loading

;; Agenda files
(setq org-agenda-files (list "~/Dropbox/Notes/"))

;;keybindings
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(setq org-log-done t)

Babel

Need to tell babel which languages it should recognize

; Some initial langauges we want org-babel to support
(org-babel-do-load-languages
 'org-babel-load-languages
 '(
   (sh . t)
   (js . t)
   (python . t)
   (ruby . t)
   (sqlite . t)
   (perl . t)
   (dot . t)
))

Refiling subtree to other file

My usecase - I keep all my drafts in one big org file (available here). What I want to be able to do is once finishing to write a post, move it with all its footnotes to a new file, that will turn out to be the post file that is then exported to and processed by Pelican.

Here’s a function I found, that claims to do just that:

(setq org-refile-targets '(
   (nil :maxlevel . 2)             ; refile to headings in the current buffer
   (org-agenda-files :maxlevel . 2) ; refile to any of these files
    ))

Here’s another function

Source - http://superuser.com/a/568300/525565 This one works. The only problem is that it doesn’t move the footnotes with the subtrees.

(require 'org-element)

(defun me/org-file-from-subtree (&optional name)
"Cut the subtree currently being edited and create a new file
from it.

If called with the universal argument, prompt for new filename,
otherwise use the subtree title."
  (interactive "P")
  (org-back-to-heading)
  (let ((filename (cond
		   (current-prefix-arg
		    (expand-file-name
		     (read-file-name "New file name: ")))
		   (t
		    (concat
		     (expand-file-name
		      (org-element-property :title
					    (org-element-at-point))
		      default-directory)
		     ".org")))))
    (org-cut-subtree)
    (find-file-noselect filename)
    (with-temp-file filename
      (org-mode)
      (yank))))

Org-Reveal

Repo

https://github.com/yjwen/org-reveal

Package loading

(use-package ox-reveal
:ensure t
:config
(setq org-reveal-root "~/dev/reveal/reveal.js"))

Org-preview-html

(use-package org-preview-html
:ensure t
)

Email

Mu4e

;; the exact path may differ -- check it
(add-to-list 'load-path "/usr/local/Cellar/mu/mu4e")
(setq mu4e-mu-binary (executable-find "/usr/local/Cellar/mu/mu/mu"))

(require  'mu4e)

;; default
(setq mu4e-maildir (expand-file-name "~/Maildir"))
(setq mu4e-drafts-folder "/drafts")
(setq mu4e-sent-folder "/sent")
(setq mu4e-trash-folder "/trash")
(setq mu4e-refile-folder "/all")

;; don't save message to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'delete)

;; (See the documentation for `mu4e-sent-messages-behavior' if you have
;; additional non-Gmail addresses and want assign them different
;; behavior.)

;; setup some handy shortcuts
;; you can quickly switch to your Inbox -- press ``ji''
;; then, when you want archive some messages, move them to
;; the 'All Mail' folder by pressing ``ma''.

(setq mu4e-maildir-shortcuts
      '( ("/inbox"               . ?i)
         ("/sent"   . ?s)
         ("/trash"       . ?t)
	 ("/all"       . ?a)
         ("/drafts"    . ?d)))

;; allow for updating mail using 'U' in the main view:
(setq mu4e-get-mail-command "mbsync -a"
mu4e-update-interval 300)             ;; update every 5 minutes)

;; something about ourselves
(setq
   user-mail-address "yanivdll@gmail.com"
   user-full-name  "Yaniv Gilad"
   mu4e-compose-signature
    (concat
      "--\n"
      "http://prodissues.com\n"))

;; alternatively, for emacs-24 you can use:
(setq message-send-mail-function 'smtpmail-send-it
     smtpmail-stream-type 'ssl
     smtpmail-auth-credentials (expand-file-name "~/.authinfo.gpg")
     smtpmail-default-smtp-server "smtp.gmail.com"
     smtpmail-smtp-server "smtp.gmail.com"
     smtpmail-smtp-service 465)

;; don't save messages to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'delete)

;; don't keep message buffers around
(setq message-kill-buffer-on-exit t)

;; skipping duplicate messages (due to the way the labels / virtual folders in Gmail are represented)
(setq mu4e-headers-skip-duplicates t)

Adding support for html emails

;; use Emac's 24.4 shr html renderer
(require 'mu4e-contrib)
(setq mu4e-html2text-command 'mu4e-shr2text)

;; define keybindings for intuitive link navigation within an email, using tab and backtab (shift-tab)
(add-hook 'mu4e-view-mode-hook
  (lambda()
     ;; try to emulate some of the eww key-bindings
    (local-set-key (kbd "<tab>") 'shr-next-link)
    (local-set-key (kbd "<backtab>") 'shr-previous-link)))

Additional customizations

;; Set the number of messages to show on the header view, when in split view
(setq mu4e-headers-visible-lines 12)

;; smart From/To field in the headers view
(setq mu4e-user-mail-address-list '("yanivdll@gmail.com" "yanivalerts@gmail.com"))

;; Saving attachments to a specific folder
(setq mu4e-attachment-dir  "~/Downloads")

;; enable inline images
(setq mu4e-view-show-images t)
;; use imagemagick, if available
(when (fboundp 'imagemagick-register-types)
   (imagemagick-register-types))

;; enable attachments from dired

(require 'gnus-dired)
;; make the `gnus-dired-mail-buffers' function also work on
;; message-mode derived modes, such as mu4e-compose-mode
(defun gnus-dired-mail-buffers ()
  "Return a list of active message buffers."
  (let (buffers)
    (save-current-buffer
      (dolist (buffer (buffer-list t))
	(set-buffer buffer)
	(when (and (derived-mode-p 'message-mode)
		(null message-sent-message-via))
	  (push (buffer-name buffer) buffers))))
    (nreverse buffers)))

(setq gnus-dired-mail-mode 'mu4e-user-agent)
(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)

Python

Elpy

(add-to-list 'package-archives
	     '("elpy" . "http://jorgenschaefer.github.io/packages/"))
(package-initialize)
(elpy-enable)
(setq pyvenv-activate "/Users/ygilad/.pyenv/versions/")

Pyenv-mode

I try to use it so I can have the pyenv working with elpy

(use-package pyenv-mode
:ensure t
)
(defun ssbb-pyenv-hook ()
"AutomAtically activates pyenv version if .python-version file exists."
(f-traverse-upwards
(lambda (path)
  (let ((pyenv-version-path (f-expand ".python-version" path)))
    (if (f-exists? pyenv-version-path)
	(pyenv-mode-set (s-trim (f-read-text pyenv-version-path 'utf-8))))))))

(add-hook 'find-file-hook 'ssbb-pyenv-hook)

; I'm using pyenv python so add shims path to exec-path
(add-to-list 'exec-path "~/.pyenv/shims")

(package-initialize)
(elpy-enable)

Set parser to work with python3 (INACTIVE)

The following re-defines the python-shell-parse-command. Currently, when I’m in a python file, and type C-c C-c, I get the prompt “/usr/bin/python -i”, which evaluate the file using python2.7.

(require 'python)
(defun python-shell-parse-command ()
  "Return the string used to execute the inferior Python process."
  "python3 -i"
  )

Node.js

(use-package js2-mode
:ensure t
:config
(add-hook 'js-mode-hook 'js2-minor-mode)
)

;; add it as the major mode for JS
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))

;; auto-complete
(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-20160827.649")
; Load the default configuration
(require 'auto-complete-config)
; Make sure we can find the dictionaries
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elpa/auto-complete-20160827.64/dict")
; Use dictionaries by default
(setq-default ac-sources (add-to-list 'ac-sources 'ac-source-dictionary))
(global-auto-complete-mode t)
; Start auto-completion after 2 characters of a word
(setq ac-auto-start 2)
; case sensitivity is important when finding matches
(setq ac-ignore-case nil)

Look and feel

Themes

Disable all other themes before enabling a new one.

This should help avoide unwanted inheritance between different themes, and the unexpected results of that.

;;; Disable all themes before loading a new one
(defadvice load-theme (before theme-dont-propagate activate)
 (mapc 'disable-theme custom-enabled-themes))

solarized-emacs (INACTIVE)

Repo

https://github.com/bbatsov/solarized-emacs

Load theme

(use-package solarized-theme
:ensure t
:init
(load-theme 'solarized-light t)
(setq solarized-scale-org-headlines nil))

Dichromacy (INACTIVE)

(load-theme 'dichromacy t)

Spacemacs (INACTIVE)

GitHub

(use-package spacemacs-common
    :ensure spacemacs-theme
    :config (load-theme 'spacemacs-light t))

Colors

Change the background color

I like the background color Xah uses in his screenshots, and he provided me with the settings.

(set-background-color "honeydew")

Fonts

Reference

Input font

Settings

;; Define fonts
;;(setq myfont "Input")
(setq myfont "monospace")

;; Implement the active font
(set-face-attribute 'default nil :font myfont :height 144)

Smart-line-mode

(use-package smart-mode-line
:ensure t
:init
(sml/setup)
)

Display emojies

(use-package emojify
:ensure t
:init
(add-hook 'after-init-hook #'global-emojify-mode)
)

Internet Relay Chat

IRC is a great way to hang out with other Emacs geeks.

(use-package erc
  :ensure t :defer t
  :config
  (setq erc-hide-list '("PART" "QUIT" "JOIN"))
  (setq erc-autojoin-channels-alist '(("freenode.net"
					   "#org-mode"
					   "#emacs"
	     "#emacs-beginners"))
	    erc-server "irc.freenode.net"
	    erc-nick "yanivg"))

Temp

Multiple cursors

Reference

Package loading

(use-package multiple-cursors
:ensure t
:pin melpa)

(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)

Expand-region

Reference

Package loading

(use-package expand-region
:ensure t
:init
(global-set-key (kbd "C-=") 'er/expand-region))

Org-pomodoro

Github

(use-package org-pomodoro
  :ensure t
  :commands (org-pomodoro)
  :config
    (setq alert-user-configuration (quote ((((:category . "org-pomodoro")) libnotify nil)))))

Sequence diagram

(use-package wsd-mode
:ensure t
)

Inactive packages

Plugins

;; path to where plugins are kept
;;(setq plugin-path "~/.emacs.d/lisp/")
(let ((default-directory "~/.emacs.d/lisp/"))
  (normal-top-level-add-subdirs-to-load-path))

Evil (INACTIVE)

Package loading

;; Evil mode

(use-package evil
;:ensure t  ;I commented this out because it kept downloading it from elpa, where there is an old version
:config
(evil-mode 1)
)

Key bindings

; Modify keybindings for N state
(define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line)
(define-key evil-normal-state-map (kbd "$") 'evil-end-of-visual-line)
(define-key evil-normal-state-map (kbd "0") 'evil-beginning-of-visual-line)

; Modify keybindings for V state
(define-key evil-visual-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-visual-state-map (kbd "k") 'evil-previous-visual-line)
(define-key evil-visual-state-map (kbd "$") 'evil-end-of-visual-line)
(define-key evil-visual-state-map (kbd "0") 'evil-beginning-of-visual-line)

;When in deft this keybinding will open the note in another window
(define-key evil-normal-state-map (kbd "C-o")'deft-open-file-other-window)

Load chord-keys to allow ‘dd’ to delete visual line

centered-cursor (INACTIVE)

Reference

Package loading

I’ve inactivated it because it caused to a wacky experience when scrolling down the screen and reaching the bottom.

(use-package centered-cursor-mode
:ensure t
:pin melpa
:config
(global-centered-cursor-mode +1))

Boon (command mode)

(use-package boon
:ensure t
:init
(require 'boon-qwerty)
:config
(boon-mode)
)

Auto complete (INACTIVE)

Keybindings

  • M-n and M-p to select
  • RET to complete
  • F1 to open help in other buffer
  • C-s to filter the auto-complete options

Package loading

(use-package auto-complete
  :ensure t
  :config (global-auto-complete-mode t))