Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

When running the following in a notebook (not a deployed CDF file), it can sometimes be annoying that accidentally pressing Shift-Return breaks out of the user interface:

Panel@DynamicModule[{input = ""}, InputField[Dynamic[input], String]]

I would like to know if one can (programmatically) prevent such a cell from being "evaluated" when Shift-Return is pressed, so that the user stays in the InputField instead of being thrown out of it while seeing a new generated cell appear.

share|improve this question
    
One quick hack is to define a custom evaluator for the cell in which the InputField is, and make it return Null at the end. You can test by setting it to a simple CellEvaluationFunction->(Null& ). –  Leonid Shifrin Jun 5 '12 at 19:19
    
@LeonidShifrin I tried that, and it's very close because it doesn't generate a new cell. But it still evaluates silently, increases the history counter and puts the cursor in the next line. –  Jens Jun 5 '12 at 19:24
1  
No time to do this myself, but one idea is examining the help browser's docked cell which also has an InputField in it. –  Szabolcs Jun 5 '12 at 19:34
2  
@Szabolcs That sounds like a good idea. Get help from the help browser in an unconventional way... –  Jens Jun 5 '12 at 19:37
    
@Jens I briefly looked at it and it seems to be defined as a "front end resource" (not sure what that is). The next step would be searching the installation files for this resource (e.g. even the Find window is a notebook that you can examine---and yes, that has an input field too, maybe we don't need to go to the help browser!) ... Okay, I got to sleep now, I need to catch the Venus transit tomorrow at dawn :-) –  Szabolcs Jun 5 '12 at 19:55
show 2 more comments

3 Answers 3

up vote 10 down vote accepted

If you notice Mathematica Documentation Center search field is kind of the same thing. And search window from Ctrl-F too. It uses a similar concept to what I'll show. Important thing to know is that EventHandler can track commands from the Mathematica menu. There is an undocumented option HandleShiftReturn and here is a trick I learned from FW:

DynamicModule[{x = ""}, 
 Column[{EventHandler[
    InputField[Dynamic[x], 
     String], {{"MenuCommand", "HandleShiftReturn"} :> {}}], 
   Dynamic[x]}]]

enter image description here

Return works, but Shift-Return does not.

share|improve this answer
    
Ah, finally: I had been trying to guess what the Menu command for "Evaluate Cells" might be and gave up guessing a while ago... –  Jens Jun 5 '12 at 20:47
4  
users could be saved a lot of time if all this stuff was documented. –  Mike Honeychurch Jun 5 '12 at 23:56
    
@Vitaliy could you please add whatever you know about events for EventHandler as an answer to this question: mathematica.stackexchange.com/questions/6207/…. thanks –  Mike Honeychurch Jun 6 '12 at 0:07
    
This also catches Shift+Return but not keypad Return. Is there a way to extend it? –  Mr.Wizard Jun 6 '12 at 1:18
add comment

This is just adding a Deployed->True to your output cell, and removing the CellEditDuplicate which ruins everything

CellPrint@
  ExpressionCell[
   Panel@DynamicModule[{input = ""}, 
     InputField[Dynamic[input], String]], "Output",  
   CellEditDuplicate -> False, Deployed -> True];

Actually, with CellEditDuplicate->False should be enough. However, keep Deployed in mind if you use other styles, and so Evaluatable->False

share|improve this answer
add comment
ExpressionCell[Panel@DynamicModule[{input = ""}, InputField[Dynamic[input], String]]]

Mathematica graphics
Content added:

Mathematica graphics

ShiftReturn pressed:

Mathematica graphics

Learned this here.

share|improve this answer
    
It works! I also combined it with Mike's answer to a related issue and it still worked in that more complicated setting, too. –  Jens Jun 5 '12 at 20:35
    
@jens Glad to hear. I still find ExpressionCell a somewhat mysterious function. –  Sjoerd C. de Vries Jun 5 '12 at 20:44
    
This catches Shift+Return but not keypad Return. Any comment on that? –  Mr.Wizard Jun 6 '12 at 1:17
    
@Mr.Wizard Sorry, I'm on a laptop without keypad. Can't test. –  Sjoerd C. de Vries Jun 6 '12 at 5:28
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.