Escape Meta Alt Control Shift

Synthroid Without Prescription Inderal No Prescription Nexium For Sale Prevacid Generic Buy Elimite Online Prevacid Without Prescription Ultram No Prescription Prevacid For Sale Ultram Generic Buy Prednisone Online

Ten wpis mia?? byÄ? o DrScheme, ??rodowisku do tworzenia i testowania program??w napisanych w jÄ?zyku Scheme. Mia??em go sko??czyÄ? ju?? kilka dni temu. Tymczasem od ostatniej notki mija ju?? tydzie??, a mi wciÄ??? ciÄ???ko zebraÄ? siÄ? do pisania. Pow??d?

Emacs.

PozwolÄ? sobie zacytowaÄ? najpierw pewnego poczÄ?tkujÄ?cego emacsowca, kt??rego wypowied?? naj??atwiej opisze mojÄ? obecnÄ? sytuacjÄ?:

“Jak ze wszystkimi rzeczami w Uniksie r??wnie?? ten to przypadek dalekiej podr????y zaczynajÄ?cej siÄ? jednym niepewnym krokiem.”

“I suppose, as with all things UNIX, its a case of the journey of a thousand miles beginning with one step.”

Do DrScheme prawdopodobnie jeszcze wr??cÄ?, posiada on bowiem ciekawe narzÄ?dzie do debugowania kodu. Wiele skr??t??w klawiszowych jest w DrScheme taka sama jak w Emacsie, wiÄ?c ewentualne przej??cie bÄ?dzie ma??o bolesne (po tym co do tej pory widzia??em wÄ?tpiÄ? jednak, by kto?? chcia?? rezygnowaÄ? z Emacsa na rzecz DrScheme).

Emacs - edytor tekstu

OpiszÄ? wiÄ?c teraz pokr??tce wszystko to, co uda??o mi siÄ? w Emacsie okryÄ? przez te kilka dni. Rady bÄ?dÄ? zorientowane na systemy uniksowe, ale jestem pewny, ??e u??ytkownicy Windows??w wyka??Ä? siÄ? charakterystycznym dla siebie samozaparciem i bez problemu sobie poradzÄ?. ;-) Emacsa ??ciÄ?gnÄ?Ä? mo??na ze strony GNU. Osobi??cie polecam najnowsze wersje z cvs’a. W Debianie rozbite sÄ? one na paczki emacs-snapshot, emacs-snapshot-bin-common, emacs-snapshot-common, i emacs-snapshot-el. Po wpisaniu w terminalu emacs edytor w??Ä?cza siÄ? w okienku. Ja zdecydowanie wolÄ? pracÄ? na konsoli, wiÄ?c ustawi??em sobie w moim .bashrc alias:

alias emacs=‘emacs-snapshot -nw’

No dobrze, wiemy jak w??Ä?czyÄ?, ale jak tego cuda u??ywaÄ?? Przede wszystkim, zanim nawet zaczniecie, proponujÄ? ka??demu podpiÄ?Ä? pod Caps Lock klawisz Ctrl. MajÄ?c podstawowy klawisz pod ma??ym lewym palcem naprawdÄ? u??atwia edycjÄ?. Najlepiej od razu przeczytajcie sobie ten tutorial, gdzie opr??cz tej rady podanych jest wiele innych, kt??rych stosowanie przek??ada siÄ? na wymierne polepszenie komfortu pracy z Emacsem.

Podstawy edycji za??apaÄ? mo??ecie czytajÄ?c poradnik Marcina Bielewicza. Ja opiszÄ? Emacsa z punktu widzenia kilku dni u??ywania ze zwr??ceniem uwagi na walory u??atwiajÄ?ce d??ubanie w kodzie Scheme.

JednÄ? z podstawowych koncepcji Emacsa sÄ? bufory, kt??re reprezentujÄ? pewne wirtualne przestrzenie do pracy. Przypomina to trochÄ? ideÄ? uniksowych terminali. Bufor mo??e byÄ? zwiÄ?zany z plikiem, gdy w??a??nie go edytujemy/przeglÄ?damy. Ale w buforze mo??emy te?? trzymaÄ? otwartego shella, sesjÄ? ssh, interpreter pythona, czy cokolwiek innego. Nie by??o by w tym jednak nic ciekawego, gdyby nie fakt, ??e ze wszystkich bufor??w mo??na korzystaÄ? przy pomocy tych samych polece?? edycyjnych. Nie ma wiÄ?c ??adnego problemu, by skopiowaÄ? z pow??oki kilka linijek, albo przeszukaÄ? okno interpretera za pomocÄ? znajomej kombinacji C-s (notacja ta oznacza: trzymajÄ?c Ctrl wci??nij s). Poprzednie/nastÄ?pne polecenie uzyskuje siÄ? przy pomocy kombinacji C- strza??ka w g??rÄ?/w d????. I tak dalej, mo??liwo??ci sÄ? naprawdÄ? niezliczone, wszystko dziÄ?ki ujednoliceniu zachowania bufor??w.

PomiÄ?dzy buforami poruszaÄ? siÄ? mo??na kolejno przy pomocy kombinacji C-strza??ka w lewo/w prawo. Na raz widocznych mo??e byÄ? kilka bufor??w. Okno dzieli siÄ? przy pomocy kombinacji C-x 2 (wybierz Ctrl+x, a potem 2). By zmaksymalizowaÄ? aktywny bufor, nale??y wpisaÄ? C-x 1, by go ukryÄ?: C-x 0. Bufor zamyka siÄ? kombinacjÄ? C-x k. Zazwyczaj przed zamkniÄ?ciem bufora zwiÄ?zanego z plikiem chcesz wszystkie swoje zmiany zachowaÄ?. S??u??y do tego kombinacja C-x C-s.

Komenda, kt??ra wciÄ??? ratuje mi ??ycie, to C-g, aka keyboard-quit. Powoduje ona zaprzestanie czynno??ci, kt??rÄ? w??a??nie wykonuje edytor. Nadal czÄ?sto zdarza mi siÄ? wklepaÄ? przypadkiem dowolnÄ? kombinacjÄ? klawiszy, po kt??rej nie za bardzo wiem gdzie jestem. C-g zawsze wraca do stanu pierwotnego.

I w zasadzie tyle wystarczy do w miarÄ? sprawnego korzystania z edytora. Swoje umiejÄ?tno??ci mo??na udoskonaliÄ? czytajÄ?c wbudowany tutorial dostÄ?pny pod kombinacjÄ? klawiszy C-h t. Odwa??ni mogÄ? te?? zaczÄ?Ä? czytaÄ? dokumentacjÄ?.

Emacs - ??rodowisko programistyczne

To, ??e bufory zachowujÄ? siÄ? podobnie, to tylko jedna strona medalu. W??a??ciwo??ci bufora determinuje r??wnie?? tryb (ang. mode) w jakim siÄ? on znajduje. Domy??lny bufor *scratch* rozpoczyna pracÄ? w trybie Lisp Interaction. Jest to tryb, w kt??rym wpisane w Lispie polecenia mo??emy przes??aÄ? Emacsowi do wykonania. Spr??bujcie na przyk??ad wpisaÄ?:

(menu-bar-mode -1)

MajÄ?c kursor na ko??cu linii wybierzcie kombinacjÄ? klawiszy C-x C-e. Wykona ona podane polecenie, powodujÄ?c znikniÄ?cie menu. By je przywr??ciÄ? wystarczy zamieniÄ? argument funkcji na 1 i wykonaÄ? kod ponownie. To tylko prosty przyk??ad; warto byÄ? ??wiadomym, ??e do dyspozycji mamy kompletny interpreter Lispa (a dok??adnie dialektu nazywanego Emacs Lispem).

Emacs posiada tryb dla Scheme (nazywa siÄ? on po prostu scheme-mode), istnieje jednak ciekawa biblioteka rozszerzajÄ?ca jego mo??liwo??ci. Jest to Quack, dostÄ?pny w Debianie w pakiecie quack-el. Po instalacji wystarczy dodaÄ? jednÄ? linijkÄ? do pliku ~/.emacs i jeste??my gotowi do pracy:

(require ‘quack)

Otwieramy Emacsa, naszym oczom ukazuje siÄ? standardowy ekran z przywitaniem. Wciskamy C-x b i wpisujemy test, tworzÄ?c w ten spos??b nowy bufor o nazwie test. Jako, ??e chcemy pisaÄ? program w jÄ?zyku Scheme, uruchomimy w buforze odpowiedni tryb: M-x scheme-mode. Quack automatycznie pod??Ä?cza siÄ? pod ten tryb, dopisana do ~/.emacs pojedyncza linijka zajÄ???a siÄ? wszystkimi ustawieniami. Mo??emy zaczÄ?Ä? pisaÄ?. Warto zwr??ciÄ? uwagÄ? na kolorowanie sk??adni, automatyczne wstawianie wciÄ?Ä? i skaczÄ?cy kursor dopasowujÄ?cy nawiasy. Po napisaniu kodu zapewne chcieliby??my go przetestowaÄ?. Interpreter Scheme uruchamiamy kombinacjÄ? C-c C-q r (lub te?? M-x run-scheme). By upewniÄ? siÄ?, ??e interpreter dzia??a poprawnie, mo??emy wpisaÄ? dowolne poprawne wyra??enie:

> (+ (* 2 3) 4)
10

No dobrze, ale nie chcemy przecie?? przepisywaÄ? w interpreterze ca??ego kodu, kt??ry w??a??nie napisali??my w oknie edycyjnym. Nie ma problemu, Emacs ??wietnie radzi sobie z kopiowaniem tekstu pomiÄ?dzy oknami. Przechodzimy do okna edycji kombinacjÄ? C-x o. Zaznaczamy ca??y bufor kombinacjÄ? C-x h, a kopiujemy go do interpetera przy pomocy C-c C-r. Gotowe. Za??????my, ??e w oknie edycyjnym mieli??my rekurencyjnÄ? definicjÄ? silni.

(define (silnia x)
  (if (= x 0)
      1
      (* x (silnia (- x 1)))))

PrzechodzÄ?c do okna intepretera mo??emy ju?? z w??a??nie wykonanego kodu skorzystaÄ?. Piszemy:

(silnia 5)

I otrzymujemy poprawny wynik:

120

Oczywi??cie to nie koniec atrakcji. Co powiecie na szybki dostÄ?p do pe??nej dokumentacji jÄ?zyka Scheme? Po wybraniu M-x quack-view-manual i wci??niÄ?ciu Tab przedstawione wam zostanÄ? nazwy wszystkim manuali, jakie sÄ? dostÄ?pne online. Wystarczy wpisaÄ? nazwÄ? dowolnego z nich i potwierdziÄ?, by Emacs otworzy?? przeglÄ?darkÄ? na odpowiedniej stronie. U mnie w??Ä?cza siÄ? Mozilla, co nie jest najszczÄ???liwszym rozwiÄ?zaniem. Ale Emacs nie by??by nazywany z??o??liwie systemem operacyjnym, gdyby nie pozwala?? na uruchomienie w buforze przeglÄ?darki. Ja u??ywam w3m, kt??rej emacsowy pakiet w Debianie to w3m-el. By zmieniÄ? u??ywanÄ? przez Quack przeglÄ?darkÄ? trzeba przej??Ä? do bufora *scratch* i wpisaÄ? nastÄ?pujÄ?cÄ? linijkÄ?:

(setq quack-browse-url-browser-function ‘w3m-browse-url)

Wykonujemy jÄ? zwyczajowo przy pomocy C-x C-e. Je??eli ponownie otworzymy dowolny manual, zobaczymy go ju?? bezpo??rednio w Emacsie. No dobrze, ale mo??emy czytaÄ? dokumentacjÄ? i bez Emacsa. Quack oferuje nam co?? wiÄ?cej. Je??eli chcecie uzyskaÄ? dokumentacjÄ? dla dowolnej funkcji, wystarczy, ??e wpiszecie jej nazwÄ? i wykonacie kombinacjÄ? C-c C-q k. Jest jednak b??Ä?d, nie wiem nawet czy w module w3m, czy w quacku (sk??ania??bym siÄ? ku pierwszemu, bo z innymi przeglÄ?darkami nie ma problem??w), kt??ry powoduje, ??e przeglÄ?darka nie skacze do opisu funkcji. Po d??u??szych bojach uda??o mi siÄ? rozwiÄ?zaÄ? problem. Dodajcie poni??sze linijki do swojego pliku ~/.emacs, a w3m bÄ?dzie ju?? dzia??aÄ? poprawnie:

(defun substitute-hex-values (url)
  (if (string-match “%25″ url)
      (replace-match “%” nil nil url)
       url))
 
(defun my-w3m-browse-url (url &optional new-session)
  (when (stringp url)
    (w3m-browse-url (substitute-hex-values url) new-session)))
 
(setq quack-browse-url-browser-function ‘my-w3m-browse-url)

Jak widzicie, mo??liwo??ci Emacsa sÄ? ca??kiem spore. PozwolÄ? sobie wspomnieÄ? o jeszcze jednej czÄ?sto u??ywanej kombinacji klawiszy, jakÄ? jest M-/. Dope??nia ona w??a??nie pisane s??owo na podstawie innych s????w w tym buforze (a tak??e w innych buforach). Przyk??adowo, je??eli zdefiniowali??cie wcze??niej funkcjÄ? funkcja-o-d??ugiej-nazwie, to wystarczy, wpisaÄ? kilka pierwszych liter i u??yÄ? kombinacji M-/, by Emacs oszczÄ?dzi?? nam dalszego pisania.

Je??eli czujecie niedosyt, zapraszam do eksperymentowania z Emacsem. Mo??ecie te?? przejrzeÄ? tutoriale o Scheme w Emacsie: tutaj i tutaj.

.emacs

Ka??de polecenie, kt??re wykonywali??my w buforze *scratch* mo??emy zapisaÄ? do pliku .emacs, dziÄ?ki czemu zostanie ono wykonane zaraz po uruchomieniu edytora. OpiszÄ? poni??ej kilka fragment??w mojego pliku .emacs, kt??re mogÄ? wam siÄ? przydaÄ?.


(column-number-mode 1)

Powoduje, ??e w pasku statusu widoczny jest nie tylko numer linii, ale i numer kolumny.


(setq inhibit-startup-message t)

DziÄ?ki temu po w??Ä?czeniu Emacsa nie pojawia siÄ? ekran z przywitaniem.


(setq make-backup-files nil)

Wy??Ä?cza tworzenie kopii zapasowych edytowanych plik??w. Bez tego w kr??tkim czasie katalogi zape??niajÄ? siÄ? masÄ? plik??w z tyldÄ? na ko??cu.


(setq truncate-lines t)
 
(defun point-of-beginning-of-bottom-line ()
  (save-excursion
    (move-to-window-line -1)
    (point)))
 
(defun point-of-beginning-of-line ()
  (save-excursion
    (beginning-of-line)
    (point)))
 
(defun next-one-line () (interactive)
  (if (= (point-of-beginning-of-bottom-line)
          (point-of-beginning-of-line))
      (progn (scroll-up 1)
             (next-line 1))
    (next-line 1)))
 
(defun point-of-beginning-of-top-line ()
  (save-excursion
    (move-to-window-line 0)
    (point)))
 
(defun previous-one-line () (interactive)
  (if (= (point-of-beginning-of-top-line)
          (point-of-beginning-of-line))
      (progn (scroll-down 1)
             (previous-line 1))
    (previous-line 1)))
 
(global-set-key (kbd “<down>”) ‘next-one-line)
(global-set-key (kbd “<up>”) ‘previous-one-line)
 
(defun scroll-down-by-1 () (interactive)
  (scroll-down 1))
(defun scroll-up-by-1 () (interactive)
  (scroll-up 1))
(global-set-key \C-n” ’scroll-up-by-1)
(global-set-key \C-p” ’scroll-down-by-1)

Kod po??yczony stÄ?d. Powoduje on p??ynne przewijanie ekranu przy korzystaniu ze strza??ek. Ja doda??em obs??ugÄ? klawiszy C-n i C-p, kt??re powodujÄ? przewiniÄ?cie ekranu w g??rÄ?/w d???? bez zmieniania pozycji kursora.


(setq quack-run-scheme-always-prompts-p nil)

Wpisanie w scheme-mode kombinacji C-c C-q r powoduje natychmiastowe uruchomienie interpretera Scheme bez pytania o jego nazwÄ?.


(setq quack-pretty-lambda-p 1)

Je??eli posiadacie odpowiedni terminal z odpowiedniÄ? czcionkÄ? zamiast s??owa lambda widoczna bÄ?dzie grecka litera.

Je??eli znacie jakÄ??? funkcjÄ? Emacsa, kt??ra przydaje siÄ? przy edycji kodu, zachÄ?cam do opisania jej w komentarzach.

Komentarze (2)

  1. sztywny said,

    maj 5, 2006 at 5:02 pm

    (defuni my-surround-sexp()
    (insert-string “(”)
    (forward-sexp)
    (insert-string “)”)
    (backward-sexp)
    (forward-char))

    Pewnie gdzie?? jest gotowe, w ka??dym razie ww. banalna funjcja otacza sexp’a nawiasami. Przydatne jak np. chce siÄ? przej??Ä? od:

    (+ 1 2 3)

    do:

    (+ 4 (+ 1 2 3))

    :>

  2. nablaone said,

    wrzesień 5, 2006 at 9:51 pm

    P??ynne przewijanie mo??na uzyskaÄ? przez:

    (setq scroll-step 1)

Komentuj wpis