md2key 0.4.0 → 0.4.1

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.
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