Emacs/wiki

Z Wikiverzity

Použití emacsu pro editaci wiki

Emacs jako externí editor do browseru[editovat]

Chci editovat nějakou wiki stránku či cokoliv jiného pomocí emacsu.

Řešení:

GhostText[editovat]

Cokoli napíšeme do externího editoru, okamžitě se přenese do okénka browseru, a naopak.

Extenze to browseru:

V tuto chvíli ale nabízí řešení pouze pro čtyři kompatibilní editory:

  • Sublime Text
  • Atom
  • VS Code
  • Vim

atomic-chrome[editovat]

Alternativa ke GhostText

Instalace:

C-h v package-archives
  • Pokud ne, přidám si ho do seznamu:
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
  • V emacsu pustím
M-x package-install [RET]

on se mě zeptá:

Install package:

odpovím:

atomic-chrome
  • Do svého konfiguráku ~/.emacs přidám dva řádky:
(require 'atomic-chrome)
(atomic-chrome-start-server)

Použití:

  1. spustím emacs
  2. v Chrome umístím kursor do textového pole, které chci editovat
  3. v tool baru Chrome kliknu na tlačítko Atomic Chrome
  4. v emacsu se vytvoří nový buffer a v něm obsah pole z browseru
  5. editovat mohu jak v původním poli browseru, tak v emacsu
  6. editaci v emacsu ukončím C-c C-c (pokud ale editační okno v browseru předtím zavřu, zavře se mi automaticky i tento buffer)

It's All Text![editovat]

Textern[editovat]

Pracuje pouze pod Linuxem a potřebuje Python 3.5 anebo vyšší.

Instalace[editovat]

  • Nainstalujeme doplněk (addon)
  • Nainstalujeme nativní aplikaci dle návodu na github
  • Defaltní editor je gedit, ale je možno to změnit v preferencích doplňku

Postup instalace nativní aplikace[editovat]

  • Naklonování z úložiště na lokální disk (potřebujeme mít nainstalovaný git):
git clone --recurse-submodules https://github.com/jlebon/textern
cd textern
  • Instalace:
sudo make native-install

Vypíše postup instalace:

sed -e 's|@@NATIVE_PATH@@|/usr/local/libexec/textern/textern.py|' native/textern.json.in > native/textern.json
mkdir -p /usr/lib64/mozilla/native-messaging-hosts
cp -f native/textern.json /usr/lib64/mozilla/native-messaging-hosts
mkdir -p /usr/local/libexec/textern
cp -rf native/textern.py native/inotify_simple /usr/local/libexec/textern

Předvolby[editovat]

  • External editor: ["emacs", "+%l:%c"]
  • Shortcut: Ctrl+Shift+D
  • Document extension: txt

Použití[editovat]

  • V browseru najedeme kursorem na textové okénko a zmáčkneme Ctrl+Shift+D, což otevře externí editor
  • Po napsání textu dáme normálně "Save" a tím se textové okénko browseru naplní naším textem

Problém[editovat]

  • zmáčknu Ctrl+Shift+D a nic se neděje
  • zmáčknu ho podruhé a zase se nic neděje
  • zmáčknu ho potřetí a vpravo nahoře mi vyskočí černé okénko s chybovou hláškou:
 Textern
 Error: this text is already being edited
                               [Activate]

Dohledám podobný problém: https://github.com/jlebon/textern/issues/31

Pomohlo, když byla instalována aplikace pouze pro jednoho uživatele a nikoli globálně:

Tak tedy:

sudo make native-uninstall
make native-install USER=1

A dostanu výpis:

sed -e 's|@@NATIVE_PATH@@|/home/petr/.local/libexec/textern/textern.py|' native/textern.json.in > native/textern.json
/bin/sh: 1: cannot create native/textern.json: Permission denied
Makefile:24: recipe for target 'native/textern.json' failed
make: *** [native/textern.json] Error 2

A tak zjišťuji, že v podadresáři native mám:

drwxrwxr-x 4 petr petr 4096 lis 30 10:54 inotify_simple
-rw-r--r-- 1 root root  209 lis 30 10:56 textern.json
-rw-rw-r-- 1 petr petr  187 lis 30 10:54 textern.json.in
-rwxrwxr-x 1 petr petr 6577 lis 30 10:54 textern.py

A tak se divím, že textern.json patří rootovi. Přivlastním si ho tedy a znovu pustím instalaci s USER=1:

make native-install USER=1

Ohlásí:

sed -e 's|@@NATIVE_PATH@@|/home/petr/.local/libexec/textern/textern.py|' native/textern.json.in > native/textern.json
mkdir -p /home/petr/.mozilla/native-messaging-hosts
cp -f native/textern.json /home/petr/.mozilla/native-messaging-hosts
mkdir -p /home/petr/.local/libexec/textern
cp -rf native/textern.py native/inotify_simple /home/petr/.local/libexec/textern

To nepomohlo, takže jsem zavřel Firefox a znovu spustil a už to funguje. Odinstaluji tedy pro jednoho uživatele:

make native-uninstall
  rm -f /usr/lib64/mozilla/native-messaging-hosts/textern.json
  rm -rf /usr/local/libexec/textern

A instaluji znova:

sudo make native-install
   sed -e 's|@@NATIVE_PATH@@|/usr/local/libexec/textern/textern.py|' native/textern.json.in > native/textern.json
   mkdir -p /usr/lib64/mozilla/native-messaging-hosts
   cp -f native/textern.json /usr/lib64/mozilla/native-messaging-hosts
   mkdir -p /usr/local/libexec/textern
   cp -rf native/textern.py native/inotify_simple /usr/local/libexec/textern

A funguje opět!

Teď zkusím namísto geditu spustit emacs:

Namísto původní konfigurace:

 ["gedit", "+%l:%c"]

Dám:

 ["emacs", "+%l:%c"]

Funguje opět!

Perfektní je, že nastaví kursor na stejné místo, na jakém jsem ho měl v tom prohlížeči.

Délka řádků[editovat]

Často se stane, že chceme přesunout na wiki nějaký text, který je formátovaný do řádků určité délky a odstavce jsou od sebe odděleny prázdným řádkem. Wiki naproti tomu potřebuje takové formátování zdrojových textů, kde celý odstavec je napsaný na jednom řádku. Problematiku zalamování řádků do odstavců emacs nazývá slovem filling.

Emacs v textovém módu může pracovat v zásadě ve dvou minor módech. V jednom módu se vstupní text píše neustále do jedné řádky, dokuď nestiskneme Enter. Abychom takový dlouhý řádek na obrazovce viděli, je pokračování řádku opticky naznačeno znakem \ na koci, aniž by se ovšem tyto znaky \ staly součástí textu. Naproti tomu v tzv. auto-fill-mode dochází k zalomení řádky (tj. vložení znaku nový řádek do textu) automaticky po překročení nastavené šířky sloupce. auto-fill-mode se přepíná (tj. zapíná a opět vypíná) příkazem:

M-x auto-fill-mode

Obvyklá šířka sloupce, tj. délka maximální délka řádky v tomto módu, je nastavena na 70 znaků. Změnit ji můžeme příkazem C-x f, tj. Set the fill column (set-fill-column). Tomuto příkazu ovšem musí předcházet argument, kterým určíme požadovaný počat znaků (argument vkládáme příkazem C-u).

Odstavec, který máme naformátovaný na nějakou šířku, můžeme přeformátovat příkazem M-q Fill current paragraph (fill-paragraph), pokud si předtím nastavíme vhodnou šířku sloupce. Více odstavců můžeme přeformátovat příkazem M-x fill-region, tj. Fill each paragraph in the region (fill-region).

Pomocí výše uvedených příkazů jíž můžeme přeformátovat všechny odstavce v bufferu. Idea bude následující:

  • nastavíme si šířku sloupce na dostatečně velkou hodnotu, dejme tomu 10000 znaků: C-u 10000 C-x f
  • nastavíme pointer na začátek bufferu: M-<
  • označíme si začátek regionu: C-space
  • odjedeme na konec bufferu - tam tím pádem budeme mít konec regionu: M->
  • přeformátujeme všechny odstavce: M-x fill-region

Celá sekvence příkazů v klávesových zkratkách pak bude následující:

C-u 10000 C-x f
M-<
C-space
M->
M-x fill-region