universal shortcut
- To: mathgroup at smc.vnet.net
- Subject: [mg131830] universal shortcut
- From: Arturas Acus <arturas.acus at tfai.vu.lt>
- Date: Fri, 11 Oct 2013 05:00:40 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
Dear Group,
despite my rather long experience with Mathematica I was never satisfied with
palettes or shortcuts ideas to input nice formated symbols in Mathematica. The
first is too slow, the second requires to remember a lot of
abbreviations. From the other side Shift + K idea (universal completion
template) I found rather useful. So I would like to implement something
like universal "shortcut" (well, say for simple heads with fixed number
of arguments at least). Consider for example the following particular
shortcut:
SetOptions[System`$FrontEndSession,
InputAliases ->
Fold[DeleteCases,
CurrentValue[System`$FrontEndSession, InputAliases],
Thread[Rule[{"mvb"}, Blank[]]]]]
$GAPackageInputAliases = {};
$GAPackageInputAliases =
Join[$GAPackageInputAliases, {"mvb" ->
RowBox[{TemplateBox[{TemplateBox[{TagBox[FrameBox["index"],
"Placeholder"]}, "GADown",
DisplayFunction -> (SubscriptBox["\[InvisibleSpace]",
RowBox[{##, "\[InvisibleSpace]"}]] &)],
"RunningAlgebra"}, "\[DoubleStruckE]",
DisplayFunction -> (RowBox[{StyleBox["\[DoubleStruckE]",
RGBColor[0, 0, 0]], "\[InvisibleSpace]", #}] &)]}] }];
SetOptions[System`$FrontEndSession,
InputAliases ->
Join[CurrentValue[System`$FrontEndSession,
InputAliases], $GAPackageInputAliases]];
with the following definitions
MakeBoxes[GADown[in__], StandardForm] :=
With[{pf =
Function @@ {SubscriptBox["\[InvisibleSpace]",
RowBox[Riffle[Slot /@ Range[Length[{in}]],
"\[InvisibleSpace]"]]]}},
TemplateBox[MakeBoxes /@ {in}, "GADown", DisplayFunction -> pf,
SyntaxForm -> SubscriptBox, Tooltip -> ToString[GADown[in]]]]
MakeBoxes[\[DoubleStruckE][in__, ra_Cl], StandardForm] :=
With[{pf =
Function @@ {RowBox[
Join[{StyleBox["\[DoubleStruckE]", GAStyle[ra]],
"\[InvisibleSpace]"},
Riffle[Slot /@ Range[Length[{in}]], "\[InvisibleSpace]"]]]}},
TemplateBox[MakeBoxes /@ {in, ra}, "\[DoubleStruckE]",
DisplayFunction -> pf, SyntaxForm -> RowBox, Tooltip -> None]] /;
MemberQ[GAStyle[ra], _Rule]
SetAttributes[upgradeInputAlias, HoldRest];
upgradeInputAlias[aliasName_String, aliasReplacementRul__Rule] :=
Module[{inpOpt, alposition},
SetOptions[System`$FrontEndSession,
ReplacePart[
inpOpt =
Options[System`$FrontEndSession,
InputAliases], (alposition =
Position[inpOpt, aliasName -> _][[1]]) -> (Extract[inpOpt,
alposition] /. {aliasReplacementRul})]]]
Options[DefineGeometricAlgebra] = {FontColor -> Automatic};
DefineGeometricAlgebra[{p_Integer, q_Integer, r_Integer: 0},
opts___?OptionQ] := (
RunningAlgebra = Cl[p, q, r];
GAStyle[
Cl[p, q, r]] = {FontColor ->
Module[{value},
Switch[value = ((FontColor /.
FilterRules[{opts}, Options[StyleBox]]) /.
Options[DefineGeometricAlgebra]), _RGBColor, value,
Automatic, RGBColor[p, r, q], _, Black]]};
upgradeInputAlias["mvb",
RGBColor[__] -> (FontColor /. GAStyle[Cl[p, q, r]])];
upgradeInputAlias["mvb", "RunningAlgebra" -> MakeBoxes[Cl[p, q, r]]];
)
Now if we define
DefineGeometricAlgebra[{5, 3, 0}]
then input shortcut <esc>mvb<esc> seems work nice.
Suppose now that I don't want to remember what "mvb" means. Instead I
would like to start typing container name i.e. \[DoubleStruckE] and
then pres some universal combination like Shift + ctrl + W or any other
not reserved, and this will look in defined input aliases (or You can
think any other idea) and insert Template box matching
\[DoubleStruckE] .
Can the idea of "universal shortcut" or "supershorcut" be implemented?
The Mathematica expression completion description is rather sketchy.
Sincerely, Arturas Acus