Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

Changing prompt without feedback

 [1/4] from: rebol::techscribe::com at: 14-Nov-2000 11:23


Hi Joel,
> One (awkward, IMHO) way to sidestep this is with the following kludge > >> do [system/console/prompt: "Huh? " prin ""]
<<quoted lines omitted: 3>>
> based on the fact that DOing a block returns the value of the last > expression in the block (and PRIN doesn't have a return value).
Simpler yet:
>> system/console/prompt: "$ " halt
$ You don't need the do and block combination. Result is the same because REBOL returns the value of the last expression of your input only, as in
>> 3 4 5 6 7 8 9
== 9 Elan

 [2/4] from: joel:neely:fedex at: 14-Nov-2000 10:32


[rebol-bounce--rebol--com] wrote:
> I'm writing a script that requires setting the prompt. Trouble is when I > set the prompt rebol prints the result to the console, which is > undesirable: > > >> system/console/prompt: "new-prompt-> " > == "new-prompt-> " ; <- I don't want this line printed > new-prompt-> >
Let's interpret this properly. Evaluating the first line system/console/prompt: "new-prompt->" sets the prompt to the supplied string, and then returns the value of having done so. This is what REBOL always does with setting.
>> blort: 4
== 4
>> print blort
4 Note that the double equal sign "==" signifies that this is returning the value of the evaluated expression (which is subtly but significantly a different thing from PRINTing the value of the expression). One (awkward, IMHO) way to sidestep this is with the following kludge
>> do [system/console/prompt: "Huh? " prin ""]
Huh? blort: 3 == 3 Huh? based on the fact that DOing a block returns the value of the last expression in the block (and PRIN doesn't have a return value). However, this all begs the questions... 1) Why do you regard it as undesirable that the value is returned? 2) Have you considered that setting the prompt (as with setting *any* word or path values) does not print the result, therefore you can do it inside another piece of code? Huh? sets-prompt: func [s [string!]] [ [ system/console/prompt: s [ ; do other stuff as needed [ exit [ ] Huh? sets-prompt "What now? " What now? print "hello" hello What now? 3) Is there something else going on that makes this a problem? Hope this helps! -jn- -- ; Joel Neely [joel--neely--fedex--com] 901-263-4460 38017/HKA/9677 REBOL [] foreach [order string] sort/skip reduce [ true "!" false head reverse "rekcah" none "REBOL " prin "Just " "another " ] 2 [prin string] print ""

 [3/4] from: shannon:ains:au at: 14-Nov-2000 18:07


I'm writing a script that requires setting the prompt. Trouble is when I set the prompt rebol prints the result to the console, which is undesirable:
>> system/console/prompt: "new-prompt-> "
== "new-prompt-> " ; <- I don't want this line printed new-prompt-> I tried redirecting console output but:.. new-prompt-> echo %bitbucket.txt system/console/prompt: "new-prompt-> " == "new-prompt-> " new-prompt-> ...it doesn't work. Any suggestions? SpliFF

 [4/4] from: jeff:rebol at: 13-Nov-2000 22:48


Howdy, Spliff:
>> system/console/prompt: "new-prompt->" ()
new-prompt-> The empty paren creates an unset! which does not echo a result on the console. (The empty paren to create an unset! is a trick I learned from Ladislav. (-:) The last thing evaluated at the prompt or in a script is what is shown as the visible result on the console, unless it is unset!. Other REBOL functions return UNSET as well, like PRIN, HELP, or, more generally, functions that have no return value: unset? do func [] [] == true which could also be written: DO DOES [] system/console/prompt: "new-prompt->" do does [] -jeff

Notes
  • Quoted lines have been omitted from some messages.
    View the message alone to see the lines that have been omitted