I recently started using Emacs, specifically, the community Spacemacs distribution. Here are some of the most useful functions I have found so far. For the latest version, please consult my dotfiles on Github.
Visual Line Mode
I prefer soft wrapping my lines. Note two parts of this configuration. Firstly, I set variables that make buffers soft wrap. Next, I change my evil binds to operate on visual lines rather than logical lines.
(setq word-wrap 1) (global-visual-line-mode t) ;; Make evil-mode up/down operate in screen lines instead of logical lines (define-key evil-motion-state-map "j" 'evil-next-visual-line) (define-key evil-motion-state-map "k" 'evil-previous-visual-line) ;; Also in visual mode (define-key evil-visual-state-map "j" 'evil-next-visual-line) (define-key evil-visual-state-map "k" 'evil-previous-visual-line)
Insert date/timestamp Emacs Keybinding
I find this function to be very useful and was surprised it wasn’t already in emacs. Bind to whatever you would like and get a date.
(defun insert-current-datetime () (interactive) (insert (shell-command-to-string "echo -n $(date '+%A (%B %d) @ %H:%m')"))) (global-set-key "\C-x\M-d" `insert-current-datetime)
Open Orgmode heading in right window
I found this gem from Stack. Essentially, I wanted a way to quickly preview the contents of the org heading content in the right window. Sadly, in its current form it does break links.
(defun org-tree-open-in-right-frame () (interactive) (org-tree-to-indirect-buffer) (windmove-right)) (add-hook 'org-mode-hook (lambda () (define-key evil-normal-state-local-map (kbd "S-<return>") 'org-tree-open-in-right-frame) (define-key evil-normal-state-local-map (kbd "<return>") 'org-tree-to-indirect-buffer) ))
Toggle NeoTree for Directory Viewing
I find this provides a more natural IDE experience
(global-set-key [f8] 'neotree-toggle)
General Config (old)
I think these are quite sensible defaults for new users using Emacs for Orgmode.
(setq save-interprogram-paste-before-kill t) (setq cua-keep-region-after-copy t) ;; Standard Windows behaviour (transient-mark-mode 1) ;; No region when it is not highlighted (cua-mode t) (setq cua-auto-tabify-rectangles nil) ;; Don't tabify after rectangle commands (define-key cua-global-keymap [C-return] nil) ;;rebind rectangle mark as I want to use C-return for R/ESS and (delete-selection-mode 1) (setf org-blank-before-new-entry '((heading . nil) (plain-list-item . nil))) (setq org-bullets-mode nil) (setq org-blank-before-new-entry nil) (setq org-support-shift-select t) (define-key org-mode-map (kbd "C-M-<return>") 'org-insert-subheading)
Smooth Scrolling in Spacemacs
This seems to do the job on all my computers
;; Scrolling (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse (setq scroll-step 1) ;; keyboard scroll one line at a time
Move lines up and down with alt-arrow key in Spacemacs
Does the job - jobs’a’job
;; M-up and M-down move lines (defun move-line (n) "Move the current line up or down by N lines." (interactive "p") (setq col (current-column)) (beginning-of-line) (setq start (point)) (end-of-line) (forward-char) (setq end (point)) (let ((line-text (delete-and-extract-region start end))) (forward-line n) (insert line-text) ;; restore point to original column in moved line (forward-line -1) (forward-char col))) (defun move-line-up (n) "Move the current line up by N lines." (interactive "p") (move-line (if (null n) -1 (- n)))) (defun move-line-down (n) "Move the current line down by N lines." (interactive "p") (move-line (if (null n) 1 n))) (global-set-key (kbd "M-<up>") 'move-line-up) (global-set-key (kbd "M-<down>") 'move-line-down)