Sunrise Commander a.k.a. Dired ortodoxne

19.10.2020 | 17:12 | Richard | Richard

Článok pojednáva o tom, ako GNU Emacs využiť ako plnohodnotného správcu súborov v klasickom dizajne.

Wikipédia nás učí:
Ortodoxnosť (z gréc. ortho - správny, pravý a doxa - myšlienka, učenie, slávenie) alebo ortodoxia je vlastnosť pevne sa pridržiavať určitého (spravidla pôvodného/staršieho/hlavného) myšlienkového smeru (napr. v ekonómii), učenia, presvedčenia či viery (v poslednom prípade teda vlastnosť prísne veriť a/alebo pravovernosť).

V počítačovej terminológii sa ujal pojem ortodoxný súborový manažér. Takže dlhodobo zaužívaný - dizajnom, princípom a ovládaním. Jasné, reč je o manažéroch, nazývaných aj komandéry, ktoré viac-menej vychádzajú z Norton Commander-a. NC pozná každý, v našom svete ho nasledujú napr. Mignight Commander, Gnome Commander, Krusader, Necromancer, Tux Commander, Ghost Commander, Sunflower Commander, Double Commander… a možno sa ešte nejaké nájdu, ktoré sa budú (až na pár výnimiek) volať <nejaký> Commander. Skratka označenia týchto programov je i OFM

Krásna stránka (obsahovo i (pre mňa) vzhľadom) je http://www.softpanorama.org/OFM/index.shtml. Určite stojí za to si ju pozrieť.

Ale čo je to Dired? Dired je rozšírenie GNU Emacs-u (predvolene pribalené k základnemu balíku), ktoré umožňuje spravovať súbory. Väčšina užívateľov si zaiste vystačí s príkazovým riadkom v konzole. Určite pri dennom používaní svojho počítača majú i prehľad o adresárovej štruktúre. Ale pri manipulácii s väčším množstvom súborov je výhodné mať možnosť interaktívneho výberu súborov či rýchlu asociáciu napr. podľa prípony alebo file súboru.
A toto presne Dired robí, a robí to - neintuitívne, ťaždopádne, zdĺhavo, bolestivo.

Na prvý pohľad. I na druhý a možno aj na mnohé ďalšie.

Prečo je to vlastne tak?

Ak hovoríme o Dired-e, ktorý je nastavený tak, ako to vymysleli jeho autori, bez dodatočných funkcíí či definovania klávesov, tak najviac iritujúce a nezvyčajné veci sú asi tieto:

Vyskočiť z toho, nepoužívať, zabudnúť. Presne toto som robil, hoci som v Emacse už čo-to prežil a je to môj denno-denný nástroj.
Dobre, dajme mu ešte šancu.

Vnútorný nepokoj

Asi to každý pozná - veci idú dobre, rutina je zabehnutá a po nejakom čase… vnútorný nepokoj vyplývajúci alebo zo spomínanej rutiny, alebo z dosiahnutia ponúkaných možností.

Roky som používal kdejaké komandery, roky som používal CLEX. Svoj zvyk a používanie programu CLEX som opísal v blogu z 29.04.2019: http://linuxos.sk/blog/richard/detail/clex-suborovy-manazer-pre-gnulinux-a-unix/

Ale mrzelo ma, že som v minulosti Dired "odpískal". A vnútorný nepokoj mi kázal sa k nemu vrátiť. Tentokrát som ale na to išiel okľukou - prečítal som si o rozšíreniach Diredu, ktoré imitujú ortodoxné dvojpanelové manažéry. Vyskúšal som ich a zapáčil sa mi najviac Sunrise Commander, čo je vtipný odkaz na Midnight Commander.

Prvé precitnutie

Dokumentácia k Sunrise Commander-u (ďalej len "SRC") spomína dôležitý bod: byť zohratý s Dired-om. Takže predsa som sa len zahryzol do Dired-u. Skúšal, hral sa, testoval, až som došiel do bodu, keď som dokázal bez manuálu robiť základné operácie so súbormi. Isteže - Emacs je plne prispôsobiteľný a teda nezvyčajné kombinácie kláves by sa dali zmeniť. Avšak pokúšal som sa zžiť s tým, čo vymysleli jeho autori.
A vôbec to nemysleli zle…
Opíšem len základné postupy práce, nejaké zaujímavosti si nechám na koniec.


Otvorenie súboru je pomocou… ale dám to radšej do tabuľky:

akcia klávesová klávesová vykonaný príkaz vykonaný príkaz
  skratka skratka funkcia Dired-u alternatíva Sunrise Com.
  predvolená moja    
pohyb kurzora nadol n   dired-next-line  
pohyb kurzora nahor p   dired-previous-line  
otvorenie súboru/adresára Enter, f   dired-advertised-find-file sr-advertised-find-file
pohyb o úroveň vyššie v adres. škruktúre Backspace   dired-prev-subdir sr-dired-prev-subdir
zmazanie súboru/adresára D   dired-do-delete sr-do-delete
vytvorenie adresára + F7 dired-create-directory  
vytvorenie prázdneho súboru M-+      
kopírovanie súboru(-ov)/adresára(-ov) C F5 dired-do-copy sr-do-copy
presun súboru(-ov)/adresára(-ov) R   dired-do-rename sr-do-rename
skok na súbor podľa reťazca v mene C-s, C-r   isearch-forward, isearch-reverse  
zmena časových značiek súboru/adresára T   dired-do-touch sr-do-touch
zmena vlastníka súboru O   dired-do-chown  
zmena skupiny G   dired-do-chgrp  
potlačenie rozšíreného zobrazenia súborov (   dired-hide-details-mode  
potlačenie zobrazenia skrytých súborov )   dired-hide-dotfiles-mode  
nahratie a spustenie programu v eLISP-e L   dired-do-load  
akcia klávesová vykonaný príkaz
  skratka funkcia Dired-u
  predvolená  
označenie súboru/adresára pod kurzorom m dired-mark
označenie spustiteľných súb. * * dired-mark-executables
označenie symlinkov * @ dired-mark-symlinks
označenie len adresárov * / dired-mark-directories
označenie všetkého (okrem . a ..) * s dired-mark-subdir-files
odznačenie súboru/adresára pod kurzorom * u dired-unmark
odznačenie všetkého U, M-DEL dired-unmark-all-marks
invertovanie označeného t dired-toggle-marks
označenie súboru/adresára pomocou regexp-u % m, * % dired-mark-files-regexp
označenie súboru/adresára obsahujúceho obsah pomocou regexp-u % g dired-mark-files-containing-regexp

Hádam aj stačí, ostatné príkazy a triky sa poľahly dajú nájsť v dokumentácii (M-x describe-mode), či na https://www.emacswiki.org/emacs/CategoryDirectories.

4 A teraz tie zaujímavosti (Dired-u)

Čo ma zaujalo a čo som nenašiel v iných OFM?

4.1 Viac adresárov v jednom paneli

Tak napríklad: Dired/SRC, pokiaľ je kurzor na názve adresára, príkazom dired-maybe-insert-subdir, resp. skratkou i zobrazí obsah adresára v tom istom paneli - proste vizuálne ich zobrazí súčasne a súčasne sa na to dajú aplikovať všetky ostatné príkazy. Obrázok napovie:

dired-i-1.jpg

dired-i-2.jpg

4.2 .tar.gz kompresia

Stlačením Z, alebo zavolaním príkazu dired-do-compress je možné rýchlo zbaliť/rozbaliť zvolené súbory a adresáre, resp. súbor a adresár, na ktorom je kurzor.
Predvolene používa spomínanú gz kompresiu, ak potrebujeme iný formát, je možné to spraviť okľukou cez definovanie vlastnej funkcie (viď nižšie), alebo zavolaním príkazu dired-do-copmress-to (musí byť definované pravidlo v ‘dired-compress-files-alist’).

4.3 Eshell

Vynikajúca vec. Stlačením C-c t resp. eshell sa v paneli spustí interpreter shellu, napísaný v ELISP-e. Nie je to plnohodnotný emulátor terminálu, skôr je to dumb terminál, ktorý si nepodarí napr. s htop, ale určite s top :). A so všetkými command-line príkazmi. Niektoré príkazy (https://www.gnu.org/software/emacs/manual/html_mono/eshell.html#Built_002dins) sú naprogramované priamo v ELISP-e, ostatné sú externé. Pre väčšinu vecí ani človek nezbadá, že nie je v BASH-i, alebo inom shelli (ak nerátame vzhľad promptu). Stlačením C-c T sa spustí eshell pre aktuálny adresár. Aj toto sa však dá vylepšiť.

4.4 Vyhľadávanie

Toto je silná stránka Dired-u.

A regexp resp. dired-do-find-regexp vyhľadý regulárny výraz (dired-do-find-regexp) vo všetkých označených súboroch. Ak je označený i adresár(e), potom tento príkaz prehľadá všetky súbory v týchto adresároch a všetky ich podadresáre rekurzívne, okrem súborov, ktorých názvy sa zhodujú s grep-find-ignored-files a podadresárov, ktorých názvy sa zhodujú s grep-find-ignored-directories.

M-s a C-s resp. dired-do-isearch vyhľadá reťazec v aktuálne zvolenom súbore.

Ďalšie šikovné vyhľadávanie príkazy sú opísané nižšie, vo "feature" Sunrise Commander-a.

5 A teraz tie vylepšenia vďaka Sunrise Commander-u

V princípe dired sám osebe dokáže pracovať s viacerými, súčasne zobrazenými, panelmi. Ako by aj nie, keď práca s panelmi (nazývanými aj rámcami či oknami) je základnou vlastnosťou Emacs-u. Práca s nimi je však trochu odlišná, ako je tomu v OFM. Možno preto vznikli rozšírenia ako mc.el či nc.el. Či Sunrise Commander.
Dôležité je, že SRC súčasne zatvára nepotrebné alebo neaktívne buffre (čo je slabina/vlastnosť Dired-u).

Tieto rozšírenia prepožičiavajú Dired-u nielen klasický, dvoj-panelový vzhľad, ale tiež šikovnými funkciami rozširujú (už i tak jeho obrovské) možnosti.
Dovolím si spomenúť tie, ktoré používam najčastejšie.

Každý panel má vlastnú históriu, rýchlo prepínateľnú pomocou M-y a M-u - vpred a vzad. M-t prehodí panely medzi sebou, C-= (sr-ediff) spustí ediff - interaktívny diff napísaný v eLISP-e (https://www.gnu.org/software/emacs/manual/html_mono/ediff.html), medzi označenými súbormi v aktívnom (kde sa nachádza kurzor) a pasívnom paneli.
Taktiež sa dá použiť klasický diff po stlačení = (sr-diff).
A nakoniec, C-x = je porovnanie adresárov v aktívnom a pasívnom paneli podľa viacerých kritérií (dátum, veľkosť, dátum a veľkosť,názov, obsah).

Aha, a komu by nevyhovovalo zobrazenie panelov vedľa seba, pomocou C-c C-s, resp. sr-split-toggle je možné prepínať medzi rozdelením vertikálnym, horizontálnym a "len jeden panel").

5.1 Vylepšenie eshell-u

Eshell sa spúšťa, ako bolo spomínané, pomocou C-c t resp. C-c T. Počas zadávania príkazov je možné vložiť do príkazového riadku takého veci:

%f vloží názov zvoleného súboru v ľavom paneli
%F vloží názov zvoleného súboru v pravom paneli
$n vloží názvy označených súborov v ľavom paneli
$N vloží názvy označených súborov v pravom paneli
%d vloží názov aktuálneho adresára v ľavom paneli
%D vloží názov aktuálneho adresára v pravom paneli
%m vloží názvy i celou cestou pre označené súbory v ľavom paneli
%M vloží názvy i celou cestou pre označené súbory v pravom paneli
%a vloží cesty označených súborov v ľavom paneli
%A vloží cesty označených súborov v pravom paneli

5.2 Fuzzy Narrow

Návyková vec na presun v adresárovej štruktúre. Po stlačení C-c /, alebo príkaze sr-fuzzy-narrow sa interaktívne zužuje zobrazenie obsahu panelu, ktoré je navyše "fuzzy". Enterom sa akceptuje zúženie, Delete alebo Backspace vracia predchádzajúce zúženie. Ak už je zúženie akceptované, tak stlačením g (resp. revert-buffer) sa možno vrátiť k pôvodnému zobrazeniu v paneli. Dá sa to samozrejme využiť aj na zobrazenie súborov podľa prípony.

5.3 Sticky Search

C-c s alebo sr-sticky-isearch-forward spustí interaktívne vyhľadávanie a vnorovanie do následných adresárov, pokiaľ nie je zvolený regulárny súbor alebo sa akcia nezruší C-g. V praxi je to rýchla náhrada za niekoľkonásobné používanie bežného (alebo fuzzy) hľadania, pri ktorom je potrebné po vyhľadaní znovu stlačiť klávesnovú skratku pre ďalšie hľadanie (ak sme našli hľadaný adresár a už sme v ňom, ale potrebujeme ísť ešte hlbšie v adresárovej štrkuktúre).
Isteže, do podadreárov sa dá skočiť aj v štýle klasického emulátora terminálu - po stlačení C-/, pričom funguje staré-známe dopĺňanie pomocou TAB.

5.4 Premenovávanie súborov

Stlačením C-x C-q, resp. zavolaním sr-editable-pane je možné editovať panel, ako keby to bol regulárny súbor. Takže všetky editovateľné funkcie Emacsu, makrá či prácu s obdĺžnikovými výbermi (https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html) máme poruke a to je úžasné (najmä pri hromadnom premenovávaní). No a stlačením C-c C-c odošleme naše zmeny, aby sa zapísali do súborového systému (C-c C-k ukončíme editovanie bez zápisu). A toto funguje pochopiteľne i na vnorené adresáre (dired-maybe-insert-subdir).

5.5 Spočítanie veľkosti súborov

y alebo sr-show-files-info rekurzívne spočíta celkovú veľkosť všetkých súborov alebo adresárov (zvolených alebo označených, v aktívnom paneli).

5.6 Virtuálny adresár

V skratke sa jedná o zobrazenie súborov/adresárov ako výsledok príkazov grep, locate či find (ak sa použije ich sr- verzia). So zobrazeným virtuálnym adresárom je možné pracovať ako s každým iným. Znamená na to, že napr. vyhľadáme súbory podľa určitých kritérií, a potom na ne môžeme aplikovať ďalšie príkazy, ako keby sme ich mali v jednom adresári, hoci sa fyzicky i logicky môžu nachádzať kdekoľvek.

5.7 Klonovanie

Je taká príjemná záležitosť, ak chceme prekopírovať súbory a adresáre do pasívneho panelu. Jedná sa pokročiliejšie kopírovanie, pri ktorom sa všetky súbory sa dresáre rekurzívne vytvoria s tými istými názvami a štruktúrou. Otázka po stlačení K, resp. sr-do-clone umožňuje:

Tu sa patrí spomenúť i funkciu sr-fast-backup-files, pod klávesovou skratkou @, ktorá vytvorí zálohu súboru, na ktorom je kurzor, s tým, že k menu pridá .bak.

5.8 Synchronizovaná navigácia

Stlačením C-c C-z, resp. sr-sync sa zapína/vypína synchronizovaná navigácia, počas ktorej navigačné klávesy (ale tiež napr. označovanie) funguje simultánne v oboch paneloch. Podľa autora je to "celkom užitočné pri porovnávaní malých až stredne veľkých adresárových stromov".

5.9 Jednoduchšie vyhľadávanie

C-c C-f resp. sr-find spustí upravený find-dired, ktorý používa aktívnu adresár ako prvý parameter, takže napr. nájsť rekurzívne všetky súbory s výskytom reťazca v názve možno jednoducho, pričom sa akceptujú prepínače z klasického známeho find.

C-q resp. sr-multi-occur vyhľadá reťazec v označených súboroch, pričom v novootvorenom bufferi je vidieť, kde sa reťazec nachádza a tiež sa dá interaktívne na neho skočiť. Veľmi jednoduchá a priamočiara vec.

5.10 Taby

Dnešný rozmaznaná mládež si bez tabov nevie predstaviť prehliadanie webu. A analogicky Double Commander, Total Commander, Tux Commander či Krusader nás rozmaznali rovnako.
Nakoľko SRC sa primárne snaží zbavovať neaktívnych bufferov, tak skoky medzi otvorenými buffermi, ako náhrada tabov, nefunguje.
Avšak existuje rozšírenie sunrise-x-tabs.el (https://www.emacswiki.org/emacs/sunrise-x-tabs.el), ktoré túto funkcionalitu pridáva. Stačí .el súbor nahrať a spustiť funkciu sr-tabs-mode. Karty možno pomocou skratiek alebo príkazov vytvárať, premenovávať, mazať, mazať s prefixom (napr. 2 C-k zavrie 2. kartu v aktívnom paneli), presúvať (ich poradie zobrazenia).

5.11 Zobrazenie v strome

Rozšírenie sunrise-x-tree.el (https://www.emacswiki.org/emacs/sunrise-x-tree.el) umožňuje po nahraní a zavolaní sr-tree-mode zobraziť stromovú štruktúru, ktorá umožňuje rýchle prechody medzi adresármi, spolu s ich vytváraním, vyhľadávaním, mazaním atď. Vyzerá to lákavo, ale často som to nepoužil, skôr to tu uvádzam, aby bolo zrejmé, že SRC nijako nezaostáva za očakávaniami. dired-sr-tree-1.jpg

5.12 Iné rozšírenia

Existujú rozšírenia napr. na zobrazenie tlačidiel, tak ako to má NC/MC/gentoo/Worker…, na prácu s archívmi, s plávajúcimi oknami, záložkami. Tieto som zatiaľ nemal potrebu použiť.

6 Pár mojich úprav

Aby som mohol mať SRC rýchlo poruke, tak mám v ~.emacs/ definovanú funkciu:

(defun sunrise-start()
  "Start sunrise commander  from ~/.emacs.d/vendor/sunrise-commander/sunrise-fm-start.el"
  (interactive)
  (load "~/.emacs.d/vendor/sunrise-commander/sunrise-fm-start.el")
  (sunrise))

a túto funkciu mám v volanú v BASH skripte nasledovne:

#!/bin/bash
export TERM=xterm-256color; emacs -nw -f sunrise-start

Samotná funkcia sunrise-fm-start.el obsahuje niekoľko funkcií a definícií, najzaujímavejšie asi sú:

Asociácie súborov (skrátené)

(require 'openwith)
(setq openwith-associations
      (list
       (list (openwith-make-extension-regexp
              '("mpg" "mpeg" "mp4" "avi" "wmv" "wav" "mov" "flv" "ogm" "ogg" "mkv" "m4v"))
             "mpv" '(file))
       (list (openwith-make-extension-regexp
              '("xbm" "pbm" "pgm" "ppm" "pnm" "png" "gif" "bmp" "tif" "jpeg" "jpg"))
             "feh -. -Z" '(file))))
(openwith-mode t)

Nahranie iných rozšírení

(load "~/.emacs.d/vendor/sunrise-commander/sunrise-x-tabs.el")
(load "~/.emacs.d/vendor/sunrise-commander/dired-recent.el") ;; uloží históriu adresárov,…

Ako zobrazuje vlastnosti súborov

(setq sr-listing-switches " --group-directories-first -alo")
(define-key global-map [remap dired-hide-details-mode] 'sr-toggle-attributes)
(define-key sr-mode-map (kbd ")") 'dired-hide-dotfiles-mode)   

Pár funkcií ktoré sa aplikujú na zvolený súbor/adresár

(defun sr-evince ()
  "Send file to Evince."
  (interactive)
  (progn
    (shell-command (concat "evince " (thing-at-point 'filename) " &"))))

(defun sr-feh ()
  "Run Feh on directory"
  (interactive)
  (progn
    (shell-command (concat "feh -. -Z -d .  >/dev/null 2>&1 &"  ))))

(defun sr-make-zip ()
  "Zip the folder."
  (interactive)
  (progn
    (setq adresar (thing-at-point 'filename))
    (shell-command (concat "zip -r " (symbol-value 'adresar)".zip " (symbol-value 'adresar))))
  (message "Adresar %s zazipovany." (symbol-value 'adresar)))

Záložky sa vždy hodia

;; najprv deaktivoať F5 a F6 z pôvodného sunrise.el
(custom-set-variables '(sr-use-commander-keys nil))
(define-key sr-mode-map (kbd "<f5>") 'bookmark-set)   
(define-key sr-mode-map (kbd "<f6>") 'bookmark-jump)  
;; bookmark-set,… sú funkcie v bookmark.el

7 Záver

Sunrise Commander je skvelé rozšírenie skvelého Dired-u skvelého Emacs-u. Že rozširovať jeho možnosti môže každý, o tom nemá zmysel hovoriť. Vyhľadať ďalšie tipy, zvlášť pre Dired, je dôležité - človek získa inšpiráciu, čo všetko sa dá ešte vymyslieť. A nielen pridanie farieb, ikon (v GUI verzii Emacsu), podpora myši, náhľady súborov/obrázkov…
Tento blog samozrejme nemá ambíciu opísať všetky funkcie podrobne, na to je lepšie si prečítať napr. komentáre jednotlivých .el súborov. Chce skôr len ukázať, že GNU Emacs, ktorý je najmä interpreter eLISP-u (a až potom textový editor), nám dáva ďalšiu možnosť práce s PC v známom, prispôsobenom, prostredí.

Napísané v org-mode pre GNU Emacs.
  ,           ,
 /             \
((__-^^-,-^^-__))
 `-_---' `---_-'
  `--|o` 'o|--'
     \  `  /
      ): :(
      :o_o:
       "-"

      G N U
    • RE: Sunrise Commander a.k.a. Dired ortodoxne 20.10.2020 | 02:10
      Avatar bedňa LegacyIce-antiX  Administrátor

      Zaujímavé, priznám sa že z 50% som netušil o čom píšeš, ale rozhodne to zaujímavé čítanie bolo.

      Nechcel by si urobiť nejak video/gif s GNU/Emacs workflow?

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
    • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 13:16
      Avatar Livan Manjaro s XFCE  Používateľ

      Téma je to celkom zaujímavá, avšak pre BFU nepoužiteľná. Mám pocit, že je to také škrabanie sa ľavou rukou na pravej strane hlavy. Je to málo "user friendly" na môj vkus. Predsa len dvojpanelový súborový manažér je pohodlnější. Ale proti gustu žiaden dišputát.

      • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 14:02
        Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

        asi pre niekoho kto si rád prisposobuje svoje aplikacie a je poweruser to je super ale ja ako bežný užívateľ môžem povedať že prečítanie ma nepresvedčilo aby som opustil MC

        ale inak super článok, zaujímavé čítanie (aj keď nemôžem povedať že by som rozumel väčšine obsahu)

        možno raz keď budem veľký ;-)

        Linux: the operating system with a CLUE... Command Line User Environment
    • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 15:29
      Avatar Richard Antix  Používateľ

      Hm, skúsim blog upraviť s animovanými GIFmi.

      Napr. to spomínané Fuzzy Search.

      Je to takto lepšie? Alebo je to ešte viac chaotické?

      (Najprv som chcel pohľadať na to nejaký program, ale potom som si spomenul, že načo, keď máme scrot, convert a starý key-mon :).

      Možno screenkey je vhodnejší, ale dáko nechel zobrazovať / a mal aj iné neduhy.)

      • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 15:34
        Avatar bedňa LegacyIce-antiX  Administrátor

        Dobré aj takto, to určite poteší. Ja osobne som myslel, celý workflow, od napísania riadku v GNU/Emacse plus všetko čo bežne robíš ...

        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 15:44
          Avatar Richard Antix  Používateľ

          Hm, to by chcelo takú sériu v štýle "Môj život v plain-texte" :)

          • RE: Sunrise Commander a.k.a. Dired ortodoxne 21.10.2020 | 16:54
            Avatar bedňa LegacyIce-antiX  Administrátor

            Ja používam na všetko nejaký nástroj, tak ma zaujímalo ako to vyzerá all in one. Tiež samozrejme všetko cez skratky, ale také tie ľudské :) Chystám sa niekedy o tom napísať.

            Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org