3

I use the Geany IDE for programming, and it does not reliably reload my previously open files, for example after a power outage. I found that Geany has a command line feature which returns a list of all open files in the editor, so I hoped that I could quickly write a cron command that would automatically save that list every hour or so.

I currently have this line in my crontab:

0 * * * * ~/bin/save_geany_files

and the script contains just one line:

geany --list-documents > ~/geany_files.txt

This does not work. I noticed that Geany's --list-documents feature must be called by the same user (I think), so I tried adding "su - [myusername]" to the script, but apparently su cannot be used from within a cron job? So, I am at a loss for how to automate this. I am open to any other solutions to my problem, although Geany options/plugins seem to be unreliable (which is why I tried this in the first place)

monguin
  • 581
  • 1
  • 5
  • 9
  • Have you made `~/bin/save_geany_files` executable? It should work without the `su` (cron jobs are run by the user whose crontab it is) as long as the "script" (not really a script) is executable. – terdon Apr 29 '13 at 19:07
  • Commands in your crontab (i.e. added via `crontab` without a `-u` argument) run under your account by default. Unless you're running `geany` as a user other than yourself, which seems mildly unlikely, the problem has to be somewhere else, e.g., with @terdon's suggestion that maybe the shell script isn't executable. – Aaron Miller Apr 29 '13 at 19:08
  • And, as a more general solution, you might consider using a more reliable editor; I've found Emacs (which has long-standing and well-tested session save and restore facilities) quite suitable. (I know -- "Emacs? Augh!" -- but don't believe the hype! Emacs is extremely intuitive, once you've spent several years learning how it works. :) – Aaron Miller Apr 29 '13 at 19:15
  • @terdon: Yes, the file is executable. I thought cron jobs were run as the owner, but I put in a debugging line, `echo "user: $USER"`, and in the output it shows just `user: `, so I'm confused. I'm not running Geany as a different user. – monguin Apr 29 '13 at 22:33
  • I'm not opposed to learning emacs, but that's something I'd do on my own time, so it will have to wait for a while. – monguin Apr 29 '13 at 22:34

1 Answers1

3

By running the crontab like this:

0 * * * * ~/bin/save_geany_files 2> /tmp/geanyerror.log

I found this error message in /tmp/geanyerror.log:

Geany: cannot open display

I solved this by adding the following line to .bashrc:

xhost local:arune > /dev/null

(where arune is my username) and changing my crontab to

0 * * * * export DISPLAY=:0.0 && ~/bin/save_geany_files 2> /tmp/geanyerror.log

My own save_geany_files-script looks like this:

#!/bin/bash
cp /home/arune/geany/savenew.txt /home/arune/geany/saveold.txt
/usr/bin/geany --list-documents > /home/arune/geany/savenew.txt

to store a "backup" for one hour extra.