Emaksaj Konsiletoj 2-a: Seancoj kaj Pakoj

Esperanto • English
Laste ĝisdatigita: la 17-an de marto 2022

Sonorilo kiu ne povas sonori ne havas celon.
—Keel LORENZ, Neon Genesis Evangelion

maximalfocus-VT4rx775FT4-unsplash

Enhavotabelo

Enkonduko

Ĉi tiu estas la daŭrigo de la serioj pri emaksaj konsiletoj. En ĉi tiu afiŝo, ni esploros seancan administradon, pakojn, krommarĝenojn, kaj aliajn malgrandajn agrablajn aferojn.

Desktop

Havenda ilo kiun mi nun uzas estas Desktop. Ĝi konservas la staton de la emaksa seanco, por ke en la okazo de kraŝo, kurenta malfunkcio, aŭ io kiu igas min perdi mian seancon, mi povu reiri al la lasta seanco. Desktop estas enkonstruita kun la plej ĵusaj versioj de emakso. La jena estas la kodaĵo por uzi ĝin :

(require 'desktop)

(desktop-save-mode)

(setq desktop-dirname "~/.emacs.d"
      desktop-base-file-name "desktop"
      desktop-base-lock-name "desktop.lock"
      desktop-restore-frames t
      desktop-restore-reuses-frames t
      desktop-restore-in-current-display t
      desktop-restore-forces-onscreen t)

Savehist

Alia grava funkcio kiun mi uzas estas Savehist. Ĝi konservas la etbufran historion. Iomete similas al konservi la komandlinian historion. La jena estas la kodaĵo:

(savehist-mode t)

(setq savehist-file "~/.emacs.d/savehist")

Kunfando

Okazis multe da fojoj, kiam mi volis permane konservi la staton de tiom da seancan informon kiun mi povas konservi. Mi volas konservi la bufrojn, etbufran historion, legosignojn, kaj comint-reĝiman historion. Por fari tiel, mi havas la jenan:

(defun save-defaults ()
  (desktop-save desktop-dirname)
  (savehist-save)
  (bookmark-save))

(defun save-histories ()
  (let ((buf (current-buffer)))
    (save-excursion
      (dolist (b (buffer-list))
        (switch-to-buffer b)
        (save-history)))
    (switch-to-buffer buf)))

(defun save ()
  (interactive)
  (save-desktop)
  (save-defaults)
  (save-histories))

Kiu provizas la agrablan:

M-x save EN

Pakoj

ELPA

ELPA estas la pako-administrila sistemo de emakso. Se vi ne ankoraŭ uzas la paksistemon, uzu ĝin nun. Ĉio, kiun oni bezonas komenci estas la jena:

(require 'package)

(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("marmalade" . "http://marmalade-repo.org/packages/")
        ("melpa" . "http://melpa.milkbox.net/packages/")))

(package-initialize)

(defalias 'pi 'package-install)
(defalias 'pl 'package-list-packages)
(defalias 'pr 'package-refresh-contents)

Por listigi ĉiujn haveblajn pakojn, premu:

M-x pl EN

Se vi konas la nomon de pako, premu:

M-x pi EN paknomo EN

Por ĝistadigi vian lokan datumon, premu:

M-x pr EN

use-package

Ĉi tiu estas vera valorŝtono. Ĝi similas al require, tamen kun steroidoj. Kiam require-igi pakon, oni havas la elekton por instali tiun pakon, se ĝi ne ankoraŭ ekzistas. Ĝi ankaŭ donas al la uzanto la kapablon por agordi tiun pakon ene unuigita esprimo. Tamen, male require, use-package ne alvenas konstruita kun emakso. Oni bezonas instali ĝin per package-install:

M-x pi EN use-package EN

Oni nun povas ŝargi ĝin per la sekva esprimo:

(require 'use-package)

Por instali markdown-mode ekzemple—se eĉ ĝi ne jam ekzistas—kaj agordi ĝiajn rilatajn opciojn ŝarginte ĝin, havu la jenan:

(use-package markdown-mode
    :ensure t
    :config
    (progn
      (push '("\\.text\\'" . markdown-mode) auto-mode-alist)
      (push '("\\.markdown\\'" . markdown-mode) auto-mode-alist)
      (push '("\\.md\\'" . markdown-mode) auto-mode-alist)))

Lininumeroj

Mi tre ŝatas havi la lininumerojn montrataj ĉe la maldekstra marĝeno. Ĝi donas al mi iom da ideo kiel granda la aktuala dosiero estas, kaj kie ni nune estas. Ŝalti linum-mode atingas tion:

(setq linum-format "%5d │ ")

(defun my-linum-mode-hook ()
  (linum-mode t))

(add-hook 'find-file-hook 'my-linum-mode-hook)

Tempindikoj

Mi ofte bezonas meti tempindikojn, precipe kiam mi redaktas mian ĉiutagan protokoldosieron. La jena estas kelke da kodaĵo por helpi onin:

(defun format-date (format)
  (let ((system-time-locale "eo.utf8"))
    (insert (format-time-string format))))

(defun insert-date ()
  (interactive)
  (format-date "%A, %B %d %Y"))

(defun insert-date-and-time ()
  (interactive)
  (format-date "%Y-%m-%d %H:%M:%S"))

Ŝanĝu la valoron de system-time-locale kiel taŭgas.

Klavoj

Kiam la klavkombinoj ne estas ordigitaj, ne estas facile por trovi tiun, kiun klavkombino klavo estas ligita. Bonŝance, oni havas bind-key, kiu estas parto de use-package.

Ekzampla uzado de bind-key aspektus kiel:

(bind-keys
 :map global-map
 ("C-;" . eval-expression)
 ("C-j" . delete-indentation))

Linifinio sen krommarĝeno

Ĉi tiu komando kreas linifinion, kiam movadas la montrilon. Ĝi ŝajnigas agmanieron, en kiu, la novlinio ne krommarĝeniĝas.

(defun newline-and-no-indent (&optional arg)
  (interactive "p")
  (open-line arg)
  (next-line arg))

Plenigado

Ĉi tiu kodaĵo ege funkcias laborante pri plataj tekstoj. Ĝi krommarĝenigas alineon aŭ la aktualan alinean kontekston. Se ekzistas markilo, tiam la regiono pleniĝos:

(defun fill-region-or-paragraph ()
  (interactive)
  (if (region-active-p)
      (fill-region)
      (fill-paragraph)))

Montrilomovado

La komando move-to-window-line-top-bottom, implicite bindita al M-r, bonegas kiam oni volas movi la montrilon al la supra, meza, kaj malsupra pozicioj rilate al la fenestro, kaj similas al la H, M, kaj L komandoj de Vim.

Tamen, ĝi ne estas tre ekonomia kiam specife celi areojn de la ekrano. La komandoj malsupre pozicias la montrilon, specife al la supra, meza, kaj malsupra pozicioj, respektive.

(defun move-to-window-line-top ()
  (interactive)
  (move-to-window-line 0))

(defun move-to-window-line-center ()
  (interactive)
  (move-to-window-line nil))

(defun move-to-window-line-bottom ()
  (interactive)
  (move-to-window-line -1))

Gitstato en Dired

Ĉi tiu malgranda kodaĵo donas vidajn indikojn de la stato de gitadministritaj dosieroj ene Dired-bufro. Premi g reŝargas la bufron, tiam ĝisdatigas la staton.

(use-package dired-k
    :ensure t
    :config
  (progn
    (add-hook 'dired-initial-position-hook 'dired-k)))

Klavkombinoj

La klavkombinoj por la supraj komandoj estas listigitaj malsupre:

(bind-keys
 :map global-map
 ("C-c d"   . insert-date)
 ("C-c C-d" . insert-date-and-time)

 ("S-<return>" . newline-and-no-indent)

 ("M-q" . fill-region-or-paragraph)

 ("C-M-y" . yank-primary)

 ("M-1" . move-to-window-line-top)
 ("M-2" . move-to-window-line-center)
 ("M-3" . move-to-window-line-bottom))

(bind-keys
 :map dired-mode-map
 ("K" . dired-k)
 ("g" . dired-k))

Finrimarkoj

En ĉi tiu afiŝo, mi montris, ke la malgrandaj alĝustigetoj povas generi grandajn gajnojn. Le resto de la agordo troveblas ĉi tie. Se vi havas emaksan kodumon por havigi, sendu tirpeton!