web-dev-qa-db-fra.com

Comment puis-je augmenter le taux de répétition des clés au-delà de la limite du système d'exploitation?

J'ai la mauvaise habitude d'utiliser les touches de curseur de mon clavier pour naviguer dans le code source. C'est quelque chose que je fais depuis 15 ans et cela signifie bien sûr que ma vitesse de navigation est limitée par la vitesse du clavier. Sur Vista et OS X (je double démarrage sur un MacBook), mon taux de répétition des clés est complètement augmenté. Mais dans Visual Studio et dans d'autres applications, le taux est toujours beaucoup plus lent que je ne le préférerais.

Comment accélérer le taux de répétition des touches dans Visual Studio et d'autres éditeurs de texte?

54
Frank Krueger

Sur Mac OS X, ouvrez la liste des préférences globales

open ~/Library/Preferences/.GlobalPreferences.plist

Modifiez ensuite le champ KeyRepeat. Des nombres plus petits accéléreront la vitesse de votre curseur. La boîte de dialogue des paramètres ne le définira que sur un minimum de 2, donc si vous passez à 0 ou 1, vous obtiendrez un curseur plus rapide.

J'ai dû redémarrer pour que cela prenne effet.

29
hyperlogic

Sous Windows, vous pouvez définir cela avec un appel système (SystemParametersInfo(SPI_SETFILTERKEYS,...)).

J'ai écrit un utilitaire pour moi: keyrate <delay> <repeat>.

référentiel Github .

Source complète en cas de disparition de ce lien:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

BOOL parseDword(const char* in, DWORD* out)
{
   char* end;
   long result = strtol(in, &end, 10);
   BOOL success = (errno == 0 && end != in);
   if (success)
   {
       *out = result;
   }
   return success;
}


int main(int argc, char* argv[])
{
   FILTERKEYS keys = { sizeof(FILTERKEYS) };

   if (argc == 1)
   {
      puts ("No parameters given: disabling.");
   }
   else if (argc != 3)
   {
      puts ("Usage: keyrate <delay ms> <repeat ms>\nCall with no parameters to disable.");
      return 0;
   }
   else if (parseDword(argv[1], &keys.iDelayMSec) 
         && parseDword(argv[2], &keys.iRepeatMSec))
   {
      printf("Setting keyrate: delay: %d, rate: %d\n", (int) keys.iDelayMSec, (int) keys.iRepeatMSec);
      keys.dwFlags = FKF_FILTERKEYSON|FKF_AVAILABLE;
   }

   if (!SystemParametersInfo (SPI_SETFILTERKEYS, 0, (LPVOID) &keys, 0))
   {
      fprintf (stderr, "System call failed.\nUnable to set keyrate.");
   }

   return 0;
}
76
Mud

Plusieurs fois, je veux centrer une fonction dans ma fenêtre. Le défilement est le seul moyen. En outre, Ctrl-gauche/droite peut toujours être lent dans le code où il y a beaucoup de caractères non Word. J'utilise également le clavier. Il a cependant quelques problèmes pour moi. Premièrement, il utilise parfois la vitesse par défaut au lieu de la valeur réelle que j'ai définie. L'autre est parfois qu'il ignore le retard initial. Je le trouve quand même très utile. Ils ont dit il y a 4 ans qu'ils publieraient la source dans 6 mois ... :(

Ok, sur la suggestion de quelqu'un qui a modifié HCU\...\Keyboard Response, cela fonctionne bien pour moi.

[HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response]
"AutoRepeatDelay"="250"
"AutoRepeatRate"="13"
"BounceTime"="0"
"DelayBeforeAcceptance"="0"
"Flags"="59"

Délai de répétition automatique de Windows. Taux de répétition de 13 ms (77 car/sec). drapeaux active FilterKeys? Ces valeurs sont lues lors de la connexion. N'oubliez pas de vous déconnecter et de vous reconnecter pour que cela prenne effet.

30
chuckf

Pour Windows, ouvrez regedit.exe et accédez à HKEY_CURRENT_USER\Control Panel\Keyboard. Modifiez KeyboardSpeed ​​à votre convenance.

8
Jake

J'utilise KeyboardKing sur mon PC. C'est un logiciel gratuit et il peut augmenter le taux de répétition jusqu'à 200, ce qui est bien suffisant. Je recommande de définir la priorité du processus sur Élevé pour des mouvements encore plus fluides et moins de "verrouillages répétés" qui se produisent parfois et sont très ennuyeux. Avec une priorité élevée, cela fonctionne parfaitement.

Personne ne comprend pourquoi nous naviguons par flèches. C'est marrant.

8
dkellner

Visual Assist a une option pour doubler vos mouvements de touches efficaces dans Visual Studio que j'utilise tout le temps.

7
Colin Day

Keyboard preferences window

Comme mentionné par l'hyperlogique , sur Mac OS X, en interne, il y a deux paramètres traitant de la vitesse du clavier: KeyRepeat et InitialKeyRepeat. Dans les Préférences Système, ils sont mappés sur Key Repeat Rate et le Delay Until Repeat curseurs. Les plages de curseurs et les valeurs des paramètres internes associés (entre parenthèses) sont indiquées ci-dessous. Ils semblent être des multiplicateurs de l'intervalle d'échantillonnage du clavier de 15 ms.

Key Repeat Rate (KeyRepeat)                 Delay Until Repeat (InitialKeyRepeat)
|--------------------------------|          |----------------------|-----------------|
slow (120)                      fast (2)    off (30000)            long (120)        short (25)
0.5 char/s                      33 char/s       

Heureusement, ces paramètres peuvent être définis au-delà des limites prédéfinies directement dans le ~/Library/Preferences/.GlobalPreferences.plist fichier. J'ai trouvé que les valeurs suivantes me convenaient le mieux:

KeyRepeat = 1         --> 1/(1*15 ms) = 66.7 char/s
InitialKeyRepeat = 15 --> 15*15 ms = 225 ms

Notez que dans les dernières révisions de Mac OS X, les curseurs sont nommés légèrement différemment.

6
exinocactus

Pour OS X, l'extension du noyau KeyRemap4MacBook vous permettra d'affiner toutes sortes de paramètres de clavier, parmi lesquels le taux de répétition des touches (j'ai mis le mien à 15 ms, et ça marche bien).

3
David

Je ne sais pas comment accélérer au-delà de la limite, mais je sais sauter plus loin en une seule pression. Ma connaissance ne concerne que Windows, car je n'ai pas de Mac pour le faire. Ctrl + Flèche saute un mot, et selon l'éditeur, il peut simplement passer à la section suivante des espaces. Vous pouvez également utiliser Ctrl + Maj + Flèche pour sélectionner un mot dans n'importe quelle direction.

3
Robert K

J'aime travailler seul sur le clavier. Pourquoi? Parce que lorsque vous utilisez la souris, vous devez la saisir. Une perte de temps.

D'un autre côté, il semble parfois que chaque application possède ses propres taux de type de clavier intégrés. Sans parler des propriétés du BIOS ou des paramètres du système d'exploitation. J'ai donc rassemblé des raccourcis qui peuvent être assez rapides (c'est-à-dire que vous tapez plus rapidement Ctrl + droite (flèche) -droite-droite que de garder le doigt sur la touche droite (flèche) :).

Voici quelques raccourcis clavier que je trouve les plus utiles (cela fonctionne sous Windows; je ne suis pas sûr d'OS X):

ctrl-right: Go to the end of the previous/the next Word (stated before)
ctrl-left:  Go to the beginning of the previous/the Word before (stated before)
ctrl-up:    Go to the beginning of this paragraph
            (or to the next paragraph over this)
ctrl-down:  Go to the end of this paragraph
            (or to the next paragraph after this)
ctrl-pos1:  Go to the beginning of the file
ctrl-end:   Go to the end of the file

Tous ces éléments peuvent être combinés avec la touche Maj, afin que le texte soit sélectionné en même temps. Maintenant, allons-y pour des trucs plus étranges:

alt-esc:     Get the actual application into the background
ctrl-esc:    This is like pressing the "start-button" in Windows: You can
             navigate with arrow keys or shortcuts to start programs from here
ctrl-l:      While using Firefox this accesses the URL-entry-field to simply
             type URLs (does not work on Stack Overflow :)
ctrl-tab,
ctrl-pageup
ctrl-pagedwn Navigate through tabs (even in your development environment)

Ce sont donc les raccourcis les plus utilisés dont j'ai besoin lors de la programmation.

3
Georgi

Bien que la question soit vieille de plusieurs années, je rencontre toujours le même problème de temps en temps dans plusieurs sites de développeurs différents. J'ai donc pensé pouvoir apporter une solution alternative, que j'utilise pour mon travail quotidien de développeur (car les paramètres du registre Windows n'ont jamais fonctionné pour moi).

Ce qui suit est mon petit script de répétition automatique (~ 125 lignes), qui peut être exécuté via AutoHotkey_L (l'inconvénient est qu'il ne fonctionne que sous Windows, au moins Vista, 7, 8.1):

; ====================================================================
; DeveloperTools - Autorepeat Key Script
;
; This script provides a mechanism to do key-autorepeat way faster
; than the Windows OS would allow. There are some registry settings
; in Windows to Tweak the key-repeat-rate, but according to widely 
; spread user feedback, the registry-solution does not work on all 
; systems.
;
; See the "Hotkeys" section below. Currently (Version 1.0), there
; are only the arrow keys mapped for faster autorepeat (including 
; the control and shift modifiers). Feel free to add your own 
; hotkeys.
;
; You need AutoHotkey (http://www.autohotkey.com) to run this script.
; Tested compatibility: AutoHotkey_L, Version v1.1.08.01
; 
; (AutoHotkey Copyright © 2004 - 2013 Chris Mallet and 
; others - not me!)
;
; @author   Timo Rumland <timo.rumland ${at} gmail.com>, 2014-01-05
; @version  1.0
; @updated  2014-01-05
; @license  The MIT License (MIT)
;           (http://opensource.org/licenses/mit-license.php)
; ====================================================================

; ================
; Script Settings
; ================

#NoEnv
#SingleInstance     force
SendMode            Input 
SetWorkingDir       %A_ScriptDir%


; Instantiate the DeveloperTools defined below the hotkey definitions
developerTools      :=  new DeveloperTools()


; ========
; Hotkeys
; ========

    ; -------------------
    ; AutoRepeat Hotkeys
    ; -------------------

    ~$UP::
    ~$DOWN::
    ~$LEFT::
    ~$RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "" )
    return

    ~$+UP::
    ~$+DOWN::
    ~$+LEFT::
    ~$+RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "+" )
    return

    ~$^UP::
    ~$^DOWN::
    ~$^LEFT::
    ~$^RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "^" )
    return

    ; -------------------------------------------------------
    ; Jump label used by the hotkeys above. This is how 
    ; AutoHotkey provides "threads" or thread-like behavior.
    ; -------------------------------------------------------
    DeveloperTools_AutoRepeatKey:
        SetTimer , , Off
        DeveloperTools.startAutorepeatKey()
    return


; ========
; Classes
; ========

    class DeveloperTools
    {
        ; Configurable by user
        autoRepeatDelayMs       :=  180
        autoRepeatRateMs        :=  40

        ; Used internally by the script
        repeatKey               :=  ""
        repeatSendString        :=  ""
        keyModifierBaseLength   :=  2

        ; -------------------------------------------------------------------------------
        ; Starts the autorepeat of the current captured hotkey (A_ThisHotKey). The given
        ; 'keyModifierString' is used for parsing the real key (without hotkey modifiers
        ; like "~" or "$").
        ; -------------------------------------------------------------------------------
        startAutorepeatKeyTimer( keyModifierString )
        {
            keyModifierLength := this.keyModifierBaseLength + StrLen( keyModifierString )

            this.repeatKey := SubStr( A_ThisHotkey, keyModifierLength + 1 )
            this.repeatSendString := keyModifierString . "{" . this.repeatKey . "}"

            SetTimer DeveloperTools_AutoRepeatKey, % this.autoRepeatDelayMs
        }

        ; ---------------------------------------------------------------------
        ; Starts the loop which repeats the key, resulting in a much faster 
        ; autorepeat rate than Windows provides. Internally used by the script
        ; ---------------------------------------------------------------------
        startAutorepeatKey()
        {
            while ( GetKeyState( this.repeatKey, "P" ) )
            {
                Send % this.repeatSendString
                Sleep this.autoRepeatRateMs
            }
        }
    }
  1. Enregistrez le code ci-dessus dans un fichier texte (UTF-8), par exemple nommé "AutorepeatScript.ahk"
  2. Installez AutoHotkey_L
  3. Double-cliquez sur "AutorepeatScript.ahk" pour profiter de touches fléchées rapides (ou placez le fichier dans votre dossier de démarrage automatique)

(Vous pouvez ajuster le délai et le taux de répétition dans le script, voir '; Configurable par l'utilisateur').

J'espère que cela t'aides!

1
It's Leto

Sur Mac, c'est l'option-flèche pour sauter un mot et l'option + Maj + flèche pour sélectionner. Commande + flèche saute à la fin ou au début d'une ligne ou à la fin ou au début d'un document. Il y a aussi les touches page précédente, page suivante, accueil et fin;) Maintenir les sélections de décalage avec celles-ci aussi.

1
wprl

Il semble que vous ne puissiez pas le faire facilement sous Windows 7.

Lorsque vous appuyez et maintenez le bouton, la vitesse est contrôlée par la clé de registre Windows: HCU-> Panneau de configuration-> Clavier-> Délai du clavier.

En définissant ce paramètre sur 0, vous obtenez un taux de répétition maximum. Le drame est que vous ne pouvez pas descendre en dessous de 0 si la vitesse de répétition est encore lente pour vous. Le retard 0 signifie que le retard de répétition est de 250 ms. Mais, le retard de 250 ms est toujours lent comme l'enfer. Voir ceci: http://technet.Microsoft.com/en-us/library/cc978658.aspx

Vous pouvez toujours accéder à l'accessibilité, mais vous devez savoir que ces options sont pour aider les personnes handicapées à utiliser leur clavier, pas pour aider les geeks à taper rapidement. Ils N'AIDERONT PAS. Utilisez Linux, vous disent-ils.

Je pense que la solution pour Windows réside dans le contrôle du matériel. Recherchez des pilotes spéciaux pour vos claviers ou essayez de modifier ceux qui existent déjà.

1
head_thrash

Eh bien, cela pourrait être évident, mais:

  • Pour la navigation horizontale, Accueil (début de ligne), Fin (fin de ligne), Ctrl-Gauche (Word gauche), Ctrl-Droite (Word droit) fonctionnent dans tous les éditeurs que je connais

  • Pour la navigation verticale, Page Up, Page Down, Ctrl-Home (début de texte), Ctrl-End (fin de texte) font aussi

Aussi (sur une note latérale), je voudrais forcer mes touches Backspace et Delete à ne pas répéter, de sorte que la seule façon de supprimer (ou remplacer) du texte serait de d'abord marquez-le, puis supprimez-le (ou tapez le texte de remplacement).

0
tzot