Instructions for installing the latest version of GNU APL on Debian/Ubuntu Linux machines with Finnish keyboard layout: (Updated 2013.11.13) ====== Run the following commands inside your terminal. If you don't have "sudo" then use regular root account to run the sudo commands. $ sudo apt-get install build-essential dpkg-dev subversion wget $ sudo apt-get install debhelper autotools-dev liblapack-dev libgl1-mesa-glx mime-support libreadline5 locales libc6 libgfortran3 libasound2 libatlas3gf-base gawk # current reqs as of 2013.11.12 $ mkdir -p ~/build/apl $ cd ~/build/apl $ svn co http://svn.savannah.gnu.org/svn/apl/trunk $ cd trunk $ dpkg-checkbuilddeps $ sudo apt-get install "any missing packages listed by dpkg-checkbuilddeps" $ ./configure $ make DEB $ sudo dpkg -i ftp-upload/apl*.deb # "make install" might also do the same, but then GNU APL might not be registered with Debian/Ubuntu package managers. I haven't read the Makefile. $ wget http://oksman.eu/apl/dotXmodmap_fin $ cat dotXmodmap_fin >> ~/.Xmodmap $ xmodmap ~/.Xmodmap # If you get errors like: "bad keysym name 'ezh' in keysym list" on old Debian/Ubuntu machines, then edit ~/.Xmodmap and replace "ezh" → "z" and "EZH" → "Z". # You can alternatively download http://oksman.eu/apl/dotXmodmap_fin_noEZH which contains the modifications. $ apl Now "1+2" and Return should produce output "3". Have fun with APL and visit Dr. Jürgen Sauermann's GNU APL home page at https://www.gnu.org/software/apl/ for the latest news. Best wishes, Miika --- If you have trouble seeing the special APL characters, then you need to use an Unicode compliant terminal emulator with a font that contains APL unicode characters. Rxvt-unicode as terminal with GNU Unifont works for me; "sudo apt-get install rxvt-unicode-256color ttf-unifont". You can use "xmodmap ~/.Xmodmap" to load the keyboard layout if your session manager doesn't do that automatically when you login to your desktop. The APL layout uses "kotoistus" Finnish keyboard layout XkbVariant as its base. For a graphical variant for choosing the keyboard layout, see the post by David B. Lamkins at https://lists.gnu.org/archive/html/bug-apl/2013-11/msg00000.html Note also that you can now type APL characters into almost any other program like Vim or Emacs editor. Nice for scripting APL. You can for example use "]XTERM OFF" command inside the APL interpreter if you can't see black output text. You could also change your terminal background color or modify GNU APL's source code. Probably a better alternative is to read "$ info apl 'Chapter 1'" section "Config File for GNU APL" and uncomment the color sequences for dark background in GNU APL's preferences file. "$ mkdir ~/.gnu-apl", "cp ~/build/apl/trunk/gnu-apl.d/preferences ~/.gnu-apl/", edit ~/.gnu-apl/preferences and uncomment lines: CIN-SEQUENCE 1b 5b 30 3b 33 32 3b 34 30 6d // ESC [0;32;40m COUT-SEQUENCE 1b 5b 30 3b 33 37 3b 34 30 6d // ESC [0;37;40m CERR-SEQUENCE 1b 5b 30 3b 33 31 3b 34 30 6d // ESC [0;31;40m RESET-SEQUENCE 1b 5b 30 3b 33 37 3b 34 30 6d // ESC [0;37;48m A nice lynx-like info page browser named pinfo is available from http://pinfo.sourceforge.net/ or "$ sudo apt-get install pinfo". See "$ man pinfo" for help after installing it. You can use commands like "$ pinfo apl" and "pinfo '(apl)Chapter 1'". ")OFF" inside the APL interpreter exits the session. GNU APL also has support for .apl script files - read more about it in "$ info apl 'Chapter 2'" section "APL Scripting". If you can't compile libreadline support into GNU APL and want to use for example up arrow to go back in command history, then ledit line editor from http://cristal.inria.fr/~ddr/ledit/ might help. "$ sudo apt-get install ledit" and invoke GNU APL with "$ ledit -u apl". See "$ man ledit" for more information concerning ledit, like support for command history searches. Here's the Finnish APL keyboard layout with Menu-key functioning as mode_switch for APL characters. Menu+Shift produces the alternate APL chars. This is based on GNU APL's "README-3-keyboard". Shift+Menu in that order sends the original Menu message to X11 if you need it for something else. ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ ║ ½⍨ ║ !¡ ║ "€ ║ #£ ║ ¤⍧ ║ % ║ & ║ / ║ (⍂ ║ )⍱ ║ =⍲ ║ ?≡ ║ `⌹ ║ ║ ║ §◊ ║ 1¨ ║ 2¯ ║ 3< ║ 4≤ ║ 5= ║ 6≥ ║ 7> ║ 8≠ ║ 9∨ ║ 0∧ ║ +× ║ ´÷ ║ BACKSP ║ ╠════╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦═╩══╦══════╣ ║ ║ Q¿ ║ W⌽ ║ E⍷ ║ R ║ T⍉ ║ Y¥ ║ U ║ I⍸ ║ O⍥ ║ P⍟ ║ Å ║ ^ ║ *⍀ ║ ║ TAB ║ q? ║ w⍵ ║ e∈ ║ r⍴ ║ t∼ ║ y↑ ║ u↓ ║ i⍳ ║ o○ ║ p⋆ ║ å← ║ :→ ║ '⍝ ║ ╠═══════╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩═╦══╩══════╣ ║ (CAPS ║ A⊖ ║ S ║ D ║ F⍫ ║ G⍒ ║ H⍋ ║ J⍤ ║ K⌺ ║ L⍞ ║ Ö ║ Ä ║ ║ ║ LOCK) ║ a⍺ ║ s⌈ ║ d⌊ ║ f_ ║ g∇ ║ h∆ ║ j∘ ║ k' ║ l⎕ ║ ö⊢ ║ ä⊣ ║ RETURN ║ ╠═════════╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═══╦╩═════════╣ ║ ║ Z ║ X ║ C⍝ ║ V ║ B⍎ ║ N⍕ ║ M⌶ ║ ;⍪ ║ :⍙ ║ _⌿ ║ ║ ║ SHIFT ║ z⊂ ║ x⊃ ║ c∩ ║ v∪ ║ b⊥ ║ n⊤ ║ m| ║ ,⌷ ║ .⍎ ║ -⍕ ║ SHIFT ║ ╚═════════════╩════╩════╩════╩════╩════╩════╩════╩════╩════╩════╩══════════╝ Here's the dotXmodmap_fin for reference: <---dotXmodmap_fin begins---> keycode 135 = Mode_switch Menu Mode_switch Menu Mode_switch Mode_switch keycode 10 = 1 exclam U00A8 U00A1 NoSymbol exclamdown NoSymbol exclamdown 1 exclam NoSymbol exclamdown 1 exclam NoSymbol exclamdown keycode 11 = 2 quotedbl U00AF U20AC at rightdoublequotemark at rightdoublequotemark 2 quotedbl at rightdoublequotemark 2 quotedbl at rightdoublequotemark keycode 12 = 3 numbersign less U00A3 sterling guillemotright sterling guillemotright 3 numbersign sterling guillemotright 3 numbersign sterling guillemotright keycode 13 = 4 currency U2264 U2367 dollar guillemotleft dollar guillemotleft 4 currency dollar guillemotleft 4 currency dollar guillemotleft keycode 14 = 5 percent equal percent U2030 leftdoublequotemark U2030 leftdoublequotemark 5 percent U2030 leftdoublequotemark 5 percent U2030 leftdoublequotemark keycode 15 = 6 ampersand U2265 ampersand singlelowquotemark doublelowquotemark singlelowquotemark doublelowquotemark 6 ampersand singlelowquotemark doublelowquotemark 6 ampersand singlelowquotemark doublelowquotemark keycode 16 = 7 slash greater slash braceleft NoSymbol braceleft NoSymbol 7 slash braceleft NoSymbol 7 slash braceleft keycode 17 = 8 parenleft U2260 U2342 bracketleft less bracketleft less 8 parenleft bracketleft less 8 parenleft bracketleft less keycode 18 = 9 parenright U2228 U2371 bracketright greater bracketright greater 9 parenright bracketright greater 9 parenright bracketright greater keycode 19 = 0 equal U2227 U2372 braceright degree braceright degree 0 equal braceright degree 0 equal braceright degree keycode 20 = plus question U00D7 U2261 backslash questiondown backslash questiondown plus question backslash questiondown plus question backslash questiondown keycode 21 = dead_acute dead_grave U00F7 U2339 dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_acute dead_grave dead_cedilla dead_ogonek dead_acute dead_grave dead_cedilla dead_ogonek keycode 24 = q Q question U00BF q Q q Q q Q q Q q Q q Q keycode 25 = w W U2375 U233D w W w W w W w W w W w W keycode 26 = e E U2208 U22F8 EuroSign NoSymbol EuroSign NoSymbol e E EuroSign NoSymbol e E EuroSign keycode 27 = r R U2374 R r R r R r R r R r R r R keycode 28 = t T U223C U2349 thorn THORN thorn THORN t T thorn THORN t T thorn THORN keycode 29 = y Y U2191 U00A5 y Y y Y y Y y Y y Y y Y keycode 30 = u U U2193 U u U u U u U u U u U u U keycode 31 = i I U2373 U2378 idotless bar idotless bar i I idotless bar i I idotless bar keycode 32 = o O U25CB U2365 oe OE oe OE o O oe OE o O oe OE keycode 33 = p P U22C6 U235F dead_horn dead_hook dead_horn dead_hook p P dead_horn dead_hook p P dead_horn dead_hook keycode 34 = aring Aring U2190 Aring dead_doubleacute dead_abovering dead_doubleacute dead_abovering aring Aring dead_doubleacute dead_abovering aring Aring dead_doubleacute dead_abovering keycode 35 = dead_diaeresis dead_circumflex U2192 U236C dead_tilde dead_macron dead_tilde dead_macron dead_diaeresis dead_circumflex dead_tilde dead_macron dead_diaeresis dead_circumflex dead_tilde dead_macron keycode 38 = a A U237A U2296 schwa SCHWA schwa SCHWA a A schwa SCHWA a A schwa SCHWA keycode 39 = s S U2308 S ssharp NoSymbol ssharp NoSymbol s S ssharp NoSymbol s S ssharp keycode 40 = d D U230A D eth ETH eth ETH d D eth ETH d D eth ETH keycode 41 = f F underscore U236B f F f F f F f F f F f F keycode 42 = g G U2207 U2352 g G g G g G g G g G g G keycode 43 = h H U2206 U234B h H h H h H h H h H h H keycode 44 = j J U2218 U2364 j J j J j J j J j J j J keycode 45 = k K apostrophe U233B kra NoSymbol kra NoSymbol k K kra NoSymbol k K kra keycode 46 = l L U2395 U235E dead_stroke NoSymbol dead_stroke NoSymbol l L dead_stroke NoSymbol l L dead_stroke keycode 47 = odiaeresis Odiaeresis U22A2 Odiaeresis oslash Oslash oslash Oslash odiaeresis Odiaeresis oslash Oslash odiaeresis Odiaeresis oslash Oslash keycode 48 = adiaeresis Adiaeresis U22A3 Adiaeresis ae AE ae AE adiaeresis Adiaeresis ae AE adiaeresis Adiaeresis ae AE keycode 49 = section onehalf U25CA U2368 dead_stroke NoSymbol dead_stroke NoSymbol section onehalf dead_stroke NoSymbol section onehalf dead_stroke keycode 51 = apostrophe asterisk U235D U2340 dead_caron dead_breve dead_caron dead_breve apostrophe asterisk dead_caron dead_breve apostrophe asterisk dead_caron dead_breve keycode 52 = z Z U2282 Z ezh EZH ezh EZH z Z ezh EZH z Z ezh EZH keycode 53 = x X U2283 X multiply periodcentered multiply periodcentered x X multiply periodcentered x X multiply periodcentered keycode 54 = c C U2229 U235D U2500 C U2500 C c C keycode 55 = v V U222A V asciicircum V asciicircum keycode 56 = b B U22A5 U234E b B b B b B b B b B b B keycode 57 = n N U22A4 U2355 eng ENG eng ENG n N eng ENG n N eng ENG keycode 58 = m M U2223 U2336 mu emdash mu emdash m M mu emdash m M mu emdash keycode 59 = comma semicolon U2337 U236A rightsinglequotemark leftsinglequotemark rightsinglequotemark leftsinglequotemark comma semicolon rightsinglequotemark leftsinglequotemark comma semicolon rightsinglequotemark leftsinglequotemark keycode 60 = period colon U234E U2359 dead_belowdot dead_abovedot dead_belowdot dead_abovedot period colon dead_belowdot dead_abovedot period colon dead_belowdot dead_abovedot keycode 61 = minus underscore U2355 U233F endash dead_belowcomma endash dead_belowcomma minus underscore endash dead_belowcomma minus underscore endash dead_belowcomma <---dotXmodmap_fin ends--->