2012-04-10 25 views
7

Tôi đang tạo một ứng dụng dựa trên bảng điều khiển trong Mục tiêu-C dựa trên việc có thể xóa bảng điều khiển theo định kỳ. Điều này có thể giải quyết như thế nào? Tất cả những gì tôi thấy trên SO và Google là cách để nhà phát triển xóa bảng điều khiển bằng X-Code, nhưng điều đó sẽ không phải.Làm cách nào để xóa bảng điều khiển trong Mục tiêu-C

Một giải pháp tôi tìm thấy trên Yahoo! Câu trả lời bảo tôi làm như sau, nhưng nó không chạy do không có khả năng tìm thấy một tập tin:

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

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

[task launch]; 
[task waitUntilExit]; 

Trả lời

6

Thử sử dụng:

system("clear"); 

tiêu đề quan trọng:

#include <stdlib.h> 

Gợi ý: Mục tiêu-C vẫn là C, phải không?


UPDATE: "biến môi trường TERM not set"


Trong trường hợp của một lỗi:

1) Chạy chương trình, trực tiếp từ thiết bị đầu cuối của bạn (hoặc chỉ cần bỏ qua các lỗi trong khi thử nghiệm nó trong Xcode; nó phải chạy trong một thiết bị đầu cuối thông thường dù sao, huh)

2) Set? biến TERM trong cài đặt của Đề án của bạn. Để làm gì? Chỉ cần chạy này trong terminal của bạn để xem những gì "TERM" nên là:

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

enter image description here

+0

Mục tiêu-C vẫn là C, nhưng tôi thích các giải pháp "cảm giác tự nhiên" :) – houbysoft

+1

@houbysoft Tôi cũng vậy; chắc chắn. Nhưng thành thật không sử dụng 'NSTask' quá nhiều cho một cái gì đó đơn giản như một' hệ thống ("rõ ràng") '? Cách Cocoa có thể vào những thời điểm không nhất thiết phải dài dòng ... :-) –

+0

Tất cả điều này là in "biến môi trường TERM không được thiết lập." và tiếp tục với chương trình – Supuhstar

3

Tại sao /bin/bash?

Chỉ cần làm:

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

Ngoài ra, bằng cách sử dụng cách C:

#include <stdlib.h> 

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

Cái đầu tiên không có gì cả, và cái thứ hai chỉ in "biến môi trường TERM không được thiết lập." và tiếp tục với chương trình. – Supuhstar

4

Cách để làm điều này mà không đẻ trứng một tiến trình con là sử dụng kernel.

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

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

Biên dịch với -lncurses.

Chỉ cần thực hiện cuộc gọi setupterm() một lần. Sau đó, sử dụng cuộc gọi tputs() để xóa màn hình.

+0

Có vẻ đầy hứa hẹn, nhưng tôi không thể tìm ra cách thêm các tùy chọn dòng lệnh để biên dịch bằng XCode – Supuhstar

+0

Thêm "-lncurses" vào các cờ kết nối khác (OTHER_LDFLAGS) để thiết lập mục tiêu. –

+0

'Biến môi trường TERM không được đặt. Đã gỡ lỗi trình gỡ lỗi. Chương trình đã thoát với giá trị trạng thái: 1' – Supuhstar

1

Bạn có thể sử dụng kịch bản táo

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

Sử dụng NSAppleScript lớp để thực hiện AppleScript từ chương trình 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]; 

LƯU Ý:
Nếu thay đổi Apple hoặc loại bỏ ⌘K như lệnh quan trọng để hiển thị rõ ràng, rằng sẽ phá vỡ kịch bản.

+0

Làm cách nào để sử dụng ứng dụng này với chương trình Obj-C? – Supuhstar

+0

kiểm tra câu trả lời của tôi. –

+1

Chỉ nên sử dụng NSAppleScript từ chuỗi chính. –

Các vấn đề liên quan