command line editor 27014533 2018 3
1 5 1.1................................... 5 1.2................................... 5 2 6 2.1 Emacs...................................... 6 2.2 Ruby....................................... 7 2.3 RubyGems.................................... 7 2.4 Keybind..................................... 8 2.5 CUI(Character User Interface)......................... 9 2.6 gem............................. 10 2.6.1 diff-lcs.................................. 10 2.6.2 Thor................................... 10 2.6.3 Minitest................................. 11 2.6.4 FileUtils................................. 11 2.6.5 Rubocop................................. 11 3 editor learner 12 3.1 Installation................................... 12 3.1.1 github install.......................... 12 3.1.2 gem install............................ 12 3.2 uninstall..................................... 12 3.2.1 github install uninstall............. 12 3.2.2 gem install uninstall............... 13 3.3..................................... 13 1
3.3.1 error............................ 13 3.4..................................... 14 3.5 delete...................................... 16 3.6 random h.rb sequential h.rb......................... 16 3.7 random check.............................. 19 3.8 sequential check............................. 20 4 22 4.1......................... 22 4.1.1............... 24 4.1.2 File................................ 25 4.2 delete............................ 26 4.3 random check.................................. 26 4.4 sequential check................................. 29 4.4.1.................. 31 4.4.2................................. 32 4.5 open terminal.................... 32 5 33 5.1....................................... 34 6 35 2
5.1............................. 33 3
2.1..................... 8 2.2....................... 9 3.1........................... 15 3.2 random h.rb................................. 17 3.3.................... 18 3.4 sequential h.rb................................ 18 3.5................................ 19 3.6........................... 20 4
1 1.1 editor learner editor(emacs) CUI ( ) Ruby editor CUI Ruby Ruby GUI CUI 1.2 shunkuntype( ) Web Ruby Emacs editor CUI 5
2 2.1 Emacs editor Emacs Emacs editor editor Editor [1] editor Emacs Editor. Emacs Ruby.rb Ruby 6
editor Emacs editor Emacs 2.2 Ruby Ruby Ruby [2]. 2.3 RubyGems Ruby gem gem RubyGems RubyGems Ruby Ruby ( gem ) gem gem. [3] Ruby ( ) gem 7
install 2.4 Keybind Keybind CUI GUI CUI Control+a Keybind ( ) [4] control c- Keybind CUI 2.1: 8
2.2: 2.5 CUI(Character User Interface) GUI CUI Keybind CUI [5] CUI GUI GUI CUI GUI CUI editor 9
GUI CUI editor GUI CUI 2.6 gem 2.6.1 diff-lcs diff-lcs random check sequential check,diff::lcs.sdiff Diff::LCS.diff.. Diff::LCS.sdiff Diff::LCS.diff (Diff:LCS.diff) 2.6.2 Thor Thor Thor git bundler [6] Thor 10
2.6.3 Minitest Ruby Minitest assert equal Ruby Minitest Rails [7] Minitest 2.6.4 FileUtils FileUtils FileUtils 1. File.join: 2. File.exist: true false 3. FileUtils.mkdir p: dir 4. FileUtils.touch: 5. FileUtils.cp: 6. File.expand path: 7. FileUtils.compare file: true false 2.6.5 Rubocop Rubocop gem Rubocop ruby [8] 11
3 editor learner 3.1 Installation 3.1.1 github install github 1. https://github.com/souki1103/editor learner 2. Clone or download SSH URL 3. git clone( URL) 3.1.2 gem install gem 1. gem install editor learner 2..rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems editor learner editor learner 3.2 uninstall 3.2.1 github install uninstall gituhub install uninstall 12
1. 1. rm -rf editor learner 2. editor learner uninstall 3.2.2 gem install uninstall gem install uninstall 1. 1. gem uninstall editor learner 2..rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems editor learner uninstall 3.3 Ruby version 2.4.0 gem 2.4.0 editor learner version open terminal MacOSX MacOSX 3.3.1 error error 1. rm -rf editor learner 13
1. gem uninstall editor learner 2. version uninstall 3. gem install editor learner version install Ruby version 2 Ruby version 2.4.0 3.4 1. editor learner 2. editor learner editor learner/workshop workshop 3. workshop question.rb answer.rb random h.rb ruby 1 ruby 6 ruby 1ruby 6 1.rb 3.rb 14
3.1: 1. Commands: editor_lerner delete [number~number] editor_learner help [COMMAND] editor_learner random_check editor_leraner sequential_check [lesson_number] [1~3numbers] 15
2. editor learner 3.5 delete editor learner editor learner/workshop delete workshop ruby 1 ruby 6 sequential check Ithave been finished! editor learner delete 1 3 (char ) 3.6 random h.rb sequential h.rb random h.rb sequential h.rb editor learner random check sequential check random check sequential check random check 16
3.2: random h.rb 1. question.rb c-x2 2 2. c-x c-f question.rb 3. answer.rb 3 4. c-x c-f answer.rb 5. c-x o answer.rb 6. question.rb answer.rb random h.rb 17
3.3: question.rb answer.rb 3.4: sequential h.rb random h.rb 18
random h.rb 3.7 random check random check 1. editor learne random check 2. ( /editor learner/workshop ) 3. random h.rb random h.rb question.rb answer.rb 4. check 5. diff-lcs 6. It have been finished! 3.5: 19
3.6: questino.rb BAR answer.rb BA 133 question.rb R answer.rb random check answer.rb. random check typing editor Ruby typing editor 3.8 sequential check sequential check 1. editor learner sequential check(1 6 ) (1 3 ) 2. ( /editor learner/workshop/ruby (1 6 )) 3. sequential h.rb sequential h.rb q.rb.rb 4. check 5. q.rb.rb 6. ruby 1/1.rb is done! sequential check 1 3 1.rb 2.rb 3.rb sequential check sequential check Ruby 20
CUI Ruby 21
4 4.1 initialize editor learner 22
def initialize(*args) super @prac_dir="#{env[ HOME ]}/editor_learner/workshop" @lib_location = Open3.capture3("gem environment gemdir") @versions = Open3.capture3("gem list editor_learner") p @latest_version = @versions[0].chomp.gsub( (, - ).gsub( ), ) @inject = File.join(@lib_location[0].chomp, "/gems/#{@latest_version} /lib") if File.exist?(@prac_dir)!= true then FileUtils.mkdir_p(@prac_dir) FileUtils.touch("#{@prac_dir}/question.rb") FileUtils.touch("#{@prac_dir}/answer.rb") FileUtils.touch("#{@prac_dir}/random_h.rb") if File.exist?("#{@inject}/random_h.rb") == true then FileUtils.cp("#{@inject}/random_h.rb", "#{@prac_dir}/random_h.rb") elsif FileUtils.cp("#{ENV[ HOME ]}/editor_learner/lib/random_h.rb", "#{@prac_dir}/random_h.rb") range = 1..6 range_ruby = 1..3 range.each do num if File.exist?("#{@prac_dir}/ruby_#{num}")!= true then FileUtils.mkdir("#{@prac_dir}/ruby_#{num}") FileUtils.touch("#{@prac_dir}/ruby_#{num}/q.rb") FileUtils.touch("#{@prac_dir}/ruby_#{num}/sequential_h.rb") if File.exist?("#{@inject}/sequential_h.rb") == true then FileUtils.cp("#{@inject}/sequential_h.rb", "#{@prac_dir} /ruby_#{num}/sequential_h.rb") else FileUtils.cp("#{ENV[ HOME ]}/editor_learner/lib/sequential_h.rb", "#{@prac_dir}/ruby_#{num}/sequential_h.rb") range_ruby.each do n 23
FileUtils.touch("#{@prac_dir}/ruby_#{num}/#{n}.rb") @prac dir /editor learner/workshop 3 (@lib location,@versions,@latest version) gem install /.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems editor learner gem install github install 3 @inject gem install File.exist prac dir question.rb answer.rb gem gem install github install if random h.rb sequential h.rb 4.1.1 @ nill 5 prac dir /editor learner/workshop 4 gem install editor learner lib location gem environment gemdir 24
( /Users/souki/.rbenv/versions/2.4.0/ lib/ruby/gems/2.4.0) system gem environment gemdir system true false open3 versions gem install editor learner version Ruby version 2.4.0 Ruby version 2.4.0 version editor learner gem install latest versions versions editor learner version inject gem install editor learner ( /Users/souki/.rbenv /versions/2.4.0/lib/ruby/gems/2.4.0/gems/editor learner-1.1.2 ) inject 4.1.2 File (question.rb answer.rb ) initialize editor learner/workshop random check (question.rb,answer.rb,random h.rb) random h.rb gem install editor learner sequential check editor learner/workshop ruby 1 ruby 6 1.rb 3.rb q.rb( ) sequential h.rb sequential h.rb random h.rb gem install editor learner 25
4.2 delete sequential check chapter (1.rb 3.rb) ( )ruby 1/1.rb is done! delete delete sequential check desc delete [number~number], delete the ruby_file choose number to delet\ e file def delete(n, m) range = n..m range.each{ num if File.exist?("#{@prac_dir}/ruby_#{num}") == true then } system "rm -rf #{@prac_dir}/ruby_#{num}" 2 File system rm -rf File.exist n m for each 4.3 random check random check 26
desc random_check, ramdom check your typing and edit skill. def random_check(*argv) random = rand(1..15) p random s = "#{random}.rb" puts "check starting..." puts "type following commands on the terminal" puts "> emacs question.rb answer.rb" src_dir = File.expand_path(../.., FILE ) # "Users/souki/editor_learner" if File.exist?("#{@inject}/random_check_question/#{s}") == true then FileUtils.cp("#{@inject}/random_check_question/#{s}", "#{@prac_dir}/question.rb") elsif FileUtils.cp(File.join(src_dir, "lib/random_check_question/#{s}"), "#{@prac_dir}/question.rb") open_terminal start_time = Time.now loop do a = STDIN.gets.chomp if a == "check" && FileUtils.compare_file("#{@prac_dir}/question.rb", "#{@prac_dir}/answer.rb") == true then puts "It have been finished!" break elsif FileUtils.compare_file("#{@prac_dir}/question.rb", "#{@prac_dir}/answer.rb")!= true then @inputdata = File.open("#{@prac_dir}/answer.rb").readlines @checkdata = File.open("#{@prac_dir}/question.rb").readlines diffs = Diff::LCS.diff("#{@inputdata}", "#{@checkdata}") diffs.each do diff p diff 27
_time = Time.now time = _time - start_time - 1 puts "#{time} sec" random check 15 Ruby 15 answer.rb 1 15 random src dir /editor learner File.expand path() 2 1. FILE File.expand path() 2 1 [9]. File.join gem install github clone if 15 question.rb answer.rb question.rb FileUtils.compare file tab check check gets gets chomp argv gets gets STDIN argv 28
STDIN.gets.chomp argv check FileUtils.compare file it have been finished! file.open question.rb answer.rb input output Diff::LCS diff break 4.4 sequential check sequential check 29
desc sequential_check [lesson_number] [1~3number], sequential check your typing skill and edit skill choose number def sequential_check(*argv, n, m) l = m.to_i - 1 @seq_dir = "lib/sequential_check_question" q_rb = "ruby_#{n}/#{m}.rb" @seqnm_dir = File.join(@seq_dir,q_rb) @pracnm_dir = "#{ENV[ HOME ]}/editor_learner/workshop/ruby_#{n}/#{m}.rb" @seqnq_dir = "lib/sequential_check_question/ruby_#{n}/q.rb" @pracnq_dir = "#{ENV[ HOME ]}/editor_learner/workshop/ruby_#{n}/q.rb" @seqnl_dir = "lib/sequential_check_question/ruby_#{n}/#{l}.rb" @pracnl_dir = "#{ENV[ HOME ]}/editor_learner/workshop/ruby_#{n}/#{l}.rb" puts "check starting..." puts "type following commands on the terminal" src_dir = File.expand_path(../.., FILE ) if File.exist?("#{@inject}/sequential_check_question/ruby_#{n}/#{m}.rb") == true then FileUtils.cp("#{@inject}/sequential_check_question/ruby_#{n}/#{m}.rb", "#{@pracnq_dir}") elsif FileUtils.cp(File.join(src_dir, "#{@seqnm_dir}"), "#{@pracnq_dir}") if l!= 0 && FileUtils.compare_file("#{@pracnm_dir}", "#{@pracnq_dir}")!= true FileUtils.compare_file("#{@pracnl_dir}", (File.join(src_dir, "#{@seqnl_dir}"))) == true FileUtils.cp("#{@pracnl_dir}", "#{@pracnm_dir}") if FileUtils.compare_file(@pracnm_dir, @pracnq_dir)!= true then system "osascript -e tell application \"Terminal\" to do script \"cd #{@prac_dir}/ruby_#{n} \" " 30
loop do a = STDIN.gets.chomp if a == "check" && FileUtils.compare_file("#{@pracnm_dir}", "#{@pracnq_dir}") == true then puts "ruby_#{n}/#{m}.rb is done!" break elsif FileUtils.compare_file("#{@pracnm_dir}", "#{@pracnq_dir}")!= true then @inputdata = File.open("#{@pracnm_dir}").readlines @checkdata = File.open("#{@pracnq_dir}").readlines diffs = Diff::LCS.diff("#{@inputdata}", "#{@checkdata}") diffs.each do diff p diff else p "ruby_#{n}/#{m}.rb is finished!" 4.4.1 1. seq dir github clone 2. seqnm dir seq dir n m 1 1 1. editor learner/sequential check question/ruby 1/1.rb 3. pracnm dir prac dir n m 1 1 31
1. /editor learner/workshop/ruby 1/1.rb 4. seq prac ruby ( )/( ).rb 5. seqnl dir ruby n/l.rb 2 seq prac 4.4.2 gem install github install 1.rb 2.rb 1.rb check FileUtils.compare file Diff::LCS check check random check 4.5 open terminal def open_terminal pwd = Dir.pwd system "osascript -e tell application \"Terminal\" to do script \ "cd #{@prac_dir} \" " prac dir(editor learner/workshop) random check editor learner/workshop sequential check editor learner/workshop/ 32
5 5.1: 1. PTYPING: 2. e-typing: 3. : GUI 33
Web editor editor editor learner 5.1 editor learner {} () editor editor GUI CUI editor learner editor learner 34
6 editor editor editor learner 35
36
[1] Andrew Hunt, David Thomas,, (, 2016 ). [2] Ruby, https://www.ruby-lang.org/ja/, accessed 2018.2.8. [3] S. Koichiro, Rubygems, https://qiita.com/sumyapp/items/5ec58bf3567e557c24d7, accessed 2018.2.8. [4] Weblio,, https://www.weblio.jp/content/, accessed 2018.2.8. [5] Weblio, CUI, https://www.weblio.jp/content/cui, accessed 2018.2.8. [6] S. Kouichiro, Thor, https://qiita.com/succi0303/items/32560103190436c9435b, accessed 2018.2.8. [7], Ruby, (, 2017 ) [8] SideCI, Rubocop, http://blog-ja.sideci.com/entry/2015/03/12/160441, accessed 2018.2.9 [9] Ruby,, https://www.xmisao.com/2013/11/21/ruby-require-relative.html, accessed 2018.2.8. 37