Pull to refresh
8K+
8
Рафаэль@Rafaell0

3Д художник, который вынужден писать скрипты

2
Rating
1
Subscribers
Send message

Если вам не страшен Autohotkey код, попробуйте моё решение (документация не прилагается): https://pixeldrain.com/u/J9r9TV1V

Принцип работы следующий: все клавиши печатают как обычно, но некоторые печатают типичные для программирования символы при удерживании Alt: Alt+N -> (, двойной Alt+N -> [ и удерживая Alt+N 300мс+ вы напечатаете блок кода с фигурными скобками { }и переносом строк.

Полный список зарегистрированных клавиш доступен ниже в секции allApps. пример:

allApps.add("<!sc031",  	LAlt_N_AllApps)
allApps.add("<!sc032",  	LAlt_M_AllApps)

LAlt_N_AllApps(taps, state) {    
	if (state = -1) {
		if (taps = 1)
			return SendChars('(')
        
        SendChars('[')
    
	} else if !state {
        SendChars('+[')
        if (taps = 1)
            return

        SendEvent('{Enter 2}')
        SendEvent('{Up}')
        SendEvent('{Tab}')
	}
}

Здесь callback имеет state -1 если клавиша нажата, 1 если удерживается и 0 если отпущена. taps представляет собой количество нажатий. Можно просто быстро два раза нажать, а можно быстро нажать и удерживать, в этом случае taps == 2 и state == 1

А какие есть адекватные расширения?

О, я тоже пишу скрипты на AHK :D Буду рад сотрудничеству: https://github.com/JoyHak

Данный код не учитывает проблемы с задержкой, из-за которой вводимые символы не соответствуют раскладке клавиатуры какое-то время после переключения. Исправил тут: https://www.autohotkey.com/boards/viewtopic.php?f=83&t=140529&p=617670#p617670

; WM_INPUTLANGCHANGEREQUEST
SetKeyboardLayout(id) => PostMessage(0x50, 0, id, , 'A')
_SetKeyboardLayout(id) => SendMessage(0x50, 0, id, , 'A')

GetKeyboardLayout() => DllCall(
    'GetKeyboardLayout', 'Ptr', 
        DllCall(
            'GetWindowThreadProcessId', 
            'Ptr', DllCall('GetForegroundWindow'), 
            'UInt', 0
        )
    )

SwitchKeyboardLayout() {    
    static toggle  := 0x04190419 == GetKeyboardLayout()
    static layouts := Map(
        0, 0x04190419,  ; RU
        1, 0x04090409   ; EN
    )    
    
    _SetKeyboardLayout(layouts[toggle])
    
    while (layouts[toggle] != GetKeyboardLayout())
        Sleep(100)
    
    toggle ^= 1    
    return toggle
}

; SendLevel = 3: intercept all keys including AHK-generated;
; Timeout = 2 sec.: stop after 2 seconds (unless .Stop() has been called during that period) 
InputKeysHook := InputHook('I3 T2')
!f::{
    InputKeysHook.Start()
    SwitchKeyboardLayout()            

    loop parse, InputKeysHook.Input {
        SendEvent('{vk' GetKeyVK(A_LoopField) '}')
    }  
    InputKeysHook.Stop()
}

...и ни одной интересной статьи про него за последние годы.

Отдельным комментарием отмечу:

  • Хорошо что автор не стал менять TdrDelay и TdrDebugMode, иначе с такими общими значениями он бы положил компьютеры всех, кто вслепую поставил твикер.

Кстати, твикер предполагает возможность самостоятельно твикать, т.е. регулировать каждое значение по своему усмотрению!

  • Нет критических параметров для отключения фиксов уязвимостей процессора Spectre и Meltdown:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"LargeSystemCache"=dword:00000001
"DisablePagingExecutive"=dword:00000001
; Disable Spectre, Meltdown, and Downfall mitigations
"FeatureSettingsOverride"=dword:2000003
"FeatureSettingsOverrideMask"=dword:00000003

Не думаю что в современных сборках эти фиксы можно отключить, да и новое поколение процессоров этим уязвимостям не подвержено.

  • Наверное стоит полностью отключить Hyper-V в биос и Core Isolation если вам нигде не нужна виртуализация и вы не используете виртуальные машины:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity]
"Enabled"=dword:00000000

Если вам нужна надёжная изоляция ядра от процессов ради повышения безопасности то, конечно, не надо ничего трогать.

Я бы рекомендовал почитать дискуссии прежде чем менять Timer Resolution:

Я в некоторых сборках это глобальный параметр, на который опираются все процессы. Его измнение может привести к отдаленным последствиям.

Если вы всё-таки хотите его изменить, необходимо протестировать, какие конкретно значения оптимальны для ваших задач и для вашей ОС

Нет универсальных или общих значений, они могут только испортить вашу работу. Вместо изменения этого параметра лучше вообще пойти другими путями.

Нужно стремиться не к уменьшению таймера, а к уменьшению прерываний процессора, к уменьшению его переключений между процессами.

Для этого нужно работать и с параметрами реестра, и с приоритетами, и отключать ненужные службы и много чего ещё. Это огромная и тонкая работа, по которой еще никто не написал подробную статью. Я когда-то хотел, но потом передумал: умный пользователь сам найдет свой правильный путь, а ленивый –проследует по чужому пути и упадёт в заготовленную яму.

Фантастика! Но я перестал писать на Python и перешёл на AutoHotkey из-за возможности работать с WinApi напрямую. Плюс язык pprototype-based. И вот тут вообще нет никаких типов, хорошо хоть под капотом один тип не преобразовывается тайно в другой, как в JavaScript:

dynamic(str) {
    if (str != '')
      str := Array()
    else
      str := false

    return str
}

dynamic(2) # empty arr
dynamic("aaaaaaa") # empty arr
dynamic("")  # boolean!

И нету констант нигде:

encapsulate() {
    static API_CONST := 0x008
    ...
    API_CONST := 12  # nah we'll just ignore it
}

Хотя бы проблемы вроде "прочитал новый паттерн ООП и внедрил его на уоовне 1970 года" тут случаются редко, потому что язык дает очень много возможностей написать все в число процедурном стиле. А классы использовать в основном без интерфейсов и абстрактных методов, просто потому что здесь нет типов (а следовательно костыли из интерфейсов не нужны)

`ClipWait` лучше ставить на 1+ секунду, так как это верхняя граница времени ожидания. Более того, временами буфер обмена может быть закрыт для чтения, поэтому лучше опрашивать ее в цикле (polling) и сохранять `A_Clipboard` в любую переменную до восстановления содержимого `A_Clipboard := backup`. Сразу после – восстановить содержимое:

Я нашел тот самый пост с Moltbook: https://www.moltbook.com/post/cbd6474f-8478-4894-95f1-7b104a73bcd5

А еще я нашел вот это: https://www.reddit.com/r/vibecoding/comments/1qu96qe/the_ai_lobsters_are_taking_over_and_they_started/

Ряд доменов из MEGA SDK, через которые идет маршрутизация при загрузке файлов *не-из-web-клиента*, заблокированы или недоступны на территории РФ. Тихо. Без огласки. Более того, оплата Mega официально недоступна на территории РФ.

У меня даже есть один такой скрипт для Everything: https://github.com/JoyHak/Flow-Launcher-windows-key

Планирую добавить поддержку горячих клавиш для быстрого создания /редактирования макросов, а то разработчик забыл...

Ну и пример комплексного приложения на AHK: https://github.com/JoyHak/QuickSwitch

Уменьшите нагрузку и количество зарегистрированных клавиш с помощью Tapholdmanager

Он будет печатать клавиши с задержкой (весьма ощутимо при быстрой печати), зато на одну клавишу можно назначить неограниченное число отправок.

В качестве решения могу предложить два пути развития:

  1. Ограничиться только подсчётом количества нажатий. создании экземпляра TapHoldManager передайте параметр holdTime равный нулю.

  2. Ограничиться только удерживанием и одиночным нажатием. В этом случае параметр tapTime равен нулю.

Это опять ручное отключение :)

Это не оверинжиниринг, это базовая конфигурация. Автор деликатно умолчал о том, что каждый из этих софтов можно до двух суток подряд под себя настраивать, вот это уже будет действительно оверинжиниринг. Но он будет того стоить. В особенности подобрать плагины для UIlauncher или написать какой-нибудь поисковик по базам данных который будет выдавать до 10 строк в поисковом окне по ключевому слову "db" ...

1

Information

Rating
1,534-th
Location
Россия
Registered
Activity

Specialization

3d-аниматор, Художник компьютерной графики