Pentadactyl key mappings for Zotero
JavaScript Python Shell
Switch branches/tags
Nothing to show
Latest commit da69c23 Jun 8, 2016 @willsALMANJ End of life Zoterodactyl
Closes #3, closes #4, closes #5, closes #7


Due to upcoming changes to Firefox (namely the deprecation of XUL/XPCOM and the switch to WebExtensions add-ons), Zotero is discontinuing its full featured Firefox add-on (there will still be a small helper "Connector" add-on for connecting to the standalone Zotero application). Because the Zotero Firefox add-on is being discontinued, work on Zoterodactyl is also being discontinued.

A few of Zoterodactyl functions might still be useful if adapted to the Zotero connector add-on. I do not plan to make these adaptations at this time. From what I can tell, from what I can tell, XUL/XPCOM deprecation will also deprecate Pentadactyl. It can not be ported to WebExtensions with the current WebExtensions API. Even if a WebExtension version of Pentadactyl could be created, WebExtensions are sandboxed from each other and require a message passing system to communicate, so Zotero would have to write an extra API layer for connector in order for Pentadactyl to be able to talk to it (which maybe they would be willing to do but would require more work).

Sorry about the feature requests that were left open for a while and never addressed. They were in my backlog but I never quite got to them.


Zoterodactyl implements a set of commands, hints, and key mappings for working with Zotero using Pentadactyl without entering passthrough mode.

Note: Some commands require the Zutilo add-on and are neither added to Pentadactyl nor listed in Pentadactyl's documentation when Zutilo is not active. For the most recently updated and complete version of the documentation, see the Zoterdactyl GitHub page.


:zoterofocus: Show or focus Zotero

zf: Executes :zoterofocus

:zoteroclose: Hide Zotero

zc: Executes :zoteroclose

:zoteronewitemmenu: Open new item menu

zN: Executes :zoteronewitemmenu

:zoteronewwebitem: Create website item for the current page

zw: Executes :zoteronewwebitem

:zoteronextitem: Select next item

J: Executes :zoteronextitem

:zoteropreviousitem: Select previous item

K: Executes :zoteropreviousitem

:zoteroshiftselectnextitem: Select next item (holding previous selections)

): Executes :zoteroshiftselectnextitem

:zoteroshiftselectpreviousitem: Select next item (holding previous selections)

(: Executes :zoteroshiftselectpreviousitem

:zoterotoggleitem: Toggle current Zotero item's attachments open/closed

zT: Executes :zoterotoggleitem

:zoteroquickcopy: QuickCopy selected items to clipboard

zq: Executes :zoteroquickcopy

:zoteroyanktags: Copy ("yank") Zotero item tags

Note: Zutilo required

zy: Executes :zoteroyanktags

:zoteropastetags: Paste Zotero item tags

Note: Zutilo required

zp: Executes :zoteropastetags

:zoterocopycreators: Copy Zotero item creators

Note: Zutilo required

zC: Executes :zoterocopycreators

:zoteroshowpaths: Show attachment paths

Note: Zutilo required

zP: Executes :zoteroshowpaths

:zoteromodifypaths: Modify attachment paths

Note: Zutilo required

zM: Executes :zoteromodifypaths

:zoterorelateitems: Relate Zotero items

Note: Zutilo required

zR: Executes :zoterorelateitems

:zoteroedititem: Edit item info

Note: Zutilo required

ze: Executes :zoteroedititem

:zoteroaddnote: Add note to item

Note: Zutilo required

zn: Executes :zoteroaddnote

:zoteroaddtag: Add tag to item

Note: Zutilo required

zt: Executes :zoteroaddtag

:zoterorelateitemsdialog: Open relate items dialog

Note: Zutilo required

z-R: Executes :zoterorelateitemsdialog

:zoteroattachpage: Attach current page to current Zotero item

Note: Zutilo required

za: Executes :zoteroattachpage

:zoterosaveitem: Save item from page

zs: Executes :zoterosaveitem

zS: Executes :zoterosaveitem -attachments opposite

z-s: Executes :zoterosaveitem -attachments add

z-S: Executes :zoterosaveitem -attachments skip

;z: Attach link target to current Zotero item

Note: Zutilo required


Pentadactyl catches some keystrokes (e.g. <Down> and <Up>), preventing them from being passed to Zotero (e.g. to select the next or previous item in the case of <Down> and <Up>). The Zoterodactyl plugins try to create workarounds for these keystrokes (e.g. J and K for <Down> and <Up>). Other keystrokes (e.g. <Return> and <Del>) are passed to Zotero when it has focus (e.g. so typing zf to focus Zotero allows one to open the currently selected item by pressing <Return> and to delete it by pressing <Del>).

Two of Zoterodactyl's key mappings conflict with default Pentadactyl key mappings (zM and zR). Pentadactyl provides alternate default key mappings that can be used instead (ZM and ZR).

Keep in mind that in Firefox <C-Space> opens context menus. So once you have used zf to focus Zotero and J and K to navigate items, you can use <C-Space> and the <Up> and <Down> keys to select other operations on items not given mappings above (e.g. "Open in External Viewer" or "Show File").


Install this plugin by copying it to the ~/.pentadactyl/plugins/ directory (or %USERPROFILE%\pentadactyl\plugins on Windows). You have to create this directory if it does not exist. Any plugins in that directory will be loaded on start up. Plugins can also be loaded with the :lpl command. If you modify the plugin and want to load it again, it may be necessary to use :lpl! to overwrite the previously loaded version.

The plugin needs to be in a plugins directory of a directory in the runtimepath setting. If you want to use a different directory than ~/.pentadactyl, you can add an additional directory to the runtimepath setting and save the plugin in a plugins subdirectory of it.


Zutilo is a Firefox add-on by the same author as Zoterodactyl. It provides keyboard shortcuts to existing Zotero functions as well as some new functions and GUI elements for accessing them. In order to avoid duplication of code, Zoterodactyl calls Zutilo functions where possible. Through Zutilo's preferences, it is possible to disable all of Zutilo's GUI elements if you just want to use Zoterodactyl without any other effects from having Zutilo installed (other than a "Zutilo preferences" entry in the Zotero gear icon menu).

Any Zoterodactyl functionality that simply wraps base Zotero functions is implemented independent of Zutilo. In order to avoid clutter and broken functions, the Zutilo-dependent functions are not defined when Zoterodactyl loads if it does not detect that Zutilo is enabled. If for some reason you are toggling Zutilo's enabled status, you can update Zoterodactyl either by doing a :rehash in Pentadactyl or forcing Pentadactyl to reload all plugins with :lpl!.


Currently planned upcoming features are generally listed on the wiki or the issues section of Zoterodactyl's GitHub page. If you think there are other commands that other users would find useful, please suggest them by contacting me or opening issue on GitHub.