2012-04-10 12 views
7

Estoy haciendo una aplicación basada en consola en Objective-C que se basa en poder borrar la consola periódicamente. ¿Cómo puede hacerse esto? Todo lo que he visto en SO y Google fueron formas de que el desarrollador borre la consola con X-Code, pero eso será no do.Cómo borro la consola en Objective-C

Una solución que encontré en Yahoo! Las respuestas me dijeron que hiciera lo siguiente, pero no se ejecuta debido a no poder encontrar un archivo:

NSTask *task; 
task = [[NSTask alloc]init]; 
[task setLaunchPath: @"/bin/bash"]; 

NSArray *arguments; 
arguments = [NSArray arrayWithObjects: @"clear", nil]; 
[task setArguments: arguments]; 

[task launch]; 
[task waitUntilExit]; 

Respuesta

6

Trate de usar:

system("clear"); 

cabeceras importantes:

#include <stdlib.h> 

Sugerencia: Objetivo-C sigue siendo C, ¿verdad?


ACTUALIZACIÓN:


En caso de un "variable de entorno TERM no establecido." error:

1) Ejecutar el programa, directamente desde su terminal (o simplemente ignorar el error mientras se prueba que en Xcode; se supone que debe ejecutar en un terminal normal de todos modos, eh)

2) Conjunto? la variable TERM en la configuración de su Esquema. ¿A qué? Sólo tiene que ejecutar esto en su terminal para ver qué "término" debería ser:

DrKameleons-MacBook-Pro:Documents drkameleon$ echo $TERM 
xterm-256color 

enter image description here

+0

Objective-C sigue siendo C, pero prefiero las soluciones de "sentimiento nativo" :) – houbysoft

+1

@houbysoft Yo también; seguro. Pero honestamente, ¿no está usando 'NSTask' demasiado para algo tan simple como' system ("clear") '? El modo Cocoa a veces puede ser innecesariamente detallado ... :-) –

+0

Todo lo que hace es imprimir "variable de entorno TERM no establecida". y continúe con el programa – Supuhstar

3

Por qué /bin/bash?

Sólo hacer:

NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/clear" arguments:[NSArray array]]; 

Alternativamente, utilizando la forma C:

#include <stdlib.h> 

... 
system("/usr/bin/clear"); 
... 
+0

La primera no hace nada, y la segunda solo imprime "variable de entorno TERM no establecida". y continúa con el programa. – Supuhstar

4

La manera de hacer esto sin desove un subproceso es usar ncurses.

#include <curses.h> 
#include <term.h> 
#include <unistd.h> 

int main(void) 
{ 
    setupterm(NULL, STDOUT_FILENO, NULL); 
    tputs(clear_screen, lines ? lines : 1, putchar); 
} 

Compilar con -lncurses.

La llamada setupterm() solo necesita realizarse una vez. Después de eso, use la llamada tputs() para borrar la pantalla.

+0

Parece prometedor, pero no puedo encontrar la manera de agregar opciones de línea de comandos para compilar con XCode – Supuhstar

+0

Agregue "-lncurses" a la configuración de creación de Flags de otros enlazadores (OTHER_LDFLAGS) para el destino. –

+0

'Variable de entorno TERM no establecida. Depurador parado. Programa salido con valor de estado: 1' – Supuhstar

1

Puede utilizar AppleScript

tell application "Console" 
    activate 
    tell application "System Events" 
     keystroke "k" using command down 
    end tell 
end tell 

clase Uso NSAppleScript para la ejecución del programa de applescript obj-C.

NSAppleScript *lClearDisplay = [[NSAppleScript alloc] initWithSource:@"tell application \"Console\"\n \ 
           activate\n \ 
           tell application \"System Events\"\n \ 
           keystroke \"k\" using command down\n \ 
           end tell\n \ 
            end tell "]; 
NSDictionary *errorInfo; 
[lClearDisplay executeAndReturnError:&errorInfo]; 

NOTA:
si los cambios de Apple o elimina ⌘K como el comando de teclado para la visualización clara, que romperá la escritura.

+0

¿Cómo uso esto con un programa Obj-C? – Supuhstar

+0

verifique mi respuesta. –

+1

NSAppleScript solo debe usarse desde el hilo principal. –

Cuestiones relacionadas