Emakskonsiletoj 2-a: Seancoj kaj Pakoj

Esperanto · English
la 20-an de februaro 2018
Laste ĝisdatigita: la 26-an de septembro 2018

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

Enhavotabelo

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 ĝi. Desktop-o enkonstruitas kun la plej ĵusaj versioj de emakso. La jena estas la kodaĵo:

(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)

(defun desktop-save ()
  (interactive)
  (if (eq (desktop-owner) (emacs-pid))
      (desktop-save desktop-dirname)))

Savehist

Alia grava funkciado 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 fojo, kiam mi volas permane konservi la staton de tiom da seancan informon kiun mi povas konservi. Mi volus konservi la bufrojn, etbufran historion, legosignojn, kaj comint-an 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))

Liveras la agrablan:

M-x save EN

Pakoj

ELPA

ELPA-o estas la pako-administrila sistemo de emakso. Se vi ne ankoraŭ uzas la paksistemon, uzu ĝin nun. Ĉiuj, kiujn 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 pako EN

Por ĝistadigi vian lokan datumon, premu:

M-x pr EN

use-package

Ĉi tiu estas vera valorŝtono. Similas al require, tamen kun steroidoj. Kiam require-igi pakon, oni havas la elekton por instali tiun pakon, se tiu ne ankoraŭ ekzistas. 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 postuli ĝin je sekvajn uzadojn:

(require 'use-package)

Por instali markdown-mode ekzemple, se eĉ ne jam ekzistas, kaj agordi siajn rilatajn opciojn post ŝargi ĝ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. Donas al mi iom da ideo kiel granda la 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 ordigatas, 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. Ŝajnigas agmanieron, en kiu, la novlinion 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 kiam labori pri plataj tekstoj. Krommarĝenigas alineon aŭ la aktualan alinean kontekston. Se ekzistas markilo, tiam la regiono plenigiĝas.

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

Montrilomovado

La komando move-to-window-line-top-bottom, defaŭlte bindita al M-r bonegas kiam oni volas movi la montrilon al la supra, meza, kaj malsupra pozicioj en rilato kun la fenestro similas al la H, M, kaj L komandoj de Vimo.

Tamen ne estas tre ekonomie 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-o

Ĉi tiu malgranda kodaĵo donas vidajn indikojn de la stato de gitmastrumitaj dosieroj ene Dired-a 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 listigitas 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!