Emacs

Velmi přizpůsobivý a pracovitý (nejen) editor, který jsem si v poslední době oblíbil právě kvůli jeho přizpůsobitelnosti a použitelnosti. Používám jej tak, že jsem prvotně stáhnul základní balík emacs a poté jsem jej "tunil" a přizpůsoboval tak, aby mi vyhovoval.

Instalace a spuštění na systému Gentoo

Emacs lze spustit buď klasickým způsobem a to příkazem emacs. Je možné jej ale spustit ve formě serveru - jednotlivé instance emacsclienta jsou pak mezi sebou provázané. Osobně používám variantu server-klient. Stačí službu aktivovat po startu:

systemctl --user daemon-reload
systemctl enable --user emacs-29.service
systemctl start --user emacs-29.service

Spouštění editoru v novém okně:

emacsclient -c

Spuštění editoru ve stávajícím okně:

emacsclient -r

Spuštění editoru v CLI:

emacsclient -nw

Balíčky a módy

Moje často používané:

Zkratky

Základní

C-s Hledat
C-x C-c Ukončit
C-x C-s Uložit
C-w Zahození (kill)
C-y
Vhození (yanking) M-x Spuštění funkce/módu

Info

C-h v user-init-fileInicializační soubor
C-h k klávesainfo o klávese

Přizpůsobení - customizace

Z mého pohledu je nejlepší založit adresář ~/.emacs.d, ve kterém je komplet vše.

mkdir -p ~/.emacs.d

init.el

Tady je náhled mého init souboru, který používám.

nano ~/.emacs.d/init.el
(custom-set-variables
 ;; custom-set-variables 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.
 '(backup-by-copying t)
 '(backup-directory-alist '(("." . "~/.emacs.d/zálohy")))
 '(completion-auto-help 'always)
 '(confirm-kill-emacs nil)
 '(create-lockfiles nil)
 '(current-language-environment "UTF-8")
 '(cursor-type t)
 '(custom-enabled-themes '(mv-gruvbox))
 '(custom-safe-themes
   '("0a079671f0b4742b2c1c46a85ce0ffb4bec8678196df5372cab94b1417a2d3cc" "be402de03a3c719234fb1f1b934978dc1deb57d09fbb774a2758a38b856b9091" "3e664e8f5a88476a0bfdaeaaaabdc5e1a2b5b1e38472b15e5e8d17addfa81487" "2d77d2b76eda5094f27a79d2dc88aa614dd93faa7c70a3462346d33196e6dbd7" "9aabbfd99865c82652a39a240789637283b0eba8ece46c292aea8ee4b20e9270" "707ac6ef0d97fb6cd14fd97635b1abd5827433f33564e8e7ee3a49dec7a841a1" "353196b0d69eb6348f835b9f0bc04fe05d58574bf201d0dcb0dffc705a4c7157" "91260b6062f82d3c0ed916da2c3d9cbada734c9672f8b66a70eecf89887d587a" "16e73e59eefb1e0c5dc185582deed4dd08063884b33c885d91333100a54e875e" "56c4001d08f851b6529894d7c4a7c65dfdef3058d2d793f29b91b32021b9219c" "741728b9c9373ab0d3aaccf89f4536d79874ac47d231b921c1ea5f83971187cc" "3beffbd58f4833e37f2d761c23dc74365775b9d383e7d537a928d810d35852ad" "9c2d39b72ee7bea44004f138eb57ac47c3153a1e3a6ce4825beb03a3e439713c" default))
 '(delete-old-versions t)
 '(dired-free-space nil)
 '(dired-kept-versions 2)
 '(fancy-splash-image "~/.emacs.d/img/startup.png")
 '(focus-follows-mouse t)
 '(fringe-mode 0 nil (fringe))
 '(global-display-line-numbers-mode t)
 '(global-word-wrap-whitespace-mode t)
 '(horizontal-scroll-bar-mode nil)
 '(indicate-empty-lines nil)
 '(inhibit-startup-buffer-menu t)
 '(initial-buffer-choice "~/")
 '(kept-new-versions 6)
 '(make-backup-files nil)
 '(menu-bar-mode nil)
 '(package-selected-packages
   '(which-key rainbow-mode web-mode yasnippet company vertico ace-window))
 '(pop-up-windows nil)
 '(recentf-auto-cleanup 'never)
 '(recentf-max-menu-items 60)
 '(recentf-max-saved-items 50)
 '(recentf-menu-title "Nedávné")
 '(scroll-bar-mode nil)
 '(size-indication-mode t)
 '(small-temporary-file-directory nil)
 '(tab-bar-mode t)
 '(tool-bar-mode nil)
 '(truncate-lines t)
 '(vertico-cycle nil)
 '(vertico-flat-mode nil)
 '(vertico-grid-mode t)
 '(vertico-mode t)
 '(vertico-mouse-mode t)
 '(vertico-multiform-mode nil)
 '(web-mode-auto-close-style 2)
 '(web-mode-enable-auto-closing t)
 '(web-mode-enable-auto-indentation t)
 '(web-mode-enable-auto-opening t)
 '(web-mode-enable-auto-pairing t)
 '(web-mode-enable-auto-quoting t)
 '(web-mode-enable-current-element-highlight t)
 '(which-function-mode t)
 '(which-key-allow-imprecise-window-fit t)
 '(which-key-idle-delay 0.5)
 '(which-key-mode t)
 '(which-key-popup-type 'side-window)
 '(which-key-show-early-on-C-h nil)
 '(which-key-show-remaining-keys nil)
 '(which-key-side-window-max-height 0.35)
 '(word-wrap t))
(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.
 '(default ((t (:family "Hack Nerd Font" :foundry "SRC" :slant normal :weight regular :height 90 :width normal))))
 '(border ((t (:foreground "#fbf1c7"))))
 '(custom-button ((t (:background "#458588" :foreground "#fbf1c7" :box (:line-width (2 . 2) :style released-button)))))
 '(custom-button-mouse ((t (:background "grey90" :foreground "black" :box (:line-width (2 . 2) :style released-button)))))
 '(internal-border ((t nil)))
 '(line-number-current-line ((t (:inherit \#504945))))
 '(link ((t (:foreground "cyan1" :underline t))))
 '(org-level-2 ((t (:extend nil :foreground "#8ec07c"))))
 '(tab-bar ((t (:inherit default))))
 '(tab-bar-tab-inactive ((t (:inherit tab-bar-tab :background "#1d2021" :foreground "#a09a7f"))))
 '(tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width (1 . 1) :style released-button)))))
 '(vertico-current ((t (:inherit nil :extend t :background "#458588" :foreground "#fbf1c7"))))
 '(vertico-mouse ((t (:background "#458588"))))
 '(web-mode-current-element-highlight-face ((t (:background "#3c3836" :foreground "#ffffff"))))
 '(web-mode-html-tag-face ((t (:foreground "yellow3")))))

;; CONFIG
;; Lock soubory v /tmp (asi nefachá)
;(setq lock-file-name-transforms
;      '(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" "/tmp/\\2" t)))
;; Historie M-x atd.
(add-hook 'after-init-hook 'savehist-mode)
;; Číslování řádků
;(add-hook 'after-init-hook 'global-display-line-numbers-mode)
;; Company mode - doplňování v editoru
(add-hook 'after-init-hook 'global-company-mode)
;; Vertico mode - vertikální nabízení
(add-hook 'after-init-hook 'vertico-mode)
(add-hook 'after-init-hook 'which-key-mode)
;; Rainbow-mode - stringy do barev
;(define-globalized-minor-mode my-global-rainbow-mode rainbow-mode
;  (lambda () (rainbow-mode 1)))
;(my-global-rainbow-mode 1)
;; Pruhlednost všeho HACK
(set-frame-parameter (selected-frame) 'alpha-background 92)
(add-to-list 'default-frame-alist '(alpha-background . 92))
;; custom hláška do scratche
(setq initial-scratch-message "Nazdar draku!!! :)")
;; Kalendář
(setq calendar-week-start-day 1)

(when (display-graphic-p) 
  (enable-theme 'mv-gruvbox)
  (enable-theme 'modus-vivendi)
  )

(require 'recentf)
(recentf-mode 1)

;; FCE
; Otevře buffer s pomocí sudo
(defun sudo-find-file (file)
  "Open FILE as root."
  (interactive
   (List (read-file-name "Open as root: ")))
  (find-file (if (file-writable-p file)
                 file
               (concat "/sudo:root@localhost:" file))))
; dired otevírá ve stejném okně
(require 'dired)
(defun dired-mouse-find-file (event)
  "In Dired, visit the file or directory name you click on."
  (interactive "e")
  (let (window pos file)
    (save-excursion
      (setq window (posn-window (event-end event))
            pos (posn-point (event-end event)))
      (if (not (windowp window))
          (error "No file chosen"))
      (set-buffer (window-buffer window))
      (goto-char pos)
      (setq file (dired-get-file-for-visit)))
    (if (file-directory-p file)
        (or (and (cdr dired-subdir-alist)
                 (dired-goto-subdir file))
            (progn
              (select-window window)
              (dired file)))
      (select-window window)
      (find-file-other-window (file-name-sans-versions file t)))))

;; KLÁVESY
(global-set-key "\C-x\ \C-r" 'recentf-open-files)
;(global-set-key (kbd "") 'other-window)
(global-set-key (kbd "C-x ") 'other-window)
(global-set-key (kbd "C-x ") 'kill-this-buffer)
(global-set-key (kbd "C-x C-") 'visual-line-mode)
(define-key dired-mode-map [mouse-2] 'dired-mouse-find-file)

;; SOUBORY
(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".txt" . org-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".html" . web-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".php" . web-mode) auto-mode-alist))
		

Vlastní téma

Je možné spustit funkci customize-themes pro vytvoření vlastního barevného motivu. Například založení nového tématu ze stávajícího s možností editace.

M-xcustomize-themes
Výběr motivu

Kliknu na vytvoření nového tématu ze stávajícího (odkaz click here) a vidím editaci motivu. Případně je možné najet kurzorem na název motivu, stisknout klávesu ? a poté kliknout na odkaz customize a budu moci změnit vybraný motiv.

Přizpůsobení motivu

Instalace balíčků

Spustím funkci package-install a zadám balíček k instalaci. Vše proběhne automaticky a pokud máme používaný lokální adresář ~/.emacs.d/, tak do něho se vše zapíše. Nastavení včetně doinstalovaných balíčků je přenosné.

M-xpackage-install