Порой просто не хочется запускать Emacs для того чтобы просто
посмотреть исходник на LISP. И раз уж я ССЗБ то пользовался для
просмотра midnight-commander или nano. Никакой подсветки LISP там и в
помине нет. Ну вот однажды и надоело мне сидеть у камина с бокалом
кьянти и мечтать как бы кто сделал для меня это благо. Я закатал рукава и
сделал так:
Для mc
1. В первую очередь нудно включить встроенный в mc редактор. Он уже имеет подсветку синтаксиса, но знает лишь пару десятков команд.
2. Заменим в файле /usr/share/mac/syntax/lisp.syntax на такое содержимое:
wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-*0123456789
context default
keyword whole apply yellow
keyword whole and yellow
keyword whole car yellow
keyword whole caar yellow
keyword whole cadr yellow
keyword whole cdar yellow
keyword whole cddr yellow
keyword whole cdr yellow
keyword whole close yellow
keyword whole cond yellow
keyword whole cons yellow
keyword whole count yellow
keyword whole defvar brightcyan
keyword whole defstruct brightcyan
keyword whole defun yellow
keyword whole do yellow
keyword whole eq yellow
keyword whole eql yellow
keyword whole equal yellow
keyword whole eval yellow
keyword whole format yellow
keyword whole if yellow
keyword whole let* yellow
keyword whole let yellow
keyword whole list yellow
keyword whole load yellow
keyword whole make-package yellow
keyword whole mapcar yellow
keyword whole not yellow
keyword whole null yellow
keyword whole numberp yellow
keyword whole open yellow
keyword whole or yellow
keyword whole pprint yellow
keyword whole prin1 yellow
keyword whole princ yellow
keyword whole print yellow
keyword whole provide yellow
keyword whole read yellow
keyword whole require yellow
keyword whole set yellow
keyword whole setf yellow
keyword whole setq yellow
keyword whole slot-value yellow
keyword whole sort yellow
keyword whole stringp yellow
keyword whole terpri yellow
keyword whole write yellow
keyword whole defmacro brightcyan
keyword whole case yellow
keyword whole progn yellow
keyword whole when yellow
keyword whole loop yellow
keyword whole unless yellow
keyword whole with-output-to-string yellow
keyword whole labels yellow
keyword whole return-from yellow
keyword whole handler-case yellow
keyword whole defmethod yellow
keyword whole eval-when yellow
keyword whole declare yellow
keyword whole with-open-file yellow
keyword whole multiple-value-bind yellow
keyword whole defclass brightcyan
keyword whole with-standard-io-syntax yellow
keyword whole getf yellow
keyword whole mapcar yellow
keyword whole remove-if-not yellow
keyword whole dolist yellow
keyword whole defparameter brightcyan
keyword whole defgeneric yellow
keyword whole consp yellow
keyword whole lambda red
keyword whole for red
keyword whole nil brightred
keyword whole t brightred
keyword whole in-package brightred
keyword whole defpackage brightred
keyword whole error brightred
keyword #' brightmagenta
keyword ' brightmagenta
keyword , brightmagenta
keyword ( brightcyan
keyword ) brightcyan
# Keyword declarations and keywords
keyword :\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] white
keyword &\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] brightgreen
# Comments
context ; \n brown
# Strings
#context \* \* brightmagenta
context " " brightgreen
keyword \\" green
keyword \\\\ green
3. В итоге получим такую картинку
2. В него вписываем такое содержимое:
## Here is an example for Common-Lisp.
## Adapted from http://cl-cad.blogspot.com
## (litetabs@gmail.com)
syntax "lisp" "\.lisp$" "asd" "\.asd$"
color green "\<(defun|with-open-stream|format|setf|apply|and|car|caar|cadr|cdar|cddr|cdr|close|cond|cons|count|do|eql|equal|eval|if|let*|let|list|load|make-package|mapcar|not|null|numberp|open|or|pprint|prin1|princ|print|provide|read|require|setq|slot-value|sort|stringp|terpri|write|case|progn|when|loop|unless|with-output-to-string|labels|return-from|handler-case|eval-when|declare|with-open-file|multiple-value-bind|with-standard-io-syntax|getf|remove-if-not|dolist|consp)\>"
color red "\<(error|else|for|in-package|defpackage|defsystem|lambda)\>"
color cyan "\<(defclass|defstruct|defvar|defconstant|defmethod|defgeneric|defparameter)\>"
color brightred "\<(t|nil)\>"
icolor yellow "\:\{?[0-9A-Z_!@#$*?-]+\}?"
color brightgreen ""(\\.|[^"])*""
icolor blue "\*\{?[0-9A-Z_!@#$*?-]+\}?"
color cyan "(^|[[:space:]]);.*$"
3. Для того чтобы nano узнал о новом синтаксисе, открываем файл /etc/nanorc
#: nano /etc/nanorc
4. В самый конец вписывает строку:
## Common-Lisp files
include "/usr/share/nano/lisp.nanorc"
Теперь можно любоваться результатом
Плюс
nano в том что без лишней крови подсвечивает и asd файлы и в нормальной
навигации по файлу клавишами. Из минусов - нет подсветки парных скобок.
Это лишь то что сразу бросалось в глаза, по этому над подсветкой синтаксиса еще стоит поработать. В настройках есть еще куча косяков, так что для отправки разработчикам они пока не годятся, но вот пользоваться можно уже сейчас. Надеюсь среди читателей найдутся те у кого завалялись пара-тройка дельных советов.
Для mc
1. В первую очередь нудно включить встроенный в mc редактор. Он уже имеет подсветку синтаксиса, но знает лишь пару десятков команд.
2. Заменим в файле /usr/share/mac/syntax/lisp.syntax на такое содержимое:
wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-*0123456789
context default
keyword whole apply yellow
keyword whole and yellow
keyword whole car yellow
keyword whole caar yellow
keyword whole cadr yellow
keyword whole cdar yellow
keyword whole cddr yellow
keyword whole cdr yellow
keyword whole close yellow
keyword whole cond yellow
keyword whole cons yellow
keyword whole count yellow
keyword whole defvar brightcyan
keyword whole defstruct brightcyan
keyword whole defun yellow
keyword whole do yellow
keyword whole eq yellow
keyword whole eql yellow
keyword whole equal yellow
keyword whole eval yellow
keyword whole format yellow
keyword whole if yellow
keyword whole let* yellow
keyword whole let yellow
keyword whole list yellow
keyword whole load yellow
keyword whole make-package yellow
keyword whole mapcar yellow
keyword whole not yellow
keyword whole null yellow
keyword whole numberp yellow
keyword whole open yellow
keyword whole or yellow
keyword whole pprint yellow
keyword whole prin1 yellow
keyword whole princ yellow
keyword whole print yellow
keyword whole provide yellow
keyword whole read yellow
keyword whole require yellow
keyword whole set yellow
keyword whole setf yellow
keyword whole setq yellow
keyword whole slot-value yellow
keyword whole sort yellow
keyword whole stringp yellow
keyword whole terpri yellow
keyword whole write yellow
keyword whole defmacro brightcyan
keyword whole case yellow
keyword whole progn yellow
keyword whole when yellow
keyword whole loop yellow
keyword whole unless yellow
keyword whole with-output-to-string yellow
keyword whole labels yellow
keyword whole return-from yellow
keyword whole handler-case yellow
keyword whole defmethod yellow
keyword whole eval-when yellow
keyword whole declare yellow
keyword whole with-open-file yellow
keyword whole multiple-value-bind yellow
keyword whole defclass brightcyan
keyword whole with-standard-io-syntax yellow
keyword whole getf yellow
keyword whole mapcar yellow
keyword whole remove-if-not yellow
keyword whole dolist yellow
keyword whole defparameter brightcyan
keyword whole defgeneric yellow
keyword whole consp yellow
keyword whole lambda red
keyword whole for red
keyword whole nil brightred
keyword whole t brightred
keyword whole in-package brightred
keyword whole defpackage brightred
keyword whole error brightred
keyword #' brightmagenta
keyword ' brightmagenta
keyword , brightmagenta
keyword ( brightcyan
keyword ) brightcyan
# Keyword declarations and keywords
keyword :\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] white
keyword &\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] brightgreen
# Comments
context ; \n brown
# Strings
#context \* \* brightmagenta
context " " brightgreen
keyword \\" green
keyword \\\\ green
3. В итоге получим такую картинку
В mc редактор достаточно туповат, но умеет подсвечивать парные скобки.
Но если вы как и я используете nano, то для вас путь особый! По
умолчанию он вообще не знает о существовании Common-Lisp, по этому:
1. Создаем в /usr/share/nano/ файл описания подсветки синтаксиса
#touch /usr/share/nano/lisp.nanorc2. В него вписываем такое содержимое:
## Here is an example for Common-Lisp.
## Adapted from http://cl-cad.blogspot.com
## (litetabs@gmail.com)
syntax "lisp" "\.lisp$" "asd" "\.asd$"
color green "\<(defun|with-open-stream|format|setf|apply|and|car|caar|cadr|cdar|cddr|cdr|close|cond|cons|count|do|eql|equal|eval|if|let*|let|list|load|make-package|mapcar|not|null|numberp|open|or|pprint|prin1|princ|print|provide|read|require|setq|slot-value|sort|stringp|terpri|write|case|progn|when|loop|unless|with-output-to-string|labels|return-from|handler-case|eval-when|declare|with-open-file|multiple-value-bind|with-standard-io-syntax|getf|remove-if-not|dolist|consp)\>"
color red "\<(error|else|for|in-package|defpackage|defsystem|lambda)\>"
color cyan "\<(defclass|defstruct|defvar|defconstant|defmethod|defgeneric|defparameter)\>"
color brightred "\<(t|nil)\>"
icolor yellow "\:\{?[0-9A-Z_!@#$*?-]+\}?"
color brightgreen ""(\\.|[^"])*""
icolor blue "\*\{?[0-9A-Z_!@#$*?-]+\}?"
color cyan "(^|[[:space:]]);.*$"
3. Для того чтобы nano узнал о новом синтаксисе, открываем файл /etc/nanorc
#: nano /etc/nanorc
4. В самый конец вписывает строку:
## Common-Lisp files
include "/usr/share/nano/lisp.nanorc"
Это лишь то что сразу бросалось в глаза, по этому над подсветкой синтаксиса еще стоит поработать. В настройках есть еще куча косяков, так что для отправки разработчикам они пока не годятся, но вот пользоваться можно уже сейчас. Надеюсь среди читателей найдутся те у кого завалялись пара-тройка дельных советов.
Комментариев нет:
Отправить комментарий