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/texterncd 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.jsonmkdir -p /usr/lib64/mozilla/native-messaging-hostscp -f native/textern.json /usr/lib64/mozilla/native-messaging-hostsmkdir -p /usr/local/libexec/texterncp -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-uninstallmake 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 deniedMakefile:24: recipe for target 'native/textern.json' failedmake: *** [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.jsonmkdir -p /home/petr/.mozilla/native-messaging-hostscp -f native/textern.json /home/petr/.mozilla/native-messaging-hostsmkdir -p /home/petr/.local/libexec/texterncp -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 fM-<C-spaceM->M-x fill-region