Sha256: a7d9aa242292906528799b65bdc43209a95dc89e3bfa050cd54412ef1df93891
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
require "readline" class Ppl::Command::Shell < Ppl::Application::Command attr_writer :format def initialize @name = "shell" @description = "Interactive mode" end def options(parser, options) parser.banner = "usage: ppl shell" end def execute(input, output) begin shell(input, output) rescue SystemExit, Interrupt terminate_gracefully(input, output) false end end private def shell(input, output) welcome_user(input, output) while line = read_line(input) break if ["exit", false].include?(line) process_line(line) end terminate_gracefully(input, output) true end def welcome_user(input, output) if input.stdin.tty? output.line("ppl #{Ppl::Version} (type \"exit\" to leave)") end end def read_line(input) prompt = determine_prompt(input.stdin) line = Readline.readline(prompt, true) end def process_line(line) command = "#{$0} #{line}" Kernel.system(command) end def determine_prompt(io) if io.tty? "ppl> " else "" end end def terminate_gracefully(input, output) if input.stdin.tty? output.line("") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ppl-1.5.2 | lib/ppl/command/shell.rb |