```python
def trim_to(line: str, limit: int) -> str:
    if limit < 4:
        raise ValueError("Limit must be at least 4 characters")
    if len(line) <= limit:
        return line
    else:
        words = line.split()
        if len(words) == 1:
            return line[:limit] + "..."
        else:
            return " ".join(words[:limit - 1]) + "..."
```