Хотя мода на хвастовство линуксовыми десктопами давно прошла, я все же продолжаю время от времени допиливать свой любимый FVWM. Например, недавно сделал себе на рабочей машине двухэтажные десктопы/воркплейсы - разбил каждый виртуальный рабочий стол на две страницы и в итоге заимел в два раза больше рабочего пространства. Было удобно, стало еще удобнее - теперь можно окна раскидывать по страницам и почти не париться их перекрытием (чем дальше, тем больше мне нравится, когда все окна на виду, тайлинг - форева). Но всю малину портила одна мелочь - фокус ввода был един для всего десктопа, но не для каждой его страницы
Проявлялось это так: я нахожусь на одной странице, начинаю набирать что-то на клавиатуре и обнаруживаю, что ввожу данные в другое окно - которое даже не вижу. Некоторое время я терпел это, но потом решил поискать решение. FVWM - штука мощная, сомнений, что проблему можно решить у меня не было.
Так и получилось, решение нашлось быстро и оказалось довольно простым:
# Remember focused window in current page DestroyFunc SavePageFocus AddToFunc SavePageFocus + I All (CurrentPage) State $[FocusPage] False + I Current State $[FocusPage] True # Restore previous focused window in current page DestroyFunc RestorePageFocus AddToFunc RestorePageFocus + I Current (CurrentPage) Break 1 + I Next (CurrentPage, State $[FocusPage]) Focus + I None (CurrentPage, Focused) Prev (CurrentPage) Focus *FvwmEvent: Cmd *FvwmEvent: new_page RestorePageFocus *FvwmEvent: new_desk RestorePageFocus *FvwmEvent: focus_change SavePageFocusИ в функцию StartFunction добавилась строчка загрузки модуля:
+ I Module FvwmEventТеперь фокус запоминается при клике на окно и неудобства исчезли.





