Emacs (3) - okná a vlastné nastavenia

23.11.2008 10:45 | Články | Adam Sloboda
V tejto časti si povieme ako ovládať okná bez myši a začneme s úpravami ovládania pre lepšiu efektivitu.

Ovládanie okien

Emacs v grafickom prostredí umožňuje aj interakciu s myšou a grafické menu, čo umožňuje začiatočníkom poradiť si z mnohými vecami samostatne. Efektivita ale klesá, preto si teraz predstavíme základné skratky pre ovládanie okien.

C-x 2 rozdelí aktívne okno horizontálne na dve okná, C-x 3 vertikálne. Takto si môžeme v jednom frame (grafické okno Emacsu) zobraziť naraz viac bufferov. C-x o prepína medzi oknami.

C-x 1 odstráni všetky okná okrem aktívneho a C-x 0 odstráni aktívne okno.

Ďalšia užitočná funkcia je C-x 4 0 (kill-buffer-and-window), ktoré zatvorí buffer a odstráni okno. Podobná je funkcia, ktorá iba zatvorí buffer v aktívnom okne kill-this-buffer (skratku si nastavíme neskôr).

Skratky na zmenu veľkosti nepovažujem za veľmi šťastne vybrané, aj keď to nie sú najpoužívanejšie funkcie, preto teraz prejdeme na vlastnú úpravu prostredia konfiguračným súborom .emacs.

.emacs a Emacs Lisp

To najťažšie už je za nami – množstvo informácií, ktoré sú viac či menej nepostrádateľné pre pokročilého užívateľa. Teraz sa budem venovať nastaveniam, rozšíriteľnosti a neskôr aj konkrétne nejakým zaujímavým módom.

Vlastné skratky

O užívateľoch Emacsu sa hovorí, že sú blázni do zvyšovania efektivity, čo je určite dôsledkom obrovskej prispôsobiteľnosti. Spomínal som vyššie, že si zadefinujeme nejaké skratky, takže najskôr ovládanie:

(define-key global-map (kbd "C->") 'enlarge-window)
(define-key global-map (kbd "C-<") 'shrink-window)
(define-key global-map (kbd "C-M->") 'enlarge-window-horizontally)
(define-key global-map (kbd "C-M-<") 'shrink-window-horizontally)

Každý riadok je samostatný výraz, volanie funkcie define-key s argumentami. Druhý argument je ďalšie volanie, je to makro, ktoré prijíma reťazec opisujúci skratku (význam rozdielu medzi funkciami a makrami je nad rámec tohoto článku). Posledný argument je názov funkcie so znakom ' na začiatku, toto je vyžadované jazykom ak chceme funkcii predať názov funkcie.

Ak tieto príkazy uložíme do súboru .emacs v domovskom adresári, pri každom spustení Emacsu sa do v globálnej klávesovej mape priradia funkcie na ovládanie veľkosti aktívneho okna. Skratky sa zapisujú rovnako ako je zvykom v celom tomto seriáli, niektoré špeciálne klávesy majú inú notáciu.

Ako ďalšie by sme si mohli nastaviť prepínanie okna a funkcie na zatvorenie aktívneho bufferu:

(define-key global-map (kbd "C-<tab>") 'other-window)
(define-key global-map (kbd "<f11>") 'kill-buffer-and-window)
(define-key global-map (kbd "<f12>") 'kill-this-buffer)

Pokiaľ máme záujem experimentovať, tak nemusíme stále vypínať a zapínať editor, môžeme:

  • načítať súbor s príkazmi – load-file (zvyknú mať príponu .el),
  • vykonať označené príkazy – eval-region,
  • vykonávať celý buffer – eval-buffer,
  • zadať výraz funkcii eval-expression,
  • v bufferi s módom lisp-interaction-mode vykonávať výrazy skratkou C-M-x (pri štarte sa takýto buffer otvára a má meno *scratch*),

Aj popri editácii .emacs je spomenutá skratka z lisp-interaction-mode funkčná a môžeme si tak overiť, či sme nenapísali nejaké nastavenie chybne.

Ako posledné si ešte zadefinujeme dve užitočné skratky a zároveň si tým ukážeme ako je možné automaticky použiť interaktívne funkcie:

(define-key global-map (kbd "M-<up>")
  '(lambda () (interactive) (scroll-down 1)))
(define-key global-map (kbd "M-<down>")
  '(lambda () (interactive) (scroll-up 1)))

Niekedy je text, ktorý by sme potrebovali vidieť, o riadok vyššie alebo nižšie, a preto si definujeme skratky pre posun zobrazovaného textu o riadok nahor alebo nadol. Volané funkcie sú interaktívne, preto sme to volanie obalili anonymnou funkciou bez argumentov (lambda) a pred samotným volaním ešte voláme funkciu interactive bez argumentov.

Kozmetické úpravy

V prvom rade aby okno Emacsu zapadlo do grafického prostredia je vhodné použiť GNU Emacs verzie 22, konkrétne verziu pre Gtk+ grafický toolkit.

Teraz uvediem okomentované nastavenie, ktoré sa aplikuje (a má význam) iba pre grafickú verziu Emacsu:

(when window-system
  ;; scrollovanie myšou
  (mwheel-install)
  ;; nastavenie pre X clipboard
  (set-selection-coding-system 'compound-text-with-extensions)
 
  ;; pre Gtk+ verziu nemá zmysel, pre X verziu áno
  (set-face-font 'menu "-*-helvetica-medium-r-normal-*-*-*-*-*-*-*-*-*")
  ;; osobne preferujem nasledujúce nastavenie v súbore .Xdefaults, pretože
  ;; sa aplikuje ihneď pri štarte
  ;;(set-face-font 'default "*-lucidatypewriter-medium-*-*-*-12-*-*-*-*-*-*-*")
 
  ;; vypnutie tool-bar-mode, ponechanie menu, výška a šírka bufferu,
  ;; farebná schéma "biela na čiernom" (nastavenia pre všetky okná)
  (setq default-frame-alist '((tool-bar-lines . 0)
                  (menu-bar-lines . 1)
                  (width . 80)
                  (height . 50)
                  (background-color . "black")
                  (foreground-color . "white")))
 
  ;; farba okrajov
  (set-face-background 'fringe "grey10")
  ;; farba kurzoru
  (set-cursor-color "green"))

Spomínaný font sa dá pomocou .Xdefaults nastaviť riadkom:

emacs.font: *-lucidatypewriter-medium-*-*-*-12-*-*-*-*-*-*-*

Nastavenie fontu v tomto formáte je možné vytvoriť programom xfontsel.

Nakoniec ešte zrušíme otravné pomocné výpisy pri štarte:

(setq inhibit-startup-message t)
;; reťazec "login" je nutné nahradiť prihlasovacím menom.
(setq inhibit-startup-echo-area-message "login")

Nabudúce sa pozrieme na ďalšie užitočné nastavenia a rozšírenia.