Il y a une place pour l'histoire dans tout ce qui est familier

Le mois dernier, j'ai fait des recherches sur deux questions historiques. J'ai initialement publié les résultats sous forme de fils de discussion sur Twitter, mais maintenant je les duplique sous forme d'article.





Pourquoi vim utilise hjkl

Question : Pourquoi vim utilise-t-il hjkl et non les flèches pour la navigation?





Explication typique : pour empêcher les doigts de quitter la ligne de départ.





Explication historique : Bill Joy a développé vi sur le terminal vidéo ADM-3A, qui manquait de touches fléchées individuelles. Si vous regardez le clavier ADM, il y a des flèches sur les touches hjkl. Joy a utilisé la même logique pour vi, et plus tard pour Vim.





Clavier ADM
Clavier ADM

Explication encore plus historique : en fait, il est étrange que sur ADM hjkl ait été utilisé pour les flèches. Pourquoi exactement ces lettres?





Il y a une bonne raison à cela. Regardez la version 1967 de la table de caractères ASCII:





7 . 32 — " ", , -. , QWERTY-, , . "" , . . , "backspace", ctrl+H ( ^H). 100 1000 000 1000. , , ^J.





ADM, , "backspace" ADM " " . ^H ^J "" "", ^K ^L "" "". ADM hjkl , vi.





JavaScript

: JavaScript' date API 0-11, 1-12. ?





: . , . , date.GetMonth() .





: Java, , , C.





: C ? , C, , ?





tm_date



ANSI C89, . C , Unix-. Unix, , <ctime.c>



C , .





#define SEC   0
#define MIN   1
#define HOUR  2
#define MDAY  3
#define MON   4
#define YEAR  5
#define WDAY  6
#define YDAY  7
#define ISDAY 8

      
      



ctime -- (SMH), HMS. , , . Unix 5 , :





int *t;
{
    register char *cp, *ncp;
    register int *tp;
  
    cp = cbuf;
    for (ncp = &quot;Day Mon 00 00:00:00 1900\\n&quot;; *cp++ = *ncp++;);
    ncp = &amp;&quot;SunMonTueWedThuFriSat&quot;[3*t[6]];
    cp = cbuf;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    cp++;
    tp = &amp;t[4];
    ncp = &amp;&quot;JanFebMarAprMayJunJulAugSepOctNovDec&quot;[(*tp)*3]; // (a)
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    cp = numb(cp, *--tp); // (b)
    cp = numb(cp, *--tp+100); // (c)
    cp = numb(cp, *--tp+100);
    cp = numb(cp, *--tp+100);
    cp =+ 2;
    cp = numb(cp, t[YEAR]);
    return(cbuf);
}
      
      



. (a). , , , , . , (b) HMS (c), . SMH ( ). , , , .





, . , Unix PDP-7. 1970- . , , 10% RAM!





, CPU, — , , . , , (b), .





: MDAY ( ) , YDAY ( ) — . " ": . ( ).





. , "" . hjkl, , ASCII- . tm_date, Unix, , , . — . , .





. , . , - , , - . , , "", , . , , , " ". , , "" .





. , — . , , , , . , ADM-3A, . , .





. , , , . , , , , . .








All Articles