Метасимволы для левой и правой панелей

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Post Reply
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Метасимволы для левой и правой панелей

Post by siberia-man »

В документации хорошо описано:
!#
Префикс "!#" заставляет все последующие метасимволы ссылаться на пассивную панель (см. примечание 4). Например, !#!.! обозначает имя текущего файла на пассивной панели.

!^
Префикс "!^" заставляет все последующие метасимволы ссылаться на активную панель (см. примечание 4). Например, !^!.! обозначает имя текущего файла на активной панели, а конструкция !#!\!^!.! - файл на пассивной панели с таким же именем, как имя текущего файла на активной панели.
Есть ли возможность добавить аналогичные метасимволы для левой и правой панелей, например,

Code: Select all

!< - для ссылки на левую панель
!> - для ссылки на правую панель
?

Мотивация.
Метасимволы !# и !^ не отражают текущее положение (слева, справа) в вызываемой программе. Например, на той же страницы справки есть пример использования:
  1. Префиксы "!#" и "!^" работают как переключатели. Действие этих префиксов распространяется до следующего подобного префикса. Например:
    if exist !#!\!^!.! diff -c -p !#!\!^!.! !\!.!

    "Если на пассивной панели существует такой же файл, как и на активной под курсором, то показать расхождения между файлом на пассивной панели и файлом на активной панели, независимо от имени текущего файла на пассивной панели"
Но для активной левой панели команда будет выполнена с обратным порядком файлов, то есть

Code: Select all

diff файл-с-правой-панели файл-с-левой-панели
При наличии же метасимволов !< и !> команда из примера (или любая другая) выполнялась бы с правильным порядком как на панелях, вне зависимости от тогда, какая панель активна:

Code: Select all

diff файл-с-левой-панели файл-с-правой-панели
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Метасимволы для левой и правой панелей

Post by HaRT »

siberia-man wrote: Tue 28 Jun, 2022 16:07 выполнялась бы с правильным порядком как на панелях, вне зависимости от тогда, какая панель активна
Да, я тоже испытываю такую потребность.
Фар есть инструмент, а не нянька. © 2009 DrKnS
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Метасимволы для левой и правой панелей

Post by siberia-man »

Я не разбираюсь в плюсах. Прошу не смеяться, если мои изменения полны ошибок. Быстро прошелся по коду. Выглядтит примерно так:
  1. diff --git a/far/fnparce.cpp b/far/fnparce.cpp
  2.  
  3. index e1a39ab3d..f3cf30cf9 100644
  4.  
  5. --- a/far/fnparce.cpp
  6.  
  7. +++ b/far/fnparce.cpp
  8.  
  9. @@ -143,6 +143,8 @@ struct subst_data
  10.  
  11.  namespace tokens
  12.  
  13.  {
  14.  
  15.     const auto
  16.  
  17. +       left_panel                   = L"!<"sv,
  18.  
  19. +       right_panel                  = L"!>"sv,
  20.  
  21.         passive_panel                = L"!#"sv,
  22.  
  23.         active_panel                 = L"!^"sv,
  24.  
  25.         exclamation                  = L"!!"sv,
  26.  
  27. @@ -385,6 +387,18 @@ static string_view ProcessMetasymbol(string_view const CurStr, subst_data& Subst
  28.  
  29.         append(Destination, EscapeAmpersands && contains(Str, L"&"sv)? escape_ampersands(Str) : Str);
  30.  
  31.     };
  32.  
  33.  
  34.  
  35. +   if (const auto Tail = tokens::skip(CurStr, tokens::left_panel))
  36.  
  37. +   {
  38.  
  39. +       SubstData.PassivePanel = Global->CtrlObject->Cp()->IsLeftActive();
  40.  
  41. +       return Tail;
  42.  
  43. +   }
  44.  
  45. +
  46.  
  47. +   if (const auto Tail = tokens::skip(CurStr, tokens::right_panel))
  48.  
  49. +   {
  50.  
  51. +       SubstData.PassivePanel = Global->CtrlObject->Cp()->IsRightActive();
  52.  
  53. +       return Tail;
  54.  
  55. +   }
  56.  
  57. +
  58.  
  59.     if (const auto Tail = tokens::skip(CurStr, tokens::passive_panel))
  60.  
  61.     {
  62.  
  63.         SubstData.PassivePanel = true;
Ну а если все нормально, до готов зареквестить.
Last edited by siberia-man on Tue 28 Jun, 2022 18:46, edited 2 times in total.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Метасимволы для левой и правой панелей

Post by HaRT »

siberia-man wrote: Tue 28 Jun, 2022 18:35 Выглядтит примерно так
Думаю, если дополнить документацию (хотя бы на русском) и оформить Pull Request на ГитХабе, то шанс внедрения изменений сильно повысится.
Фар есть инструмент, а не нянька. © 2009 DrKnS
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Метасимволы для левой и правой панелей

Post by siberia-man »

Создал pr #533. Посмотрим, что из этого войдет в окончательный релиз.
Last edited by HaRT on Wed 29 Jun, 2022 01:51, edited 1 time in total.
Reason: Добавлена ссылка
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Метасимволы для левой и правой панелей

Post by Tim Sobolev »

Я для сраввнения изначально использую модуль.
Если кому-то будет интересно, там же приведён пример использования в пользовательском меню.
pepak
Posts: 604
Joined: Sun 13 Jul, 2008 11:18
Has thanked: 17 times
Been thanked: 54 times

Метасимволы для левой и правой панелей

Post by pepak »

I implemented exactly the same thing some time ago, except that I didn't go for !< and !> but rather ![ and !]. The patch that can be applied to the latest commit (2771db2cdeb2d7de58425196969b278fac00cdac) is attached.
Attachments
FarManager-ac7646f-Special symbols parser with support for left and right directory switch.patch.zip
(3.85 KiB) Downloaded 66 times
Last edited by pepak on Tue 23 Aug, 2022 15:06, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Метасимволы для левой и правой панелей

Post by HaRT »

pepak wrote: Tue 23 Aug, 2022 15:05 The patch that can be applied to the latest commit
Thank you! Personally, I like your patch slightly more than the above linked PR 533 (because yours doesn't use global objects in the code and adds the new prefixes to the Note 4 in the Help). The only drawbacks I noticed are that the help snippet inserted into multiple language help files and gives the identical example for both new prefixes, not tailored to them individually.

I assume that if you submit a Pull Request of your own, it will improve the chances of the changes being noticed by the active FAR developer(s) and integrated into the product.
BTW if you happen to know some language(s) the help files are for (apart from English), I encourage you to insert the new help text in the target language(s) right away.
pepak
Posts: 604
Joined: Sun 13 Jul, 2008 11:18
Has thanked: 17 times
Been thanked: 54 times

Метасимволы для левой и правой панелей

Post by pepak »

Good catch. Fixed.
Attachments
FarManager-fb5f048-Special symbols parser with support for left and right directory switch.patch.zip
(3.87 KiB) Downloaded 76 times
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Метасимволы для левой и правой панелей

Post by HaRT »

changelog wrote:
pepak 13.10.2022 20:18:32 +0100 - build 6040 1. Add special symbols to refer to the left ("![") or to the right ("!]") panel.
Thanks @pepak and @DrKnS!
Фар есть инструмент, а не нянька. © 2009 DrKnS
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Метасимволы для левой и правой панелей

Post by siberia-man »

pepak, your patch has been committed. That's really cool. Thank you.
Last edited by siberia-man on Sat 15 Oct, 2022 07:04, edited 1 time in total.
Post Reply

Return to “Предложения и идеи”