Using FontForge Plugins¶
A FontForge plugin is a Python package that contains code to enhance the FontForge application in some way, most often by adding one or more entries to the Font View or Char View Tools menu. Using a plugin is as easy as installing the package (often with pip) and, when necessary, “configuring” the plugin. Almost any plugin of general interest will be listed in the PyPI package database.
Plugin Preferences¶
Two FontForge preference values affect the behavior of plugins. The first is “UsePlugins” in the “Preferences …” dialog (under the File menu), which is On by default. Turning this Off, temporarily or permanently, will keep FontForge from attempting to discover and load plugins.
The second preference is “PluginStartupMode” in the “Configure Plugins…” dialog (also under the File menu), which can be set to “On”, “Off”, or “Ask” (the default). When this preference is set to “On” a newly discovered plugins is automatically loaded. When set to “Off” it is not loaded until you decide to Enable it in the same dialog. When set to “Ask” the dialog will appear on startup whenever a new plugin is discovered so that you can decide whether or not to use it. Which value makes the most sense for you will depend on the degree of control you have over what packages are installed in your python path.
Enabling and Disabling Plugins¶
The “Configure Plugins…” dialog allows you to Enable or Disable individual plugins and also Delete entries for once-discovered plugins that are no longer found. You can also “reorder” plugins—changing the load order and therefore the order of Tools menu entries. There are also buttons for loading a so-far-unloaded plugin (in case you do not want to wait for the next application restart), getting more (mostly technical) information about the plugin, and opening the web page associated with the plugin package.
Finally, if a plugin has its own preferences you can set those with the “Configure” button (which is disabled otherwise). The content of preferences and the process of setting them will vary by plugin.
Loading Plugins For Scripts¶
When a script is run with FontForge directly using the -script
flag each
enabled and discovered plugin will be loaded before control is passed off to
the script (unless the -skippyplug
flag is also specified).
In contrast, running a python script with the python
command and importing
the fontforge
module will not cause plugins to be loaded. If you have a
script that needs the functionality of a plugin (perhaps because it adds a
new font export format) you must load the plugins explicitly by calling
fontforge.loadPlugins()
. Calling this function when plugins are already
loaded should be harmless.
Troubleshooting¶
The FontForge project has no control over who can make a plugin. At
some point you may install one that causes problems, potentially even
preventing you from successfully running FontForge. One work-around for
that situation is to run FontForge with the -skippyplug
flag.
When started with that flag FontForge will still “discover” plugins but
will not automatically load them. You can then open the “Configure Plugins…”
dialog, Disable the misbehaving plugin, and restart the program.
When an individual plugin is present but cannot be loaded there will be relevant warnings logged on startup or when a load is attempted via the dialog or the python API. There will also be a warning for each enabled plugin that is not discovered.