Standard farsi / persian keyboard layout for haiku

since i couldn’t find one, i made a standard farsi/persian keybaord layout for haiku.

just paste the code in a text file and compile it using:
keymap -c < filename

it’ll make a filename.out binary file that you can open using the keymap app in the preferences menu. (note that you need to have a persian or arabic font installed or the characters wont be visible)

#!/bin/keymap -s
#
#	Raw key numbering for 102-key keyboard...
#                                                                                          [sys]       [brk]
#                                                                                           0x7e        0x7f
# [esc]   [ f1] [ f2] [ f3] [ f4]    [ f5] [ f6] [ f7] [ f8]    [ f9] [f10] [f11] [f12]    [prn] [scr] [pau]
#  0x01    0x02  0x03  0x04  0x05     0x06  0x07  0x08  0x09     0x0a  0x0b  0x0c  0x0d     0x0e  0x0f  0x10     K E Y P A D   K E Y S
#
# [ ` ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 0 ] [ - ] [ = ] [ bck ]    [ins] [hme] [pup]    [num] [ / ] [ * ] [ - ]
#  0x11  0x12  0x13  0x14  0x15  0x16  0x17  0x18  0x19  0x1a  0x1b  0x1c  0x1d   0x1e      0x1f  0x20  0x21     0x22  0x23  0x24  0x25
#
# [ tab ] [ q ] [ w ] [ e ] [ r ] [ t ] [ y ] [ u ] [ i ] [ o ] [ p ] [ [ ] [ ] ] [ \ ]    [del] [end] [pdn]    [ 7 ] [ 8 ] [ 9 ] [ + ]
#   0x26   0x27  0x28  0x29  0x2a  0x2b  0x2c  0x2d  0x2e  0x2f  0x30  0x31  0x32  0x33     0x34  0x35  0x36     0x37  0x38  0x39  0x3a
#
# [ caps ] [ a ] [ s ] [ d ] [ f ] [ g ] [ h ] [ j ] [ k ] [ l ] [ ; ] [ ' ]  [ enter ]                         [ 4 ] [ 5 ] [ 6 ]
#   0x3b    0x3c  0x3d  0x3e  0x3f  0x40  0x41  0x42  0x43  0x44  0x45  0x46     0x47                            0x48  0x49  0x4a
#
# [shft] [ \ ] [ z ] [ x ] [ c ] [ v ] [ b ] [ n ] [ m ] [ , ] [ . ] [ / ]    [ shift ]          [ up]          [ 1 ] [ 2 ] [ 3 ] [ent]
#  0x4b   0x69  0x4c  0x4d  0x4e  0x4f  0x50  0x51  0x52  0x53  0x54  0x55       0x56             0x57           0x58  0x59  0x5a  0x5b
#
# [ ctrl ]          [ cmd ]             [ space ]             [ cmd ]          [ ctrl ]    [lft] [dwn] [rgt]    [ 0 ] [ . ]
#   0x5c              0x5d                 0x5e                 0x5f             0x60       0x61  0x62  0x63     0x64  0x65
#
#	NOTE: Key 0x69 does not exist on US keyboards
#	NOTE: On a Microsoft Natural Keyboard:
#			left option  = 0x66
#			right option = 0x67
#			menu key     = 0x68
#	NOTE: On an Apple Extended Keyboard:
#			left option  = 0x66
#			right option = 0x67
#			keypad '='   = 0x6a
#			power key    = 0x6b
Version = 3
CapsLock = 0x3b
ScrollLock = 0x0f
NumLock = 0x22
LShift = 0x4b
RShift = 0x56
LCommand = 0x5c
RCommand = 0x60
LControl = 0x5d
RControl = 0x00
LOption = 0x66
ROption = 0x5f
Menu = 0x68
#
# Lock settings
# To set NumLock, do the following:
#   LockSettings = NumLock
#
# To set everything, do the following:
#   LockSettings = CapsLock NumLock ScrollLock
#
LockSettings = NumLock 
# Legend:
#   n = Normal
#   s = Shift
#   c = Control
#   C = CapsLock
#   o = Option
# Key      n        s        c        o        os       C        Cs       Co       Cos     
Key 0x00 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x01 = 0x1b     0x1b     0x1b     0x1b     0x1b     0x1b     0x1b     0x1b     0x1b     
Key 0x02 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x03 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x04 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x05 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x06 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x07 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x08 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x09 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0a = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0b = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0c = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0d = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0e = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x0f = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x10 = 0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     0x10     
Key 0x11 = 0xc3b7   0xc397   ''       ' '      ''       0xc3b7   0xc397   ' '      ''       
Key 0x12 = '1'      0x21     ''       ' '      ''       '1'      0x21     ' '      ''       
Key 0x13 = '2'      0x40     0x00     ' '      ''       '2'      0x40     ' '      ''       
Key 0x14 = '3'      0x23     ''       ' '      ''       '3'      0x23     ' '      ''       
Key 0x15 = '4'      0x24     ''       ' '      ''       '4'      0x24     ' '      ''       
Key 0x16 = '5'      0x25     ''       ' '      ''       '5'      0x25     ' '      ''       
Key 0x17 = '6'      0x5e     0x1e     ' '      ''       '6'      0x5e     ' '      ''       
Key 0x18 = '7'      0x26     ''       ' '      ''       '7'      0x26     ' '      ''       
Key 0x19 = '8'      0x2a     ''       ' '      ''       '8'      0x2a     ' '      ''       
Key 0x1a = '9'      0x29     ''       ' '      ''       '9'      0x29     ' '      ''       
Key 0x1b = '0'      0x28     ''       ' '      ''       '0'      0x28     ' '      ''       
Key 0x1c = '-'      0x5f     0x1f     ' '      ''       '-'      0x5f     ' '      ''       
Key 0x1d = '='      0x2b     ''       ' '      ''       '='      0x2b     ' '      ''       
Key 0x1e = 0x08     0x08     0x7f     0x08     0x08     0x08     0x08     0x08     0x08     
Key 0x1f = 0x05     0x05     0x05     0x05     0x05     0x05     0x05     0x05     0x05     
Key 0x20 = 0x01     0x01     0x01     0x01     0x01     0x01     0x01     0x01     0x01     
Key 0x21 = 0x0b     0x0b     0x0b     0x0b     0x0b     0x0b     0x0b     0x0b     0x0b     
Key 0x22 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x23 = '/'      '/'      '/'      '/'      '/'      '/'      '/'      '/'      '/'      
Key 0x24 = '*'      '*'      '*'      '*'      '*'      '*'      '*'      '*'      '*'      
Key 0x25 = '-'      '-'      '-'      '-'      '-'      '-'      '-'      '-'      '-'      
Key 0x26 = 0x09     0x09     0x09     0x09     0x09     0x09     0x09     0x09     0x09     
Key 0x27 = 0xd8b6   0xd98b   0x11     ' '      ''       0xd8b6   0xd98b   ' '      ''       
Key 0x28 = 0xd8b5   0xd98c   0x17     ' '      ''       0xd8b5   0xd98c   ' '      ''       
Key 0x29 = 0xd8ab   0xd98d   0x05     ' '      ''       0xd8ab   0xd98d   ' '      ''       
Key 0x2a = 0xd982   0xefb7bc 0x12     ' '      ''       0xd982   0xefb7bc ' '      ''       
Key 0x2b = 0xd981   0xd88c   0x14     ' '      ''       0xd981   0xd88c   ' '      ''       
Key 0x2c = 0xd8ba   0xd89b   0x19     ' '      ''       0xd8ba   0xd89b   ' '      ''       
Key 0x2d = 0xd8b9   0x2c     0x15     ' '      ''       0xd8b9   0x2c     ' '      ''       
Key 0x2e = 0xd987   0x5d     0x09     ' '      ''       0xd987   0x5d     ' '      ''       
Key 0x2f = 0xd8ae   0x5b     0x0f     ' '      ''       0xd8ae   0x5b     ' '      ''       
Key 0x30 = 0xd8ad   0x5c     0x10     ' '      ''       0xd8ad   0x5c     ' '      ''       
Key 0x31 = 0xd8ac   0x7d     0x1b     ' '      ''       0xd8ac   0x7d     ' '      ''       
Key 0x32 = 0xda86   0x7b     0x1d     ' '      ''       0xda86   0x7b     ' '      ''       
Key 0x33 = 0xd9be   0x7c     0x1c     ' '      ''       0xd9be   0x7c     ' '      ''       
Key 0x34 = 0x7f     0x7f     0x7f     0x7f     0x7f     0x7f     0x7f     0x7f     0x7f     
Key 0x35 = 0x04     0x04     0x04     0x04     0x04     0x04     0x04     0x04     0x04     
Key 0x36 = 0x0c     0x0c     0x0c     0x0c     0x0c     0x0c     0x0c     0x0c     0x0c     
Key 0x37 = 0x01     '7'      0x01     0x01     '7'      0x01     '7'      0x01     '7'      
Key 0x38 = 0x1e     '8'      0x1e     0x1e     '8'      0x1e     '8'      0x1e     '8'      
Key 0x39 = 0x0b     '9'      0x0b     0x0b     '9'      0x0b     '9'      0x0b     '9'      
Key 0x3a = '+'      '+'      '+'      '+'      '+'      '+'      '+'      '+'      '+'      
Key 0x3b = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x3c = 0xd8b4   0xd98e   0x01     ' '      ''       0xd8b4   0xd98e   ' '      ''       
Key 0x3d = 0xd8b3   0xd98f   0x13     ' '      ''       0xd8b3   0xd98f   ' '      ''       
Key 0x3e = 0xdb8c   0xd990   0x04     ' '      ''       0xdb8c   0xd990   ' '      ''       
Key 0x3f = 0xd8a8   0xd991   0x06     ' '      ''       0xd8a8   0xd991   ' '      ''       
Key 0x40 = 0xd984   0xdb80   0x07     ' '      ''       0xd984   0xdb80   ' '      ''       
Key 0x41 = 0xd8a7   0xd8a2   0x08     ' '      ''       0xd8a7   0xd8a2   ' '      ''       
Key 0x42 = 0xd8aa   0xd980   0x0a     ' '      ''       0xd8aa   0xd980   ' '      ''       
Key 0x43 = 0xd986   0xc2ab   0x0b     ' '      ''       0xd986   0xc2ab   ' '      ''       
Key 0x44 = 0xd985   0xc2bb   0x0c     ' '      ''       0xd985   0xc2bb   ' '      ''       
Key 0x45 = 0xdaa9   0x3a     ''       ' '      ''       0xdaa9   0x3a     ' '      ''       
Key 0x46 = 0xdaaf   0x22     ''       ' '      ''       0xdaaf   0x22     ' '      ''       
Key 0x47 = 0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     
Key 0x48 = 0x1c     '4'      0x1c     0x1c     '4'      0x1c     '4'      0x1c     '4'      
Key 0x49 = ''       '5'      ''       ''       '5'      ''       '5'      ''       '5'      
Key 0x4a = 0x1d     '6'      0x1d     0x1d     '6'      0x1d     '6'      0x1d     '6'      
Key 0x4b = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x4c = 0xd8b8   0xd8a9   0x1a     ' '      ''       0xd8b8   0xd8a9   ' '      ''       
Key 0x4d = 0xd8b7   0xd98a   0x18     ' '      ''       0xd8b7   0xd98a   ' '      ''       
Key 0x4e = 0xd8b2   0xda98   0x03     ' '      ''       0xd8b2   0xda98   ' '      ''       
Key 0x4f = 0xd8b1   0xd8a4   0x16     ' '      ''       0xd8b1   0xd8a4   ' '      ''       
Key 0x50 = 0xd8b0   0xd8a5   0x02     ' '      ''       0xd8b0   0xd8a5   ' '      ''       
Key 0x51 = 0xd8af   0xd8a3   0x0e     ' '      ''       0xd8af   0xd8a3   ' '      ''       
Key 0x52 = 0xd8a6   0xd8a1   0x0d     ' '      ''       0xd8a6   0xd8a1   ' '      ''       
Key 0x53 = 0xd988   0x3c     ''       ' '      ''       0xd988   0x3c     ' '      ''       
Key 0x54 = '.'      0x3e     ''       ' '      ''       '.'      0x3e     ' '      ''       
Key 0x55 = '/'      0xd89f   ''       ' '      ''       '/'      0xd89f   ' '      ''       
Key 0x56 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x57 = 0x1e     0x1e     0x1e     0x1e     0x1e     0x1e     0x1e     0x1e     0x1e     
Key 0x58 = 0x04     '1'      0x04     0x04     '1'      0x04     '1'      0x04     '1'      
Key 0x59 = 0x1f     '2'      0x1f     0x1f     '2'      0x1f     '2'      0x1f     '2'      
Key 0x5a = 0x0c     '3'      0x0c     0x0c     '3'      0x0c     '3'      0x0c     '3'      
Key 0x5b = 0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     0x0a     
Key 0x5c = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x5d = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x5e = ' '      ' '      0x00     ' '      ' '      ' '      ' '      ' '      ' '      
Key 0x5f = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x60 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x61 = 0x1c     0x1c     0x1c     0x1c     0x1c     0x1c     0x1c     0x1c     0x1c     
Key 0x62 = 0x1f     0x1f     0x1f     0x1f     0x1f     0x1f     0x1f     0x1f     0x1f     
Key 0x63 = 0x1d     0x1d     0x1d     0x1d     0x1d     0x1d     0x1d     0x1d     0x1d     
Key 0x64 = 0x05     '0'      0x05     0x05     '0'      0x05     '0'      0x05     '0'      
Key 0x65 = 0x7f     '.'      0x7f     0x7f     '.'      0x7f     '.'      0x7f     '.'      
Key 0x66 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x67 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x68 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x69 = ''       '|'      0x1c     ' '      ''       0xd98d   '|'      ' '      ''       
Key 0x6a = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x6b = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x6c = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x6d = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x6e = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x6f = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x70 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x71 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x72 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x73 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x74 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x75 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x76 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x77 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x78 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x79 = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7a = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7b = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7c = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7d = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7e = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Key 0x7f = ''       ''       ''       ''       ''       ''       ''       ''       ''       
Acute ' '       = 0xc2b4   
Acute 'A'       = 0xc381   
Acute 'E'       = 0xc389   
Acute 'I'       = 0xc38d   
Acute 'O'       = 0xc393   
Acute 'U'       = 0xc39a   
Acute 'Y'       = 0xc39d   
Acute 'a'       = 0xc3a1   
Acute 'e'       = 0xc3a9   
Acute 'i'       = 0xc3ad   
Acute 'o'       = 0xc3b3   
Acute 'u'       = 0xc3ba   
Acute 'y'       = 0xc3bd   
AcuteTab = Normal Shift Control Option Option-Shift CapsLock CapsLock-Shift CapsLock-Option CapsLock-Option-Shift 
Grave ' '       = '`'      
Grave 'A'       = 0xc380   
Grave 'E'       = 0xc388   
Grave 'I'       = 0xc38c   
Grave 'O'       = 0xc392   
Grave 'U'       = 0xc399   
Grave 'a'       = 0xc3a0   
Grave 'e'       = 0xc3a8   
Grave 'i'       = 0xc3ac   
Grave 'o'       = 0xc3b2   
Grave 'u'       = 0xc3b9   
GraveTab = 
Circumflex ' '       = '^'      
Circumflex 'A'       = 0xc382   
Circumflex 'E'       = 0xc38a   
Circumflex 'I'       = 0xc38e   
Circumflex 'O'       = 0xc394   
Circumflex 'U'       = 0xc39b   
Circumflex 'a'       = 0xc3a2   
Circumflex 'e'       = 0xc3aa   
Circumflex 'i'       = 0xc3ae   
Circumflex 'o'       = 0xc3b4   
Circumflex 'u'       = 0xc3bb   
CircumflexTab = 
Diaeresis ' '       = '"'      
Diaeresis 'A'       = 0xc384   
Diaeresis 'E'       = 0xc38b   
Diaeresis 'I'       = 0xc38f   
Diaeresis 'O'       = 0xc396   
Diaeresis 'U'       = 0xc39c   
Diaeresis 'Y'       = 0xc5b8   
Diaeresis 'a'       = 0xc3a4   
Diaeresis 'e'       = 0xc3ab   
Diaeresis 'i'       = 0xc3af   
Diaeresis 'o'       = 0xc3b6   
Diaeresis 'u'       = 0xc3bc   
Diaeresis 'y'       = 0xc3bf   
DiaeresisTab = 
Tilde ' '       = '~'      
Tilde 'A'       = 0xc383   
Tilde 'O'       = 0xc395   
Tilde 'N'       = 0xc391   
Tilde 'a'       = 0xc3a3   
Tilde 'o'       = 0xc3b5   
Tilde 'n'       = 0xc3b1   
TildeTab = 

5 Likes

Great work, you can submit your code on Haiku, there is also this link to a similar discussion about keymaps:

There is also this discussion to improve support for complex fonts:

2 Likes