2010/04/29

эмакс бөөндөлт

Саяхан баахан замбараагүй бичсэн php файлуудын зай авалт, догол гэх мэтийг кодын стандартын дагуу яаж янзлах билээ гэж хэсэг энэ тэрүүгээр хайлт хийж доншуучлав. Юу хэлэх гээд байгааг ойгоогүй бол хальт тайлбарлах гээд үзье. Жишээ нь ийм код байлаа гэж бодъё.


Харахад замбараагүй, хаана эхлээд хаана хаалт нь яваад аль хэсэг нь аль хэсэгтээ хамаараад байгааг харж ойлгоход тун хэцүүтэй, ёстой л нөгөө холион бантан харагдаж байгаа биз. Жижиг иймэрхүү файл дээр гараар засах амархан боловч, олон тэгээд том файлууд дээр бол ёстой хэдэн жил болж таарна. Тэгэхээр энийг өнөө гайхал эмаксаар бол төвөггүй хийчихэж байгаа юм. Нэг файл үүсгээд функц биччихнэ:


Энд дуудаж байгаа mumamo гээчийг гүүглдэнэ биз. Тэгээд энэ функцийг ашиглаад л асуудлыг шийднэ дээ :) Ганц нэг файлыг бол: emacs -batch test_file.php -l emacs_format -f emacs-format-function гээд л янзалчихна. Янзалсан скрипт ингэж сайхан харагдаж байна:


Мэдээж олон файл янзална гэвэл тэгээд л бөөнддөг багахан бүрхүүлийн скрипт биччихнэ дээ гэж... :)

7 comments:

  1. anhnii setgegdel amjilttai bolov hoho

    ReplyDelete
  2. Дараах зүйлсийг хачирламаар байна.
    - http://ourcomments.org/cgi-bin/emacsw32-dl-latest.pl хуудаснаас nxhtml-г татаж авлаа.
    - таны бичсэн хувилбар нь зөвхөн гаднаас дуудах юмуу эсвэл өөр функцээс дуудагдаж болохоор болжээ. Хэрэв буфер дотроо та ажиллаж байх үедээ шууд дуудаж хэлбэржүүлэхээр бол дараах хоёр мөрийг нэмж өөр нэрээр дуудаж хэрэглэх боломжтой.
    (defun inter-emacs-format-function ()
    "Буферыг форматлагч"
    (interactive)
    (load "nxhtml/autostart.el")
    (load "nxhtml/nxhtml-mumamo.el")
    (save-excursion
    (nxhtml-mumamo)
    (indent-region (point-min) (point-max) nil)
    (save-buffer))
    )

    (interactive) мөр нэмэгдсэнээр та M-x inter-emacs-format-function гэж засварлаж байгаа буфер дээрээ дуудаж боломжтой болж байна. (save-excurtion ) макро нь өөрийнх нь хаалтан дотор гүйцэтгэх зүйлсийг хэрэгжүүлэхээсээ өмнө хэрэгтэй бүх тохиргоог хадгалж, хийсний дараа буцааж сэргээдэг. Жишээ нь заалтуур хаа нэг газар зөөгдсөн үйлдэл хийгдсэн бол энэ макрогүй тохиолдолд заагч хамгийн сүүлд хаана гүйцэтгэл хийсэн тэндээ байрлаж байдаг. Энэ макро л гүйцэтгэл хийхээс өмнө хаана байсан, тэнд нь буцаадаг.
    - интерактив буюу хэрэглэгчээс дуудаж болдог функцийг туршихдаа *scratch* буфер дээрээ бичээд төгсгөлийн хаалтны ард нь заалтуураа тавьж байгаад С-х С-е дарж эмакс дээр бүртгүүлж болдог. Дараа нь шалгах буфер дээрээ уг функцээ M-x дарж нэрийг нь бичээд дуудаж туршина.
    Үүнийг та мэддэг байсан биз дээ, сүүлийнх бараг илүүдсэн хачир болчих шиг боллоо.

    ReplyDelete
  3. та нар WORD юм уу EXCEL дээр яааж макро бичдэг талаар нэг бичлэг үйлдээч.
    макро бичиж шинэ функц үүсгээд тэрийгээ аль нэг менюнд байрлуулж болдог юм бол уу?

    ReplyDelete
  4. та лисп хэлний макрог бусад хэлний макротай хольж үл болно. Тавиад жилийн өмнө үүссэн энэ хэлний макрог, түүнээс хойш үүссэн бусад хэл үүсгэгчид яагаад ч юм адилхан шахуу үйлдэл хийж байвал макро гэж нэрлэчихээд байгаа учраас ийм төөрөгдөл их гардаг. Энэ макро нь код хөрвүүлэгдэх завсарт дахин код үүсгэдэг бөгөөд энэ шинж чанар одоогоор энэ цэнхэр дэлхий дээр лиспээс өөр хэлэнд байхгүй юм. Саран дээр "буусан" америкчууд хайгаад бас олоогүй гэсэн шүү. Таны ойлгоод байгаа макро нь шаардлагатай үед дуудагдах ёстой ердийн функц билээ. Харамсалтай нь БОРД, ЭКИСЭЛ гэх мэт БҮНДӨҮС төрлийн машин дээр ажилладаг програм дээр танд тусалж чадахгүй нь. Учир нь БИЛЛ ахтай муудалцаад түүний барааг нь хэрэглэхгүй болоод олон жил өнгөрчихөж. Тэгээд ч монголчууд бид тэрний барааг албан ёсоор зүй зохистой хэрэглэвэл халаасандаа мөнгө үгүй хоосрох аюултай. Оцон шувуу, бяцхан чөтгөр, өргөстэй загас гэх мэт сонирхолтой машин дүүрэн код байхад :)

    ReplyDelete
  5. хэхэхэ, баярлалаа.

    ойлголоо.
    ийм ялгаатай байсан гэж мэдсэнгүй.
    би ч цонх7-той бас VMware аар убунту хэрэглээд явж байгаа л даа, цонхноос бүрэн салахад боломж бага юм.

    ReplyDelete
  6. @Anonymous -д

    Та Убунту дээрээ VMWare ачааллаад түүн дээрээ Цонх7 г асаахад болохгүй гэсэн зүйл үгүй билээ

    ReplyDelete