Wie definiere ich neue Befehle im Ranger-Dateimanager?

700
Ciro Santilli 新疆改造中心 六四事件 法轮功

Ich möchte die Möglichkeit, neue Befehle im Ranger-Dateimanager zu definieren, indem Sie Folgendes eingeben:

:newcmd myarg 

und beliebigen Code damit ausführen.

Die Befehlsdefinition sollte auch Zugriff auf den Status des Programms haben, z. B. das aktuelle Verzeichnis und die ausgewählten Dateien.

Gibt es eine Möglichkeit, dies zu tun?

Haftungsausschluss : Ich habe diese Frage erstellt und selbst beantwortet, da es zu diesem Thema keine guten Quellen gibt. Weitere Antworten sind mehr als willkommen.

1
@ fixer1234 danke für das feedback. Es wurde ein Haftungsausschluss hinzugefügt. Aber wenn es zu breit ist, schließe es. Ich denke nicht, dass Selbstantworten einen Unterschied machen. Was ich nicht verstehe, ist der Grund, warum es zu breit ist. Ich glaube, ich habe in der Vergangenheit mehrere vergleichbare Fragen gesehen. Ich hätte fragen können: Wie erstelle ich einen neuen Befehl, um X für 3 verschiedene X zu machen, die ich mir vorgestellt habe? Aber ich fühlte, dass die Grundlagen, mit denen grundsätzlich jeder Befehl geschrieben werden kann, in einer Antwort abgedeckt werden können. Wenn es schließt, mache ich das. Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 8 Jahren 0
@ fixer1234 Vielleicht hat es auch mit der Menge der vorhandenen Antworten zu tun: Ich denke, es gibt bereits eine Menge Informationen über Excel, sodass alles, was nicht laserähnlich ist, wahrscheinlich nutzlos ist. Aber Ranger ist noch nicht da :-) Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 8 Jahren 0
Wir bekommen eine Menge Excel-Fragen, bei denen das OP eine Anforderung aufstellt und von den Menschen verlangt, ihnen eine Lösung zu geben. Die bekommen die "zu breite" Behandlung. Hier haben Sie Ihre eigene Lösung bereitgestellt, und der Haftungsausschluss macht das deutlich, daher glaube ich nicht, dass Sie ein Problem haben. Ich vermute, dass derjenige, der dies in die Review-Warteschlange gesetzt hat, darauf reagiert hat. fixer1234 vor 8 Jahren 0

1 Antwort auf die Frage

1
Ciro Santilli 新疆改造中心 六四事件 法轮功

Bearbeiten ~/.config/ranger/commands.py, um etwas zu enthalten:

from ranger.api.commands import *  class newcmd(Command): def execute(self): if not self.arg(1): self.fm.notify('Wrong number of arguments', bad=True) return # First argument. 0 is the command name. self.fm.notify(self.arg(1)) # Current directory to status line. self.fm.notify(self.fm.thisdir) # Run a shell command. self.fm.run(['touch', 'newfile') 

Jetzt können Sie Folgendes eingeben:

:newcmd myarg 

den definierten Befehl ausführen.

Weitere Optionen finden Sie unter: https://github.com/hut/ranger/blob/9c585e48e14525f11d2405ea0bb9b5ba92e63e9/ranger/config/commands.py

Sie können dann einen Schritt weitergehen und eine Karte dafür definieren, z. B .: Hinzufügen zu ~/.config/ranger/rc.conf:

map ,n console newcmd map ,m newcmd default-arg  

Und jetzt können Sie einfach Folgendes eingeben:

  • ,nin newcmddie Statuszeile schreiben, und machen Sie sich bereit für den Benutzer, das erste Argument einzugeben
  • ,m und führen Sie den Befehl sofort mit einem Standardargument aus

Getestet auf Ranger 1.6.1.