Re:Full text of the current warning message(s)
- To: mathgroup at smc.vnet.net
- Subject: [mg33510] Re:Full text of the current warning message(s)
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Sun, 24 Mar 2002 01:44:07 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Vladimir Bondarenko wanted to make it so he could see the full text of messages from a specific In[] line. The other day I provided a solution that seemed to do the trick, but Vladimir noted that it collects lots of spurious messages from evaluating the following input. In[6]:= Integrate[ArcTan[1-Sqrt[1-z^(-1)]], {z,-1,1}] I improved on my ealier solution. After evaluating the code below you can evaluate FullMessageList[6] and get the messages (unevaluated) that resulted from In[6] except the (General::stop) message isn't included. Curiously the (General::stop) message is displayed if you use ReleaseHold on the messages returned by FullMessageList. (********* Note **********) I was in the mood for writing robust code today, so I use Apply[f1, expr1, Heads->False] and Map[f2, expr2, Heads->False] instead of the shorter forms (f1@@expr1) and (f2/@expr2) respectively. By using the longer forms my function definitions don't care what the option is set to via SetOptions. This is a point you should keep in mind if you are trying to write robust Mathematica programs. --------------------- Get Mathematica Tips, Tricks from http://www.verbeia.com/mathematica/tips/Tricks.html Regards, Ted Ersek (***** Code Starts Here ****************) Unprotect[Message]; MyMessageList[_Integer]:= Hold[]; $ModifyMessage=True; Message[name_,args__]/;$ModifyMessage:= Block[{$ModifyMessage}, (* If the message isn't Off it will be displayed due to evaluating the begining of the If statement. *) If[(Message[name,args]=!=$Off[])&&(Count[MyMessageList[$Line],Unevaluated[na me],-1]<3), If[ MyMessageList[$Line]===Hold[], MyMessageList[$Line]=Hold[Message[name,args];], (* else *) MyMessageList[$Line]= Insert[MyMessageList[$Line],Unevaluated[Message[name,args]],{1,-2}] ]; ] ] Protect[Message]; FullMessageList[n_]:= Module[{s1,s2,s3,posn,TempHold1,TempHold2,result}, Attributes[HoldTemp1]=Attributes[HoldTemp2]={HoldAll}; s1=MyMessageList[n]/.m_MessageName:>HoldTemp1[m]; s2=Apply[HoldTemp1,MessageList[n],1,Heads->False]; s3=Map[{#,Count[s2,#]}&,Union[s2],Heads->False]; posn=Apply[Position[s1,#1,-1,#2]&,s3,1,Heads->True]; posn=Map[Drop[#,-1]&,Flatten[posn,1],Heads->False]; result=Extract[MyMessageList[n]/.Message->HoldTemp2,Sort[posn] ]; result=Apply[Hold,result ,Heads->False]; result=Apply[HoldForm, {result}/.HoldTemp2->Message, Heads->False]; Part[result,1,0]=CompoundExpression; result ]