| 110 | |
| 111 | class yank_arg(commands.Command): |
| 112 | def do(self) -> None: |
| 113 | r = self.reader |
| 114 | if r.last_command is self.__class__: |
| 115 | r.yank_arg_i += 1 |
| 116 | else: |
| 117 | r.yank_arg_i = 0 |
| 118 | if r.historyi < r.yank_arg_i: |
| 119 | r.error("beginning of history list") |
| 120 | return |
| 121 | a = r.get_arg(-1) |
| 122 | # XXX how to split? |
| 123 | words = r.get_item(r.historyi - r.yank_arg_i - 1).split() |
| 124 | if a < -len(words) or a >= len(words): |
| 125 | r.error("no such arg") |
| 126 | return |
| 127 | w = words[a] |
| 128 | b = r.buffer |
| 129 | if r.yank_arg_i > 0: |
| 130 | o = len(r.yank_arg_yanked) |
| 131 | else: |
| 132 | o = 0 |
| 133 | b[r.pos - o : r.pos] = list(w) |
| 134 | r.yank_arg_yanked = w |
| 135 | r.pos += len(w) - o |
| 136 | r.dirty = True |
| 137 | |
| 138 | |
| 139 | class forward_history_isearch(commands.Command): |