Monthly Archive: October 2010

Sending EagleFiler metadata to BibDesk

I have a big EagleFiler archive in which I hold all of my PDFs, and as I add papers, I generally fill the “Title” field with the paper title and the “From name” field with the authors, as well as assign tags, etc. EagleFiler is generally my first stop when I acquire a new PDF. Plus, my EagleFiler library lives in my Dropbox, so I can get at these files from my iDevices as well.

However, when I want to add one of these papers to my bibliography, I have to go to BibDesk, make a new record, retype the title and author, and attach the PDF. And then I think: I should automate the export of the metadata someday.

Happily, that someday is today.

I have put together a simple Applescript that will look at the record(s) selected in EagleFiler, and create a corresponding new BibDesk record for each of them. It fills in the title, author, and source URL information from the EagleFiler metadata, attaches the file to the BibDesk record, and then does a couple of other things that are idiosyncratic to my particular filing system. In particular, it looks in the path to see if it is inside a “Journals” folder (in which case it is an article), or in “Monographs” (in which case it is a book), etc. It also looks to see if a tag called “look” was assigned in EagleFiler, and marks the “Read” flag in BibDesk if the tag is found. Obviously, these parts are only useful if you file things the way I do. But even if you don’t, it might be interesting to see how the script works.

I am no Applescript genius. In my initial tests, this ran kind of slowly, and there are probably better or more efficient ways it could be written, but it does seem to work.

Once a BibDesk record is created, the publication window is opened, and generally there needs to be some tweaking: fixing quotation marks, protecting capitals, fixing author lists to use “and” as separators, but it still saves some double-entry.

One installs Applescripts like this into ~/Library/Scripts/Applications/EagleFiler and then they are available via the scripts menu in the menubar.

-- Create a new BibDesk record from EagleFiler record
-- Paul Hagstrom, November 2010
-- This is probably kind of idiosyncratic.
-- My filing procedure is to have PDFs in EagleFiler with the
-- title in title
-- authors in from
-- There is very little chance that it will work without any need to edit
-- Maybe later I'll try to figure out how to tag things so that they'll
-- detect the right reference type, etc.

on run
	tell application "EagleFiler"
		set _records to selected records of browser window 1
		repeat with _record in _records
			set theTitle to _record's title
			set theAuthor to _record's from name
			set theSource to _record's source URL
			set theFile to _record's file
			set thePath to theFile's POSIX path
			set theNote to _record's note text
			-- special handling based on my idiosyncratic organization
			-- look at the path to see if it is a journal or what
			set theType to "article"
			if thePath contains "Journals" then
				set theType to "article"
			end if
			if thePath contains "Monographs" then
				set theType to "book"
			end if
			if thePath contains "Dissertations" then
				set theType to "phdthesis"
			end if
			if thePath contains "Edited" or thePath contains "WPL" or thePath contains "Conferences" then
				set theType to "incollection"
			end if
			-- special handling of tags.  If something is tagged "look" it goes on the reading list.
			set theRead to false
			set _tags to _record's assigned tags
			repeat with _tag in _tags
				if _tag's name is "look" then
					set theRead to true
				end if
			end repeat
			tell application "BibDesk"
				tell document 1
					set thePub to make new publication at the beginning of publications
					set type of thePub to theType
					set title of thePub to theTitle
					--at some point I might try to replace commas with "and"
					--and if theAuthor starts with "ed." put it in the editor
					--field instead, since that is my general convention in EF.
					set value of field "Author" of thePub to theAuthor
					tell thePub
						add (POSIX file thePath) to beginning of linked files
						if theRead then
							set value of field "Read" to 1
						end if
						make new linked URL with data theSource at end of linked URLs
						--at some point I might try to parse my filenames
						--they are generally authorYear-source.pdf
						--set value of field "Journal" to theJournal
						--set publication year to theYear
						set cite key to get generated cite key
					end tell
					show thePub
				end tell
			end tell
		end repeat
	end tell
end run

Dotless i with ogonek.

I was asked how to do a dotless i with an ogonek. Unicode doesn’t have a character for this, and the combining ogonek doesn’t line up reliably with a dotless i. But I got a pretty reasonable one in Word by doing the following.

Insert field…, and type eq o(a,b). Right click on the field and toggle field codes so you can see { eq o(a,b) }. Remove the spaces inside the braces (yielding {eq o(a,b)}), and then select the a, open the Character Viewer (in the international/input menu bar widget, turn it on in System Preferences on Mac OS X), and replace “a” with a dotless i, and replace “b” with a (non-combining) ogonek. Right-click, toggle field codes. You can now copy and paste it wherever it is needed.

This will undoubtedly come in handy regularly. For example, if you need to render Piglet in text.