Programmatically adjusting editor fontsize does not work

Hello,
I'd like my editor and command window font size to be adjusted automatically when I plug in an external monitor to my laptop. I've looked at this link, but the advice does not seem complete because it doesn't work. In addition, it's not clear what setting should be modified, since I'd like to change two settings but can only find one relevant setting.
>> s = settings;
>> s.matlab.fonts.codefont.Size
ans =
Setting 'matlab.fonts.codefont.Size' with properties:
ActiveValue: 10
TemporaryValue: <no value>
PersonalValue: 10
FactoryValue: 10
>> s.matlab.fonts.codefont.Size.TemporaryValue = 12
s =
SettingsGroup with properties:
matlab: [1×1 SettingsGroup]
>> s.matlab.fonts.codefont.Size
ans =
Setting 'matlab.fonts.codefont.Size' with properties:
ActiveValue: 12
TemporaryValue: 12
PersonalValue: 10
FactoryValue: 10
This works without error in the command window, but there is no effect in the editor window - font stays same size. Furthermore, opening the "Preferences" window to "Preferences->Fonts->Custom: Editor" shows the font size is still 10.
I'd also like to adjust the size of the command window font. There is nothing obvious in the settings object hierarchy where this might be done.

Respuestas (4)

Jan
Jan el 24 de Ag. de 2021
Editada: Jan el 30 de Ag. de 2021
Your code changes the values, which are applied at the next start of Matlab.
You can use FEX: CmdWinTool
Font = CmdWinTool('Font');
newFont = java.awt.Font(Font.getName, java.awt.Font.PLAIN, 24); % [EDITED]
CmdWinTool('Font', newFont);
Or directly:
jTextArea = [];
matchClass = 'javax.swing.JTextArea$AccessibleJTextArea';
cmdWinDoc = com.mathworks.mde.cmdwin.CmdWinDocument.getInstance;
cmdWinListener = cmdWinDoc.getDocumentListeners;
for iL = 1:length(cmdWinListener)
if isa(cmdWinListener(iL), matchClass)
jTextArea = cmdWinListener(iL);
end
end
if ~isempty(jTextArea)
Font = jTextArea.getFont;
newFont = java.awt.Font(Font.getName, java.awt.Font.PLAIN, 24); % [EDITED]
jTextArea.setFont(newFont);
pause(0.02); % Voodoo
end
Charles
Charles el 27 de Ag. de 2021
Kind of defeats the purpose when attaching an external monitor if I have to restart Matlab. I'll stick with mousing through the Preferences window. Fortunately, that method does not require a Matlab restart.

4 comentarios

Jan
Jan el 30 de Ag. de 2021
Is this a comment to my answer? I do not understand, what it means.
My code does not require Matlab to be restarted, but changes the fontsize instantly.
Sorry, I didn't understand your answer either. I intepreted the code you suggested as only changing the command window font, which is a "nice to have", and your statement about "next start of MATLAB" as relevant to the editor font, which is what I really want to be able to control.
Anyway, I ran the code in the second snippet, and Font.Size = 24;yields an error:
K>> Font.Size = 24
No public field Size exists for class java.awt.Font.
K>> Font.Size
Unrecognized function or variable 'Size'.
Essentially the same thing happens with the CmdWintool:
>> origFont = CmdWinTool('Font');
>> origFont.Size
Unrecognized function or variable 'Size'.
>> origFont
origFont =
java.awt.Font[family=Liberation Mono,name=Liberation Mono,style=plain,size=16]
Jan
Jan el 30 de Ag. de 2021
I've edited my answer. Please try it again. There is no setSize method for the fonts.
Thanks for the corrections, the code works perfectly to set the command window font.
Infortunately, it is not obvious how to convert those commands to get the editor window font to change. Modifying the com.mathworks.mde.cmdwin.CmdWinDocument.getInstance invocation might be the right strategy, but this command is completely opaque.

Iniciar sesión para comentar.

Jan
Jan el 31 de Ag. de 2021
An easier version to set the desktop and editor font immediately:
s = settings;
% Set temporarily until next start of Matlab:
s.matlab.fonts.codefont.Size.TemporaryValue = 24
% Or permanently:
s.matlab.fonts.codefont.Size.PersonalValue = 12;
% In the editor only - ?!
s.matlab.fonts.editor.normal.Size.TemporaryValue = 14
See:
Charles
Charles el 1 de Sept. de 2021
This immediately changes the font in the command history window and no other window:
s.matlab.fonts.codefont.Size.TemporaryValue = 24
This refers to a non-existent normal element:
>> s.matlab.fonts.editor.normal.Size.TemporaryValue = 14;
Unrecognized method, property, or field 'normal' for class 'matlab.settings.SettingsGroup'.
This is certainly correct syntax but has no immediate effect on anything:
s.matlab.fonts.editor.codefont.Size.TemporaryValue = 24
With this, we are back to my very first comment in this thread.

1 comentario

Jan
Jan el 2 de Sept. de 2021
Is this an answer or a comment to my answer? In the latter case, please use the section for comments.
On my Win10/MatlabR2018b computer, this command changes the font in the editor directly. You can try to rename your current preferences folder (see: prefdir), during Matlab is not running. Then the next start of Matlab recreates this folder with the default values. Then try again, if the settings methods can modify the command window and editor window directly.
Please mention, which Matlab and OS version you are using. It is possible, that different Matlab versions use different methods of the settings object. Take my suggestions as startpoint for your own investigations.

Iniciar sesión para comentar.

Categorías

Más información sobre Startup and Shutdown en Centro de ayuda y File Exchange.

Productos

Versión

R2020b

Preguntada:

el 24 de Ag. de 2021

Comentada:

Jan
el 2 de Sept. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by