Вы смотрели на $Pre
и $PreRead
?
$Pre
- глобальная переменная, значение которой, если установлено, применяется к каждому входному выражению.
$PreRead
- это глобальная переменная, значение которой, если установлено, применяется к текстовой или блочной форме каждого входного выражения перед его передачей в Mathematica.
ОБНОВЛЕНИЕ (теперь с лучше пример)
In[1]:= $Pre =
Function[{x}, Print["In[",$Line,"] is: ", Unevaluated[x]]; x, HoldFirst];
In[2]:= 2 + 2
During evaluation of In[2]:= In[2] is: 2+2
Out[2]= 4
In[3]:= InString[2]
During evaluation of In[3]:= In[3] is: InString[2]
Out[3]= "\\(2 + 2\\)"
ОБНОВЛЕНИЕ 2
Замените $Pre
на $PreRead
в моем коде выше, и вы приблизитесь к тому, что вы хотите, я считаю:
In[1]:= $PreRead = Function[{x}, Print[Names["`*"]]; x, HoldFirst]
Out[1]= Function[{x}, Print[Names["`*"]]; x, HoldFirst]
In[2]:= a = 1
During evaluation of In[2]:= {x}
Out[2]= 1
In[3]:= b = 2
During evaluation of In[3]:= {a,x}
Out[3]= 2
Невозможно перехватить In
на уровне *Value
, потому что Ядро просто не взаимодействует с In
посредством манипулирования значениями в коде Mathematica "верхнего уровня".