Печать редактируется на консоли в Ruby

ruby io console

139 просмотра

2 ответа

Допустим, у меня есть следующий код в Ruby:

print("Enter a filename:")
editableprint("untitled.txt")
filename = gets.chomp!

Какой должна быть функция "editableprint", чтобы "untitled.txt" был частью ввода пользователя для функции gets? (таким образом, пользователь может редактировать строку «untitled.txt» или просто оставить ее как есть »)

Автор: Binyuan Sun Источник Размещён: 08.11.2019 10:58

Ответы (2)


0 плюса

Решение

Есть похожие вопросы здесь и здесь

Однако решения там, похоже, не работают должным образом, так что, похоже, это зависит от версии ruby ​​или платформы?

Например, это не работает для меня, но и не выдает ошибку.

require "readline"

filename = Readline.insert_text("untitled.txt").readline("Enter a filename:")
print filename

Но так как он выглядит намного лучше и должен работать в соответствии с документацией для ruby> = 2, я пока оставлю его там.

Следующее работает в моей системе (ruby 2.3.1, OS X)

require "readline"
require 'rb-readline'

module RbReadline
  def self.prefill_prompt(str)
    @rl_prefill = str
    @rl_startup_hook = :rl_prefill_hook
  end

  def self.rl_prefill_hook
    rl_insert_text @rl_prefill if @rl_prefill
    @rl_startup_hook = nil
  end
end

RbReadline.prefill_prompt("untitled.txt")
str = Readline.readline("Enter a filename:", true)

puts "You entered: #{str}"
Автор: Kjell Размещён: 20.08.2016 10:12

0 плюса

Я бы использовал Vim для редактирования файла. Vim сохранит отредактированные файлы в ~/.viminfo. Последний отредактированный файл отмечен значком '0. Шаблон записи файла - это 'N N N filenameгде N обозначает целое число.

def editableprint(filename)
  system "vi #{filename}"
  regex = /(?<='0\s{2}\d\s{2}\d\s{2}).*/
  viminfo = File.expand_path("~/.viminfo")
  File.read(viminfo).scan(regex).first
end

Чтобы это работало, вам нужно изменить код

print("Enter a filename:")
filename = gets.chomp!
filename = "untitled.txt" if filename.emtpy?
edited_filename = editableprint("untitled.txt")
Автор: sugaryourcoffee Размещён: 20.08.2016 08:49
32x32