mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
Issue 24745: Switch from Courier to platform-sensitive TkFixedFont as default
editor font. This should not affect current customized font selections. Patch by Mark Roseman.
This commit is contained in:
parent
231007fe14
commit
d87d16826a
4 changed files with 51 additions and 35 deletions
|
@ -230,13 +230,7 @@ class EditorWindow(object):
|
||||||
vbar['command'] = text.yview
|
vbar['command'] = text.yview
|
||||||
vbar.pack(side=RIGHT, fill=Y)
|
vbar.pack(side=RIGHT, fill=Y)
|
||||||
text['yscrollcommand'] = vbar.set
|
text['yscrollcommand'] = vbar.set
|
||||||
fontWeight = 'normal'
|
text['font'] = idleConf.GetFont(self.root, 'main', 'EditorWindow')
|
||||||
if idleConf.GetOption('main', 'EditorWindow', 'font-bold', type='bool'):
|
|
||||||
fontWeight='bold'
|
|
||||||
text.config(font=(idleConf.GetOption('main', 'EditorWindow', 'font'),
|
|
||||||
idleConf.GetOption('main', 'EditorWindow',
|
|
||||||
'font-size', type='int'),
|
|
||||||
fontWeight))
|
|
||||||
text_frame.pack(side=LEFT, fill=BOTH, expand=1)
|
text_frame.pack(side=LEFT, fill=BOTH, expand=1)
|
||||||
text.pack(side=TOP, fill=BOTH, expand=1)
|
text.pack(side=TOP, fill=BOTH, expand=1)
|
||||||
text.focus_set()
|
text.focus_set()
|
||||||
|
@ -797,13 +791,8 @@ class EditorWindow(object):
|
||||||
def ResetFont(self):
|
def ResetFont(self):
|
||||||
"Update the text widgets' font if it is changed"
|
"Update the text widgets' font if it is changed"
|
||||||
# Called from configDialog.py
|
# Called from configDialog.py
|
||||||
fontWeight='normal'
|
|
||||||
if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
|
self.text['font'] = idleConf.GetFont(self.root, 'main','EditorWindow')
|
||||||
fontWeight='bold'
|
|
||||||
self.text.config(font=(idleConf.GetOption('main','EditorWindow','font'),
|
|
||||||
idleConf.GetOption('main','EditorWindow','font-size',
|
|
||||||
type='int'),
|
|
||||||
fontWeight))
|
|
||||||
|
|
||||||
def RemoveKeybindings(self):
|
def RemoveKeybindings(self):
|
||||||
"Remove the keybindings before they are changed."
|
"Remove the keybindings before they are changed."
|
||||||
|
|
|
@ -53,7 +53,7 @@ delete-exitfunc= 1
|
||||||
[EditorWindow]
|
[EditorWindow]
|
||||||
width= 80
|
width= 80
|
||||||
height= 40
|
height= 40
|
||||||
font= courier
|
font= TkFixedFont
|
||||||
font-size= 10
|
font-size= 10
|
||||||
font-bold= 0
|
font-bold= 0
|
||||||
encoding= none
|
encoding= none
|
||||||
|
|
|
@ -465,9 +465,9 @@ class ConfigDialog(Toplevel):
|
||||||
return frame
|
return frame
|
||||||
|
|
||||||
def AttachVarCallbacks(self):
|
def AttachVarCallbacks(self):
|
||||||
self.fontSize.trace_variable('w', self.VarChanged_fontSize)
|
self.fontSize.trace_variable('w', self.VarChanged_font)
|
||||||
self.fontName.trace_variable('w', self.VarChanged_fontName)
|
self.fontName.trace_variable('w', self.VarChanged_font)
|
||||||
self.fontBold.trace_variable('w', self.VarChanged_fontBold)
|
self.fontBold.trace_variable('w', self.VarChanged_font)
|
||||||
self.spaceNum.trace_variable('w', self.VarChanged_spaceNum)
|
self.spaceNum.trace_variable('w', self.VarChanged_spaceNum)
|
||||||
self.colour.trace_variable('w', self.VarChanged_colour)
|
self.colour.trace_variable('w', self.VarChanged_colour)
|
||||||
self.builtinTheme.trace_variable('w', self.VarChanged_builtinTheme)
|
self.builtinTheme.trace_variable('w', self.VarChanged_builtinTheme)
|
||||||
|
@ -484,15 +484,15 @@ class ConfigDialog(Toplevel):
|
||||||
self.autoSave.trace_variable('w', self.VarChanged_autoSave)
|
self.autoSave.trace_variable('w', self.VarChanged_autoSave)
|
||||||
self.encoding.trace_variable('w', self.VarChanged_encoding)
|
self.encoding.trace_variable('w', self.VarChanged_encoding)
|
||||||
|
|
||||||
def VarChanged_fontSize(self, *params):
|
def VarChanged_font(self, *params):
|
||||||
value = self.fontSize.get()
|
'''When one font attribute changes, save them all, as they are
|
||||||
self.AddChangedItem('main', 'EditorWindow', 'font-size', value)
|
not independent from each other. In particular, when we are
|
||||||
|
overriding the default font, we need to write out everything.
|
||||||
def VarChanged_fontName(self, *params):
|
'''
|
||||||
value = self.fontName.get()
|
value = self.fontName.get()
|
||||||
self.AddChangedItem('main', 'EditorWindow', 'font', value)
|
self.AddChangedItem('main', 'EditorWindow', 'font', value)
|
||||||
|
value = self.fontSize.get()
|
||||||
def VarChanged_fontBold(self, *params):
|
self.AddChangedItem('main', 'EditorWindow', 'font-size', value)
|
||||||
value = self.fontBold.get()
|
value = self.fontBold.get()
|
||||||
self.AddChangedItem('main', 'EditorWindow', 'font-bold', value)
|
self.AddChangedItem('main', 'EditorWindow', 'font-bold', value)
|
||||||
|
|
||||||
|
@ -958,24 +958,24 @@ class ConfigDialog(Toplevel):
|
||||||
fonts.sort()
|
fonts.sort()
|
||||||
for font in fonts:
|
for font in fonts:
|
||||||
self.listFontName.insert(END, font)
|
self.listFontName.insert(END, font)
|
||||||
configuredFont = idleConf.GetOption(
|
configuredFont = idleConf.GetFont(self, 'main', 'EditorWindow')
|
||||||
'main', 'EditorWindow', 'font', default='courier')
|
fontName = configuredFont[0].lower()
|
||||||
lc_configuredFont = configuredFont.lower()
|
fontSize = configuredFont[1]
|
||||||
self.fontName.set(lc_configuredFont)
|
fontBold = configuredFont[2]=='bold'
|
||||||
|
self.fontName.set(fontName)
|
||||||
lc_fonts = [s.lower() for s in fonts]
|
lc_fonts = [s.lower() for s in fonts]
|
||||||
if lc_configuredFont in lc_fonts:
|
try:
|
||||||
currentFontIndex = lc_fonts.index(lc_configuredFont)
|
currentFontIndex = lc_fonts.index(fontName)
|
||||||
self.listFontName.see(currentFontIndex)
|
self.listFontName.see(currentFontIndex)
|
||||||
self.listFontName.select_set(currentFontIndex)
|
self.listFontName.select_set(currentFontIndex)
|
||||||
self.listFontName.select_anchor(currentFontIndex)
|
self.listFontName.select_anchor(currentFontIndex)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
##font size dropdown
|
##font size dropdown
|
||||||
fontSize = idleConf.GetOption(
|
|
||||||
'main', 'EditorWindow', 'font-size', type='int', default='10')
|
|
||||||
self.optMenuFontSize.SetMenu(('7', '8', '9', '10', '11', '12', '13',
|
self.optMenuFontSize.SetMenu(('7', '8', '9', '10', '11', '12', '13',
|
||||||
'14', '16', '18', '20', '22'), fontSize )
|
'14', '16', '18', '20', '22'), fontSize )
|
||||||
##fontWeight
|
##fontWeight
|
||||||
self.fontBold.set(idleConf.GetOption(
|
self.fontBold.set(fontBold)
|
||||||
'main', 'EditorWindow', 'font-bold', default=0, type='bool'))
|
|
||||||
##font sample
|
##font sample
|
||||||
self.SetFontSample()
|
self.SetFontSample()
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
|
from tkinter.font import Font, nametofont
|
||||||
|
|
||||||
class InvalidConfigType(Exception): pass
|
class InvalidConfigType(Exception): pass
|
||||||
class InvalidConfigSet(Exception): pass
|
class InvalidConfigSet(Exception): pass
|
||||||
|
@ -670,6 +671,32 @@ class IdleConf:
|
||||||
self.GetExtraHelpSourceList('user') )
|
self.GetExtraHelpSourceList('user') )
|
||||||
return allHelpSources
|
return allHelpSources
|
||||||
|
|
||||||
|
def GetFont(self, root, configType, section):
|
||||||
|
"""Retrieve a font from configuration (font, font-size, font-bold)
|
||||||
|
Intercept the special value 'TkFixedFont' and substitute
|
||||||
|
the actual font, factoring in some tweaks if needed for
|
||||||
|
appearance sakes.
|
||||||
|
|
||||||
|
The 'root' parameter can normally be any valid Tkinter widget.
|
||||||
|
|
||||||
|
Return a tuple (family, size, weight) suitable for passing
|
||||||
|
to tkinter.Font
|
||||||
|
"""
|
||||||
|
family = self.GetOption(configType, section, 'font', default='courier')
|
||||||
|
size = self.GetOption(configType, section, 'font-size', type='int',
|
||||||
|
default='10')
|
||||||
|
bold = self.GetOption(configType, section, 'font-bold', default=0,
|
||||||
|
type='bool')
|
||||||
|
if (family == 'TkFixedFont'):
|
||||||
|
f = Font(name='TkFixedFont', exists=True, root=root)
|
||||||
|
actualFont = Font.actual(f)
|
||||||
|
family = actualFont['family']
|
||||||
|
size = actualFont['size']
|
||||||
|
if size < 0:
|
||||||
|
size = 10 # if font in pixels, ignore actual size
|
||||||
|
bold = actualFont['weight']=='bold'
|
||||||
|
return (family, size, 'bold' if bold else 'normal')
|
||||||
|
|
||||||
def LoadCfgFiles(self):
|
def LoadCfgFiles(self):
|
||||||
"Load all configuration files."
|
"Load all configuration files."
|
||||||
for key in self.defaultCfg:
|
for key in self.defaultCfg:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue