Re: advanced keystroke remapping
- To: mathgroup at smc.vnet.net
- Subject: [mg25584] Re: [mg25531] advanced keystroke remapping
- From: John Fultz <jfultz at wolfram.com>
- Date: Mon, 9 Oct 2000 21:43:25 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
At 03:35 AM 10/7/2000 -0400, topquark at my-deja.com wrote: >I'm looking for a way to filter the keystroke stream in a Mathematica >notebook session and remap a pattern of keystrokes in real-time to >another sequence as determined by a set of rules that allow roughly the >flexibility of regular expressions. > >One of the reasons I'd like to do this is to customize the way >mathematical expressions are entered in Mathematica. I don't find >always reaching for the Escape key very comfortable, and I would like >to redefine how math mode is entered and exited and how mathematical >expressions are navigated. > >The problem with standard key-remapping utilities is that they don't >allow the user to define rules to remap a string that matches a pattern >to a different string; they just swap keys and (re)define control- >sequences. The kind of program I'm looking for would have to buffer >the keystroke input in order to see if a pattern is matched first >before sending the substitution to the application. If it sends each >keystroke to the application as it is entered, it would be difficult >to "get the string back" from the application in order to make the >substitution without sending editing commands along with the >replacement string. > >Preferably, a little piece of code written inside Mathematica would >provide this level of customizability, but I'm willing to look at >solutions that lie closer to the OS, in which case I'd be interested in >suggestions that relate either to Windows or UNIX. > >Thanks. > > >Sent via Deja.com http://www.deja.com/ >Before you buy. I believe you're asking two questions here. The first question is, how do you make things like what you might type using the Escape key less tedious? For example, how might you type "pi" and get \[Pi], or perhaps something even more sophisticated? You can do this in Mathematica by using the InputAutoReplacements option in Mathematica 4. Note what happens when you type into Mathematica something like the following... a->b (type this into a typeset cell, notice that -> turns into an arrow) TeX and LaTeX are fun. (type this into a Text cell, notice the substitution that happens to TeX and LaTeX). These are accomplished by settings of the InputAutoReplacements option in the Default.nb stylesheet. If you select an input cell, open the Option Inspector, set the scope to "selection", and look at the value for InputAutoReplacements, you'll see that, among other things, it includes the rule "->" -> "\[Rule]" This is the first replacement I demonstrated above. Note, however, that the replacement does not apply immediately when you type the '>', but only when you type the 'b'. That's because the replacement only happens for things that can be lexically isolated as operators or symbols (in the case of mathematical input) or words (in the case of text), and so the replacement does not actually occur until Mathematica until it has determined whether you've finished typing the operator/symbol/word. This allows you to create a replacement that triggers on "foo", but which does not happen when you type "foobar" because Mathematica detects that you didn't go onto the next word or symbol after typing the second o in "foo". So, to add your own replacement, keep in mind that the replacement must be of a whole word, symbol, or operator, and choose what you want to do. To use the example of typing in "pi" and getting \[Pi], set the Option Inspector's scope to global, then click the button next to the InputAutoReplacements option. Click Add. On the left side, type pi On the right side, type "\[Pi]" Now, do something like... Plot[Sin[x], {x, 0, 2pi}] That should work in all mathematical cells. If you want to make replacements which also take effect in Text cells, then you'll need to modify the InputAutoReplacements option of the Text style in the style sheet. The second question it appears you're asking is, how do you change keyboard shortcuts? There's no way at present to change them from within Mathematica, but there is a configuration files you can edit using a text editor. In the Mathematica installation directory, open the following file in a text editor... SystemFiles\FrontEnd\TextResources\Windows\MenuSetup.tr (on Windows) SystemFiles/FrontEnd/TextResources/X/MenuSetup.tr (on Unix) If you look at the MenuKey[] expressions, it should become quickly apparent how you can modify these to be whatever key you wish. Note that Wolfram doesn't document or support changing this file, and makes no guarantees that the format of the file won't change in the future. Also, note that it's entirely possible to come up with key combinations which won't work because they are reserved (for example, Alt+1 - Alt+9 are reserved for styles), or because a change you made causes a particular keystroke to show up multiple times. I suggest making a backup of this file before you change it, or copy it into the directory name returned by Mathematica when you evaluate this expression: ToFileName[{$PreferencesDirectory, "SystemFiles", "FrontEnd", "TextResources"}] and modify the copy (Mathematica will prefer one in this location over the one in the installation directory): There are similar key bindings for things which don't show up in the menus in a companion file called KeyEventTranslations.tr. Incidentally, in both files, the "Command" modifier refers to the Mod1 key under X and the Alt key under Windows. Sincerely, John Fultz jfultz at wolfram.com User Interface Group Wolfram Research, Inc.