aboutsummaryrefslogtreecommitdiffstats
path: root/modules/init-nlinum.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/init-nlinum.el')
-rw-r--r--modules/init-nlinum.el106
1 files changed, 106 insertions, 0 deletions
diff --git a/modules/init-nlinum.el b/modules/init-nlinum.el
new file mode 100644
index 0000000..be26193
--- /dev/null
+++ b/modules/init-nlinum.el
@@ -0,0 +1,106 @@
+;;; init-nlinum.el --- .Emacs Configuration -*- lexical-binding: t -*-
+;;; Commentary:
+;;
+
+;;; Code:
+;;----------------------------------------------------------------------------
+;; Line numbers
+;;----------------------------------------------------------------------------
+;; Linum snippets from: https://www.emacswiki.org/emacs/LineNumbers
+(use-package nlinum
+ :config
+ (add-hook 'find-file-hook (lambda () (linum-mode 1)))
+ (linum-mode)
+ (setq global-linum-mode t))
+
+(use-package linum)
+(use-package hl-line)
+
+(defface my-linum-hl
+ `((t :inherit linum :background ,(face-background 'hl-line nil t)))
+ "Face for the current line number."
+ :group 'linum)
+(add-hook 'linum-before-numbering-hook 'my-linum-get-format-string)
+
+(defun my-linum-get-format-string ()
+ "Format the string of the column in the buffer.
+It helps to show the numbering plus a separation bar."
+ (let* ((width (1+ (length (number-to-string
+ (count-lines (point-min) (point-max))))))
+ (format (concat "%" (number-to-string width) "d \u2502")))
+ (setq my-linum-format-string format)))
+
+(defvar my-linum-current-line-number 0)
+
+(defun my-linum-format (line-number)
+ "Defines LINE-NUMBER the numbering format of each.
+this helps maintain the format in the numbering"
+ (propertize (format my-linum-format-string line-number) 'face
+ (if (eq line-number my-linum-current-line-number)
+ 'my-linum-hl
+ 'linum)))
+(setq linum-format 'my-linum-format)
+
+(defadvice linum-update (around my-linum-update)
+ "Defines LINUM-UPDATE for update lines.
+this helps maintain the format in the numbering"
+ (let ((my-linum-current-line-number (line-number-at-pos)))
+ ad-do-it))
+(ad-activate 'linum-update)
+
+(defvar *linum-mdown-line* nil)
+
+(defun line-at-click ()
+ "Funtions for position lines.
+this helps maintain the move visual."
+ (save-excursion
+ (let ((click-y (cdr (cdr (mouse-position))))
+ (line-move-visual-store line-move-visual))
+ (setq line-move-visual t)
+ (goto-char (window-start))
+
+ (with-no-warnings
+ (next-line (1- click-y)))
+
+ (setq line-move-visual line-move-visual-store)
+ ;; If you are using tabbar substitute the next line with
+ ;; (line-number-at-pos))))
+ (1+ (line-number-at-pos)))))
+
+(defun md-select-linum ()
+ "Funtions for position lines.
+this helps maintain the move visual."
+ (interactive)
+ (with-no-warnings
+ (goto-line (line-at-click)))
+ (set-mark (point))
+ (setq *linum-mdown-line*
+ (line-number-at-pos)))
+
+(defun mu-select-linum ()
+ "Funtions for position lines.
+this helps maintain the move visual."
+ (interactive)
+ (when *linum-mdown-line*
+ (let (mu-line)
+ ;; (goto-line (line-at-click))
+ (setq mu-line (line-at-click))
+ (with-no-warnings
+ (goto-line (max *linum-mdown-line* mu-line)))
+
+ (set-mark (line-end-position))
+ (with-no-warnings
+ (goto-line (min *linum-mdown-line* mu-line)))
+ (setq *linum-mdown*
+ nil))))
+
+(global-set-key (kbd "<left-margin> <down-mouse-1>") 'md-select-linum)
+(global-set-key (kbd "<left-margin> <mouse-1>") 'mu-select-linum)
+(global-set-key (kbd "<left-margin> <drag-mouse-1>") 'mu-select-linum)
+
+(provide 'init-nlinum)
+
+;; Local Variables:
+;; byte-compile-warnings: (not free-vars)
+;; End:
+;;; init-nlinum.el ends here