Skip to content

Commit b465292

Browse files
authored
pygmt.config: Support tab auto-completion for all GMT defaults (#2213)
1 parent 55eb17c commit b465292

File tree

1 file changed

+167
-25
lines changed

1 file changed

+167
-25
lines changed

pygmt/src/config.py

Lines changed: 167 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""
22
config - set GMT defaults globally or locally.
33
"""
4+
from inspect import Parameter, Signature
5+
46
from pygmt.clib import Session
57

68

@@ -20,36 +22,176 @@ class config: # pylint: disable=invalid-name
2022
Full GMT defaults list at :gmt-docs:`gmt.conf.html`
2123
"""
2224

25+
# Manually set the __signature__ attribute to enable tab autocompletion
26+
_keywords = [
27+
"COLOR_BACKGROUND",
28+
"COLOR_FOREGROUND",
29+
"COLOR_CPT",
30+
"COLOR_NAN",
31+
"COLOR_MODEL",
32+
"COLOR_HSV_MIN_S",
33+
"COLOR_HSV_MAX_S",
34+
"COLOR_HSV_MIN_V",
35+
"COLOR_HSV_MAX_V",
36+
"COLOR_SET",
37+
"DIR_CACHE",
38+
"DIR_DATA",
39+
"DIR_DCW",
40+
"DIR_GSHHG",
41+
"FONT_ANNOT_PRIMARY",
42+
"FONT_ANNOT_SECONDARY",
43+
"FONT_HEADING",
44+
"FONT_LABEL",
45+
"FONT_LOGO",
46+
"FONT_SUBTITLE",
47+
"FONT_TAG",
48+
"FONT_TITLE",
49+
"FORMAT_CLOCK_IN",
50+
"FORMAT_CLOCK_OUT",
51+
"FORMAT_CLOCK_MAP",
52+
"FORMAT_DATE_IN",
53+
"FORMAT_DATE_OUT",
54+
"FORMAT_DATE_MAP",
55+
"FORMAT_GEO_OUT",
56+
"FORMAT_GEO_MAP",
57+
"FORMAT_FLOAT_OUT",
58+
"FORMAT_FLOAT_MAP",
59+
"FORMAT_TIME_PRIMARY_MAP",
60+
"FORMAT_TIME_SECONDARY_MAP",
61+
"FORMAT_TIME_STAMP",
62+
"GMT_DATA_SERVER",
63+
"GMT_DATA_SERVER_LIMIT",
64+
"GMT_DATA_UPDATE_INTERVAL",
65+
"GMT_COMPATIBILITY",
66+
"GMT_CUSTOM_LIBS",
67+
"GMT_EXPORT_TYPE",
68+
"GMT_EXTRAPOLATE_VAL",
69+
"GMT_FFT",
70+
"GMT_GRAPHICS_DPU",
71+
"GMT_GRAPHICS_FORMAT",
72+
"GMT_HISTORY",
73+
"GMT_INTERPOLANT",
74+
"GMT_LANGUAGE",
75+
"GMT_MAX_CORES",
76+
"GMT_THEME",
77+
"GMT_TRIANGULATE",
78+
"GMT_VERBOSE",
79+
"IO_COL_SEPARATOR",
80+
"IO_FIRST_HEADER",
81+
"IO_GRIDFILE_FORMAT",
82+
"IO_GRIDFILE_SHORTHAND",
83+
"IO_HEADER",
84+
"IO_HEADER_MARKER",
85+
"IO_N_HEADER_RECS",
86+
"IO_NAN_RECORDS",
87+
"IO_NC4_CHUNK_SIZE",
88+
"IO_NC4_DEFLATION_LEVEL",
89+
"IO_LONLAT_TOGGLE",
90+
"IO_SEGMENT_BINARY",
91+
"IO_SEGMENT_MARKER",
92+
"MAP_ANNOT_MIN_ANGLE",
93+
"MAP_ANNOT_MIN_SPACING",
94+
"MAP_ANNOT_OBLIQUE",
95+
"MAP_ANNOT_OFFSET_PRIMARY",
96+
"MAP_ANNOT_OFFSET_SECONDARY",
97+
"MAP_ANNOT_ORTHO",
98+
"MAP_DEFAULT_PEN",
99+
"MAP_DEGREE_SYMBOL",
100+
"MAP_EMBELLISHMENT_MODE",
101+
"MAP_FRAME_AXES",
102+
"MAP_FRAME_PEN",
103+
"MAP_FRAME_PERCENT",
104+
"MAP_FRAME_TYPE",
105+
"MAP_FRAME_WIDTH",
106+
"MAP_GRID_CROSS_SIZE_PRIMARY",
107+
"MAP_GRID_CROSS_SIZE_SECONDARY",
108+
"MAP_GRID_PEN_PRIMARY",
109+
"MAP_GRID_PEN_SECONDARY",
110+
"MAP_HEADING_OFFSET",
111+
"MAP_LABEL_MODE",
112+
"MAP_LABEL_OFFSET",
113+
"MAP_LINE_STEP",
114+
"MAP_LOGO",
115+
"MAP_LOGO_POS",
116+
"MAP_ORIGIN_X",
117+
"MAP_ORIGIN_Y",
118+
"MAP_POLAR_CAP",
119+
"MAP_SCALE_HEIGHT",
120+
"MAP_TICK_LENGTH_PRIMARY",
121+
"MAP_TICK_LENGTH_SECONDARY",
122+
"MAP_TICK_PEN_PRIMARY",
123+
"MAP_TICK_PEN_SECONDARY",
124+
"MAP_TITLE_OFFSET",
125+
"MAP_VECTOR_SHAPE",
126+
"PROJ_AUX_LATITUDE",
127+
"PROJ_DATUM",
128+
"PROJ_ELLIPSOID",
129+
"PROJ_GEODESIC",
130+
"PROJ_LENGTH_UNIT",
131+
"PROJ_MEAN_RADIUS",
132+
"PROJ_SCALE_FACTOR",
133+
"PS_CHAR_ENCODING",
134+
"PS_COLOR_MODEL",
135+
"PS_COMMENTS",
136+
"PS_CONVERT",
137+
"PS_IMAGE_COMPRESS",
138+
"PS_LINE_CAP",
139+
"PS_LINE_JOIN",
140+
"PS_MITER_LIMIT",
141+
"PS_MEDIA",
142+
"PS_PAGE_COLOR",
143+
"PS_PAGE_ORIENTATION",
144+
"PS_SCALE_X",
145+
"PS_SCALE_Y",
146+
"PS_TRANSPARENCY",
147+
"TIME_EPOCH",
148+
"TIME_IS_INTERVAL",
149+
"TIME_INTERVAL_FRACTION",
150+
"TIME_LEAP_SECONDS",
151+
"TIME_REPORT",
152+
"TIME_UNIT",
153+
"TIME_WEEK_START",
154+
"TIME_Y2K_OFFSET_YEAR",
155+
]
156+
157+
_special_keywords = {
158+
"FONT": [
159+
"FONT_ANNOT_PRIMARY",
160+
"FONT_ANNOT_SECONDARY",
161+
"FONT_HEADING",
162+
"FONT_LABEL",
163+
"FONT_TAG",
164+
"FONT_TITLE",
165+
],
166+
"FONT_ANNOT": ["FONT_ANNOT_PRIMARY", "FONT_ANNOT_SECONDARY"],
167+
"FORMAT_TIME_MAP": ["FORMAT_TIME_PRIMARY_MAP", "FORMAT_TIME_SECONDARY_MAP"],
168+
"MAP_ANNOT_OFFSET": [
169+
"MAP_ANNOT_OFFSET_PRIMARY",
170+
"MAP_ANNOT_OFFSET_SECONDARY",
171+
],
172+
"MAP_GRID_CROSS_SIZE": [
173+
"MAP_GRID_CROSS_SIZE_PRIMARY",
174+
"MAP_GRID_CROSS_SIZE_SECONDARY",
175+
],
176+
"MAP_GRID_PEN": ["MAP_GRID_PEN_PRIMARY", "MAP_GRID_PEN_SECONDARY"],
177+
"MAP_TICK_LENGTH": ["MAP_TICK_LENGTH_PRIMARY", "MAP_TICK_LENGTH_SECONDARY"],
178+
"MAP_TICK_PEN": ["MAP_TICK_PEN_PRIMARY", "MAP_TICK_PEN_SECONDARY"],
179+
}
180+
181+
__signature__ = Signature(
182+
parameters=[
183+
Parameter(key, kind=Parameter.KEYWORD_ONLY, default=None)
184+
for key in _keywords + list(_special_keywords.keys())
185+
]
186+
)
187+
23188
def __init__(self, **kwargs):
24189
# Save values so that we can revert to their initial values
25190
self.old_defaults = {}
26-
self.special_params = {
27-
"FONT": [
28-
"FONT_ANNOT_PRIMARY",
29-
"FONT_ANNOT_SECONDARY",
30-
"FONT_HEADING",
31-
"FONT_LABEL",
32-
"FONT_TAG",
33-
"FONT_TITLE",
34-
],
35-
"FONT_ANNOT": ["FONT_ANNOT_PRIMARY", "FONT_ANNOT_SECONDARY"],
36-
"FORMAT_TIME_MAP": ["FORMAT_TIME_PRIMARY_MAP", "FORMAT_TIME_SECONDARY_MAP"],
37-
"MAP_ANNOT_OFFSET": [
38-
"MAP_ANNOT_OFFSET_PRIMARY",
39-
"MAP_ANNOT_OFFSET_SECONDARY",
40-
],
41-
"MAP_GRID_CROSS_SIZE": [
42-
"MAP_GRID_CROSS_SIZE_PRIMARY",
43-
"MAP_GRID_CROSS_SIZE_SECONDARY",
44-
],
45-
"MAP_GRID_PEN": ["MAP_GRID_PEN_PRIMARY", "MAP_GRID_PEN_SECONDARY"],
46-
"MAP_TICK_LENGTH": ["MAP_TICK_LENGTH_PRIMARY", "MAP_TICK_LENGTH_SECONDARY"],
47-
"MAP_TICK_PEN": ["MAP_TICK_PEN_PRIMARY", "MAP_TICK_PEN_SECONDARY"],
48-
}
49191
with Session() as lib:
50192
for key in kwargs:
51-
if key in self.special_params:
52-
for k in self.special_params[key]:
193+
if key in self._special_keywords:
194+
for k in self._special_keywords[key]:
53195
self.old_defaults[k] = lib.get_default(k)
54196
else:
55197
self.old_defaults[key] = lib.get_default(key)

0 commit comments

Comments
 (0)