md2key 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cb41f4bf6d0e31b689ac2d30b05c4e9d70c4ded
4
- data.tar.gz: badaf24c7b6bda22c26d32832142050d3a58661a
3
+ metadata.gz: 3bd96ffc0f4fefb99341bfed8c3f4f3c09ed3edb
4
+ data.tar.gz: e8734c6294e3bfc804ca93be06cc7e9f954acbf2
5
5
  SHA512:
6
- metadata.gz: e3a084189e758af94942187ff63d7f4d683b6ea8244ef26ef2693cd36bb54aed4df5af5093d2e8c09478964ac4ebdb80e6187497a64049d1c9fa4a06cc1fd55e
7
- data.tar.gz: 58d9ac418c913b0ce95e65a4044033d42d4f84ce2d6725307290b991a82a326261fa7de7666191973fe3db615068ab7233c1d8630d6afd17c5e6c2c577ef5d66
6
+ metadata.gz: a6cbc4dea1091b64fcbcd5c70d4cbf824a313955bb4b15f12c9dd41e35c0a1b360834f753658459ffb4fc3f2651b71b8e6d4a3c2147a9b447d99edbc4c7b2e49
7
+ data.tar.gz: d340cb217bdcbb479f84da983f3a9459bd12f61bf622a2439692ff190c6e496b85361b8113d37d17850d67704f4885371dd585d49e288b4af2d2ee5dcdecab88
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .DS_Store
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v0.4.1
2
+
3
+ - Performance improvement
4
+ - Stop generating applescript every time
5
+ - Thanks to @bogem
6
+
1
7
  # v0.4.0
2
8
 
3
9
  - Support sintax-highlighted source code insert
@@ -40,6 +46,7 @@
40
46
  - Temporarily support skipping `---`
41
47
  - Still expecting users to write a format like Deckset
42
48
  - https://github.com/k0kubun/md2key/pull/2
49
+ - Thanks to @liubin
43
50
 
44
51
  # v0.1.1
45
52
 
data/README.md CHANGED
@@ -43,6 +43,9 @@ You can separate slides with `---` just for readability.
43
43
 
44
44
  ### Insert source code
45
45
 
46
+ If you have `highlight` command, you can insert syntax-highlighted source code.
47
+ If you don't have it, execute `brew install highlight`.
48
+
46
49
  <img src='https://i.gyazo.com/7ff36be267652ab567191a6d5cae1d0f.png' width='60%'>
47
50
 
48
51
  <pre>
@@ -0,0 +1,14 @@
1
+ on run argv
2
+ tell application "Keynote"
3
+ activate
4
+
5
+ tell the front document
6
+ set n to 0
7
+ repeat with s in slides
8
+ set n to n + 1
9
+ end repeat
10
+
11
+ move slide n to before slide n
12
+ end tell
13
+ end tell
14
+ end run
@@ -0,0 +1,19 @@
1
+ -- First argument - title
2
+ -- Second arument - content
3
+ on run argv
4
+ tell application "Keynote"
5
+ tell the front document
6
+ -- Workaround to select correct master slide. In spite of master slide can be selected by name,
7
+ -- name property is not limited to be unique.
8
+ -- So move the focus to second slide and force "make new slide" to use the exact master slide.
9
+ set TEMPLATE_SLIDE_INDEX to 2
10
+ move slide TEMPLATE_SLIDE_INDEX to before slide TEMPLATE_SLIDE_INDEX
11
+
12
+ set newSlide to make new slide
13
+ tell newSlide
14
+ set object text of default title item to first item of argv
15
+ set object text of default body item to second item of argv
16
+ end tell
17
+ end tell
18
+ end tell
19
+ end run
@@ -0,0 +1,15 @@
1
+ -- First argument - slides count
2
+ on run argv
3
+ tell application "Keynote"
4
+ set theSlides to slides of the front document
5
+ set n to first item of argv as number
6
+
7
+ repeat with theSlide in theSlides
8
+ if n > 2 then
9
+ delete slide n of the front document
10
+ end if
11
+
12
+ set n to n - 1
13
+ end repeat
14
+ end tell
15
+ end run
@@ -0,0 +1,6 @@
1
+ tell application "Keynote"
2
+ set TEMPLATE_SLIDE_INDEX to 2
3
+ tell the front document
4
+ delete slide TEMPLATE_SLIDE_INDEX
5
+ end tell
6
+ end tell
@@ -0,0 +1,5 @@
1
+ tell application "Keynote"
2
+ tell the front document
3
+ make new slide
4
+ end
5
+ end tell
@@ -0,0 +1,17 @@
1
+ -- First argument - slides count
2
+ -- Second argument - code background path
3
+
4
+ on run argv
5
+ tell application "Keynote"
6
+ tell the front document
7
+ set theSlide to slide (first item of argv as number)
8
+ set theImage to second item of argv as POSIX file
9
+ set docWidth to its width
10
+ set docHeight to its height
11
+
12
+ tell theSlide
13
+ make new image with properties {opacity:80, file:theImage, width:docWidth - 180, position:{90, 240}}
14
+ end tell
15
+ end tell
16
+ end tell
17
+ end run
@@ -0,0 +1,28 @@
1
+ -- First argument - slides count
2
+ -- Second argument - POSIX path
3
+ on run argv
4
+ tell application "Keynote"
5
+ tell the front document
6
+ set TEMPLATE_SLIDE_INDEX to 2
7
+
8
+ set slideNumber to first item of argv as number
9
+ set theSlide to slide slideNumber
10
+ set theImage to second item of argv as POSIX file
11
+ set docWidth to its width
12
+ set docHeight to its height
13
+
14
+ -- Create temporary slide to fix the image size
15
+ tell slide TEMPLATE_SLIDE_INDEX
16
+ set imgFile to make new image with properties { file:theImage, width:docWidth / 3 }
17
+ tell imgFile
18
+ set imgWidth to its width
19
+ set imgHeight to its width
20
+ end tell
21
+ end tell
22
+
23
+ tell theSlide
24
+ make new image with properties {file:theImage, width:imgWidth, position:{ docWidth - imgWidth - 60, docHeight / 2 - imgHeight / 2 } }
25
+ end tell
26
+ end tell
27
+ end tell
28
+ end run
@@ -0,0 +1,7 @@
1
+ tell application "Keynote"
2
+ tell application "System Events"
3
+ tell application process "Keynote"
4
+ keystroke "v" using { command down }
5
+ end tell
6
+ end tell
7
+ end tell
@@ -0,0 +1,8 @@
1
+ tell application "Keynote"
2
+ set n to 0
3
+ set theSlides to slides of the front document
4
+ repeat with theSlide in theSlides
5
+ set n to n + 1
6
+ end repeat
7
+ do shell script "echo " & n
8
+ end tell
@@ -0,0 +1,14 @@
1
+ -- First argument - title
2
+ -- Second argument - sub
3
+ on run argv
4
+ tell application "Keynote"
5
+ set COVER_SLIDE_INDEX to 1
6
+
7
+ tell the front document
8
+ tell slide COVER_SLIDE_INDEX
9
+ set object text of default title item to first item of argv
10
+ set object text of default body item to second item of argv
11
+ end tell
12
+ end tell
13
+ end tell
14
+ end run
@@ -25,9 +25,9 @@ module Md2key
25
25
  end
26
26
 
27
27
  def generate_contents
28
- Keynote.update_cover(@markdown.cover.title, @markdown.cover.lines.join('\n'))
28
+ Keynote.update_cover(@markdown.cover.title, @markdown.cover.lines.join("\n"))
29
29
  @markdown.slides.each_with_index do |slide, index|
30
- Keynote.create_slide(slide.title, slide.lines.join('\n'))
30
+ Keynote.create_slide(slide.title, slide.lines.join("\n"))
31
31
  Keynote.insert_image(slide.image) if slide.image
32
32
  Keynote.insert_code(slide.code) if slide.code
33
33
  end
@@ -2,97 +2,35 @@ require 'unindent'
2
2
 
3
3
  module Md2key
4
4
  class Keynote
5
- COVER_SLIDE_INDEX = 1
6
- TEMPLATE_SLIDE_INDEX = 2
7
5
  CODE_BACKGROUND_PATH = File.expand_path('../../assets/background.png', __dir__)
8
6
 
9
7
  class << self
10
8
  # You must provide a first slide as a cover slide.
11
9
  def update_cover(title, sub)
12
- tell_keynote(<<-APPLE.unindent)
13
- tell the front document
14
- tell slide #{COVER_SLIDE_INDEX}
15
- set object text of default title item to "#{title}"
16
- set object text of default body item to "#{sub}"
17
- end tell
18
- end tell
19
- APPLE
10
+ execute_applescript(:void, :update_cover, title, sub)
20
11
  end
21
12
 
22
13
  def ensure_template_slide_availability
23
14
  return if slides_count >= 2
24
-
25
- tell_keynote(<<-APPLE.unindent)
26
- tell the front document
27
- make new slide
28
- end
29
- APPLE
15
+ execute_applescript(:void, :ensure_template_slide_availability)
30
16
  end
31
17
 
32
18
  # All slides after a second slide are unnecessary and deleted.
33
19
  def delete_extra_slides
34
- tell_keynote(<<-APPLE.unindent)
35
- set theSlides to slides of the front document
36
- set n to #{slides_count}
37
-
38
- repeat with theSlide in theSlides
39
- if n > 2 then
40
- delete slide n of the front document
41
- end if
42
-
43
- set n to n - 1
44
- end repeat
45
- APPLE
20
+ execute_applescript(:void, :delete_extra_slides, slides_count)
46
21
  end
47
22
 
48
23
  def delete_template_slide
49
- tell_keynote(<<-APPLE.unindent)
50
- tell the front document
51
- delete slide #{TEMPLATE_SLIDE_INDEX}
52
- end tell
53
- APPLE
24
+ execute_applescript(:void, :delete_template_slide)
54
25
  end
55
26
 
56
27
  def create_slide(title, content)
57
- tell_keynote(<<-APPLE.unindent)
58
- tell the front document
59
- -- Workaround to select correct master slide. In spite of master slide can be selected by name,
60
- -- name property is not limited to be unique.
61
- -- So move the focus to second slide and force "make new slide" to use the exact master slide.
62
- #{move_to_slide(TEMPLATE_SLIDE_INDEX)}
63
-
64
- set newSlide to make new slide
65
- tell newSlide
66
- set object text of default title item to "#{title}"
67
- set object text of default body item to "#{content}"
68
- end tell
69
- end tell
70
- APPLE
28
+ execute_applescript(:void, :create_slide, title, content)
71
29
  end
72
30
 
73
31
  # Insert image to the last slide
74
32
  def insert_image(path)
75
- tell_keynote(<<-APPLE.unindent)
76
- tell the front document
77
- set theSlide to slide #{slides_count}
78
- set theImage to POSIX file "#{path}"
79
- set docWidth to its width
80
- set docHeight to its height
81
-
82
- -- Create temporary slide to fix the image size
83
- tell slide #{TEMPLATE_SLIDE_INDEX}
84
- set imgFile to make new image with properties { file: theImage, width: docWidth / 3 }
85
- tell imgFile
86
- set imgWidth to its width
87
- set imgHeight to its width
88
- end tell
89
- end tell
90
-
91
- tell theSlide
92
- make new image with properties { file: theImage, width: imgWidth, position: { docWidth - imgWidth - 60, docHeight / 2 - imgHeight / 2 } }
93
- end tell
94
- end tell
95
- APPLE
33
+ execute_applescript(:void, :insert_image, slides_count, path)
96
34
  end
97
35
 
98
36
  def insert_code(code)
@@ -105,76 +43,34 @@ module Md2key
105
43
  private
106
44
 
107
45
  def insert_code_background
108
- tell_keynote(<<-APPLE.unindent)
109
- tell the front document
110
- set theSlide to slide #{slides_count}
111
- set theImage to POSIX file "#{CODE_BACKGROUND_PATH}"
112
- set docWidth to its width
113
- set docHeight to its height
114
-
115
- tell theSlide
116
- make new image with properties { opacity: 80, file: theImage, width: docWidth - 180, position: { 90, 240 } }
117
- end tell
118
- end tell
119
- APPLE
46
+ execute_applescript(:void, :insert_code_background, slides_count, CODE_BACKGROUND_PATH)
120
47
  end
121
48
 
122
49
  def activate_last_slide
123
- tell_keynote(<<-APPLE.unindent)
124
- activate
125
-
126
- tell the front document
127
- #{move_to_slide(slides_count)}
128
- end tell
129
- APPLE
130
- end
131
-
132
- # Workaround to activate the slide of given index. `show slide [index]`
133
- # didn't work...
134
- def move_to_slide(index)
135
- "move slide #{index} to before slide #{index}"
50
+ execute_applescript(:void, :activate_last_slide)
136
51
  end
137
52
 
138
53
  def paste_clipboard
139
- execute_applescript(<<-APPLE.unindent)
140
- tell application "Keynote"
141
- tell application "System Events"
142
- tell application process "Keynote"
143
- keystroke "v" using { command down }
144
- end tell
145
- end tell
146
- end tell
147
- APPLE
54
+ execute_applescript(:void, :paste_clipboard)
148
55
  end
149
56
 
150
57
  def slides_count
151
- tell_keynote(<<-APPLE.unindent).to_i
152
- set n to 0
153
- set theSlides to slides of the front document
154
- repeat with theSlide in theSlides
155
- set n to n + 1
156
- end repeat
157
- do shell script "echo " & n
158
- APPLE
58
+ execute_applescript(:int, :slides_count)
159
59
  end
160
60
 
161
- def tell_keynote(script)
162
- lines = [
163
- 'tell application "Keynote"',
164
- *script.split("\n"),
165
- 'end tell',
166
- ]
167
- execute_applescript(lines.join("\n"))
61
+ def execute_applescript(type, script_name, *args)
62
+ path = script_path(script_name.to_s)
63
+ args.map! { |arg| "\"#{arg}\"" }
64
+ command = "osascript #{path} #{args.join(' ')}"
65
+ `#{command + ' > /dev/null'}` if type == :void
66
+ `#{command}}`.to_i if type == :int
168
67
  end
169
68
 
170
- def execute_applescript(script)
171
- file = Tempfile.new('applescript')
172
- file.write(script)
173
- file.close
174
- `osascript #{file.path}`.strip
175
- ensure
176
- file.delete
69
+ def script_path(script_name)
70
+ applescripts_path = File.expand_path('applescripts', __dir__)
71
+ File.join(applescripts_path, "#{script_name}.applescript")
177
72
  end
73
+
178
74
  end
179
75
  end
180
76
  end
@@ -1,3 +1,3 @@
1
1
  module Md2key
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: md2key
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
@@ -124,6 +124,16 @@ files:
124
124
  - assets/background.png
125
125
  - bin/md2key
126
126
  - lib/md2key.rb
127
+ - lib/md2key/applescripts/activate_last_slide.applescript
128
+ - lib/md2key/applescripts/create_slide.applescript
129
+ - lib/md2key/applescripts/delete_extra_slides.applescript
130
+ - lib/md2key/applescripts/delete_template_slide.applescript
131
+ - lib/md2key/applescripts/ensure_template_slide_availability.applescript
132
+ - lib/md2key/applescripts/insert_code_background.applescript
133
+ - lib/md2key/applescripts/insert_image.applescript
134
+ - lib/md2key/applescripts/paste_clipboard.applescript
135
+ - lib/md2key/applescripts/slides_count.applescript
136
+ - lib/md2key/applescripts/update_cover.applescript
127
137
  - lib/md2key/cli.rb
128
138
  - lib/md2key/code.rb
129
139
  - lib/md2key/converter.rb