107 lines
3.3 KiB
EmacsLisp
107 lines
3.3 KiB
EmacsLisp
;;; 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
|