Source code for leo.plugins.timestamp

#@+leo-ver=5-thin
#@+node:ekr.20130808211520.15893: * @file timestamp.py
'''If this plugin is enabled, the following node attributes will be managed:
    - str_ctime: creation time
    - str_mtime: time node was last modified
    - str_atime: time node contents were last viewed
'''

# By Kent Tenney

import time
import leo.core.leoGlobals as g

#@@language python
#@@tabwidth -4
#@+others
#@+node:ekr.20130808211520.15895: ** init
[docs]def init (): '''Return True if the plugin has loaded successfully.''' g.registerHandler('new', new_hook) g.registerHandler('create-node', create_node_hook) g.registerHandler('select1', select1_hook) g.plugin_signon(__name__) return True
#@+node:ekr.20130808211520.15896: ** get_timestamp_now
[docs]def get_timestamp_now(): '''Use standard Unix timestamps ''' # local time as a time struct now = time.localtime() # convert time struct to seconds since epoch (timestamp) local = time.mktime(now) return str(local)
#@+node:ekr.20130808211520.15897: ** new_hook
[docs]def new_hook(tag, keywords): '''Hooked to <new> event, fired when a Leo file is created, which the create_node_hook doesn't handle. ''' c = keywords['c'] root = c.rootPosition() d = root.v.u timestamp = get_timestamp_now() d['str_ctime'] = d['str_mtime'] = d['str_atime'] = timestamp
#@+node:ekr.20130808211520.15898: ** create_node_hook
[docs]def create_node_hook(tag, keywords): '''Hooked to <create-node> = set all 3 timestamps to now ''' timestamp = get_timestamp_now() d = keywords['p'].v.u d['str_ctime'] = d['str_mtime'] = d['str_atime'] = timestamp
#@+node:ekr.20130808211520.15899: ** select1_hook
[docs]def select1_hook(tag, keywords): '''Hooked to select1, which fires when focus changes Always sets str_atime to now, sets str_mtime if node body has changed ''' prev = keywords['old_p'].v current = keywords['new_p'].v now = get_timestamp_now() current.u['str_atime'] = now if prev is None: return if prev.isDirty(): #g.es('prev is dirty', color='green') if hasattr(prev, 'prev_body'): if prev.b != prev.prev_body: prev.u['str_mtime'] = now prev.prev_body = prev.b #g.es('previous content changed this session') else: prev.u['str_mtime'] = now prev.prev_body = prev.b
#g.es('first change this session') #@-others #@-leo