Многооконный текстовый редактор clip_we

Аргументы

Аргументы - одно или несколько имен файлов (через пробел)
Например, clip_we *.prg
	  clip_we a.prg b.prg ../include/i.ch

Меню

Меню вызывается по клавише ESC - это по умолчанию, при желании можно поменять "горячие" клавиши. См. настройка

Работа с блоками

Редактор различает два типа блоков - строчный и прямоугольный. Отметка блока очуществляется либо через меню, либо с помощью клавиатуры. "Горячие" клавиши отметки начала/конца строчного блока F7, а прямоугольного F8.
Отмеченные блоки выделяются цветом, снять отметку блока можно либо отметив новый блок, либо с помощью специальной команды через меню или нажав клавиши Ctrl+P.
Блоки можно копировать, переносить, удалять, копировать в буфер обмена и вставлять из буфера в другом окне, копировать блок из файла и записывать на диск. При копировании строчного блока он помещается между текущей строкой и предыдущей, а при копировании прямоугольного блока - начиная с текущей строки и колонки.
Перемещение отличается от копирования тем, что блок удаляется с прежнего места.
Удаление либо через меню, либо по "горячей" клавише Alt+Y. При этом
При копировании блока в буфер, прежнее содержимое буфера (если оно существовало) уничтожается, блок остается помеченным и сохраняется в буфере при удалении блока из текста вплоть до помещение в буфер нового блока или до завершения работы программы.

Вставка/удаление символов

Редактор поддерживает режимы вставки и замещения символов. Перемещение курсора - клавиши <Up>, <Down>, <Left>, <Right>,
на страницу вверх/вниз - <PgUp>/<PgDown>,
в начало текста - <Ctrl+PgUp>,
в конец текста - <Ctrl+PgDown>,
на начало строки - <Home>,
в конец строки - <End>,
удаление символа: над курсором - <Del>,
слева от курсора - - <BackSpace>,
удаление символов от текущего символа до конца строки - <Ctrl+Q>,
удаление символов от текущего символа до начала строки - <Ctrl+BS>,
удаление строки - <Ctrl+Y>,
удаление отмеченного блока - <Alt+Y>,

Поиск

Поиск (поиск с заменой) по шаблону, регулярному выражению с текущей позиции до конца/начала текста, блока, или во всех окнах. Через меню или по "горячей" клавише F6 вызывается объект "диалог", где и задается шаблон поиска, режимы (только слово, учитывать регистр и пр), направление поиска (вперед, назад) и где искать (текст, блок, во всех окнах). Продолжение поиска - Ctrl+L - поиск вперед.
Поиск идентичных символов вперед/назад по тексту. В случае поиска одного из парных символов { }, [ ], ( ), < > ищется пара для текущего. Если это открывающая скобка, то ищется парная ей закрывающая. И наоборот.
Поиск структур по правилам CLIPPER:

Форматирование

Форматирование строки/абзаца по заданным настройкам (ширина строки, отступ, перенос в словах ...)

Макроподстановки

Для быстрой и красивой работы придуманы шаблоны. Шаблон представляет собой строку символов, которая по команде заменяется на более сложную конструкцию - одну или несколько строк. Шаблоны и строки замены можно конструировать по своему вкусу и желанию. Они хранятся в домашнем каталоге в директории .clipв файле с именем .templ. Примеры и формат файла $HOME/.clip/.templ.
Макроподстановка отличается от шаблона тем, что по команде - выполнить макроподстановку - выполняется команда clip'а и результат помещается в текст. Шаблоны макроподстановки и команды замены берутся из файла $HOME/.clip/.macro

Рисование линий

С помощью редактора Вы можете рисовать простейшие таблицы символами псевдографики. Для этого через меню или при помощи клавиатуры необходимо переключиться в режим рисования (одиночные или двойные линии). Удерживая клавишу <Shift> используйте для рисования клавиши перемещения курсора <Up>, <Down>, <Left>, <Right>

Настройка "горячих" клавиш


"Пользовательские кнопки" при старте загружаются из файла keymaps.po. Он хранится в домашнем каталоге в директории ./clip и компилируется из файла keymaps.prg Вы можете в соответствии со своими требованиями, желаниями и настроениями настроить "горячие" клавиши. Это легко. См. пример ниже.

Пример файла keymaps.prg

/* User key_maps */
#include "inkey.ch"

function init_user_key(key_maps)
local k

	/* for debugger */
	k:=key_maps:debug
	/* Код клавиши 	  Команда */
	k[ K_ESC ]	:=HASH_CallMenu
	k[ K_F1 ] 	:=HASH_Help
	     .........

	/* for text editor */
	k:=key_maps:edit

	/* Код клавиши 	  Код                    Команда */
	k[ K_ESC ]	:=HASH_CallMenu		// call Menu
	k[ K_ALT_X ]	:=HASH_ExitSave		// exit from editor witch save
	k[ K_ALT_B ]	:=HASH_ExitNoSave	// exit from editor witchout save
	k[ K_F1 ]	:=HASH_HelpEdit		// help

	/* file/window function */
	k[ K_F2 ]	:=HASH_SaveFile		// save File
	k[ K_F3 ]	:=HASH_OpenFile		// open file
	k[ K_CTRL_F3 ]	:=HASH_CreateNewFile	// create new file
	k[ K_ALT_N ]	:=HASH_NextWindow	// open next window
	k[ K_ALT_P ]  	:=HASH_PrevWindow	// open previous window
//	k[  ]	:=HASH_ReadOnly		// on/off read only options
//	k[  ]	:=HASH_ListFiles	// listing opening files
//	k[  ]	:=HASH_CloseWindow	// close current window
//	k[  ]	:=HASH_Reload		// reload file

	/* find function */
	k[ K_F6 ]	:=HASH_FindString	// find string
	k[ K_CTRL_F6 ]	:=HASH_FindReplace	// find and replace string
	k[ K_CTRL_L ]	:=HASH_FindNext		// find string to forward
//	k[  ]	:=HASH_FindPrev		// find string to backward
	k[ K_CTRL_O ]	:=HASH_MatchSymbolForward // matching symbol to forward
	k[ K_CTRL_T ]	:=HASH_MatchSymbolBackward // matching symbol to backward

	/* move function */
	k[ K_F4 ]	:=HASH_GoTo		// goto string
	k[ K_CTRL_F4 ]	:=HASH_SavePos		// save current string
	k[ K_CTRL_PGUP ]:=HASH_TopText		// go top text
	k[ K_CTRL_PGDN ]:=HASH_BottomText	// go bottom text

	/* edit function */
	k[ K_F5 ]	:=HASH_Template		// insert template
	k[ K_CTRL_F5 ]	:=HASH_Macro		// insert macro
	k[ K_CTRL_Q ]	:=HASH_DeleteEnd	// delete string from current position to end
	k[ K_CTRL_BS ]	:=HASH_DeleteBack	// delete string from current position to begin string
	k[ K_CTRL_Y ]	:=HASH_DeleteLine	// delete line

	/* block function */
	k[ K_F7 ]	:=HASH_MarkBlockString	// mark/unmark strings block
	k[ K_F8 ]	:=HASH_MarkBlockRect	// mark/unmark rectangle block
	k[ K_F9 ]	:=HASH_CopyBlock	// copy marked block
	k[ K_F10 ]	:=HASH_MoveBlock	// move marked block
	k[ K_CTRL_P ]	:=HASH_CancelBlock	//unmark block
	k[ K_ALT_Y ]	:=HASH_DeleteBlock	// delete marked block
//	k[  ]	:=HASH_CopyClipboard	// copy marked block to clipboard
//	k[  ]	:=HASH_PasteClipboard	// paste block from clipboard
//	k[  ]	:=HASH_SaveBlock	// save marked block as ...
//	k[  ]	:=HASH_LoadBlock	// load block from file


	k[ K_CTRL_U ]	:=HASH_Undo		// undo operation

	/* formatting function */
//	k[  ]	:=HASH_FormatLine	// formatting line
//	k[  ]	:=HASH_FormatPart	// formatting part
//	k[  ]	:=HASH_MoveString	// move string to the center line

	/* other */
//	k[  ]	:=HASH_Options		// editors options
//	k[  ]	:=HASH_SingleGraphic	// on/off single graphic mode
//	k[  ]	:=HASH_DoubleGraphic	// on/off double graphic mode
//	k[  ]	:=HASH_MatchStructForward // find clipper-structure to forward
//	k[  ]	:=HASH_MatchStructBackward // find clipper-structure to backward
return key_maps

Вам необходимо просто поменять код клавиши "по умолчанию", на тот, который Вам больше нравится. Например, Вы приыкли вызывать меню по Клавише <F10>, для этого Вы должны исправить строку:
	k[ K_ESC ]	:=HASH_CallMenu		// call Menu
на:
	k[ K_F10 ]	:=HASH_CallMenu		// call Menu

Но будьте внимательны, если ниже на эту же клавишу будет "повешана" другая команда, то эта последняя и будет исполнятся при нажатии клавиши. Т.е. действует принцип "кто последний, тот и папа".
После переназначения клавиш необходимо перекомпилировать файл keymaps.prg с ключом -p, чтобы получился файл keymaps.po:
$(CLIPROOT)/bin/clip -e -p keymaps.prg
И получившийся .po скопировать в домашний каталог:
cp keymaps.po ~/.clip

Формат файла .templ

Файл .templ хранится в домашнем каталоге пользователя в директории .clip

шаблон [Space|Tab] описание[/описание]
Символ [/] служит для деления на строки
Пример:


headf	******************************/*Function:/*Notes:/ /*** End of          **********
headp	******************************/*File:/*Author:/*Date:/*Version:/*Notes:/ /*** End of          **********
f	For/Next
c	CLEAR
*	******************************
IF	If/EndIF
I	If/EndIF
IE	If/Else/EndIF
D	DO/EndDO
DW	DO WHILE/EndDO
DC	DO CASE/    CASE/    OTHERWISE/EndCASE
.............

т.е. после подстановки, например, вместо шаблона DC должно получиться что-то вроде:

DO CASE
    CASE
    OTHERWISE
EndCASE

а вместо шаблона headp
******************************
*File:
*Author:
*Date:
*Version:
*Notes:

*** End of          **********

Формат файла .macro

Файл .macro хранится в домашнем каталоге пользователя в директории .clip

шаблон [Space|Tab] функция
Пример:


d	DATE()
dd	date_rus(date())
.............

т.е. после подстановки, например, вместо шаблона d должно получиться что-то вроде:

11/22/2000

а вместо шаблона dd
22  Ноября 2000 г.