From 740cb023a8ab825af9d4f2d036ffe9457ce86ae5 Mon Sep 17 00:00:00 2001 From: chatlanin Date: Tue, 9 May 2023 10:49:21 +0300 Subject: [PATCH] add fast navigation --- .../gui/browser/navigation/navigation.cpp | 35 ++++++++++++++----- src/rrr/rrr.hpp | 11 ++++-- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/rrr/layers/gui/browser/navigation/navigation.cpp b/src/rrr/layers/gui/browser/navigation/navigation.cpp index c890287..1db3109 100644 --- a/src/rrr/layers/gui/browser/navigation/navigation.cpp +++ b/src/rrr/layers/gui/browser/navigation/navigation.cpp @@ -59,9 +59,8 @@ namespace rrr::layers::gui ImGui::TextUnformatted(">"); ImGui::SameLine(22.f); - // HERE - // нужно использовать std::distance - current_position = it - data->begin(); + + current_position = std::distance(it, data->begin()); } else { @@ -200,28 +199,28 @@ namespace rrr::layers::gui if (shift) { // удаление - if (shift && key.get_keycode() == try_engine::key::D) + if (key.get_keycode() == try_engine::key::D) { em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, selected_file); freeze = true; } // создание файла/директории - if (shift && key.get_keycode() == try_engine::key::A) + if (key.get_keycode() == try_engine::key::A) { em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr); freeze = true; } // переименование файла/директории - if (shift && key.get_keycode() == try_engine::key::R) + if (key.get_keycode() == try_engine::key::R) { em->execute(types::event_type::SHOW_RENAME_FILE_DIALOG, selected_file); freeze = true; } // перемещение в конец списка - if (shift && key.get_keycode() == try_engine::key::G) + if (key.get_keycode() == try_engine::key::G) { cnt->increment_position(data->size()); selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION); @@ -231,12 +230,32 @@ namespace rrr::layers::gui } // вставка из single_buffer - if (shift && key.get_keycode() == try_engine::key::P) + if (key.get_keycode() == try_engine::key::P) { paste_from_copy(); paste_from_cut(); } + // перемещение на несколько позиций вниз + if (key.get_keycode() == try_engine::key::J) + { + cnt->increment_position((data->size() - current_position) / 4); + selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION); + em->execute(types::event_type::NAVIGATION_DOWN, nullptr); + set_delta(MOVE_DIRECTION::DOWN); + set_scroll(); + } + + // перемещение на несколько позиций вверх + if (key.get_keycode() == try_engine::key::K) + { + cnt->increment_position(current_position - current_position / 4); + selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION); + em->execute(types::event_type::NAVIGATION_UP, nullptr); + set_delta(MOVE_DIRECTION::UP); + set_scroll(); + } + return; } diff --git a/src/rrr/rrr.hpp b/src/rrr/rrr.hpp index b8120be..53a58eb 100644 --- a/src/rrr/rrr.hpp +++ b/src/rrr/rrr.hpp @@ -16,9 +16,14 @@ namespace rrr public: rrr_impl(std::string app_name) : try_engine::application{ app_name } { - // HERE - // убрать это в релизе - cnt.set_pwd("/mnt/develop/projects/cpp/rrr/dir_for_tests"); + std::string pwd = hack::utils::unix_cmd("pwd"); + + // перемещаем все знаки перевода строки в конец строки + // т.к. там это есть и это вызывает ошибку + auto it = std::remove(pwd.begin(), pwd.end(), '\n'); + pwd.erase(it, pwd.end()); + + cnt.set_pwd(std::filesystem::path(pwd)); cnt.fill(); }; ~rrr_impl() = default;