---
title: TUI
description: استخدام واجهة المستخدم TUI في OpenCode.
---

import { Tabs, TabItem } from "@astrojs/starlight/components"

يوفّر OpenCode واجهة terminal تفاعلية (TUI) للعمل على مشاريعك باستخدام LLM.

يؤدي تشغيل OpenCode إلى بدء واجهة TUI للدليل الحالي.

```bash
opencode
```

أو يمكنك تشغيلها لدليل عمل محدد.

```bash
opencode /path/to/project
```

بعد الدخول إلى واجهة TUI، يمكنك إرسال رسالة كطلب.

```text
Give me a quick summary of the codebase.
```

---

## مراجع الملفات

يمكنك الإشارة إلى الملفات في رسائلك باستخدام `@`. يُجري ذلك بحثا ضبابيا عن الملفات ضمن دليل العمل الحالي.

:::tip
يمكنك أيضا استخدام `@` للإشارة إلى الملفات في رسائلك.
:::

```text "@packages/functions/src/api/index.ts"
How is auth handled in @packages/functions/src/api/index.ts?
```

تُضاف محتويات الملف إلى المحادثة تلقائيا.

---

## أوامر Bash

ابدأ الرسالة بـ `!` لتشغيل أمر في shell.

```bash frame="none"
!ls -la
```

يُضاف خرج الأمر إلى المحادثة كنتيجة أداة.

---

## الأوامر

عند استخدام واجهة OpenCode في terminal، يمكنك كتابة `/` متبوعة باسم أمر لتنفيذ الإجراءات بسرعة. مثلا:

```bash frame="none"
/help
```

تملك معظم الأوامر أيضا اختصارا باستخدام `ctrl+x` كمفتاح قائد، حيث إن `ctrl+x` هو المفتاح القائد الافتراضي. [اعرف المزيد](/docs/keybinds).

فيما يلي جميع أوامر الشرطة المائلة المتاحة:

---

### connect

أضف موفّرا إلى OpenCode. يتيح لك اختيار أحد الموفّرين المتاحين وإضافة مفاتيح API الخاصة بهم.

```bash frame="none"
/connect
```

---

### compact

قم بضغط الجلسة الحالية. _الاسم المستعار_: `/summarize`

```bash frame="none"
/compact
```

**اختصار لوحة المفاتيح:** `ctrl+x c`

---

### details

بدّل عرض تفاصيل تنفيذ الأدوات.

```bash frame="none"
/details
```

**اختصار لوحة المفاتيح:** `ctrl+x d`

---

### editor

افتح محررا خارجيا لكتابة الرسائل. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).

```bash frame="none"
/editor
```

**اختصار لوحة المفاتيح:** `ctrl+x e`

---

### exit

اخرج من OpenCode. _الأسماء المستعارة_: `/quit`, `/q`

```bash frame="none"
/exit
```

**اختصار لوحة المفاتيح:** `ctrl+x q`

---

### export

صدّر المحادثة الحالية إلى Markdown وافتحها في المحرر الافتراضي لديك. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).

```bash frame="none"
/export
```

**اختصار لوحة المفاتيح:** `ctrl+x x`

---

### help

اعرض مربع حوار المساعدة.

```bash frame="none"
/help
```

**اختصار لوحة المفاتيح:** `ctrl+x h`

---

### init

أنشئ ملف `AGENTS.md` أو حدّثه. [اعرف المزيد](/docs/rules).

```bash frame="none"
/init
```

**اختصار لوحة المفاتيح:** `ctrl+x i`

---

### models

اعرض النماذج المتاحة.

```bash frame="none"
/models
```

**اختصار لوحة المفاتيح:** `ctrl+x m`

---

### new

ابدأ جلسة جديدة. _الاسم المستعار_: `/clear`

```bash frame="none"
/new
```

**اختصار لوحة المفاتيح:** `ctrl+x n`

---

### redo

أعِد تنفيذ رسالة تم التراجع عنها سابقا. متاح فقط بعد استخدام `/undo`.

:::tip
ستتم أيضا استعادة أي تغييرات على الملفات.
:::

داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.

```bash frame="none"
/redo
```

**اختصار لوحة المفاتيح:** `ctrl+x r`

---

### sessions

اعرض الجلسات وبدّل بينها. _الأسماء المستعارة_: `/resume`, `/continue`

```bash frame="none"
/sessions
```

**اختصار لوحة المفاتيح:** `ctrl+x l`

---

### share

شارك الجلسة الحالية. [اعرف المزيد](/docs/share).

```bash frame="none"
/share
```

**اختصار لوحة المفاتيح:** `ctrl+x s`

---

### themes

اعرض السمات المتاحة.

```bash frame="none"
/theme
```

**اختصار لوحة المفاتيح:** `ctrl+x t`

---

### thinking

بدّل إظهار كتل التفكير/الاستدلال في المحادثة. عند تفعيله، يمكنك رؤية عملية استدلال النموذج للنماذج التي تدعم التفكير الموسّع.

:::note
يتحكم هذا الأمر فقط فيما إذا كانت كتل التفكير **تُعرض**؛ ولا يفعّل أو يعطّل قدرات الاستدلال في النموذج. لتبديل قدرات الاستدلال فعليا، استخدم `ctrl+t` للتنقّل بين إصدارات النموذج.
:::

```bash frame="none"
/thinking
```

---

### undo

تراجع عن آخر رسالة في المحادثة. يزيل أحدث رسالة للمستخدم، وكل الردود اللاحقة، وأي تغييرات على الملفات.

:::tip
سيتم أيضا التراجع عن أي تغييرات على الملفات.
:::

داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.

```bash frame="none"
/undo
```

**اختصار لوحة المفاتيح:** `ctrl+x u`

---

### unshare

ألغِ مشاركة الجلسة الحالية. [اعرف المزيد](/docs/share#un-sharing).

```bash frame="none"
/unshare
```

---

## إعداد المحرر

يستخدم الأمران `/editor` و`/export` المحرر المحدد في متغير البيئة `EDITOR`.

<Tabs>
  <TabItem label="Linux/macOS">
    ```bash
    # مثال لـ nano أو vim
    export EDITOR=nano
    export EDITOR=vim

    # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
    # قم بتضمين --wait
    export EDITOR="code --wait"
    ```

    لجعل ذلك دائما، أضف هذا إلى ملف تهيئة shell لديك؛
    `~/.bashrc`، `~/.zshrc`، إلخ.

  </TabItem>

  <TabItem label="Windows (CMD)">
    ```bash
    set EDITOR=notepad

    # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
    # قم بتضمين --wait
    set EDITOR=code --wait
    ```

    لجعل ذلك دائما، استخدم **System Properties** > **Environment Variables**.

  </TabItem>

  <TabItem label="Windows (PowerShell)">
    ```powershell
    $env:EDITOR = "notepad"

    # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
    # قم بتضمين --wait
    $env:EDITOR = "code --wait"
    ```

    لجعل ذلك دائما، أضف هذا إلى ملف تهيئة PowerShell لديك.

  </TabItem>
</Tabs>

تتضمن خيارات المحررات الشائعة ما يلي:

- `code` - Visual Studio Code
- `cursor` - Cursor
- `windsurf` - Windsurf
- `nvim` - محرر Neovim
- `vim` - محرر Vim
- `nano` - محرر Nano
- `notepad` - Windows Notepad
- `subl` - Sublime Text

:::note
تحتاج بعض المحررات مثل VS Code إلى التشغيل مع الخيار `--wait`.
:::

تحتاج بعض المحررات إلى وسائط CLI لتعمل بوضع الحجب. يجعل الخيار `--wait` عملية المحرر تنتظر حتى يتم إغلاقها.

---

## الإعداد

يمكنك تخصيص سلوك TUI من خلال `tui.json` (أو `tui.jsonc`).

```json title="tui.json"
{
  "$schema": "https://opencode.ai/tui.json",
  "theme": "opencode",
  "leader_timeout": 2000,
  "keybinds": {
    "leader": "ctrl+x",
    "command_list": "ctrl+p"
  },
  "scroll_speed": 3,
  "scroll_acceleration": {
    "enabled": false
  },
  "diff_style": "auto",
  "mouse": true,
  "attention": {
    "enabled": true,
    "notifications": true,
    "sound": true,
    "volume": 0.4,
    "sound_pack": "opencode.default",
    "sounds": {
      "error": "./sounds/error.mp3"
    }
  }
}
```

هذا منفصل عن `opencode.json`، الذي يضبط سلوك الخادم ووقت التشغيل.

يتم دمج `keybinds` مع الاختصارات الافتراضية المدمجة، لذلك لا تحتاج إلا إلى ضبط الاختصارات التي تريد تغييرها.

### الخيارات

- `theme` - يحدد سمة UI. [اعرف المزيد](/docs/themes).
- `keybinds` - يخصص اختصارات لوحة المفاتيح. [اعرف المزيد](/docs/keybinds).
- `leader_timeout` - يتحكم في مدة انتظار OpenCode بعد الضغط على leader key. القيمة الافتراضية `2000`.
- `scroll_acceleration.enabled` - يفعّل تسارع التمرير على نمط macOS لتمرير سلس وطبيعي. عند تفعيله، تزداد سرعة التمرير مع إيماءات التمرير السريعة وتبقى دقيقة للحركات الأبطأ. **يتقدّم هذا الإعداد على `scroll_speed` ويستبدله عند تفعيله.**
- `scroll_speed` - يتحكم في سرعة تمرير TUI عند استخدام أوامر التمرير (الحد الأدنى: `0.001`، ويدعم القيم العشرية). القيمة الافتراضية `3`. **ملاحظة: يتم تجاهل هذا إذا تم ضبط `scroll_acceleration.enabled` على `true`.**
- `diff_style` - يتحكم في عرض الفروقات (diff). القيمة `"auto"` تتكيف مع عرض terminal، و`"stacked"` تعرض عمودًا واحدًا دائمًا.
- `mouse` - يفعّل أو يعطّل التقاط الماوس في TUI (القيمة الافتراضية: `true`). عند تعطيله، يتم الحفاظ على سلوك terminal الأصلي لتحديد النص والتمرير بالماوس.
- `attention` - يضبط desktop notifications والأصوات في TUI. معطل افتراضيًا.

استخدم `OPENCODE_TUI_CONFIG` لتحميل مسار إعدادات TUI مخصص.

### Attention

تجعل ميزة Attention واجهة TUI تنبهك عندما ينتظر OpenCode ردًا منك، أو يحتاج إلى الموافقة على permission، أو يواجه session error، أو ينهي session. فعّلها باستخدام `attention.enabled`؛ تشغّل الأحداث المدمجة صوتًا عند حدوثها. لا تُرسل desktop notifications إلا عندما لا تكون نافذة terminal في المقدمة، ولا تُستخدم مع أحداث subagent.

- `enabled` - يفعّل جميع notifications والأصوات الخاصة بميزة Attention. القيمة الافتراضية `false`.
- `notifications` - عند تفعيل Attention، يسمح لـ TUI بإرسال desktop notifications عبر terminal. القيمة الافتراضية `true`.
- `sound` - عند تفعيل Attention، يسمح بتشغيل أصوات التنبيه. القيمة الافتراضية `true`.
- `volume` - مستوى صوت التنبيهات الافتراضي من `0` إلى `1`. القيمة الافتراضية `0.4`.
- `sound_pack` - sound pack ID المراد استخدامه. القيمة الافتراضية `opencode.default`.
- `sounds` - يحدد ملفات صوت مخصصة لـ `default` أو `question` أو `permission` أو `error` أو `done` أو `subagent_done`. يمكن أن تكون المسارات مطلقة، أو `file://` URLs، أو نسبية إلى `tui.json`.

---

## التخصيص

يمكنك تخصيص جوانب مختلفة من عرض واجهة TUI باستخدام لوحة الأوامر (`ctrl+x h` أو `/help`). تبقى هذه الإعدادات محفوظة عبر عمليات إعادة التشغيل.

---

#### عرض اسم المستخدم

بدّل ما إذا كان اسم المستخدم يظهر في رسائل الدردشة. يمكنك الوصول إلى هذا عبر:

- لوحة الأوامر: ابحث عن "username" أو "hide username"
- يُحفظ الإعداد تلقائيا وسيتم تذكره عبر جلسات واجهة TUI
