[C] в каком редакторе редактировать? [re: задчки на C]
А это смотря в чем писать. Есть люди которые до сих пор пишут в far-e.
Есть люди которые до сих пор пишут в far-eНехрен в фаре писать! Все нормальные люди уже давно в vi першли!
Уж лучше я буду всю жизнь писать в ФАРе.
Вы когда-нибудь видели интуитивно понятные среды, типа Visual Studio, Borland C++ Builder, да хотя бы Borland C++3.1 ?
интуитивно-понятность не имеет ничего общего с эффективностью
За 10 мин не смог найти, куда там код вбивать - интуиция не та, наверное.
vim (не vi!) мне нравится больше. Хотя бы потому, что им можно польховаться в окне PuTTY.
да, если за 10 минут из трех подокошек, которые в студии по умолчанию, не понял, в которое вбивать код (при условии, что в два окошка не удается вбить ничего) - наверно, с интуицией серьезные проблемы. Я сел - и сразу начал писать. При том, что до тех пор ни разу не работал в виндузе (только в досе) и ни разу не писал на си (только читал советские брошюрки).
вроде бы ни одного окна, куда сразу можно было вбивать, не было
надо ж ещё сказать, на каком языке это, и т.д.
не владею виаем, поэтому некомпетентен в сравнении. Но мне кажется, что студия - очень удобный редактор. Еще работал с мальтиэдитом, с блокнотом, с фаром, борландом и всякой прочей фигней, студия понравилась больше всех. Я в ней даже хтмл пишу и иногда текстовые файлы.
Вот так это можно делать в никсах
#echo 'include <stdio.h>' > myprog.c
#echo 'int main ( int argc, char * argv[] ) ' >> myprog.c
и т. д.
эффективностьюСтародумачи небрюхочувств ангсоц.
Вот по-моему, ФАР весьма эффективный редактор.
В нем есть все что нужно, ентер вводит новую строку, бекспейс стирает предыдущий символ, стрелочки на клаве двигают курсор туда, куда скажешь. Автоотступ есть. Есть выделение блоков стрелочками с шифтом. Есть простые операции копирования, вырезания, вставления, отмены последнего действия (такие же, как и в винде, во всех остальных приложениях). Подсветка синтаксиса для кучи языков есть.
А в vi все эти же действия делаются неинтуитивно понятно. С моей точки зрения.
эффективный редактор не обязан быть "интуитивно-понятным"
Вы еще не сказали, что такое "такая охуенная эффективность", которая заставляет вас пожертвовать понятностью интерфейса.
+1. пользуюсь mcedit, и очень доволен.
вот только не надо передёргиваний
понятность имеет мало общего с "интуитивной понятностью", о которой шла речь чуть выше
сложный интерфейс может стать естественным и понятным после обучения,
в то время как "интуитивная понятность" означает возможность сделать что-либо без обучения
(при длительном использовании средства обучение совсем не является недостатком)
кроме того, vim -- это просто круто.
Если писать программы на некотрых языках программирования, то эффективность vi будет не лучше, чем у интуитивно-понятных специализированных редакторов для этих языков (например Delphi, Visual Studio).
А если хочешь научиться сразу писать правильные программы, то нужно пользоваться редактором echo!могет быть я и не прав, но
cat > file.txt
здесь ctrl+D более шустрый способ набить файл, особенно если делаешь copy-paste
Вы еще не сказали, что такое "такая охуенная эффективность", которая заставляет вас пожертвовать понятностью интерфейса.понять можно один раз. какая разница потом?
2 недели на усвоение рефлексов в vim, и забываешь, что сначала он кажется не удобным.
+1. пользуюсь mcedit, и очень доволен.Аналогично. mcedit/nedit (дома и на работе соответственно) + ddd + snavigator. Всё, для 99% прикладных задач ничего больше не нужно(подразумевается, что sh/perl/tcl/tickle/awk/sed и _grep_ тоже известны).
Вы забыли еще об Emacs! А в студии удобно только С++ набирать, да и то основной плюс - это автокомпилит, а возьми язык поэкзотичней и студия немедленно превращается в полный отстой.
Рекомендую Eclipse. Для C++ есть плагин CDT. Если что-то не нравится или язык экзотический, можно написать свой плагин.
И она рулит.
Иначе зачем в виме делали такое позерство, как адекватная реакция на клавиши со стрелочками (типа даже прокрутка команд есть) и надписями Insert и Delete?
Как WYSIWYG соотносится с кнопочками на клавиатуре?
Как WYSIWYG соотносится с кнопочками на клавиатуре?Типа, если это шутка, то довольно-таки плоская.
Это не шутка. Я действительно не понимаю, что связывает wysiwyg и клавиатуру.
Я не про всю клавиатуру говорил, если что. Я имел в виду клавиши навигации и редактирования.
wytiwys - вот ю тайп из вот ю си
В конце концов, vim написан вовсе не для того, что б им было неудобно пользоваться.
Интересно, а какую ещё реакцию vim'а на эти кнопки можно ожидать?
^]]A, ^]]B, и так далее...
Ещё раз, vim существует не для того, что б им было неудобно пользоваться.
А смысл?
Типа, смысл в приучении программеров к командному стилю редактирования, как полной противоположности Visual Studio.
Почему же ed'ом никто не пользуется?
Ты вторую строчку принципиально игнорируешь?
Не гнать на фар!
Но у меня только TC, поэтому vim.
а еще одна из фишек вертикальное выделение. еще ни одного похожего редактора не встречал
Что это за зверь - вертикальное выделение ? Ctrl-V в виме ?
Это которое - Alt + мышь в word-е
а вообще перепробовав много редакторов, я скромно скажу, что лучше всего редактор заточенный под определенный язык.
Мнение автора может не совпадать с мнением автора. Автор
Почитать старые флеймы на тему vim vs emacs на каком-нибудь LOR и то интереснее и полезнее будет: потому как там хоть часть народу была хороша знакома с обоими редакторами и аргументы соответствующие были. А тут vim в основном ругает народ, не осиливший его или не захотевший осилить
Для глобального поиска -- grep, для замены ed или awk.
В нем есть все что нужно, ентер вводит новую строку, бекспейс стирает предыдущий символ, стрелочки на клаве двигают курсор туда, куда скажешь. Автоотступ есть. Есть выделение блоков стрелочками с шифтом. Есть простые операции копирования, вырезания, вставления, отмены последнего действияДа это ж vim!
С поправкой: откат/накат (стековый) не только последнего действия а всех.
+ выделение синтаксиса (для любого языка)
+ автодополнение
+ гибкая система замены, работающая с регулярными выражениями
+ поддержка редактирования в одной кодировке, а сохранения в другой
+ ...
интуитивная понятность = малое время обучения всем доступным возможностям данного инструмента; чаще всего соответствует инструментам с малым спектром возможностей;
эффективность = малое время, затрачиваемое на выполнение конкретной работы данным инструментом; чаще всего соответствует инструментам сложным, требующим сравнительно долго обучения работы с ними; а также (в случае программ) -- не требующим при работе низкоскоростных интерфейсов (например, мышей)
PS. "Единственным интуитивно понятным интерфейсом обладает материнская грудь". Не помню кто сказал.
В WYSIWYG редакторе Word после печати документа получается то же самое безобразие, которое было на экране.
В не WYSIWYG TeX'е после печати получается результать превосходящий по качеству многое
вполне приличные книги.
vim под другой терминал.
Штука такая, что в отличие от Студио и прочей виндоус дряни,
нормальные программы работают на разных архитектурах. Это по той простой причине, что
здравомыслящие люди не хотят изучать один редактор для работы на домашнем писюке,
другой -- для работы на рабочей станции, третий -- для работы с мейнфреймом, четвёртый -- ...
По этому они берут один (например, vi) и компилируют его под этими разными системами.
Но у каждой из этих систем, своя клавиатура. И кнопочки везде разные. У PC кнопочки тебе привычны, у альфы -- они другие, у vt200 -- третьи. Так что vi'ю приходится корректно обрабатывать
все возможные клавиатуры (а также такую стандартную ситуацию, когда сам vi запущен на одной
машине, а человек сидит по ssh или telnet'у на другой машине с другой клавиатурой).
Так что ты просто расскажи vim'у (который вырос из vi'я) какие кнопочки у тебя есть и что делать, когда ядро посылает ему эти
^]]A, ^]]Bэскейп последовательности.
ed очень даже пользуются. В скриптах. Потому что это строковый редактор, а не экранный.
интуитивная понятность = малое время обучения всем доступным возможностям данного инструмента; чаще всего соответствует инструментам с малым спектром возможностей;В большинстве случаев нужна только базовая функциональность, т.е. базовый набор интуитивно-понятных простых операций. С помощью этого набора можно делать почти всё.
Более сложные и нужные функции больше зависят от типа редактируемого текста - например, синтаксический анализатор для конкретного языка программирования.
+1
vim достаточно понятен, быть может не интуитивно, но легко воспринимаем.
Благо в комплекте идёт vimtutor - это обычный текстовый файл, пройдя его быстро узнаёшь базовые возможности. файл небольшой, осилить его можно минут за 30, как в нём написано.
например, вставка/выделение: найдите в хелпе вашего любимого редактора место, в котором описано "как выделить текст", "как скопировать текст в буфер", "как вставить текст из буфера"..
Вертикальное выделение - это базовая возможность?
Отсутствие этой возможности можно получить с помощью других операций?
Знаешь такой?
А оно кому-то нужно? Ни разу не пользовался.
Лично мне вертикальное выделение сильно помогает в C, Delphi, TeX.
Очень полезно вертикальные блоки пользовать, когда надо столбец пробелов вставить, например "в строках с 10 по 110 вставить 4 пробела на 7 позицию" - вертикальным блоком на "ура", можно не только пробелы.. запятые-скобки-точкисзапятой массово вставлять тоже помогает.
Интересно, что ты там такое прогаешь на С и Дельфи.
Ни разу не возникало такой задачи. Что это за язык такой своеобразный, где такое может понадобиться? Не знаю, чего там в Delphi, но для C/C++, равно как и для LaTeX не вижу применения этой фиче.
Комментарии в перле, например.
http://www.vim.org/scripts/script.php?script_id=4
http://www.vim.org/scripts/script.php?script_id=23
const
//
// Типы операторов
// ===============
//
// Анализатор C,C++
// ----------------
Op_C_Unknown = 1000; // Неопределён
OP_C_Decl = 1001; // Объявление переменной
OP_C_Null = 1002; // Пустой оператор
OP_C_Expr = 1005; // Арифметическое выражение
OP_C_If = 1006; // Условный оператор
OP_C_For = 1007; // Оператор цикла
OP_C_Goto = 1011; // Оператор перехода
OP_C_Complex = 1012; // Составной оператор
OP_C_Break = 1013; // Оператор выхода из цикла
OP_C_Continue = 1014; // Оператор продолжения цикла
OP_C_Return = 1015; // Оператор выхода из функции
OP_C_Fork = 1016; // Ветвление
OP_C_Fictive = 1017; // Фиктивный оператор после метки
OP_C_CaseEntry= 1018; // Фиктивный оператор для case, default
OP_C_Asm = 1019; // Ассемблерная вставка
OP_C_Try = 1020; // Обработчик исключений
OP_C_Catch = 1021; // Перехват исключений
OP_C_Throw = 1022; // Возмущение исключения
OP_C_Switch = 1023; // Оператор выбора
OP_C_Do = 1024; // Оператор do
OP_C_While = 1025; // Оператор while
//
// Анализатор Pascal-Delphi
// ------------------------
Op_Pas_Unknown = 2000; // Неопределён
OP_Pas_Decl = 2001; // Объявление переменной
OP_Pas_Null = 2002; // Пустой оператор
OP_Pas_Expr = 2003; // Арифметическое выражение
OP_Pas_If = 2004; // Условный оператор
OP_Pas_For = 2005; // Оператор цикла
OP_Pas_Goto = 2006; // Оператор перехода
OP_Pas_Complex = 2007; // Составной оператор
OP_Pas_Break = 2008; // Оператор выхода из цикла
OP_Pas_Continue = 2009; // Оператор продолжения цикла
OP_Pas_Fork = 2010; // Ветвление
OP_Pas_Fictive = 2011; // Фиктивный оператор после метки
OP_Pas_Asm = 2012; // Ассемблерная вставка
OP_Pas_Try = 2013; // Начало секции перехвата исключений
OP_Pas_Except = 2014; // Перехват исключений
OP_Pas_Finally = 2015; // ...
OP_Pas_Raise = 2016; // Возмущение исключения
OP_Pas_Case = 2017; // Оператор выбора
OP_Pas_Repeat = 2018; // Оператор repeat
OP_Pas_While = 2019; // Оператор while
OP_Pas_Call = 2020; // Вызов функции или процедуры
OP_Pas_Ass = 2021; // Оператор присваивания
OP_Pas_Exit = 2022; // Оператор выхода из функции
OP_Pas_Empty = 2023; // Пустой оператор
OP_Pas_Label = 2024; // Метка
Op_Pas_CaseLabel= 2025; // Метка альтернативы в операторе case
Op_Pas_With = 2026; // Оператор With
OP_Pas_Halt = 2027; // Функция Halt
...
OpNames: array [0..SizeOPNames-1] of TOPName
=(
// C, C++
(OpID:Op_C_Unknown; FullName:'Неопределён'; ShortName:'~~~'
(OpID:OP_C_Decl; FullName:'Объявление переменной'; ShortName:'Decl'
(OpID:OP_C_Null; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_C_Expr; FullName:'Арифметическое выражение'; ShortName:'Expr'
(OpID:OP_C_If; FullName:'Условный оператор'; ShortName:'If'
(OpID:OP_C_For; FullName:'Оператор цикла'; ShortName:'For'
(OpID:OP_C_Goto; FullName:'Оператор перехода'; ShortName:'Goto'
(OpID:OP_C_Complex; FullName:'Составной оператор'; ShortName:'{...}'
(OpID:OP_C_Break; FullName:'Оператор выхода из цикла'; ShortName:'Break'
(OpID:OP_C_Continue; FullName:'Оператор продолжения цикла'; ShortName:'Continue'
(OpID:OP_C_Return; FullName:'Оператор выхода из функции'; ShortName:'Return'
(OpID:OP_C_Fork; FullName:'Ветвление'; ShortName:'-<'
(OpID:OP_C_Fictive; FullName:'Фиктивный оператор после метки'; ShortName:'Label'
(OpID:OP_C_CaseEntry; FullName:'Фиктивный оператор для case, default';ShortName:'SwLabel'
(OpID:OP_C_Asm; FullName:'Ассемблерная вставка'; ShortName:'Asm'
(OpID:OP_C_Try; FullName:'Обработчик исключений'; ShortName:'Try'
(OpID:OP_C_Catch; FullName:'Перехват исключений'; ShortName:'Catch'
(OpID:OP_C_Throw; FullName:'Возмущение исключения'; ShortName:'Throw'
(OpID:OP_C_Switch; FullName:'Оператор выбора'; ShortName:'Switch'
(OpID:OP_C_Do; FullName:'Оператор do'; ShortName:'Do'
(OpID:OP_C_While; FullName:'Оператор while'; ShortName:'While'
// Pascal-Delphi
(OpID:Op_Pas_Unknown; FullName:'Неопределён'; ShortName:'~~~'
(OpID:OP_Pas_Decl; FullName:'Объявление переменной'; ShortName:'Decl'
(OpID:OP_Pas_Null; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_Pas_Expr; FullName:'Арифметическое выражение'; ShortName:'Expr'
(OpID:OP_Pas_If; FullName:'Условный оператор'; ShortName:'If'
(OpID:OP_Pas_For; FullName:'Оператор цикла'; ShortName:'For'
(OpID:OP_Pas_Goto; FullName:'Оператор перехода'; ShortName:'Goto'
(OpID:OP_Pas_Complex; FullName:'Составной оператор'; ShortName:'{...}'
(OpID:OP_Pas_Break; FullName:'Оператор выхода из цикла'; ShortName:'Break'
(OpID:OP_Pas_Continue;FullName:'Оператор продолжения цикла'; ShortName:'Continue'
(OpID:OP_Pas_Fork; FullName:'Ветвление'; ShortName:'-<'
(OpID:OP_Pas_Fictive; FullName:'Фиктивный оператор после метки'; ShortName:'Label'
(OpID:OP_Pas_Asm; FullName:'Ассемблерная вставка'; ShortName:'Asm'
(OpID:OP_Pas_Try; FullName:'Начало секции перехвата исключений'; ShortName:'Try'
(OpID:OP_Pas_Except; FullName:'Перехват исключений'; ShortName:'Except'
(OpID:OP_Pas_Finally; FullName:'...'; ShortName:'Finally'
(OpID:OP_Pas_Raise; FullName:'Возмущение исключения'; ShortName:'Raise'
(OpID:OP_Pas_Case; FullName:'Оператор выбора'; ShortName:'Case'
(OpID:OP_Pas_Repeat; FullName:'Оператор repeat'; ShortName:'Repeat'
(OpID:OP_Pas_While; FullName:'Оператор while'; ShortName:'While'
(OpID:OP_Pas_Call; FullName:'Вызов функции или процедуры'; ShortName:'Call'
(OpID:OP_Pas_Ass; FullName:'Оператор присваивания'; ShortName:':='
(OpID:OP_Pas_Exit; FullName:'Оператор выхода из функции'; ShortName:'Exit'
(OpID:OP_Pas_Empty; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_Pas_Label; FullName:'Метка'; ShortName:'Label'
(OpId:Op_Pas_CaseLabel;FullName:'Метка альтернативы в операторе case';ShortName:'CaseLabel'
(OpID:Op_Pas_With; FullName:'Операторный блок With'; ShortName:'With'
(OpID:OP_Pas_Halt; FullName:'Функция Halt'; ShortName:'Halt'
Такой код легче делать регексами/киборд макросами. Я проверял.
сначала были константы
name = value; //comment
Потом потребовалась функция, которая бы по значению value возвращала название константы (=comment)
пусть у неё тривиальный код, например:
...
case id of
...
value : Result := 'comment';
...
как это сделать кеймакросами/регексами?
В С/С++ я знаю извращения другого типа.. За примерами далеко ходить не надо. берём gcc :
в файле tree.def
...
DEFTREECODE (INTEGER_CST, "integer_cst", 'c', 0)
/* Contents are in TREE_REAL_CST field. */
DEFTREECODE (REAL_CST, "real_cst", 'c', 0)
/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
whose contents are other constant nodes. */
DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 0)
/* Contents are in TREE_VECTOR_CST_ELTS field. */
DEFTREECODE (VECTOR_CST, "vector_cst", 'c', 0)
...
А вот так оно используется:
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
const char tree_code_type[] = {
#include "tree.def"
'x',
#include "c-common.def"
};
#undef DEFTREECODE
/* Table indexed by tree code giving number of expression
operands beyond the fixed part of the node structure.
Not used for types or decls. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
const unsigned char tree_code_length[] = {
#include "tree.def"
0,
#include "c-common.def"
};
#undef DEFTREECODE
/* Names of tree components.
Used for printing out the tree and error messages. */
#define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
const char *const tree_code_name[] = {
#include "tree.def"
"@@dummy",
#include "c-common.def"
};
#undef DEFTREECODE
Но в дельфях такое не катит. посему... ручками, ручками..
copy/paste, а дальше заменяешь:
:b+(\w+):b+=:b+(\w+);:b+//(\w+)
\1 : Result := '\3';
Рег. выражениями тоже можно, но мороки больше пока выражение придумываешь/отлаживаешьЖжошь! А что по твоему тогда означает "Рег. выражениями"?
copy/paste, а дальше заменяешь:
:b+(\w+):b+=:b+(\w+);:b+//(\w+)
\1 : Result := '\3';
PS. Написал бы уж тогда
\1 : Result := '\3'; //\2
а то непонятно зачем \2 то нужен
Подождика. Ты, кажется, не знаешь, что такое "кеймакрос"!
Объясняю. В своём любимом вижуальнике ты ставиш курсор на начало очередной строчки и жмёшь ctrl+alt+R.
Потом ты аккуратно преобразуешь строчку к нужному виду. Аккуратно == таким образом, чтобы действия не зависили от длины слов, например, используя комбинации (ctrl+rarrow/ctrl+larrow (word right/left. В результате произведённых действий курсор должен оказаться в начале следующей строчки. Замечу, что в процессе строчка может превратиться в несколько строк, можно использовать клипборд, сёрч етс. Потом снова жмёшь ctrl+alt+R.
Потом нужное количество раз жмёшь ctrl+alt+P, редактор каждый раз проигрывает записанную последовательность нажатий.
+ продвинутый метод - залезаешь в макросы, выдираешь оттуда свежезаписанный (он выглядит как процедура на VB сохраняешь куда-нить и подправляешь если хочется чё-нить подправить.
Наличие подобной возможности делает вертикальное выделение совершенно не нужным.
Да, я в доказательство своих слов привел пример такого рег. выражения.
А ты что подумал?
> а то непонятно зачем \2 то нужен
Чтоб был
Да, я в доказательство своих слов привел пример такого рег. выражения.Ну я потом уже понял вообще писать регулярные выражения именно для этих целей не очень трудно, в большинстве случаев достаточно \s*(\S*)\s*(\S*)... И все таки я пришел к выводу, что perl -n -e лучше, есть вещи которые регекспами не выражаются.
Это ты не настроил терминал.Стандартная проблема юнексойдов.
Гипотетически у меня нет времени настраивать терминал, и я практически не знаю как это делается (терминфо с термкапами ниасиливаю).
У PC кнопочки тебе привычны, у альфы -- они другие, у vt200 -- третьи.А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах. Так ли это сложно? Думаю, нет. Зачем ебаться с настройкой каждый раз при переходе на другую систему?
Такой код легче делать в редакторах более высокого уровня абстракции.
А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах.Ты хотел сказать: на _всех системах который начинаются на Windows_.
:.:s/^[^=]*=[ \t]*\([^;]*\)[^\/]*\/\/\(.*\)$/\1 : Result := '\2';
делает из строки
name = value; //comment
строку
value : Result := 'comment';
Регулярные выражения рулят.
Стандартная проблема юнексойдов.А я и не знал, что у меня есть такая "стандартная проблема"
Гипотетически у меня нет времени настраивать терминал, и я практически не знаю как это делается (терминфо с термкапами ниасиливаю).
Я ни разу не настраивал терминалы, хотя и знаю, где это делается. И у меня всё работает на ура.
Может, дело в карме?
А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах. Так ли это сложно? Думаю, нет. Зачем ебаться с настройкой каждый раз при переходе на другую систему?Винда не запускается на альфе. Попытки были, но они ничем не закончились. Винда ничего не знает
про VT200. Допустим я запускаю телнет с VT200 на винду... уже смешно?
А в природе ещё встречаются X Terminal'ы. Если я вхожу с такого на UNIX машину, вижу привычную оконную
систему - X Windows. Равно как и при входе по ssh с одной UNIX машины на другую.
Попробуй войти удалённо с чего угодно на Windows машину и запустить оконное приложение.
Я тут недавно сидел на Sparc'е, что-то не нашёл там ни word'а, ни даже notepad'а. А вот vi там есть.
У моего отца ноут маковский с Mac OS X (больше известной как FreeBSD) и там тоже есть vi!
Повторяю свой вопрос: зачем изучать новый редактор на каждой платформе?
Равно как и при входе по ssh с одной UNIX машины на другую.В Windows оконное приложение на удалённой машине ещё и звук будет обычным образом играть (на твоём терминале, а не на сервере в стойке в запертом помещении и доступ к локальным дискам этого "терминала" можно ему дать, говорят. Про принтеры и прочую периферию не спрашивал.
Попробуй войти удалённо с чего угодно на Windows машину и запустить оконное приложение.
Ах да, забыл мегафичу - можно отсоединиться от сессии, а потом зайти с другого терминала, и она продолжится.
Как это реально делается?
ну screen тоже не вчера придумали. Или ты имеешь в виду именно окошечки (иксы)?
В меню выхода есть пункт Disconnect session или как-то так.
в первый раз слышу. Про Windows и спрашивал, как оно там делается.
Remote Desktop видимо имелся в винду (для Windows Terminal Server, который есть на каждой серверной версии, и даже урезанный в WinXP). подключение удалённых дисков, принтеров, serial ports, дисплей до 24bit color и прочее
а вот я зато не в курсе, он обязательно виртуальный экран создаёт, или может рисовать окна вперемешку с локальными?
весь РД это отдельное окно.
нет в мире совершенства, всё сосёт
зы. все операционные системы - кал ©virgin
Оставить комментарий
Anturag
А indent'а уже не хватает? Зачем человек должен делать то, что умеет делать машина? Человек должен делать только то, что машина делать не умеет.