отключить отслеживание мышиного курсора, не отключая мыши

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
Post Reply
lvmm
Posts: 119
Joined: Thu 15 Apr, 2021 14:31
Has thanked: 8 times
Been thanked: 3 times

отключить отслеживание мышиного курсора, не отключая мыши

Post by lvmm »

Некоторые диалоги, например, alt-f8 или alt-f12, отслеживают положение мышиного курсора, что жутко неудобно - мышь случайно чуть пошевелилась, и курсор тут же улетел хрен знает куда. Можно ли это отключить, не отключая полностью поддержку мыши?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

На самом деле действительно страшно раздражает. Для себя я сделал следующий скрипт, препятствующий этому:
  1. local F, G = far.Flags, far.Guids
  2.  
  3. local DlgGuids = {
  4.  
  5.        win.Uuid(G.HistoryCmdId),
  6.  
  7.        win.Uuid(G.HistoryEditViewId),
  8.  
  9.        win.Uuid(G.HistoryFolderId),
  10.  
  11.       }
  12.  
  13. Event {
  14.  
  15.   id = "609CAE49-CC50-4ABD-9193-896905E474D1";
  16.  
  17.   group       = "DialogEvent";
  18.  
  19.   description = "Event example";
  20.  
  21. --  filemask    = "*.txt,*.cpp";
  22.  
  23. --  priority    = 50;
  24.  
  25.   condition   = function(Event, Param)
  26.  
  27.    if Event == F.DE_DLGPROCINIT and Param.Msg == F.DN_INITDIALOG then
  28.  
  29.     local hDlg = Param.hDlg
  30.  
  31.     local DlgId = (hDlg:send(F.DM_GETDIALOGINFO) or {}).Id
  32.  
  33.     if DlgId then
  34.  
  35.      for _,v in ipairs(DlgGuids) do
  36.  
  37.       if v == DlgId then return true end
  38.  
  39.      end
  40.  
  41.     end
  42.  
  43.    end
  44.  
  45.   end;
  46.  
  47.   action      = function(Event, Param)
  48.  
  49.    local hDlg = Param.hDlg
  50.  
  51.    local Item = hDlg:send(F.DM_GETDLGITEM, 1)
  52.  
  53.    if band(Item[9], F.DIF_LISTTRACKMOUSE) == F.DIF_LISTTRACKMOUSE then
  54.  
  55.     Item[9] = Item[9] - F.DIF_LISTTRACKMOUSE
  56.  
  57.     hDlg:send(F.DM_SETDLGITEM, 1, Item)
  58.  
  59.    end
  60.  
  61.    ----[[*D*]]far.Show('25: action')
  62.  
  63.   end;
  64.  
  65. }
В скрипт заложено предотвращение только по диалогам истории (команд, папок и редакторов/просмотрщиков). Если надо добавить другие диалоги - надо их GUIDы добавить в список (сроки 3-5). Ну, или просто заменить проверку GUIDа на поиск DI_LISTBOX-а среди элементов диалога. Если надо, а самому влом - пишите, сделаю.
Кстати! В скрипт заложено, что список только один. Для стандартных историй это правильно, есл ет - надо опять же делать поиск.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

P/S. Но, увы, у AltHistory, которой я пользуюсь, нет DI_LISTBOX (там DI_USERCONTROL, у которого нет флага DIF_LISTTRACKMOUSE). Т.е. перемещение реализовано программно в плагине; соответственно, предотвратить эту фигню невозможно :-(
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

отключить отслеживание мышиного курсора, не отключая мыши

Post by HaRT »

buniak_a_h wrote: Wed 09 Jun, 2021 17:08 перемещение реализовано программно в плагине; соответственно, предотвратить эту фигню невозможно
Однако можно попросить автора в теме плагинапрежде он регулярно деятельно отзывался.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

HaRT, я думаю, просить такое сейчас преждевременно. Иначе придётся делать настройку… Логично было бы в самом ФАРе сделать такую настройку (отслеживать мышь в списках), но, наверно, уже поздно, раз есть флаги DIF_LISTTRACKMOUSE и DIF_LISTTRACKMOUSEINFOCUS. Ну, или вводить ещё один флаг - DIF_LISTNOTRACKMOUSE и учитывать эту настройкупри отсутствии и DIF_LISTTRACKMOUSE, и DIF_LISTNOTRACKMOUSE. Гимор полный…
К тому же список не исчерпываются AltHistory-ю, это поведение много где встречается и реально сильно достаёт. Спасибо мелкомягким… Смысла (кроме эстетического «наслаждения») не вижу, а минусы налицо
Last edited by buniak_a_h on Wed 09 Jun, 2021 23:35, edited 2 times in total.
lvmm
Posts: 119
Joined: Thu 15 Apr, 2021 14:31
Has thanked: 8 times
Been thanked: 3 times

отключить отслеживание мышиного курсора, не отключая мыши

Post by lvmm »

buniak_a_h, спасибо, но, вообще, присоединюсь к мнению, что это нужно менять или, хотя бы, добавить опцию для включения - именно включения по умолчанию отключенного поведения, потому что это не только неудобно, неконсистентно - ни в панелях, ни в других диалогах текстовый курсор себя так не ведет, и бессмысленно - мышиный курсор сам по себе является достаточным указателем своего положения, но и опасно - если курсор прыгнет прямо под нажатие энтера, это может вызвать запуск чего-нибудь вроде "del /q ." из истории там, где лежит самое нужно и ценное. Плохая идея. Очень плохая. Аналогично с кликами - на панелях запуск файлов или переход в фолдер осуществляется по даблклику, но запуск команды из истории - по синглу, что неконсистентно, а автоматический второй клик может сделать что-то нежелательное, особенно, при наличии другого бага: если даблкликнуть по истории, и команда успеет завершиться до второго клика, второй клик попадет уже в панель, где вызовет запуск файла фактически по синглу.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

lvmm, так и я не спорю. Вы просто развернули мои слова «минусы налицо». Есть ещё: если диалог предусматривает выполнение неких действий для пункта списка (например, вызов справки, как в Scripts Browser-е), то после выполнения есть перспектива оказаться фих знает где. Потому при работе с ФАРом я мышку задвигаю туда, где не могу её случайно тронуть.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

отключить отслеживание мышиного курсора, не отключая мыши

Post by DrKnS »

Это не диалоги, это меню.

В меню фокус ездит за мышью сам, да. Таков ритуал и так везде.
И это вполне осмысленно в ситуациях, когда пользователь вызвал это меню мышью и она все еще у него в руке.

Однако, вызов меню истории с помощью мыши - наверное, не очень типичный сценарий в Far.

Проблема здесь не в том, что положение отслеживается, а в том, что, по историческим причинам, концепт интерфейса "меню" используется в ситуациях, где был бы более уместен концепт "диалог".
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

А по мне так меню - это разновидность диалога с единственным элементом DI_LISTBOX.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

DrKnS wrote: Thu 10 Jun, 2021 10:16 Таков ритуал и так везде
А ещё ритуал - если есть вложенное подменю, то при наведении мыши на пункт оно раскрывается. А вот теперь представьте, что этот ритуал Вы тоже реализовали…
Не всё, что придумали мелкомягкие, одинаково полезно… Фокус за мышью полезно в GUI и вредно в текстовом UI.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

отключить отслеживание мышиного курсора, не отключая мыши

Post by DrKnS »

buniak_a_h wrote: Thu 10 Jun, 2021 12:17 А по мне так меню - это разновидность диалога с единственным элементом DI_LISTBOX
Как концепт "меню" реализован внутри - не имеет ни малейшего значения, как вы могли убедиться на примере AltHistory.
buniak_a_h wrote: Thu 10 Jun, 2021 12:24 А ещё ритуал - если есть вложенное подменю, то при наведении мыши на пункт оно раскрывается.
Действительно, недоработка.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

DrKnS wrote: Thu 10 Jun, 2021 15:43 Действительно, недоработка.
У кого-то статусная строка типа «Вот ты сказал, а zg реализует, и нам всем потом с этим жить» ;-)
Не надо, а?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

отключить отслеживание мышиного курсора, не отключая мыши

Post by buniak_a_h »

DrKnS wrote: Thu 10 Jun, 2021 15:43 Как концепт "меню" реализован внутри - не имеет ни малейшего значения, как вы могли убедиться на примере AltHistory.
Вот как раз на примере AltHistory я убедился, что «как концепт "меню" реализован внутри» - имеет очень большое значение. Если б был диалог с DI_LISTBOX, проблем с предотвращением реакции на перемещение мыши не было бы. Или я не понимаю смысл этой сложной квазинаучной фразы…
Post Reply

Return to “Нужна помощь”