Jump to content

Workflow to Capture Thoughts and Ideas to a Text File Without Disrupting Your Flow


Recommended Posts

alfred-workflow-capture.png


 

From the README:

 

This workflow for Alfred captures what you type and appends it to a text file of your choice. It’s very useful to capture quickly any thoughts or tasks that surface while you’re working and don't want to be distracted.

 

1. Double click the downloaded Capture to text.aflredworkflow file in Finder to install.

2. Double click the Run Script action and replace the file name ~/Desktop/cap.txt in the Script with your preferred file path. The file will be automatically created when the workflow runs if it doesn't exist.

3. Click Save.

 

To use it, type capture, hit return and then any text and hit return again, and your input text will be appended to the text file. Go through the text file in batches when you are ready.

 


Link to comment

hi hboon,

 

thanks for sharing this. so far i was doing exactly the same, but was always using a txt-editor, which i had to open first and then i tended to use an empty file for each idea // note - ending up with a million of opened txt files containing one liners.

 

so this one comes in handy.

 

one question: would it be possible to end each entry with two line breaks automagically? this way notes wouldnt be appended to each other but be separated in blocks.

Link to comment

one question: would it be possible to end each entry with two line breaks automagically? this way notes wouldnt be appended to each other but be separated in blocks.

 

Sure, if you are comfortable with editing the script, open the workflow editor, double click on the Run Script stage, and modify the script from something like:

 

echo "{query}" >> YOUR_PATH
echo "{query}"
 
to:
 
echo "{query}
" >> YOUR_PATH
echo "{query}"
and click Save.

 

(Just place your cursor after the first } and hit return once/twice)

Link to comment

Fantastic, very good workflow, but, may add date and time for each entry? thanks

 

I managed to do it with this code in the script:

echo "$(date): {query}" >> ~/Desktop/notes.txt
echo "{query}"

Since I don't need the time, I am using this code instead, which simply display the date:

echo "$(date +"%B %d"): {query}" >> ~/Desktop/notes.txt
echo "{query}"

Still, without a proper line break - which I am not capable of creating, due to missing knowledge - the txt file is getting quite messy to read, so far. 

Link to comment

Followed your advice, but didn't manage to get a line break this way. Do you have a different idea?

 

Since it's line breaks – which isn't the most obvious to read – we might be talking past each other :) Try this:

echo "{query}xx

yy" >> YOUR_PATH
echo "{query}"

Do you observe the line breaks in your text file and the xx and yy "markers" appearing separated by empty line(s)?

Link to comment

I managed to do it with this code in the script:

echo "$(date): {query}" >> ~/Desktop/notes.txt
echo "{query}"

Since I don't need the time, I am using this code instead, which simply display the date:

echo "$(date +"%B %d"): {query}" >> ~/Desktop/notes.txt
echo "{query}"

Still, without a proper line break - which I am not capable of creating, due to missing knowledge - the txt file is getting quite messy to read, so far. 

It works perfect. Thank you very much, is what I was looking for.

Link to comment

Since it's line breaks – which isn't the most obvious to read – we might be talking past each other :) Try this:

echo "{query}xx

yy" >> YOUR_PATH
echo "{query}"

Do you observe the line breaks in your text file and the xx and yy "markers" appearing separated by empty line(s)?

 

With exactly this code, I get the following result:

 

ve6WyCe.png

Is it maybe textwrangler acting funny?

Link to comment

Oh, I see you are not seeing *any* linebreak at all. Can you launch Terminal and type this (replacing with the path to your cap file):

cat YOUR_PATH

It will print out the contents of the file. If you see line breaks there, maybe it's a TextWrangler setting to do with what it consider linebreaks. See if there's a setting mentioning Unix/Windows linebreaks and play with that.

Link to comment

Oh, I see you are not seeing *any* linebreak at all. Can you launch Terminal and type this (replacing with the path to your cap file):

cat YOUR_PATH

It will print out the contents of the file. If you see line breaks there, maybe it's a TextWrangler setting to do with what it consider linebreaks. See if there's a setting mentioning Unix/Windows linebreaks and play with that.

 

Found the solution, it was a wrong TextWrangler setting. Thank you for your help.

Link to comment
  • 1 month later...

In my last post here, I am using Capture to append to a note maintained in nvAlt and Simplenote, I am syncing the two, it works great.

 

Has anyone found a way to append to a note in Evernote,

 

e.g. I tried to get the local path to an Evernote: /Users/user/Library/CoreData/com.evernote.Evernote/5CAC8460-FA3A-45CC-86FE-0194B25197F7/ENNote/_records/7/8/2/0 

 

... so far it is not working, any suggestions please,

Link to comment

Sure, if you are comfortable with editing the script, open the workflow editor, double click on the Run Script stage, and modify the script from something like:

 

echo "{query}" >> YOUR_PATH
echo "{query}"
 
to:
 
echo "{query}
" >> YOUR_PATH
echo "{query}"
and click Save.

 

(Just place your cursor after the first } and hit return once/twice)

 

Another option is to use

echo -e "{query}\n" >> ~/Desktop/cap.txt
echo -e "{query}

The -e flag "enables interpretation of backslash escapes". The \n is a newline character, so just add one for each new line you want. Or, if you wanted to add a tab, it just add \t, which could work nicely when adding a timestamp:

echo -e "$(date +"%e %B %Y %H.%M")\t{query}\n" >> ~/Desktop/cap.txt
echo -e "{query}"
Edited by bseymore
Link to comment
  • 4 weeks later...

@hboon: brilliant workflow, just what I was looking for. Thanks a lot!

 

I've modified the script a bit using the tips from this thread to correctly display the date & weekday "european-style" and separate the notes:

export LANG=de_CH.UTF-8
export LC_ALL=de_CH.UTF-8

echo -e "————————————————————————————\n $(date +"%A, %d.%m.%Y - %H:%M") Uhr:\n{query}\n" >> ~/Desktop/Running\ Notes.txt
echo -e "{query}"

I had to set the locale for the script manually, else the script displays the english Weekday-names even though my system is set to swiss german.

 

the result:

————————————————————————————————————————————————————————————— 

Donnerstag, 05.06.2014 - 15:14 Uhr:
the first entry

————————————————————————————————————————————————————————————— 

Donnerstag, 05.06.2014 - 15:14 Uhr:
the second entry

————————————————————————————————————————————————————————————— 

Donnerstag, 05.06.2014 - 15:15 Uhr:
the third entry

Link to comment

Yes, lovely workflow,

 

I am still trying to get it to write to Evernote, no luck yet,

 

On another note, ;-), has anyone figured out how to get the workflow to append to the top of the target note rather than the bottom?

 

I keep my target note, RunningNotes above, open in Textmate, which is recognizing the external change in the note and updating, works nicely, 

Link to comment

"has anyone figured out how to get the workflow to append to the top of the target note rather than the bottom?"

 

Many options here: http://superuser.com/questions/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash

Thanks for the link, ... check out the reply from Rucent88,

 

I was looking to append, but it is not going to work out because at the top of the file, I have,

 
# NoteTitle 
= Notebook 
@ tag1 
 
Time: 5 June, 2014 17.39
 
for the send over to Evernote, via MarkdowntoEvernote,
Link to comment

Edited 2014-06-07 to correct issues highlighted by deanishe below

 

If you are willing to add a separator to separate the stuff at the top from each note, you can use this python script.  In the "Run Script" element of the workflow, language should be set to python and Double Quotes should be escaped. (edited 2014-06-06 to remove extraneous line from testing).

 

The script will write to an existing file, or, if the specified file doesn't exist, it will create a new file, based on a predefined template.  The template is stored in two parts, a heading (theTemplate - see below), which can be edited in the target notes file without breaking the script, and a separator (theSeparator - see below), which should not be changed in the target notes file. 

 

To customize the script, there are four variables you can modify:

 

notesFile - the filename for your notes

 

theNote - as written, the script inserts the date and time followed by two blank lines ('\n\n') and the text from the command ("{query}").  You can delete the whole date section ("n.strftime('%Y/%m/%d %H:%M:%S')+") or change the formatting - I used the guidelines at http://www.cyberciti.biz/faq/howto-get-current-date-time-in-python/ ).

 

theSeparator - I used '## Notes ##' b/c this will look nice in Markdown but is also unlikely to appear anywhere else.  You can hypothetically use any text.  You should not change this in your target notes file without also changing it in the script, or the script will stop working.

 

theTemplate - I based this on the request earlier in these forums - again, this can be changed to whatever you want.

#!/usr/bin/python

from datetime import datetime
import os

notesFile = '/Users/your home/Desktop/notes.txt' # your path and filename go here
n = datetime.now()
theNote = n.strftime('%Y/%m/%d %H:%M:%S')+'\n\n'+"{query}"
# to reformat the date see http://www.cyberciti.biz/faq/howto-get-current-date-time-in-python/

theSeparator = '## Notes ##'
theTemplate = '# NoteTitle\n= Notebook\n@ tag1'

if not os.path.exists(notesFile):
   with open(notesFile, 'w') as file:
      file.write('{}\n\n{}\n\n{}'.format(theTemplate, theSeparator, theNote))
else:
   with open(notesFile, 'r') as file:
      notes = file.read()
   with open(notesFile, 'w') as file:
      sections = notes.split(theSeparator,1)
      notes = sections[0]+theSeparator+'\n\n'+theNote+'\n'+sections[1]
      file.write(notes)

Edited by dfay
Link to comment
notesFile = '/Users/your\ home/Desktop/notes.txt' # your path and filename go here

There's no need to escape spaces etc. in Python:

 

notesFile = '/Users/your home/Desktop/notes.txt' # your path and filename go here

You should also replace the whole try ... except business with:

 

if not os.path.exists(notesFile):
    with open(notesFile, 'w') as file:
        file.write('{}\n\n{}\n\n{}'.format(theTemplate, theSeparator, theNote))
else:
    with open(notesFile, 'r') as file:
        # read contents...
    with open(notesFile, 'w') as file:
        # re-write updated contents

Catching all errors is frowned upon, and in particular, your code will overwrite the notes file if an error other than "file doesn't exist" occurs.

Link to comment

Thanks for the workflow; good job.  I've noticed the following when capturing:

 

Say that I wish to enter:  "Do not forget to pay:  Verizon Home:  $119.86; Bill Me Later:  $225.00; Credit One:  $150.00.  Said transactions have already been entered in YNAB; all you need to do is use BillPay account and enter aforementioned payments to their respective payees."

 

The following is captured:

 

"Do not forget to pay:  Verizon Home:  19.86; Bill Me Later:  25.00; Credit One:  50.00.  Said transactions have already been entered in YNAB; all you need to do is use BillPay account and enter aforementioned payments to their respective payees."

 
Perhaps it has something to do with the symbol "$"?  This I say because captures are not being recorded properly when anything is preceded by the $ symbol.  The $ symbol itself is not being captured.  Nota bene, I am using OS X v. 10.9.3.
 
Once sorting out the aforesaid all shall be well on this front, for I find your workflow a welcome addition to my diurnal arsenal of Alfred's capableness.
 
Thank you in advance for looking into this.
Link to comment

That's a bug in the workflow.

Open it up Alfred Preferences, select the Workflow and double-click on the central Run Script action. In the Escaping Options, make sure Backquotes, Double Quotes, Backslashes and Dollars are selected. Then Save your changes.

That last option is the one that's messing things up for you. What's happening is that bash is replacing $1 (and $2 etc.) with its command line arguments (of which there are none).

Edited by deanishe
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...