cali 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +50 -0
- data/VERSION +1 -1
- data/lib/cali.rb +43 -15
- metadata +6 -6
- data/README +0 -32
data/README.rdoc
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
= cali
|
2
|
+
|
3
|
+
Interactive cal(1) (but the name ical was taken)
|
4
|
+
|
5
|
+
== Usage
|
6
|
+
|
7
|
+
gem install cali
|
8
|
+
cali
|
9
|
+
# interactive session
|
10
|
+
|
11
|
+
cat > ~/dates <<END
|
12
|
+
2010-09-01 Write a better README for cali
|
13
|
+
2010-09-02 ...
|
14
|
+
2010-09-03 Profit
|
15
|
+
END
|
16
|
+
|
17
|
+
cali -d ~/dates
|
18
|
+
# interactive session with calendar entries
|
19
|
+
|
20
|
+
cat > ~/.calirc <<END
|
21
|
+
Cali.config.dates = '~/dates'
|
22
|
+
END
|
23
|
+
|
24
|
+
cali
|
25
|
+
# interactive session with calendar entries
|
26
|
+
|
27
|
+
== Screenshots
|
28
|
+
|
29
|
+
RUBYLIB=lib ruby -rubygems bin/cali -d README
|
30
|
+
|
31
|
+
September 2010
|
32
|
+
Su Mo Tu We Th Fr Sa
|
33
|
+
1 2 3 4
|
34
|
+
5 6 7 8 9 10 11
|
35
|
+
12 13 14 15 16 17 18
|
36
|
+
19 20 21 22 23 24 25
|
37
|
+
26 27 28 29 30
|
38
|
+
|
39
|
+
2010-09-01 Write a better README for cali
|
40
|
+
|
41
|
+
( The 1st is highlighted, and the 1st, 2nd, and 3rd are underlined. )
|
42
|
+
|
43
|
+
== Key bindings
|
44
|
+
|
45
|
+
[Up/down/left/right] hjkl, Emacs bindings, arrow keys
|
46
|
+
[Next/previous month] n/p, page down/page up
|
47
|
+
[Next/previous year] }/{
|
48
|
+
[Next/previous event] w/b (this navigates between underlined days)
|
49
|
+
[Quit] q
|
50
|
+
[Refresh] ^L (Ctrl-L)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/cali.rb
CHANGED
@@ -18,6 +18,21 @@ require 'date'
|
|
18
18
|
require 'optparse'
|
19
19
|
require 'ncurses'
|
20
20
|
|
21
|
+
class OpenStruct
|
22
|
+
attr_reader :hsh
|
23
|
+
def method_missing(method, value = nil)
|
24
|
+
method = method.to_s
|
25
|
+
if method.match(/^(.*)=$/)
|
26
|
+
@hsh[$1] = value
|
27
|
+
else
|
28
|
+
@hsh[method]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
def initialize
|
32
|
+
@hsh = {}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
21
36
|
class Cali
|
22
37
|
KEYBINDINGS = {
|
23
38
|
['q'[0]]=> :quit,
|
@@ -35,27 +50,32 @@ class Cali
|
|
35
50
|
}
|
36
51
|
|
37
52
|
def Cali::run
|
38
|
-
|
53
|
+
dotcali = File.expand_path "~/.calirc"
|
54
|
+
load dotcali if File.exist? dotcali
|
55
|
+
|
56
|
+
dates = nil
|
39
57
|
OptionParser.new { |opts|
|
40
58
|
opts.banner = "Usage: cali [-d FILE]"
|
41
59
|
opts.on("-d","--dates FILE","Use FILE for events") {|d|
|
42
|
-
|
60
|
+
Cali.config.dates = d
|
43
61
|
}
|
44
62
|
}.parse!
|
45
|
-
|
46
|
-
|
47
|
-
cali=Cali.new(options[:dates])
|
63
|
+
|
64
|
+
cali=Cali.new
|
48
65
|
cali.run
|
49
66
|
end
|
50
67
|
|
51
|
-
def
|
52
|
-
|
68
|
+
def Cali::config
|
69
|
+
@@config ||= OpenStruct.new
|
70
|
+
@@config
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize
|
53
74
|
@today = Date.today
|
54
75
|
@days = {}
|
55
|
-
dates ||= @default_dates
|
56
76
|
@dates = {}
|
57
|
-
if dates
|
58
|
-
open(dates){|f|
|
77
|
+
if Cali.config.dates
|
78
|
+
open(File.expand_path(Cali.config.dates)){|f|
|
59
79
|
until f.eof
|
60
80
|
line = f.readline.strip
|
61
81
|
d = line.match(/(\d{4})-(\d{2})-(\d{2})/)
|
@@ -73,8 +93,8 @@ class Cali
|
|
73
93
|
@key[kk] = v
|
74
94
|
}
|
75
95
|
}
|
76
|
-
postinit_hook
|
77
96
|
end
|
97
|
+
|
78
98
|
def run
|
79
99
|
begin
|
80
100
|
Ncurses.initscr
|
@@ -86,6 +106,7 @@ class Cali
|
|
86
106
|
Ncurses.endwin
|
87
107
|
end
|
88
108
|
end
|
109
|
+
|
89
110
|
def mainloop
|
90
111
|
displaycal
|
91
112
|
displayevents
|
@@ -95,6 +116,7 @@ class Cali
|
|
95
116
|
end
|
96
117
|
end
|
97
118
|
end
|
119
|
+
|
98
120
|
def displaycal
|
99
121
|
Ncurses.clear
|
100
122
|
Ncurses.move(0,0)
|
@@ -103,6 +125,7 @@ class Cali
|
|
103
125
|
displaydays
|
104
126
|
Ncurses.refresh
|
105
127
|
end
|
128
|
+
|
106
129
|
def displaydays
|
107
130
|
counter = (first - first.wday)
|
108
131
|
before_month = true
|
@@ -136,6 +159,7 @@ class Cali
|
|
136
159
|
end
|
137
160
|
Ncurses.move(y,x+1)
|
138
161
|
end
|
162
|
+
|
139
163
|
def displayevents
|
140
164
|
displaycal
|
141
165
|
bounce {
|
@@ -147,11 +171,13 @@ class Cali
|
|
147
171
|
} if @dates[@today]
|
148
172
|
}
|
149
173
|
end
|
174
|
+
|
150
175
|
def bounce (&block)
|
151
176
|
y,x = Ncurses.getcury(Ncurses.stdscr),Ncurses.getcurx(Ncurses.stdscr)
|
152
177
|
yield
|
153
178
|
Ncurses.move(y,x)
|
154
179
|
end
|
180
|
+
|
155
181
|
def movecursor(old)
|
156
182
|
if old != @today
|
157
183
|
a = @days[old.day]
|
@@ -168,6 +194,7 @@ class Cali
|
|
168
194
|
Ncurses.attroff(Ncurses::A_UNDERLINE) if has_items?(@today)
|
169
195
|
Ncurses.move(a[1],a[0]+1)
|
170
196
|
end
|
197
|
+
|
171
198
|
def update(&block)
|
172
199
|
oldtoday = @today.dup
|
173
200
|
yield
|
@@ -177,6 +204,7 @@ class Cali
|
|
177
204
|
displaycal
|
178
205
|
end
|
179
206
|
end
|
207
|
+
|
180
208
|
def move(to)
|
181
209
|
case to
|
182
210
|
when :quit
|
@@ -232,6 +260,7 @@ class Cali
|
|
232
260
|
end
|
233
261
|
displayevents
|
234
262
|
end
|
263
|
+
|
235
264
|
def weekdays
|
236
265
|
wds = []
|
237
266
|
counter = (@today - @today.wday)
|
@@ -244,9 +273,11 @@ class Cali
|
|
244
273
|
end
|
245
274
|
wds
|
246
275
|
end
|
276
|
+
|
247
277
|
def first
|
248
278
|
Date.new(@today.year,@today.month,1)
|
249
279
|
end
|
280
|
+
|
250
281
|
def last
|
251
282
|
newlast = @today.dup
|
252
283
|
until newlast.month != @today.month
|
@@ -255,11 +286,8 @@ class Cali
|
|
255
286
|
end
|
256
287
|
last
|
257
288
|
end
|
289
|
+
|
258
290
|
def has_items?(date=@today)
|
259
291
|
@dates.include?(date)
|
260
292
|
end
|
261
|
-
def preinit_hook
|
262
|
-
end
|
263
|
-
def postinit_hook
|
264
|
-
end
|
265
293
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cali
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tom Adams
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-01 00:00:00 +01:00
|
19
19
|
default_executable: cali
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -39,11 +39,11 @@ executables:
|
|
39
39
|
extensions: []
|
40
40
|
|
41
41
|
extra_rdoc_files:
|
42
|
-
- README
|
42
|
+
- README.rdoc
|
43
43
|
files:
|
44
44
|
- .gitignore
|
45
45
|
- LICENCE
|
46
|
-
- README
|
46
|
+
- README.rdoc
|
47
47
|
- Rakefile
|
48
48
|
- VERSION
|
49
49
|
- bin/cali
|
data/README
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
|
2
|
-
cali
|
3
|
-
====
|
4
|
-
|
5
|
-
Interactive cal(1) (but the name ical was taken)
|
6
|
-
|
7
|
-
.calirc.rb
|
8
|
-
==========
|
9
|
-
|
10
|
-
This file lives in your home directory and is a Ruby script which gets
|
11
|
-
required if it exists. See examples/dotcalirc.rb for an example.
|
12
|
-
|
13
|
-
dates
|
14
|
-
=====
|
15
|
-
|
16
|
-
The -d/--dates option takes a filename as an argument. That file should
|
17
|
-
contain linebreak-separated items containing strings of the form
|
18
|
-
/\d{4}-\d{2}-\d{2}/.
|
19
|
-
|
20
|
-
I have something similar in my home directory containing items such as:
|
21
|
-
|
22
|
-
2008-12-21 Start on RE essay, ML revision
|
23
|
-
|
24
|
-
2009-01-04 The L Word season 6 (final season)
|
25
|
-
|
26
|
-
2009-01-22 Shop meeting
|
27
|
-
|
28
|
-
It's a very simple diary. Try running:
|
29
|
-
ruby -rubygems bin/cali -d README
|
30
|
-
|
31
|
-
The above dates should be underlined in the calendar, and pressing the
|
32
|
-
appropriate key should display the item below the calendar.
|