Comment utiliser la console python Rhythmbox

13

Peut-être que cela est évident et que je le manque, ou peut-être que quelqu'un a déjà écrit un excellent guide et que mon (semblant exhaustif) google ne parvient pas à le monter, mais je ne peux pas comprendre pour la vie de moi comment obtenir la console Darn Python dans rhythmbox pour tout faire !

Je l'ai activé à partir du menu du plugin, puis je l'ai ouvert à l'aide de Tools-> Python Console.

Il imprime

You can access the main window through the 'shell' variable :
<rb.Shell object at 0xa6cdd24 (RBShell at 0xa14e000)>
>>> 

Mais tout ce que je tape à l'invite ne fait rien ! J'ai essayé help, j'ai essayé exit(), j'ai essayé print "hello world", rien ne fait rien!

Toutes ces choses fonctionnent, bien sûr, dans une console Python normale. Je n'ai aucune idée de ce qu'est le diable, la différence est ici! Suis-je censé faire autre chose que frapper Entrée?

TJ Ellis
la source
Je connaissais juste "rhythmbox-client -h" du terminal. +1 pour avoir pris connaissance de ce plugin.
Rojan

Réponses:

8

Le guide d'écriture des plugins Rhythmbox contient plusieurs exemples de commandes que vous pouvez utiliser dans la console Python pour contrôler la lecture et modifier Rhythmbox:

  • Jouer pause

    shell.props.shell_player.playpause()
  • Arrêtez

    shell.props.shell_player.stop()
  • Piste suivante

    shell.props.shell_player.do_next()
  • Ajouter une chanson à la file d'attente de lecture

    shell.add_to_queue("file://awsome_song.ogg")
  • Afficher une visualisation

    import gst
    goom = gst.element_factory_make ("goom")
    sink = gst.element_factory_make ("ximagesink")
    colour = gst.element_factory_make ("ffmpegcolorspace")
    b = gst.Bin()
    b.add (goom, colour, sink)
    b.add_pad(gst.GhostPad("sink", goom.get_pad("sink")))
    goom.link(colour)
    colour.link(sink)
    shell.get_player().props.player.add_tee(b)
ændrük
la source
C'est utile, et en fait je l'avais trouvé précédemment, mais ce que je cherche, c'est comment utiliser la console. Est-ce juste comme une console Python ordinaire? tapez une commande et appuyez sur Entrée? Si oui, alors le mien est cassé. Lorsque je tape une commande et appuie sur Entrée, cela crée simplement une nouvelle ligne, sans exécuter la ligne de code. Tant que je sais qu'il est cassé, je peux demander de l'aide pour le réparer; Je voulais juste m'assurer que je ne faisais rien de stupide (et je n'ai trouvé aucune utilisation documentée!)
TJ Ellis
Cela ressemble en effet à quelque chose de cassé. Dans rhythmbox-0.12.8-0ubuntu7 sans aucun autre plugin activé, la console fonctionne exactement comme une console Python standard, par exemple tapez print "hello world"et appuyez sur Entrée. Je ne vois pas encore ce problème signalé ailleurs, vous pouvez donc envisager d'ouvrir un nouveau bogue dans le suivi des bogues de Rhythmbox .
ændrük
1
Merci! maintenant que je sais qu'il est cassé, je vais fouiller un peu plus et déposer un rapport de bogue.
TJ Ellis
Notez qu'au moins depuis Ubuntu Trusty tahr 14.04, rhythmbox intègre python 3.4.0. La commande 'print "hello world"' est donc une erreur de syntaxe;) À la place, utilisez la nouvelle fonction d'impression Python 3: 'print ("hello world")'
nealmcb
Notez que certains de ces exemples ne fonctionnent plus dans Trusty. Voir quelques conseils sur ce qu'il faut faire au lieu de shell.add_to_queue () ici - bien que cela semble beaucoup plus compliqué, malheureusement: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb
6

Comme avec tout objet Python, vous pouvez en apprendre beaucoup à ce sujet en utilisant la méthode dir () dessus. Cela vous donnera un bon point de départ.

You can access the main window through the 'shell' variable :
<rb.Shell object at 0x9e9675c (RBShell at 0x987b018)>
>>> dir(rb.Shell)
['__class__', '__cmp__', '__copy__', '__deepcopy__', '__delattr__', '__dict__',
'__doc__', '__format__', '__gdoc__', '__getattribute__', '__gobject_init__', 
'__grefcount__', '__gtype__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'add_to_queue', 'add_uri', 'add_widget', 'append_source',
'chain', 'connect', 'connect_after', 'connect_object', 'connect_object_after',
'disconnect', 'disconnect_by_func', 'do_notify', 'emit', 'emit_stop_by_name',
'freeze_notify', 'get_data', 'get_party_mode', 'get_player',
'get_playlist_manager', 'get_properties', 'get_property',
'get_source_by_entry_type', 'get_ui_manager', 'guess_source_for_uri', 
'handler_block', 'handler_block_by_func', 'handler_disconnect',
'handler_is_connected','handler_unblock', 'handler_unblock_by_func', 'load_uri',
'notebook_set_page', 'notify', 'notify_custom', 'present', 'props',
'register_entry_type_for_source', 'remove_from_queue', 'remove_widget',
'set_data', 'set_properties', 'set_property', 'stop_emission', 'thaw_notify',
'toggle_visibility', 'weak_ref']

Vous pouvez ensuite dir () n'importe quelle propriété intéressante, comme 'get_player', peut-être.

Un autre bon endroit à regarder est si vous voyez un attribut __doc__ sur l'objet.

>>> print rb.Shell.__doc__
Object RBShell

Signals from RBShell:
  visibility-changed (gboolean)
  visibility-changing (gboolean, gboolean) -> gboolean
  create-song-info (RBSongInfo, gboolean)
  removable-media-scan-finished ()
  notify-playing-entry (gboolean)
  notify-custom (guint, gchararray, gchararray, GdkPixbuf, gboolean)

Properties from RBShell:
  no-registration -> gboolean: no-registration
    Whether or not to register
  no-update -> gboolean: no-update
    Whether or not to update the library
  dry-run -> gboolean: dry-run
    Whether or not this is a dry run
  rhythmdb-file -> gchararray: rhythmdb-file
    The RhythmDB file to use
  playlists-file -> gchararray: playlists-file
    The playlists file to use
  selected-source -> RBSource: selected-source
    Source which is currently selected
  db -> RhythmDB: RhythmDB
    RhythmDB object
  ui-manager -> GtkUIManager: GtkUIManager
    GtkUIManager object
  clipboard -> RBShellClipboard: RBShellClipboard
    RBShellClipboard object
  playlist-manager -> RBPlaylistManager: RBPlaylistManager
    RBPlaylistManager object
  removable-media-manager -> RBRemovableMediaManager: RBRemovableMediaManager
    RBRemovableMediaManager object
  shell-player -> RBShellPlayer: RBShellPlayer
    RBShellPlayer object
  window -> GtkWindow: GtkWindow
    GtkWindow object
  prefs -> RBShellPreferences: RBShellPreferences
    RBShellPreferences object
  queue-source -> RBPlayQueueSource: queue-source
    Queue source
  library-source -> RBLibrarySource: library-source
    Library source
  sourcelist-model -> RBSourceListModel: sourcelist-model
    RBSourcelistModel
  sourcelist -> RBSourceList: sourcelist
    RBSourcelist
  source-header -> RBSourceHeader: source header widget
    RBSourceHeader
  visibility -> gboolean: visibility
    Current window visibility

Signals from GObject:
  notify (GParam)
brousch
la source
c'est pratique, si je peux faire fonctionner la console gorram! tel qu'il est, si je tape, par exemple, dir(rb.Shell)et que je tape Entrée, cela ajoute juste un saut de ligne et ne fait rien ... Votre shell a-t-il fonctionné OOB? J'ai l'installation de rhythmbox par défaut sur Ubuntu 10.04 .... Je ne peux penser à rien de ce que j'ai changé qui briserait le shell. Ma console python régulière (en dehors de rb) fonctionne très bien ...
TJ Ellis
Hm, ouais, ma coque fonctionne très bien sans aucune modification.
brousch
3

Putain de merde, je viens de découvrir quel était le problème (2,5 ans plus tard) - pour une raison quelconque, ma touche "Entrée" correspond à deux événements clés différents selon que le verrouillage numérique est activé ou désactivé. Lorsque numlock est activé, il revient KP_ENTERet lorsque numlock est désactivé, il revient Return. J'ai toujours le verrouillage numérique activé, car je préfère saisir des chiffres avec le clavier.

Malheureusement, la console python dans Rhythmbox ne reconnaît que Returnpour exécuter une commande - l' KP_ENTERévénement entre juste un saut de ligne ...

Mais solution facile, désactivez simplement le verrouillage numérique lorsque vous utilisez la console. J'ai rencontré ce problème dans quelques autres applications (généralement des jeux), donc je vais chercher une meilleure solution à long terme (forçant peut-être les deux à mapper d'une Returnmanière ou d'une autre) ...

TJ Ellis
la source
1
Dans le cas où quelqu'un d'autre a ce problème, j'ai trouvé une solution à long terme: xmodmap -pke > ~/.Xmodmap pour créer une mise en page personnalisée, puis à la fin de ce fichier, ajoutez une ligne keysym KP_Enter = Return puis exécutez xmodmap ~/.Xmodmappour activer la nouvelle mise en page personnalisée pour cette session. Pour le faire autorun pour l'avenir, ajoutez ce qui suit à ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis
des jurons et leur manque de sauts de ligne! l' ifinstruction ajoutée à .xinitrcdoit avoir des sauts de ligne après thenet avant fi.
TJ Ellis
Pourquoi n'utilisez-vous pas la returnclé au lieu de la clé du numlock enter?
Timo
J'utilisais la touche principale "Entrée", pas celle du pavé numérique; pour une raison quelconque, l'activation / la désactivation du verrouillage numérique a également fait la différence.
TJ Ellis
CentOS 6.7, mais avec python anaconda, la touche Entrée du pavé numérique avait un effet légèrement différent de la touche Entrée du clavier principal. NumLock n'a eu aucun effet. Le clavier principal Entrée retournerait l'invite '>>>', mais le pavé numérique Entrée retournerait une ligne vide.
rjt