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

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

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

Post by lvmm »

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

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

Post by buniak_a_h »

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

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

Post by buniak_a_h »

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

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

Post by HaRT »

buniak_a_h wrote: Wed 09 Jun, 2021 17:08 перемещение реализовано программно в плагине; соответственно, предотвратить эту фигню невозможно
Однако можно попросить автора в теме плагинапрежде он регулярно деятельно отзывался.
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2827
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 153 times
Been thanked: 404 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: 6
Joined: Thu 15 Apr, 2021 14:31
Has thanked: 1 time
Been thanked: 1 time

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

Post by lvmm »

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

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

Post by buniak_a_h »

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

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

Post by DrKnS »

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

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

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

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

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

Post by buniak_a_h »

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

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

Post by buniak_a_h »

DrKnS wrote: Thu 10 Jun, 2021 10:16 Таков ритуал и так везде
А ещё ритуал - если есть вложенное подменю, то при наведении мыши на пункт оно раскрывается. А вот теперь представьте, что этот ритуал Вы тоже реализовали…
Не всё, что придумали мелкомягкие, одинаково полезно… Фокус за мышью полезно в GUI и вредно в текстовом UI.
User avatar
DrKnS
Posts: 5889
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 363 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 А ещё ритуал - если есть вложенное подменю, то при наведении мыши на пункт оно раскрывается.
Действительно, недоработка.
buniak_a_h
Posts: 2827
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 153 times
Been thanked: 404 times
Contact:

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

Post by buniak_a_h »

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

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

Post by buniak_a_h »

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

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