-
Notifications
You must be signed in to change notification settings - Fork 229
Scripting
MobileOrg for Android supports some scripting features
** Invoking the capture interface from outside the application**
Start the capture screen by invoking the following action: com.matburt.mobileorg.CAPTURE (or com.matburt.mobileorg.donate.CAPTURE) It also takes a intent extra called 'txtValue' that will pre-populate the Capture interface's text box
Here's an example of a Python ASE/SL4A script that captures a note via the speech system and sends it to the capture interface
import android
droid = android.Android()
message = droid.recognizeSpeech("Capture New Note").result
a = droid.startActivity("com.matburt.mobileorg.CAPTURE", None, None, {'txtValue':message}, False)
Voice Capturing with Tasker
Instead of SL4A you can also use Tasker. The following recipe is designed to capture new items completely hands-free. I use with when driving my car. I wish this task could also be started by a voice command with vlingo, but I haven't found a way yet. So you still have to press an icon on your home screen to start the task.
This Tasker task will first speak a welcome message, showing the readiness of the phone to listen to you. It will then repeat what Android recognized as your input. You can then decide if the input was understood correctly and proceed (press OK) or, if the recognition failed (what happens quite often), you can cancel and start once again.
Create a new task with Tasker, name it OrgCapture (or whatever).
Assign a series of actions to it:
- Variable Set, Name: %SAVECLIP To: %CLIP, If %CLIP is set
- Set Clipboard, Text: ?, Add: not checked
- Say, Text: Hey Sven. I'm your trusted system. Please feed me with some stuff, Engine:Voice: com.svox.pico.eng-USA, Stream: Media
- Run Script, SpeechToClip.py (this is a SL4A script, see below), Terminal: unchecked
- Wait, 110 ms, Until: %CLIP !~ ?
- Say, Text: You said: %CLIP, engine and stream like above. This repeats what you have said in step d)
- Set Clipboard, Text: %SAVECLIP, If: %SAVECLIP is set
- Variable Query, Name: %HIT, Input Type: Numeric/Integer
- If, %HIT Is set
- Action Intent, Action: com.matburt.mobileorg.CAPTURE, Cat: None, Extra: txtValue:%CLIP, Target: Activity
- Variable Clear, Name:%SAVECLIP
Assign an Icon to the task, I use the unicorn of MobileOrg.
Create a shortcut on your homescreen.
The SL4A script SpeechToClip.py which is called in step d) looks like this:
import android
droid = android.Android()
droid.setClipboard(droid.recognizeSpeech()[1])
How to remind yourself that you have captured some new items en route?
When back on your Computer at home you might already have forgotten about your newly captured items. If you have already synced, these show up in the file from-mobile.org, but contain no TAGs or TODO keywords. Therefore, they probably won't show up in your Agenda Views in Emacs. What I do to remind myself about the new entries that need to be refiled etc., is letting a Cronjob probe if there are some new items in the file and print its content directly onto the desktop with Conky. The following will not work with Windows, I don't know about Mac. Anyway, you have to install Conky.
First you need a script that regularly executes org-mobile-pull (on that occasion you can also do a fresh push):
#!/bin/bash
emacs --batch --load ~/.emacs --eval "(org-mobile-pull)" --eval "(org-mobile-push)"
Save the script under ~/bin/org-mobile-sync/org-mobile-pullpush.sh (or whatever).
Second, create a script that checks if from-mobile.org has some content and starts Conky to display it:
#!/bin/bash
ORGFILE="/home/sven/Dropbox/myconf/from-mobile.org" # replace that path according to your needs.
KILLNR="$(ps ax | grep "conky -c .*conkyrc-mobile" | grep -v grep | sed 's/ pts.*//g')"
NEWTASK="$(cat $ORGFILE | grep -v auto-revert | grep -v ^$ | grep -v 20[0-9][0-9])"
if [ -n "$NEWTASK" ];
then
if [ -n "$KILLNR" ];
then
exit
else
conky -c ~/.conkyrc-mobile &
fi
else
if [ -n "$KILLNR" ];
then
kill $KILLNR
else
exit
fi
fi
Save this one under ~/bin/org-mobile-sync/conky-mobile.sh (or whatever). Note that my from-mobile.org contains the first line -- mode: auto-revert; mode: org; -- If you don't use auto-revert you can delete the respective pipe in the definition of NEWTASK.
Third, you need a special config-file for Conky with the name given in the above script (~/.conkyrc-mobile):
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_spacer right
use_xft yes
xftfont DejaVu Sans:size=18
xftalpha 0.8
text_buffer_size 2048
update_interval 3.0
draw_shades no
draw_outline no # amplifies text if yes
draw_borders no
uppercase no
border_margin 9
border_width 10
default_color grey
own_window_colour brown
own_window_transparent yes
alignment top_right
gap_x 10
gap_y 10
TEXT
$color
${Color green}NEW TASKS
${execi 10 cat /home/sven/Dropbox/myconf/from-mobile.org | grep -v auto-revert \
| grep -v ^$ | grep -v 20[0-9][0-9]}$color
Fourth, set up the cronjobs, here is how my crontab looks like:
*/30 * * * * sh /home/sven/bin/org-mobile-sync/org-mobile-pullpush.sh >/dev/null 2>&1
*/35 * * * * DISPLAY=:0.0 /home/sven/bin/org-mobile-sync/conky-mobile.sh >/dev/null 2>&1