More stuff
This commit is contained in:
parent
2b5cba96ec
commit
89dccfb79e
226
init.el
226
init.el
@ -11,7 +11,15 @@
|
||||
(require 'use-package)
|
||||
(setq use-package-always-ensure t) ;; Auto-install packages
|
||||
|
||||
;; Bell Settings
|
||||
;; autosave everything!!
|
||||
(use-package super-save
|
||||
:config
|
||||
(super-save-mode +1))
|
||||
|
||||
|
||||
;;
|
||||
;; UI enhancements
|
||||
;;
|
||||
(setq ring-bell-function 'ignore)
|
||||
(setq visible-bell t)
|
||||
|
||||
@ -19,7 +27,7 @@
|
||||
(set-face-attribute 'default nil
|
||||
:family "Hurmit Nerd Font Mono"
|
||||
:foundry "PfEd"
|
||||
:height 120
|
||||
:height 140
|
||||
:background "#000000"
|
||||
:foreground "#ffffff")
|
||||
|
||||
@ -32,59 +40,72 @@
|
||||
(scroll-bar-mode -1)
|
||||
(global-display-line-numbers-mode 1)
|
||||
|
||||
(use-package super-save
|
||||
:ensure t
|
||||
(use-package beacon
|
||||
:defer 2
|
||||
:config
|
||||
(super-save-mode +1))
|
||||
(beacon-mode 1))
|
||||
|
||||
;; magit
|
||||
(use-package magit
|
||||
:ensure t)
|
||||
|
||||
;; Packages with deferred loading
|
||||
(use-package helm
|
||||
:defer 1
|
||||
:bind (("M-x" . helm-M-x)
|
||||
("C-c h" . helm-command-prefix))
|
||||
(use-package dashboard
|
||||
:config
|
||||
(global-unset-key (kbd "C-x c"))
|
||||
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
|
||||
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
|
||||
(define-key helm-map (kbd "C-z") 'helm-select-action)
|
||||
(when (executable-find "curl")
|
||||
(setq helm-google-suggest-use-curl-p t))
|
||||
(setq helm-split-window-in-side-p t
|
||||
helm-move-to-line-cycle-in-source t
|
||||
helm-ff-search-library-in-sexp t
|
||||
helm-scroll-amount 8
|
||||
helm-ff-file-name-history-use-recentf t
|
||||
helm-echo-input-in-header-line t
|
||||
helm-autoresize-max-height 0
|
||||
helm-autoresize-min-height 20)
|
||||
(helm-autoresize-mode 1)
|
||||
(helm-mode 1))
|
||||
(dashboard-setup-startup-hook)
|
||||
|
||||
(use-package catppuccin-theme
|
||||
:config
|
||||
(setq catppuccin-flavor 'macchiato)
|
||||
(load-theme 'catppuccin t)
|
||||
(add-hook 'after-init-hook (lambda () (run-with-timer 0.5 nil #'catppuccin-reload))))
|
||||
|
||||
(use-package which-key
|
||||
:defer 1
|
||||
:config
|
||||
(setq which-key-idle-delay 0.01
|
||||
which-key-idle-secondary-delay 0.01)
|
||||
(which-key-setup-side-window-right-bottom)
|
||||
(which-key-mode))
|
||||
(setq dashboard-projects-backend 'projectile)
|
||||
(setq dashboard-items '((recents . 5)
|
||||
(bookmarks . 5)
|
||||
(projects . 5)
|
||||
(agenda . 5)
|
||||
(registers . 5)))
|
||||
;; (use-package nerd-icons)
|
||||
;; (setq dashboard-display-icons-p t) ; display icons on both GUI and terminal
|
||||
;; (setq dashboard-icon-type 'nerd-icons) ; use `nerd-icons' package
|
||||
;; (setq dashboard-set-heading-icons t)
|
||||
;; (setq dashboard-set-file-icons t)
|
||||
(use-package page-break-lines))
|
||||
|
||||
(use-package git-gutter
|
||||
:defer 2
|
||||
:config
|
||||
(global-git-gutter-mode +1))
|
||||
|
||||
(use-package catppuccin-theme
|
||||
:config
|
||||
(setq catppuccin-flavor 'macchiato)
|
||||
(load-theme 'catppuccin t)
|
||||
(add-hook 'after-init-hook (lambda () (run-with-timer 0.5 nil #'catppuccin-reload)))
|
||||
)
|
||||
|
||||
(use-package which-key
|
||||
:defer 1
|
||||
:config
|
||||
(setq which-key-idle-delay 0
|
||||
which-key-idle-secondary-delay 0)
|
||||
(which-key-setup-side-window-right-bottom)
|
||||
(which-key-mode))
|
||||
|
||||
;; cleaner modeline
|
||||
(use-package mood-line
|
||||
:config
|
||||
(mood-line-mode)
|
||||
;:custom ()
|
||||
)
|
||||
|
||||
;;
|
||||
;; MEOW!!
|
||||
;;
|
||||
(use-package meow
|
||||
:config
|
||||
;; Add selection back after using meow-save
|
||||
(defun my/after-meow-save (&rest _args)
|
||||
"Reactivate the selection after saving."
|
||||
(let ((selection (meow--make-selection
|
||||
'select
|
||||
(region-beginning)
|
||||
(region-end))))
|
||||
(meow--select selection)))
|
||||
|
||||
(advice-add 'meow-save :after #'my/after-meow-save)
|
||||
(advice-add 'meow-clipboard-save :after #'my/after-meow-save)
|
||||
|
||||
(defvar meow-lsp-keymap
|
||||
(let ((keymap (make-sparse-keymap)))
|
||||
(define-key keymap (kbd "d") #'xref-find-definitions)
|
||||
@ -119,10 +140,11 @@
|
||||
'("8" . meow-digit-argument)
|
||||
'("9" . meow-digit-argument)
|
||||
'("0" . meow-digit-argument)
|
||||
'("/" . helm-do-grep-ag)
|
||||
'("/" . projectile-ripgrep)
|
||||
'("a" . eglot-code-actions)
|
||||
'("b" . helm-mini)
|
||||
'("f" . helm-find-files))
|
||||
'("f" . projectile-find-file)
|
||||
'("d" . helm-find-files))
|
||||
(meow-normal-define-key
|
||||
'("0" . meow-expand-0)
|
||||
'("1" . meow-expand-1)
|
||||
@ -142,6 +164,9 @@
|
||||
'("[" . meow-beginning-of-thing)
|
||||
'("]" . meow-end-of-thing)
|
||||
'("/" . meow-visit)
|
||||
'(">" . meow-indent)
|
||||
'("<" . meow-indent)
|
||||
'("%" . mark-whole-buffer)
|
||||
'("a" . meow-append)
|
||||
'("A" . meow-open-below)
|
||||
'("b" . meow-back-word)
|
||||
@ -185,29 +210,112 @@
|
||||
'("." . repeat)
|
||||
'("~" . upcase-region)
|
||||
'("`" . downcase-region)
|
||||
'("<up>" . windmove-up)
|
||||
'("<down>" . windmove-down)
|
||||
'("<left>" . windmove-left)
|
||||
'("<right>" . windmove-right)
|
||||
'("<escape>" . ignore)))
|
||||
|
||||
(meow-setup)
|
||||
(meow-global-mode 1))
|
||||
|
||||
;; Lazy load other packages that are only needed for specific file types
|
||||
(use-package markdown-mode :defer t)
|
||||
(use-package go-mode :defer t)
|
||||
;; (use-package cider :defer t)
|
||||
(use-package eglot :defer t)
|
||||
(add-hook 'go-mode-hook 'eglot-ensure)
|
||||
;;
|
||||
;; Other goodies
|
||||
;;
|
||||
|
||||
(use-package magit
|
||||
:defer t)
|
||||
|
||||
(use-package projectile
|
||||
:defer t
|
||||
:config
|
||||
(use-package helm
|
||||
:defer t
|
||||
:bind (("M-x" . helm-M-x)
|
||||
("C-c h" . helm-command-prefix))
|
||||
:config
|
||||
(global-unset-key (kbd "C-x c"))
|
||||
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
|
||||
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
|
||||
(define-key helm-map (kbd "C-z") 'helm-select-action)
|
||||
(when (executable-find "curl")
|
||||
(setq helm-google-suggest-use-curl-p t))
|
||||
(setq helm-split-window-in-side-p t
|
||||
helm-move-to-line-cycle-in-source t
|
||||
helm-ff-search-library-in-sexp t
|
||||
helm-scroll-amount 8
|
||||
helm-ff-file-name-history-use-recentf t
|
||||
helm-echo-input-in-header-line t
|
||||
helm-autoresize-max-height 0
|
||||
helm-autoresize-min-height 20)
|
||||
(helm-autoresize-mode 1)
|
||||
(helm-mode 1))
|
||||
(use-package helm-projectile
|
||||
:defer t)
|
||||
(use-package helm-rg
|
||||
:defer t)
|
||||
(use-package ripgrep
|
||||
:defer t)
|
||||
)
|
||||
|
||||
|
||||
;;
|
||||
;; LSP
|
||||
;;
|
||||
(use-package eglot
|
||||
:defer t
|
||||
:hook (prog-mode . eglot-ensure) ; hook eglot for any programming-mode-derived mode
|
||||
)
|
||||
|
||||
;; If using Company (recommended)
|
||||
(use-package company
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook (eglot-managed-mode . company-mode)
|
||||
:config
|
||||
(setq company-idle-delay 0.1
|
||||
company-minimum-prefix-length 1))
|
||||
|
||||
;; Coding Specific
|
||||
(use-package yaml-mode
|
||||
:defer t)
|
||||
(use-package markdown-mode
|
||||
:defer t)
|
||||
(use-package go-mode
|
||||
:defer t)
|
||||
(use-package dockerfile-mode
|
||||
:defer t)
|
||||
(use-package docker-compose-mode
|
||||
:defer t)
|
||||
(use-package cider
|
||||
:defer t)
|
||||
(use-package rainbow-delimiters
|
||||
:hook (prog-mode . rainbow-delimiters-mode)
|
||||
:defer t)
|
||||
(use-package hl-todo
|
||||
:hook (prog-mode . hl-todo-mode)
|
||||
:config
|
||||
(setq hl-todo-keyword-faces
|
||||
'(("TODO" . "#FF0000")
|
||||
("FIXME" . "#FF0000")
|
||||
("DEBUG" . "#A020F0")
|
||||
("GOTCHA" . "#FF4500")
|
||||
("STUB" . "#1E90FF"))))
|
||||
|
||||
|
||||
;; Optionally, measure startup time
|
||||
;; LLM
|
||||
(use-package gptel
|
||||
:defer t
|
||||
:config
|
||||
(setq
|
||||
gptel-model 'claude-3-5-haiku-20241022
|
||||
gptel-backend (gptel-make-anthropic "Claude"
|
||||
:stream t :key gptel-api-key)))
|
||||
|
||||
;; vterm
|
||||
(use-package vterm
|
||||
:defer t)
|
||||
|
||||
;;
|
||||
;; Startup
|
||||
;;
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(message "Emacs loaded in %s seconds"
|
||||
@ -218,11 +326,15 @@
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
'(package-selected-packages
|
||||
'(magit super-save company which-key use-package-hydra meow markdown-mode helm go-mode git-gutter eglot-inactive-regions cider catppuccin-theme)))
|
||||
'(beacon catppuccin-theme cider company dashboard docker-compose-mode
|
||||
dockerfile-mode eglot-inactive-regions git-gutter go-mode
|
||||
gptel helm-projectile helm-rg hl-todo magit markdown-mode
|
||||
meow mood-line nerd-icons page-break-lines
|
||||
rainbow-delimiters ripgrep super-save use-package-hydra
|
||||
vterm which-key yaml-mode)))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
)
|
||||
(put 'downcase-region 'disabled nil)
|
||||
|
389
vline.el
Normal file
389
vline.el
Normal file
@ -0,0 +1,389 @@
|
||||
;;; vline.el --- show vertical line (column highlighting) mode.
|
||||
|
||||
;; Copyright (C) 2002, 2008-2012 by Taiki SUGAWARA <buzz.taiki@gmail.com>
|
||||
|
||||
;; Author: Taiki SUGAWARA <buzz.taiki@gmail.com>
|
||||
;; Maintainer: Taiki SUGAWARA <buzz.taiki@gmail.com>
|
||||
;; Keywords: faces, editing, emulating
|
||||
;; Version: 1.11
|
||||
;; Time-stamp: <2012-01-08 12:40:18 UTC taiki>
|
||||
;; URL: http://www.emacswiki.org/cgi-bin/wiki/vline.el
|
||||
;; URL: http://bitbucket.org/buzztaiki/elisp/src/tip/vline.el
|
||||
|
||||
;; This file is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 2, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; This file is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to
|
||||
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; put followings your .emacs
|
||||
;; (require 'vline)
|
||||
;;
|
||||
;; if you display a vertical line, type M-x vline-mode. `vline-mode' doesn't
|
||||
;; effect other buffers, because it is a buffer local minor mode. if you hide
|
||||
;; a vertical line, type M-x vline-mode again.
|
||||
;;
|
||||
;; if you display a vertical line in all buffers, type M-x vline-global-mode.
|
||||
;;
|
||||
;; `vline-style' provides a display style of vertical line. see
|
||||
;; `vline-style' docstring.
|
||||
;;
|
||||
;; if you don't want to visual line highlighting (ex. for performance
|
||||
;; issue), please to set `vline-visual' to nil.
|
||||
;;
|
||||
;; if you don't want to use timer (ex. you want to highlight column
|
||||
;; during moving cursors), please to set `vline-use-timer' to nil.
|
||||
|
||||
;;; Change Log:
|
||||
|
||||
;; 2012-01-08 taiki
|
||||
;; fix for the Lint warnings.
|
||||
|
||||
;; 2010-02-02 taiki
|
||||
;; improve performance.
|
||||
|
||||
;; 2009-08-26 taiki
|
||||
;; support org-mode, outline-mode
|
||||
|
||||
;; 2009-08-18 taiki
|
||||
;; add autoload cookies.
|
||||
|
||||
;; 2009-08-18 taiki
|
||||
;; fix last line highlighting probrem.
|
||||
|
||||
;; 2009-08-18 taiki
|
||||
;; support visual line highlighting.
|
||||
;; - Added face vline-visual.
|
||||
;; - Added defcustom vline-visual-face.
|
||||
;; - Added defcustom vline-visual.
|
||||
;;
|
||||
;; 2009-08-17 taiki
|
||||
;; fix continuas line problem.
|
||||
;; - Don't display vline when cursor into fringe
|
||||
;; - Don't expand eol more than window width.
|
||||
;;
|
||||
;; 2008-10-22 taiki
|
||||
;; fix coding-system problem.
|
||||
;; - Added vline-multiwidth-space-list
|
||||
;; - Use ucs code-point for japanese fullwidth space.
|
||||
;;
|
||||
;; 2008-01-22 taiki
|
||||
;; applied patch from Lennart Borgman
|
||||
;; - Added :group 'vline
|
||||
;; - Added defcustom vline-current-window-only
|
||||
;; - Added header items to simplify for users
|
||||
|
||||
;;; TODO:
|
||||
;; - track window-scroll-functions, window-size-change-functions.
|
||||
;; - consider other minor modes (using {after,before}-string overlay).
|
||||
;; - don't use {post,after}-command-hook for performance??
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defvar vline-overlay-table-size 200)
|
||||
(defvar vline-overlay-table (make-vector vline-overlay-table-size nil))
|
||||
(defvar vline-line-char ?|)
|
||||
(defvar vline-multiwidth-space-list
|
||||
(list
|
||||
?\t
|
||||
(decode-char 'ucs #x3000) ; japanese fullwidth space
|
||||
))
|
||||
(defvar vline-timer nil)
|
||||
|
||||
(defcustom vline-style 'face
|
||||
"This variable holds vertical line display style.
|
||||
Available values are followings:
|
||||
`face' : use face.
|
||||
`compose' : use composit char.
|
||||
`mixed' : use face and composit char."
|
||||
:type '(radio
|
||||
(const face)
|
||||
(const compose)
|
||||
(const mixed))
|
||||
:group 'vline)
|
||||
|
||||
|
||||
(defface vline
|
||||
'((t (:background "light steel blue")))
|
||||
"A default face for vertical line highlighting."
|
||||
:group 'vline)
|
||||
|
||||
(defface vline-visual
|
||||
'((t (:background "gray90")))
|
||||
"A default face for vertical line highlighting in visual lines."
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-face 'vline
|
||||
"A face for vertical line highlighting."
|
||||
:type 'face
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-visual-face 'vline-visual
|
||||
"A face for vertical line highlighting in visual lines."
|
||||
:type 'face
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-current-window-only nil
|
||||
"If non-nil then highlight column in current window only.
|
||||
If the buffer is shown in several windows then highlight column only
|
||||
in the currently selected window."
|
||||
:type 'boolean
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-visual t
|
||||
"If non-nil then highlight column in visual lines.
|
||||
If you specified `force' then use force visual line highlighting even
|
||||
if `truncate-lines' is non-nil."
|
||||
:type '(radio
|
||||
(const nil)
|
||||
(const t)
|
||||
(const force))
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-use-timer t
|
||||
"If non-nil, use idle timer instead of (post|after)-command-hook."
|
||||
:type 'boolean
|
||||
:group 'vline)
|
||||
|
||||
(defcustom vline-idle-time 0.02
|
||||
"Idle time for highlighting column."
|
||||
:type 'number
|
||||
:group 'vline)
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode vline-mode
|
||||
"Display vertical line mode."
|
||||
:global nil
|
||||
:lighter " VL"
|
||||
:group 'vline
|
||||
(if vline-mode
|
||||
(progn
|
||||
(add-hook 'pre-command-hook 'vline-pre-command-hook nil t)
|
||||
(if vline-use-timer
|
||||
(vline-set-timer)
|
||||
(add-hook 'post-command-hook 'vline-post-command-hook nil t)))
|
||||
(vline-cancel-timer)
|
||||
(vline-clear)
|
||||
(remove-hook 'pre-command-hook 'vline-pre-command-hook t)
|
||||
(remove-hook 'post-command-hook 'vline-post-command-hook t)))
|
||||
|
||||
;;;###autoload
|
||||
(define-global-minor-mode vline-global-mode
|
||||
vline-mode
|
||||
(lambda ()
|
||||
(unless (minibufferp)
|
||||
(vline-mode 1)))
|
||||
:group 'vline)
|
||||
|
||||
(defun vline-pre-command-hook ()
|
||||
(when (and vline-mode (not (minibufferp)))
|
||||
(vline-clear)))
|
||||
|
||||
(defun vline-post-command-hook ()
|
||||
(when (and vline-mode (not (minibufferp)))
|
||||
(vline-show)))
|
||||
|
||||
(defun vline-set-timer ()
|
||||
(setq vline-timer
|
||||
(run-with-idle-timer
|
||||
vline-idle-time t 'vline-timer-callback)))
|
||||
|
||||
(defun vline-cancel-timer ()
|
||||
(when (timerp vline-timer)
|
||||
(cancel-timer vline-timer)))
|
||||
|
||||
(defun vline-timer-callback ()
|
||||
(when (and vline-mode (not (minibufferp)))
|
||||
(vline-show)))
|
||||
|
||||
(defun vline-clear ()
|
||||
(mapcar (lambda (ovr)
|
||||
(and ovr (delete-overlay ovr)))
|
||||
vline-overlay-table))
|
||||
|
||||
(defsubst vline-into-fringe-p ()
|
||||
(eq (nth 1 (posn-at-point)) 'right-fringe))
|
||||
|
||||
(defsubst vline-visual-p ()
|
||||
(or (eq vline-visual 'force)
|
||||
(and (not truncate-lines)
|
||||
vline-visual)))
|
||||
|
||||
(defsubst vline-current-column ()
|
||||
(if (or (not (vline-visual-p))
|
||||
;; margin for full-width char
|
||||
(< (1+ (current-column)) (window-width)))
|
||||
(current-column)
|
||||
;; hmm.. posn-at-point is not consider tab width.
|
||||
(- (current-column)
|
||||
(save-excursion
|
||||
(vertical-motion 0)
|
||||
(current-column)))))
|
||||
|
||||
(defsubst vline-move-to-column (col &optional bol-p)
|
||||
(if (or (not (vline-visual-p))
|
||||
;; margin for full-width char
|
||||
(< (1+ (current-column)) (window-width)))
|
||||
(move-to-column col)
|
||||
(unless bol-p
|
||||
(vertical-motion 0))
|
||||
(let ((bol-col (current-column)))
|
||||
(- (move-to-column (+ bol-col col))
|
||||
bol-col))))
|
||||
|
||||
(defsubst vline-invisible-p (pos)
|
||||
(let ((inv (get-char-property pos 'invisible)))
|
||||
(and inv
|
||||
(or (eq buffer-invisibility-spec t)
|
||||
(memq inv buffer-invisibility-spec)
|
||||
(assq inv buffer-invisibility-spec)))))
|
||||
|
||||
(defsubst vline-forward (n)
|
||||
(unless (memq n '(-1 0 1))
|
||||
(error "n(%s) must be 0 or 1" n))
|
||||
(if (not (vline-visual-p))
|
||||
(progn
|
||||
(forward-line n)
|
||||
;; take care of org-mode, outline-mode
|
||||
(when (and (not (bobp))
|
||||
(vline-invisible-p (1- (point))))
|
||||
(goto-char (1- (point))))
|
||||
(when (vline-invisible-p (point))
|
||||
(if (< n 0)
|
||||
(while (and (not (bobp)) (vline-invisible-p (point)))
|
||||
(goto-char (previous-char-property-change (point))))
|
||||
(while (and (not (bobp)) (vline-invisible-p (point)))
|
||||
(goto-char (next-char-property-change (point))))
|
||||
(forward-line 1))))
|
||||
(vertical-motion n)))
|
||||
|
||||
(defun vline-face (visual-p)
|
||||
(if visual-p
|
||||
vline-visual-face
|
||||
vline-face))
|
||||
|
||||
(defun vline-show (&optional point)
|
||||
(vline-clear)
|
||||
(save-window-excursion
|
||||
(save-excursion
|
||||
(if point
|
||||
(goto-char point)
|
||||
(setq point (point)))
|
||||
(let* ((column (vline-current-column))
|
||||
(lcolumn (current-column))
|
||||
(i 0)
|
||||
(compose-p (memq vline-style '(compose mixed)))
|
||||
(face-p (memq vline-style '(face mixed)))
|
||||
(line-char (if compose-p vline-line-char ? ))
|
||||
(line-str (make-string 1 line-char))
|
||||
(visual-line-str line-str)
|
||||
(in-fringe-p (vline-into-fringe-p)))
|
||||
(when face-p
|
||||
(setq line-str (propertize line-str 'face (vline-face nil)))
|
||||
(setq visual-line-str (propertize visual-line-str 'face (vline-face t))))
|
||||
(goto-char (window-end nil t))
|
||||
(vline-forward 0)
|
||||
(while (and (not in-fringe-p)
|
||||
(< i (window-height))
|
||||
(< i (length vline-overlay-table))
|
||||
(not (bobp)))
|
||||
(let ((cur-column (vline-move-to-column column t))
|
||||
(cur-lcolumn (current-column)))
|
||||
;; non-cursor line only (workaround of eol probrem.
|
||||
(unless (= (point) point)
|
||||
;; if column over the cursor's column (when tab or wide char is appered.
|
||||
(when (> cur-column column)
|
||||
(let ((lcol (current-column)))
|
||||
(backward-char)
|
||||
(setq cur-column (- cur-column (- lcol (current-column))))))
|
||||
(let* ((ovr (aref vline-overlay-table i))
|
||||
(visual-p (or (< lcolumn (current-column))
|
||||
(> lcolumn (+ (current-column)
|
||||
(- column cur-column)))))
|
||||
;; consider a newline, tab and wide char.
|
||||
(str (concat (make-string (- column cur-column) ? )
|
||||
(if visual-p visual-line-str line-str)))
|
||||
(char (char-after)))
|
||||
;; create overlay if not found.
|
||||
(unless ovr
|
||||
(setq ovr (make-overlay 0 0))
|
||||
(overlay-put ovr 'rear-nonsticky t)
|
||||
(aset vline-overlay-table i ovr))
|
||||
|
||||
;; initialize overlay.
|
||||
(overlay-put ovr 'face nil)
|
||||
(overlay-put ovr 'before-string nil)
|
||||
(overlay-put ovr 'after-string nil)
|
||||
(overlay-put ovr 'invisible nil)
|
||||
(overlay-put ovr 'window
|
||||
(if vline-current-window-only
|
||||
(selected-window)
|
||||
nil))
|
||||
|
||||
(cond
|
||||
;; multiwidth space
|
||||
((memq char vline-multiwidth-space-list)
|
||||
(setq str
|
||||
(concat str
|
||||
(make-string (- (save-excursion (forward-char)
|
||||
(current-column))
|
||||
(current-column)
|
||||
(string-width str))
|
||||
? )))
|
||||
(move-overlay ovr (point) (1+ (point)))
|
||||
(overlay-put ovr 'invisible t)
|
||||
(overlay-put ovr 'after-string str))
|
||||
;; eol
|
||||
((eolp)
|
||||
(move-overlay ovr (point) (point))
|
||||
(overlay-put ovr 'after-string str)
|
||||
;; don't expand eol more than window width
|
||||
(when (and (not truncate-lines)
|
||||
(>= (1+ column) (window-width))
|
||||
(>= column (vline-current-column))
|
||||
(not (vline-into-fringe-p)))
|
||||
(delete-overlay ovr)))
|
||||
(t
|
||||
(cond
|
||||
(compose-p
|
||||
(let (str)
|
||||
(when char
|
||||
(setq str (compose-chars
|
||||
char
|
||||
(cond ((= (char-width char) 1)
|
||||
'(tc . tc))
|
||||
((= cur-column column)
|
||||
'(tc . tr))
|
||||
(t
|
||||
'(tc . tl)))
|
||||
line-char))
|
||||
(when face-p
|
||||
(setq str (propertize str 'face (vline-face visual-p))))
|
||||
(move-overlay ovr (point) (1+ (point)))
|
||||
(overlay-put ovr 'invisible t)
|
||||
(overlay-put ovr 'after-string str))))
|
||||
(face-p
|
||||
(move-overlay ovr (point) (1+ (point)))
|
||||
(overlay-put ovr 'face (vline-face visual-p))))))))
|
||||
(setq i (1+ i))
|
||||
(vline-forward -1)))))))
|
||||
|
||||
(provide 'vline)
|
||||
|
||||
;;; Local Variables:
|
||||
;;; time-stamp-format: "%:y-%02m-%02d %02H:%02M:%02S %Z %u"
|
||||
;;; time-stamp-line-limit: 16
|
||||
;;; End:
|
||||
|
||||
;;; vline.el ends here
|
Loading…
Reference in New Issue
Block a user