dn2l - Dos Navigator для Linux
Модератор: Модераторы
Извините, но вам не кажется, что мы немного отошли от темы?
Alex2013 писал(а):Working in Virtual Reality
Это не работа, это игрушки технофрика.
обосную:
Что нового получил персонаж ролика от очков, чего он не может сделать на 4 мониторах? НИЧЕГО.
что он сделает быстрее в очках? только навигацию между большим числом приложений.
Что нового получил боец в перспективных очках с перечисленными мной апгрейдами по сравнению с обычными теплоочками?
- повышение выживаемости в случае минной засады
- в случае снайперского обстрела
- в случае входа на подготовленный участок вражеской обороны
- отсутствие необходимости в трассерах
- возможность стрельбы из-за угла
в случае интеграции с АСУ тактического звена
- снижение вероятности огня по своим
- ускорение навигации и получения целеуказания в десятки раз
- ускорение запросов огневой поддержки и передачи целеуказания в десятки раз
Ощущается разница между реальным делом и показухой?
Добавлено спустя 4 минуты 28 секунд:
Awkward писал(а):Извините, но вам не кажется, что мы немного отошли от темы?
есть такое, может мы с Алексом в личку с этим спором пойдем? или в другую ветку? профильную?
и сообщения перенести.
Статус апдейт: переписываемся с автором Unicode Turbo Vision для Free Pascal. Возможно, помогу с тестированием и с адаптацией IDE текстового режима под Unicode (потому что бесит, что там не набрать строчку на русском, да).
PS: Тема файловых менеджеров в графике мне в данный момент не интересна, однако ограниченная поддержка графики в текстовых файловых менеджерах (например, для предпросмотра изображений) — интересна.
А данный топик всё же про портирование DN на Linux, либо воссоздание в виде юникодной версии, работающей на Linux, с максимальным сохранением иерархии классов, API и UX.
PS: Тема файловых менеджеров в графике мне в данный момент не интересна, однако ограниченная поддержка графики в текстовых файловых менеджерах (например, для предпросмотра изображений) — интересна.
А данный топик всё же про портирование DN на Linux, либо воссоздание в виде юникодной версии, работающей на Linux, с максимальным сохранением иерархии классов, API и UX.
Awkward писал(а):Извините, но вам не кажется, что мы немного отошли от темы?
Shleps писал(а):есть такое, может мы с Алексом в личку с этим спором пойдем? или в другую ветку? профильную?
и сообщения перенести.
Согласен ! Сам хотел предложить....
Тем более, что профильная тема, давно уже на форуме есть...
(Отвечать на тему ВР и окрестностей буду там )
(Сообщения пусть будут небольшой оффтоп на этом форуме в порядке вещей... главное не увлекаться более чем на пару-тройку страниц )
Зы
Чуть ближе к теме: как только появятся стабильные сборки под FPC и FreeVision попробую сделать свою версию "подвала" для нового ДН (Может и не получится но попробовать определенно стоит )
Зы Зы
Будет ли версия под Винду и/или Андроид ?
Free Vision с поддержкой Unicode вмержили в основную ветку фрипаскаля!
Подробности тут: viewtopic.php?p=163736#p163736
Добавлено спустя 54 секунды:
Если кто-нибудь сделает — будет :) Прямо сейчас я не готов заглядывать так далеко, однако постараюсь писать так, чтоб портирование не было особенно сложным. Учитывая, что винда умеет в UTF-8 нынче.
Подробности тут: viewtopic.php?p=163736#p163736
Добавлено спустя 54 секунды:
Alex2013 писал(а):Будет ли версия под Винду и/или Андроид ?
Если кто-нибудь сделает — будет :) Прямо сейчас я не готов заглядывать так далеко, однако постараюсь писать так, чтоб портирование не было особенно сложным. Учитывая, что винда умеет в UTF-8 нынче.
Alex2013 писал(а):Будет ли версия под Винду ... ?
Господи, спаси нас от этих казней египетских!
Vadim писал(а):Господи, спаси нас от этих казней египетских!
Ну с точки зрения программирования в лазарус и FPC сделать порт под Винду при наличии рабочей версии под Линукс не так-уж (ИМХО) сложно.

Последний раз редактировалось Alex2013 05.02.2025 11:04:29, всего редактировалось 1 раз.
Как собрать тестовую приложеньку юникодного Free Vision на свежей убунте:
https://github.com/elfmz/far2l/issues/1 ... 1042898940
https://github.com/elfmz/far2l/issues/1 ... 1042898940
день добрый
поробовал собрать код под линух с гитхаба - ни чего не получилось, что-то было поломано или как там, у кого собирается без проблем?
поробовал собрать код под линух с гитхаба - ни чего не получилось, что-то было поломано или как там, у кого собирается без проблем?
- Alexander
- энтузиаст
- Сообщения: 864
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
dn2l и без проблем ? Он далёк от готовности. Но я озадачил ИИ и он мне сделал минималистичный коммандер. Функций мало, но зато как собирается легко. 
Код: Выделить всё
program ac;
{$MODE OBJFPC}
{$H+}
{
Commander.
For GNU/Linux 64 bit version.
Version: 2.
Written on FreePascal (https://freepascal.org/).
Copyright (C) 2025 Artyomov Alexander
Used: https://chatgpt.com
http://self-made-free.ru/
aralni@mail.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
}
uses
Crt, SysUtils, BaseUnix, Unix;
type
TPanel = record
Path: string;
Files: array of string;
Selected: integer;
Offset: integer;
end;
const
PanelHeight = 17;
var
LeftPanel, RightPanel: TPanel;
ActivePanel: ^TPanel;
procedure LoadPanel(var Panel: TPanel);
var
SR: TSearchRec;
begin
SetLength(Panel.Files, 0);
if FindFirst(Panel.Path + '/*', faAnyFile, SR) = 0 then
begin
repeat
SetLength(Panel.Files, Length(Panel.Files) + 1);
Panel.Files[High(Panel.Files)] := Panel.Path + '/' + SR.Name;
until FindNext(SR) <> 0;
FindClose(SR);
end;
if Length(Panel.Files) = 0 then
Panel.Selected := -1
else
Panel.Selected := 0;
Panel.Offset := 0;
end;
procedure DrawPanel(const Panel: TPanel; X: integer; Active: boolean);
var
I, DisplayIndex: integer;
begin
for I := 0 to PanelHeight - 1 do
begin
DisplayIndex := Panel.Offset + I;
GotoXY(X, I + 2);
if (DisplayIndex < Length(Panel.Files)) then
begin
if DisplayIndex = Panel.Selected then
TextBackground(Blue)
else if Active then
TextBackground(Black)
else
TextBackground(Red);
Write(Copy(ExtractFileName(Panel.Files[DisplayIndex]), 1, 38):38);
end
else
Write(' ':38);
TextBackground(Black);
end;
end;
procedure RefreshScreen;
begin
ClrScr;
GotoXY(2, 1);
Write('[q] Exit [v] View/Run/Cd [c] Cp [m] Mv [d] Rm [t] Tab [j] Down [k] Up');
DrawPanel(LeftPanel, 2, ActivePanel = @LeftPanel);
DrawPanel(RightPanel, 42, ActivePanel = @RightPanel);
end;
procedure ViewFile;
var
FilePath: string;
begin
if (ActivePanel^.Selected >= 0) and (ActivePanel^.Selected < Length(ActivePanel^.Files)) then
begin
FilePath := ActivePanel^.Files[ActivePanel^.Selected];
if DirectoryExists(FilePath) then
begin
ActivePanel^.Path := FilePath;
LoadPanel(ActivePanel^);
end
else if fpAccess(FilePath, X_OK) = 0 then
fpSystem('"' + FilePath + '"')
else
fpSystem('xdg-open "' + FilePath + '"');
end;
end;
procedure CopyFile;
var
Dest: string;
begin
if (ActivePanel^.Selected >= 0) then
begin
Dest := RightPanel.Path + '/' + ExtractFileName(ActivePanel^.Files[ActivePanel^.Selected]);
if fpSystem('cp "' + ActivePanel^.Files[ActivePanel^.Selected] + '" "' + Dest + '"') <> 0 then
WriteLn('Ошибка копирования.');
LoadPanel(LeftPanel);
LoadPanel(RightPanel);
end;
end;
procedure MoveFile;
var
Dest: string;
begin
if (ActivePanel^.Selected >= 0) then
begin
Dest := RightPanel.Path + '/' + ExtractFileName(ActivePanel^.Files[ActivePanel^.Selected]);
if fpSystem('mv "' + ActivePanel^.Files[ActivePanel^.Selected] + '" "' + Dest + '"') <> 0 then
WriteLn('Ошибка перемещения.');
LoadPanel(LeftPanel);
LoadPanel(RightPanel);
end;
end;
procedure DeleteFile;
begin
if (ActivePanel^.Selected >= 0) then
begin
if fpSystem('rm "' + ActivePanel^.Files[ActivePanel^.Selected] + '"') <> 0 then
WriteLn('Ошибка удаления.');
LoadPanel(LeftPanel);
LoadPanel(RightPanel);
end;
end;
procedure HandleInput;
var
Key: char;
begin
Key := ReadKey;
case Key of
'q': Halt;
'j': if ActivePanel^.Selected < High(ActivePanel^.Files) then
begin
Inc(ActivePanel^.Selected);
if ActivePanel^.Selected - ActivePanel^.Offset >= PanelHeight then
Inc(ActivePanel^.Offset);
end;
'k': if ActivePanel^.Selected > 0 then
begin
Dec(ActivePanel^.Selected);
if ActivePanel^.Selected < ActivePanel^.Offset then
Dec(ActivePanel^.Offset);
end;
'v': ViewFile;
'c': CopyFile;
'm': MoveFile;
'd': DeleteFile;
't': if ActivePanel = @LeftPanel then ActivePanel := @RightPanel else ActivePanel := @LeftPanel;
end;
end;
begin
LeftPanel.Path := GetCurrentDir;
RightPanel.Path := GetCurrentDir;
ActivePanel := @LeftPanel;
LoadPanel(LeftPanel);
LoadPanel(RightPanel);
repeat
RefreshScreen;
HandleInput;
until False;
end.
мда... от навигатора там осталось только ... слово :о)
Вот инструкция, как собрать FV и его тестовую аппу, в Ubuntu или Mint, не из исходников, которые в репозитории, а из мастера git, где уже есть поддержка Unicode (тестовая аппа соберётся как раз юникодная, соответственно).alexs писал(а):Насколько я помню - FV тоже не умеет UTF8 правильно отображать.
Учитывая, что в оригинальном DN Юникода нет вообще (а ещё проблема с лицензионной чистотой исходников, т.к. там модифицированная версия паскалевой Turbo Vision, которая никогда под открытыми лицензиями не публиковалась), на данный момент наиболее логичной тактикой выглядит воспроизвести DN с нуля уже сразу с Юникодом, но сохранив иерархию классов, API и UX настолько близкими к оригинальным, насколько возможно, чтобы и старым пользователям и старым разработчикам удобно было.
Как раз с описанным мною выше подходом ИИ очень может помочь, потому что он как раз хорош в изучении большого объема имеющегося кода. Скормить исходники оригинального DN (я бы даже последний досовский давал, чтобы идти от общей точки с другими форками) и попросить накидать каркас иерархии классов. Пробовать это советую здесь:Alexander писал(а):я озадачил ИИ
https://aistudio.google.com/prompts/new_chat
Сетку использовать Gemini 2.5 Pro. По ссылке это бесплатно. Исходники досовского DN в доступное там контекстное окно из миллиона токенов вполне пролезают.
Это я уже начинал, форкайте себе промпт и продолжайте, если интересно
https://aistudio.google.com/app/prompts ... sp=sharing
Выложил первые результаты эксперимента на github:
https://github.com/unxed/dn3l
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Как говорят мудрецы, нельзя в одну реку войти дважды. ДН был очень хорош во времена ДОС, а сегодня он - полнейший анахронизм.
Да, в итоге это выглядит более реалистичной историей по целой куче причин. Вот, пробуюAlex2013 писал(а):ИМХО сейчас наверное проще взять FreeVision и сделать простой ДН-подобный файловий менеджер с нуля, чем мучить "легаси исходники".
https://github.com/unxed/dn3l
Добавлено спустя 16 секунд:
Я для фанаСнег Север писал(а):Как говорят мудрецы, нельзя в одну реку войти дважды. ДН был очень хорош во времена ДОС, а сегодня он - полнейший анахронизм.
