LINUX.ORG.RU

консольный редактор для кодинга на ноуте

 , , , ,


0

3

достало меня в случае кодинка на ноуте, отсутствие нормальной полноразмерной клавиатуры на которой удобно одновременно home end pgup pgdn и numpad юзать, причем частенько одной рукой. Как понимаю много консольных редакторов функции клавиш навигации по тексту зачастую мапят на кнопки отличные от pgup pgdn etc, что, в данном случае мне собственно и нужно. Единственно хочется такой редактор в котором эти мэппинги навигационных кнопок и кнопок для редактирования были более менее мейнстримные, ну и желательно со встраиваемой подсветкой синтаксиса и нормальной работой автотабуляции, а не такой что когда enter жмешь в конце строки, стоящая скобка в следующей строке автоматически слетает на позицию табуляции правильную по мнению редактора

★★

Ответ на: комментарий от Evgueni

chiwriter — там можно было символ установить не только в строку, но и между ними

Он к сожалению подох без каких-либо следов,

но концепция была интересной. Жаль, что никто позже её не реализовал, так как для простейших формул такой возможности было бы достаточно.

реализовали не позже, а раньше:

A TROFF TUTORIAL by Brian W. Kernighan, на 15 страниц:

page 2/15 troff-tutorial.pdf:

 The single most important rule of using troff is
not to use it directly, but through some intermediary. In
many ways, troff resembles an assembly language -- a 
remarkably powerful and flexible one -- but nonethe-
less such that many operations must be specified at a
level of detail and in form that is too hard for most
people to use effectively.
  For two special applications, there are some programs
that provide an interface to troff for the majority of
users, eqn[2] provides an easy to learn language  for
typesetting mathematics;
... tbl[3]

page 6/15 troff-tutorial.pdf:

6. Local Motions: Drawing Lines and characters

Remember `Area = πr² and the big `P' in the Patternoster.
How are they done?

..... tl;dr

Thus
      Area = \(*pr\u2\d

produces 
      
      Area = πr²

to make the `2' smaller, bracket it with \s-2...\s0. Since \u
and \d refer to the current point size, be sure to put
them either both inside or both outside the size 
changes, or you will get an unbalanced vertical motion.

... \tl;dr: \u \d \v'+motion' \v`-motion`

For example to move the `P` down we used

 .in +0.6i    (move paragraph in)
 .ll -0.3i    (shorten lines)
 .ti -0.3i    (move P back)
 \v'2'\s36P\s0v'-2'ater noster qui est in caelis ...

A minus sign causes upward motion, while no sign or a
plus sign means down the page. Thus \v'-2' causes an
upward vertical motion of two line space.
....

page 4/15 troff-tuforial.pdf

  Thus to get ∑(α×β)→∞ in bare troff we have to type

    \(*S\(*a\(mu\(*b) \(-> \(if

  ...
    In eqn[2] the same effect can be achieved with
the input
     SIGMA (aplpha times beta ) -> inf
which is less concise, but clearer to the uninitiated.

ещё в качестве мануала по troff хороша книжка UNIX Text processing Dale Doughery and Tim O’Reilly от соответствующего издательства, utp-1.0.pdf

там про troff и mm, ms макросы расписано в подробностях.

также хорошие есть примеры по troff ms и соответствующие pdf в документации на plan9 и inferno (где troff умеет в utf-8).

самый продвинутый troff для меня по качеству генерируемых самодостаточных PDF с внедрёнными шрифтами, в том числе и TrueType – по видимому, heirloom troff.

также неплохи troff из plan9 и plan9port (под инферно нет, надо бы портировать с си на лимбо)

anonymous
()
Ответ на: комментарий от Evgueni

troff похож на простой императивный язык для линотипа (вроде ETAOIN SHRDLU из рассказа Бестера) :

  • есть команды перемещения, циклы, ветвления

  • «ассемблер для документации» где нужно понимать как устроена эта машина

  • можно накидать макросов поверх которые например чтобы расставлять колонтитулы используют регистры, .while команды, запуск и перезапуск других макросов

  • команды в относительной адресации либо восстановить без аргументов старый параметр

  • макросы могут быть с параметрами, и например с двойным цитированием

 .de PP       \" begin define macro PP
 .ps \\n(PS   \" reset size
 .vs \\n(VSp  \" spacing
 .ft R        \" font
 .sp 0.5v     \"half a line
 .ti +3m
 ..           \" end define macro PP

чтобы показать раскрытие в месте использования, не определения (динамическое замыкание vs. лексическое)

собственно, язык примитивный императивный вместо лиспа с замыканиями, поэтому команды с относительными +n,-n и безаргументов чтобы восстановить environment.

окружения 13. Environments там довольно громоздко наколбасили.

в похожем стиле были также WGML из Watcom C/C++/fortran, там на основе GML и SCRIPT тоже было довольно низкоуровнево поначалу (если не оборачивать макросами).

mom по видимому, самый удобный набор макросов для groff (groff тоже нормально поддерживает уникод)

pipeline для troff вида cat $file.ms |eqn|tbl|grap|pic| troff |lp |ps2pdf -

нужно сочинять вручную, подбирать нужные препроцессоры.

pic кстати тоже неплохой DSL для отрисовки диаграмм.

в этом смысле, этот pipeline похож на compiler driver того же gcc (который шеллскрипт для запуска нужного gcc бинарника)

heirloom troff здесь пытается генерировать pdf сам, и понимает современные шрифты и уникод сам.

он использует алгоритм разбиения на клей и боксы из теха, поэтому обычно там результат выглядит более прилично чем в обычном troff.

но тоже это всё (как и базовый tex) всё ещё черезчур императивно

больше в декларативности продвинулся тот же lout, в котором документ – это структурированный объект, в духе функциональной геометрии. собственно, lout и написан в большей степени на postscript чем на запускалке на си для этого postscript.

ещё больше декларативности в какой-то википодобной разметке,

ну или далее в typesetter на схеме типа skribilo/Guile либо Scribe/Racket (тот же Pollen «почему лисп, почему racket» из thebeautifulracket)

или каком-нибудь pandoc на хаскелле.

собственно, засилье императивщины надо бы победить окончательно.

автор lout пытался на эту тему думать в lout 3 aka nonpareil

это примерно на Eiffel если переписать lout 2.

anonymous
()
Ответ на: комментарий от Evgueni

но для восприятия уже написанного текста лучше иметь возможность для рендиренга как шрифтов, так по хорошему и формул. В идеале я совершенно не против транслятора на лету аля LaTeX. В принципе подобные реализации имеются, но в основном коммерческого характера (см. BaKoMa TeX)

да, если посмотреть, например, как устроен BaKoMa TeX:

есть встраиваемый скриптовый язык типа форта или nncron, на котором реализован парсинг метрик шрифтов и инкрементальный, итеративный предпросмотр в рамках клея и боксов вместо того как сделано обычно в текстовых редакторах со знакоместами.

похожим образом сделан и TeXmacs, только там схема Guile и свой формат документов в виде структурированых S-выражений или изомофрного XML.

TeX Word и прочие по видимому, тоже реализуют свой рендерер более-менее адекватный.

обычно текст с рендерингом клея и боксов смотрится лучше чем в том же браузере или простом базовом troff.

если бы развивалась ветка нормальных скриптовых языков встраиваемых в условно консольный, условно досовский графический текстовый редактор:

  • MultiEdit, SlickEdit содержали довольно навороченный язык макросов, с командами перемещения, GUI/TUI и т.п.

  • XEDIT, KEDIT, X2, THE – встроенный REXX

  • Sprint, Brief, SideKick от Borland – и встроенный макроязык типа интерпретируемого Си в духе SlickEdit(который кажется из Brief/Sprint и произошёл), и даже препроцессор в WYSIWIM в духе troff (Sprint, кажется). Версия офиса на основе этого ворда была, но GUI там добавили с опозданием. Они реально в 1985-1991 пытались продавать подобную сборку troff/SCRIBE + консольный текстовый редактор «в коробке», всё в одном. Не очень успешно коммерчески.

  • lbForth, кажется, метациклический форт на форте. там в репозитории был uEmacs расширяемый на форте (а не на лиспе как в GNU/Emacs или сиподобном как в другом MicroEmacs).

  • простой typesetter в духе SCRIBE на самом postScript (функциональном форте) был где-то в окрестности альтернативного ghostscript рендерера PS. Там всего примерно 20 тысяч строк, не более.

внезапно, в этом же ряду можно и продолжать условный acme из plan9, limbo (только что-то нужно делать с рендерером в картинку, а не в обычный текст)

или например TempleOS и текстовый редактор оттуда, на священной сишечке (HolyC) и формат DolDoc документов.

DocDoc в этом смысле напоминает скрипты в духе MultiEdit, SlickEdit : можно было делать диалоговые окна и прочий мелкий GUI. а также, например, спрайты, музыку и т.п.

ED из TempleOS логично тоже расширять скриптами на HolyC непосредственно.

в общем, развивая это направление вполне мог бы получиться некоторый векторный гипертекстовый фидонет более полноценный графический гипертекст и гипермедия, в духе мультимедиа энциклопедий из начала 90х.

а также в духе графических BBS и ANSI музыки (например, тот же RIPscrip и подобное)

потенциально, подобный rich media гипертекст был бы также конпелируемым, а не интерпретируемым.

в какие-то бинарные объекты.

например, наподобие *.odc файлов из BlackBox Component Pascal.

или того же PDF формата который по сути и есть ООБД словаря объектов + display model PDF/DisplayPostScript виртуальная машина для проигрывания.

однако, в этом словаре объектов есть отдельные страницы.

то есть: PDF смотрелке нет необходимости (в отличие например, от PS) делать интерпретацию всех предыдущих страниц.

поэтому тот же PDF, DjVu – нужны меньшие накладные расходы на отрисовку только текущей страницы.

anonymous
()
Ответ на: комментарий от Evgueni

emacs –daemon emacsclient …

если рассмотреть процессы загрузки следующих ОСей:

  • GNU/Emacs как оболочка+ ось на Elisp

  • LFS и какой-нибудь busybox

  • Plan 9 и acme, rio, вот это всё

  • Inferno и Limbo, dis, acme, вот это всё

  • TempleOS на священной сишечке, вот это всё

  1. запускается какая-то оболочка операционной среды, а не системы.

1.1. на голом железе – образ запускается при включении

1.2. тот же emu.exe или emu.elf запускается из хост-оси

  1. эта среда emu.exe (Inferno) реализует абсолютный минимум сущностей, минимум нужных, достаточно расширяемых парадигм.

например, без ключика -g можно GUI не запускать, только REPL для shell (написанного на limbo).

то есть, эта среда должна реализовать каким-то образом сеть (через STREAM и dial из plan9, а не BSD сокеты); процессы (/prog и прочие mount bind); ещё что-то (например: типизированные каналы Хоара, зелёные треды/корутины/горутины; псевдофайлы в смысле персистентных объектов которые предоставляет styx Plan9FS файловый сервер).

эти сущности – объекты гостя, а не хоста.

далее например Dis VM регистровая а не стековая; модули на базе DIS байткода; типизированный си (limbo) со ссылками и ADT; динамическая загрузка модулей указанием вручную.

если посмотреть на Inferno – это Plan9, реализованный как виртуальная машина.

например, ассемблер 8a реализован почти как известный ассемблер на awk от Henry Spencer: по сути, 8a в инферно в основном реализован на #define макросах в духе C препроцессора + ещё довольно простой DSL на yacc (всего порядка 20 тысяч строк).

если посмотреть на процесс запуска Plan9 – это более простой юникс. 40 системных вызовов вместо 300х, dial вместо accept, notify вместо signal, rfork вместо dlopen/dlclose/dlsym, COFF вместо ELF.

кеновая сишечка kencc из plan9 вместо gcc-шной сишечки.

gcc есть скомпелированный под plan9 32-bit, это примерно gnusrc.tgz+gnubin.tgz+ape.tgz, последние 2 архива занимают 46 мегабайт. распакованный gnubin.tgz – 150 Мб. это /386/bin/gnu/i386-lucent-plan9/3.0 c нужными бинарниками на 24 Мб, Gcc/g++ 3.0

/sys/lib/gnu/i386-lucent-plan9/ldscripts это linker scripts для ld, генерируют нужные COFF форматы а не ELF.

несмотря на то что dlopen/dlclose/dlsym нет и glibc нет (в plan9 свой lib9) – работает и запускается, в монолитных бинарниках.

актуальный DO NOT INSTALL релиз 9front-10522.386.gz это примерно 242 Мб .gz, распакованный ISO образ занимает 458 Мб.

все исходники plan9 это примерно 72 Мб в директориях /sys/src из которых утилиты userland /sys/src/cmd это 53 Мб , ядро это /sys/{boot,9} – ещё 3 Мб + 7.5 Мб.

документация в /sys/doc в troff ms, *.ps, *.pdf – ещё 7 Мб.

скомпилированные в /386 бинарники – 136 Мб.

Сравните с примерно 150 Мб бинарников одного только GCC 3.0 под Plan9.

весь plan9 занимает меньше места, чем одно только GCC 3.0 под Plan9

даже /sys/games/lib/doom/doom1.wad занимает меньше места, ЛОЛ

в Plan9 есть няшная сишечка: kencc и няшный libc: lib9, уникод в utf8 с рунами.

среда разработки Limbo это примерно 12-20 Мб: kencc для i386 и исходники для сборки mk-файлов. документация тоже в troff ms и pdf, кстати.

#ifdef consideref harmful link – нормально структурированые си исходники.

от того же Henry Spencer, который написал

  • ассемблер на awk, aaa и [десять_заповедей] (http://doc.cat-v.org/henry_spencer/ten-commandments) священной сишечки
    (нет, пока ещё не священной – а кеновой, то есть: портабельной сишечки)
anonymous
()
Ответ на: комментарий от anonymous

можно ли ещё проще? да, можно.

например, у Фабриса Белларда был jslinux который собирался tcc в образ для qemu.

совершим над собой мозговое усилие и избавимся от tcc/kencc, libc, ELF и dynamic library.

вот раньше бывали, например, бейсики в ПЗУ и монитор – встроенный отладчик и дизассемблер.

где-то и сейчас есть – например, в PL/I-KT есть дизассемблер и отладчик в стандартном рантайме (которым даже ядро winxp отлаживали, ошибку нашли).

как выглядела бы подобная система для няшной сишечки?

ну примерно как TempleOS:

  • есть сишечка, и не простая, а золотая. не кеновая из plan9, а священная.

  • это примерно как интерпретируемый си – Pike, Ch, Pawn только не интерпретируемый. он сначала JIT-компилирует все исходники, потом запускает.

  • соответственно, есть дизассемблер Uf("helloworld.hc");, отладчик, монитор. и встроенный в святую сишку ассемблер.

  • язык соответственно, просто умеет подключать _extern уже написанные сконпелированные подфункции

  • при загрузке ОС – все исходники непосредственно читаются и конпелируются. получаем образ ОС в памяти, JIT-компилированный.

  • ничего нет. ложка есть.

  • ни вилки (форка), ни dlopen/dlclose/dlsym, ни прочих 40 функций API.

  • то есть: конпелятор священной сишечки, монитор, отладчик, текстовый редактор, терминал и шелл – встроены в ядро.

  • объектников *.o, бинарников *.elf, ld.so динамических библиотек – тоже нет.

  • они и не нужны – у нас #include("header.hc"); читает с диска исходник, конпелирует, запускает.

  • исходники и прочие ебилды опакеченные поставляются в redsea *.ISO пакетах, накладываемых в корень обычного ISO как оверлеи.

сюда ещё можно добавить и другие более интересные ОС.

не только Емакс ОС, и юниксы.

а например, A2 ActiveOberon, BlueBox Component Pascal, sectorlisp by justine.lol, ChrysaLisp / Elate / TaoOS/ AmigaDE by Chris Hinsley

то есть: что-то на акторной модели активных объектов.

но суть я понимаю, понятна: минималистичная среда, расширяемая на «самой себе», метациклически – устроена примерно одинаково в целом, однако есть существенные различия в степени минимализма.

например, возьмём простой 64-разрядный ДОС и монитор с отладчиком, ассемблером и дизассемблером, редактором, шеллом и конпелятором – встроенным в само ядро.

получим священную сишечку HolyC и TempleOS.

который почти юникс, но не совсем. например, сети в духе Plan9 всё ещё не хватает.

хотя были и IRC серверы и клиенты под TempleOS – там как-то справились.

то есть: ось храма, загружающаяся меньше секунды в среду разработки со встроенным IRC сервером и IRC-ботом – по видимому, одна из самых минималистичных сред разработки.

на священной сишечке – но не юникс. метапрог эдакий

anonymous
()
Ответ на: комментарий от anonymous

GNU/Emacs как оболочка+ ось на Elisp

или XEmacs и соответствующий WM на Elisp (хотя там компилируемые в Си модули были изначально, а не как в GNU/Emacs только недавно добавили)

или LEM который Emacs на CommonLisp + GUI на SDL + плагины/модули на CommonLisp и livecoding

anonymous
()
Ответ на: комментарий от Zhbert
Vim или nano, вот в чем вопрос. Достойно ль
Смиряться под ударами судьбы,
Иль надо оказать сопротивленье
И в смертной схватке с наркоманским морем комбинаций
Покончить с ними? Превозмочь. Осилить.
И знать, что этим обрываешь цепь
Клавиатурных мук и тысячи лишений,
Присущих nano. Это ли не цель
Желанная? Vim осилить.
Уснуть… и видеть сны? Вот и ответ.
Какие режимы в том чудном сне приснятся,
Когда покров vim motions снят?
Вот в чем разгадка. Вот что удлиняет
запястьям нашим жизнь на столько лет.
cocucka_B_TECTE
()
Ответ на: комментарий от anonymous

по сути, 8a в инферно в основном реализован на #define макросах в духе C препроцессора + ещё довольно простой DSL на yacc (всего порядка 20 тысяч строк)

/usr/inferno/asm – 82 Кб, из них obj.map 53 Кб (итого 30Кб)

/usr/inferno/utils/8a – 101 Кб, из них obj.map 61 Кб (итого 40 Кб. здесь любопытен l.s

бинарник например виндовый PE32 в /usr/inferno/Nt/386/bin/8a.exe – 98 Кб, исходники на этом ассемблере – в исходниках ядра emu.exe и библиотек, например /usr/inferno/libkern/memmove-386.s

видно, что оно – ассемблер из Plan9.

/usr/inferno/utils/8a/l.s

/*
 * Memory and machine-specific definitions.  Used in C and assembler.
 */

/*
 * Sizes
 */
#define BI2BY           8                       /* bits per byte */
#define BI2WD           32                      /* bits per word */
#define BY2WD           4                       /* bytes per word */
#define BY2PG           4096                    /* bytes per page */
#define WD2PG           (BY2PG/BY2WD)           /* words per page */
#define PGSHIFT         12                      /* log(BY2PG) */
#define PGROUND(s)      (((s)+(BY2PG-1))&~(BY2PG-1))

#define MAXMACH         1                       /* max # cpus system can run *

/** .... TL;DR ..... **/

/*
 *  flag register bits that we care about
 */
#define IFLAG   0x200

#define OP16    BYTE    $0x66

/*
 *      about to walk all over ms/dos - turn off interrupts
 */
TEXT    origin(SB),$0

        CLI

#ifdef BOOT
/*
 *      This part of l.s is used only in the boot kernel.
 *      It assumes that we are in real address mode, i.e.,
 *      that we look like an 8086.
 */
/*
 *      relocate everything to a half meg and jump there
 *      - looks wierd because it is being assembled by a 32 bit
 *        assembler for a 16 bit world
 */

...

        MOVL    $0,SI
        MOVL    SI,DI
        CLD; REP; MOVSL
/*      JMPFAR  0X8000:$lowcore(SB) /**/
         BYTE   $0xEA
         WORD   $lowcore(SB)
         WORD   $0X8000

TEXT    lowcore(SB),$0

/*
 *      now that we're in low core, update the DS
 */

        MOVW    BX,DS

/*
 *      goto protected mode
 */
/*      MOVL    tgdtptr(SB),GDTR /**/
         BYTE   $0x0f
         BYTE   $0x01
         BYTE   $0x16
         WORD   $tgdtptr(SB)
        MOVL    CR0,AX
        ORL     $1,AX
        MOVL    AX,CR0

/** .... TL;DR ..... **/

#endif BOOT

        /*
         * Clear BSS
         */
/** .... TL;DR ..... **/

        /*
         *  make a bottom level page table page that maps the first
         *  16 meg of physical memory
         */
        LEAL    tpt-KZERO(SB),AX        /* get phys addr of temporary page table */
        ADDL    $(BY2PG-1),AX           /* must be page alligned */
        ANDL    $(~(BY2PG-1)),AX        /* ... */
        MOVL    $(4*1024),CX            /* pte's per page */
        MOVL    $((((4*1024)-1)<<PGSHIFT)|PTEVALID|PTEKERNEL|PTEWRITE),BX
setpte:
        MOVL    BX,-4(AX)(CX*4)
        SUBL    $(1<<PGSHIFT),BX
        LOOP    setpte

        /*
         *  make a top level page table page that maps the first
         *  16 meg of memory to 0 thru 16meg and to KZERO thru KZERO+16meg
         */
        MOVL    AX,BX
        ADDL    $(4*BY2PG),AX
        ADDL    $(PTEVALID|PTEKERNEL|PTEWRITE),BX
        MOVL    BX,0(AX)
        MOVL    BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+0)(AX)
        ADDL    $BY2PG,BX
        MOVL    BX,4(AX)
        MOVL    BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+4)(AX)
        ADDL    $BY2PG,BX
        MOVL    BX,8(AX)
        MOVL    BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+8)(AX)
        ADDL    $BY2PG,BX
        MOVL    BX,12(AX)
        MOVL    BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+12)(AX)


/** .... TL;DR ..... **/

это ассемблер у них такой, да.

с сишечным препроцессором.

anonymous
()

консольный редактор

ты через ssh на серваке что ли редактируешь? даже в этом случае можно нормальным гуём пользоваться.

anonymous
()
Ответ на: комментарий от cocucka_B_TECTE
Мириться лучше со знакомым злом,
Чем бегством к незнакомому стремиться!
Так всех нас в трусов превращает мысль,
И вянет, как цветок, решимость наша
В бесплодье умственного тупика,
Так погибают замыслы с размахом,
В начале обещавшие успех,
От долгих отлагательств. Но довольно!

и его выносят.

- Где теперь твои каламбуры, твои смешные выходки, твои куплеты?
 Где заразительное веселье, охватывавшее всех за столом? 
Ничего в запасе, чтоб позубоскалить над собственной беззубостью?  
 Полное расслабление? 
Ну-ка, ступай в будуар великосветской женщины и скажи ей, 
какою она сделается когда-нибудь, 
несмотря на румяна в дюйм толщиною. 
Попробуй рассмешить ее этим предсказанием.

о, бедный йорикъ!

anonymous
()

Единственно хочется такой редактор в котором эти мэппинги навигационных кнопок и кнопок для редактирования были более менее мейнстримные, ну и желательно со встраиваемой подсветкой синтаксиса и нормальной работой автотабуляции

вот есть например SETEDIT, консольнее некуда

ДОСовый TUI на TurboVision, из вордстара удобные «борландовские» вордстаровые сокращения типа ^K-B/^K-K

текстовым «процессором» типа WordStarа похоже современным является Word**Ts**ar site с теми же кнопками ^QX[SEC], ^KB/^KC/^KV/^KY/^KK

есть исходники, GUI под Qt

troff-подобные WYSIWIM (а не WYSIWIG) команды там

начинаются в конце, отсюда:

Dot Commands

Dot commands not implemented will have a red background (in default color mode) for non-implemented commands. (borrowed from Robert J. Sawyer’s site: https://sfwriter.com/wsformat.txt)

Sorry for the way this looks. I’ll find something better.

The file implemented.xlsx (in the Sourceforge repository) will show whether it’s been implemented or not. 
anonymous
()
Ответ на: комментарий от anonymous

про клавиатурные команды в стиле WordStar было здесь: sfwriter.com/wordstar.htm

довольно удобные команды, кстати. почти как в vim – не нужно двигать с основного ряда. но режимов нет, как в вим (и это прекрасно!)

там же есть сборка досбоксовая с wordstar

описание формата здесь wsformat.txt

на troff не совсем похоже, на самом деле – формат бинарный, 8 бит используется (и возможны грабли с кириллицей)

в общем, нужно что-то подобное с utf8 кодировкой и расширяемыми возможностями.

ах да. есть же божественный troff

anonymous
()
Ответ на: комментарий от anonymous

вот макроязык у этого консольного SetEdit правильный – лисп, разумеется.

edi054s,zip/contrib/setedit/cfgfiles/macros.slp:

(defmacro 'Make Function Text'
 (eval
  ; add white space
  (InsertText '\n\n')
  ; go before beginning of intended function name
  (SendCommands cmcLineUp cmcLineUp cmcLineStart
  ; mark function name
                cmcSelectOn cmcWordRight cmcSelectOff)
  ; copy for prototyping
  (SendCommands cmcLineStart cmcLineDown cmcCopyBlock cmcLineUp cmcLineStart)
  ; add "Function" to comment area
  (InsertText '\nFunction: ')
  ; put in comment lines before and after
  (SendCommands cmcLineEnd cmcLineUp cmcLineStart)
  (InsertText '/*****************************************************')
  (SendCommands cmcLineStart cmcLineDown cmcLineEnd)
  (InsertText '\n\n')
  (SendCommands cmcLineStart)
  (InsertText 'Description:\n')
  (SendCommands cmcLineStart)
  (InsertText '*****************************************************/\n')
  ; go back to end of name
  (SendCommands cmcLineDown cmcLineEnd)
  )
)
(defmacro 'Test RunProgram Filter'
 (eval
  (setv "input" (GetSelection))
  (if (length input)
   ; Call the filter
   (eval
    (setv "program" (AskString "The output of the filter will replace the selection" "External filter"))
    (if (length program)
     (eval
      (setv "output" (RunProgramRedir program input))
      (if (length output)
       (eval
        (SendCommands cmcCut)
        (InsertText output 1)
       )
       ; Inform we didn't get text
       (MessageBox "No output from the filter")
      )
     )
     ; Ask the user to enter something
     (MessageBox "Please enter the filter to use")
    )
   )
   ; Ask the user to select something firt
   (MessageBox "Please select a text first")
  )
 )
)

ну и чем этот Borland C++ TurboVision IDE не емакс, спрашивается?

надо бы что-то подобное запилить под TempleOS, на священной сишечке.

но сначала придётся что-то типа турбо вижна написать. а у нас нам С++ нет, только HolyC.

лисп (реализация mal на HolyC) там уже есть.

anonymous
()