diff --git a/README.md b/README.md
index 06a8831..50f78d9 100644
--- a/README.md
+++ b/README.md
@@ -232,6 +232,8 @@ Keybinding | Description
C-c t | Open a terminal emulator (`ansi-term`).
C-c k | Kill all open buffers except the one you're currently in.
C-c h | Open Helm (a useful means of navigating your buffers and project files).
+C-c + | Increment integer at point.
+C-c - | Decrement integer at point.
Super-r | Recent files
Super-x | Expand region
Super-j | Join lines
diff --git a/core/prelude-core.el b/core/prelude-core.el
index 3f2d033..1962e20 100644
--- a/core/prelude-core.el
+++ b/core/prelude-core.el
@@ -453,5 +453,66 @@ Doesn't mess with special buffers."
(prelude-recompile-init)
(message "Update finished. Restart Emacs to complete the process.")))
+(defun thing-at-point-goto-end-of-integer ()
+ "Go to end of integer at point."
+ (let ((inhibit-changing-match-data t))
+ ;; Skip over optional sign
+ (when (looking-at "[+-]")
+ (forward-char 1))
+ ;; Skip over digits
+ (skip-chars-forward "[[:digit:]]")
+ ;; Check for at least one digit
+ (unless (looking-back "[[:digit:]]")
+ (error "No integer here"))))
+(put 'integer 'beginning-op 'thing-at-point-goto-end-of-integer)
+
+(defun thing-at-point-goto-beginning-of-integer ()
+ "Go to end of integer at point."
+ (let ((inhibit-changing-match-data t))
+ ;; Skip backward over digits
+ (skip-chars-backward "[[:digit:]]")
+ ;; Check for digits and optional sign
+ (unless (looking-at "[+-]?[[:digit:]]")
+ (error "No integer here"))
+ ;; Skip backward over optional sign
+ (when (looking-back "[+-]")
+ (backward-char 1))))
+(put 'integer 'beginning-op 'thing-at-point-goto-beginning-of-integer)
+
+(defun thing-at-point-bounds-of-integer-at-point ()
+ "Get boundaries of integer at point."
+ (save-excursion
+ (let (beg end)
+ (thing-at-point-goto-beginning-of-integer)
+ (setq beg (point))
+ (thing-at-point-goto-end-of-integer)
+ (setq end (point))
+ (cons beg end))))
+(put 'integer 'bounds-of-thing-at-point 'thing-at-point-bounds-of-integer-at-point)
+
+(defun thing-at-point-integer-at-point ()
+ "Get integer at point."
+ (let ((bounds (bounds-of-thing-at-point 'integer)))
+ (string-to-number (buffer-substring (car bounds) (cdr bounds)))))
+(put 'integer 'thing-at-point 'thing-at-point-integer-at-point)
+
+(defun prelude-increment-integer-at-point (&optional inc)
+ "Increment integer at point by one.
+
+With numeric prefix arg INC, increment the integer by INC amount."
+ (interactive "p")
+ (let ((inc (or inc 1))
+ (n (thing-at-point 'integer))
+ (bounds (bounds-of-thing-at-point 'integer)))
+ (delete-region (car bounds) (cdr bounds))
+ (insert (int-to-string (+ n inc)))))
+
+(defun prelude-decrement-integer-at-point (&optional dec)
+ "Decrement integer at point by one.
+
+With numeric prefix arg DEC, decrement the integer by DEC amount."
+ (interactive "p")
+ (prelude-increment-integer-at-point (- (or dec 1))))
+
(provide 'prelude-core)
;;; prelude-core.el ends here
diff --git a/core/prelude-mode.el b/core/prelude-mode.el
index d1db0aa..cb3343d 100644
--- a/core/prelude-mode.el
+++ b/core/prelude-mode.el
@@ -60,6 +60,8 @@
(define-key map (kbd "C-c k") 'prelude-kill-other-buffers)
(define-key map (kbd "C-c TAB") 'prelude-indent-rigidly-and-copy-to-clipboard)
(define-key map (kbd "C-c h") 'helm-prelude)
+ (define-key map (kbd "C-c +") 'prelude-increment-integer-at-point)
+ (define-key map (kbd "C-c -") 'prelude-decrement-integer-at-point)
;; make some use of the Super key
(define-key map [?\s-d] 'projectile-find-dir)
(define-key map [?\s-p] 'projectile-switch-project)
@@ -99,7 +101,9 @@
["Duplicate line or region" prelude-duplicate-current-line-or-region]
["Indent rigidly and copy to clipboard" prelude-indent-rigidly-and-copy-to-clipboard]
["Insert date" prelude-insert-date]
- ["Eval and replace" prelude-eval-and-replace])
+ ["Eval and replace" prelude-eval-and-replace]
+ ["Increment integer at point" prelude-increment-integer-at-point]
+ ["Decrement integer at point" prelude-decrement-integer-at-point])
("Navigation"
["Helm" helm-prelude])