lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: trying to write a simple python beaming snippet for Frescobaldi


From: tisimst
Subject: Re: trying to write a simple python beaming snippet for Frescobaldi
Date: Thu, 10 Dec 2015 12:16:40 -0700 (MST)

Leszek,

Just thought I'd bring this up (though I know you've already put in a bunch of work. You can add a keyboard shortcut to the "Quick Insert" > "Beam" option. Following the attached image, here's the steps (since it doesn't show up in the default set of keyboard shortcuts in the preferences window):

1. Right-click on the "Beam" option in the Quick Insert tool (if you can't see the Quick Insert tool, you'll need to open it via the "Tools" > "Quick Insert" menu option).
2. Click on "Configure Keyboard Shortcut (None)"
3. Click on the "Use a custom shortcut" radio button
4. Click on the input box next to "Primary shortcut"
5. Now, hit the "Ctrl" and "[" buttons at the same time on your keyboard to save the key combination and click on "OK" to save the shortcut
6. Select the group of notes you want to apply the beam to and hit "Ctrl + [" to have Frescobaldi insert the beam group (just like your code does).

Best,
Abraham

On Thu, Dec 10, 2015 at 8:14 AM, Leszek Wroński [via Lilypond] <[hidden email]> wrote:
You're right, thanks! This showed I was actually doing the correct thing when checking whether a string element was a space. Now I see that actually Frescobaldi starts calculating the lines from the 2nd one (that is, after the line with the initial -*- _expression_). And so the error was when I was assigning 

mysequence[x] = '['

because, as I have just learned, strings in Python are immutable. Gosh. This does not explain everything what was going on, most probably due to my incompetence. But now I have something that's working:

x = 0
y = 0
mysequence = text
while x < len(text):
  if text[x] == ' ' and y = 0:
    mysequence = mysequence + '[ '
    y = y + 1
  else:
    mysequence = mysequence + text[x]
  x = x + 1
text = mysequence + ']'

So when I select "d16 e8 f8" it returns "d16[ e8 f8]" as I intended. Now I will make it nicer :-)

Thanks you very much, Jacques!

On 10 December 2015 at 12:09, Jacques Menu <[hidden email]> wrote:
Hello Leszek,

How about:


>>> var = "fo a"
>>> var[2]
' '
>>> var[2] == ' '
True


JM

Le 10 déc. 2015 à 11:33, Leszek Wroński <[hidden email]> a écrit :

Guys,

Frescobaldi has the useful 'slur for the selected notes' snippet under C-(. I want to have the same functionality for beams. That is, I want to be able to select some notes, and then via the snippet insert a '[' in the first space (that is, after the first note), and then a ']' at the end.

Unfortunately, I have never in my life written a line of python... till this day, that is. So, I'm trying the following ('W' is for whitespace):

1 -*- name: mybeam; python; selection: strip;
2 x = 0
3 mysequence = text
4 while x < len(text):
5 WW if text[x] == ' ':
6 WWWW mysequence[x] = '['
7 WWWW break
8 WW x = x + 1
9 text = mysequence + ']'  

Notice that line 5 contains a space between the quotes. Of course I need to add conditions regarding what to do if there's no space in the selection etc. But that's for later, once this basic script actually works. As you can see, I thought I'd copy the selection to 'mysequence' string to manipulate on it; this is probably unneeded. But after writing the above I got, at line 5, an error "TypeError: 'unicode' object does not support item assignment".

What I found weird is that to my untrained eyes line 5 does no assigning, but rather checks whether the xth element of the string text is a space. Anyway, after some googling I decided to substitute "is" for "==" in line 5. Right now the script does not give any errors, but it only adds a ']' at the end of the selection. I'm apparently unable to check whether the xth element of the string text is a space. I tried

if text[x] == ' %d':

and

if text[x] ==  u"\u0020":

and

if text[x].isspace():

to no avail (the last one gave the "unicode object does not support item assignment" error again, which I don't understand at all, having copied the command from http://www.ehow.com/how_12112665_determine-character-whitespace-python.html). Could anyone give me a hint on this?

Best regards,

Leszek.

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user



_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user



If you reply to this email, your message will be added to the discussion below:
http://lilypond.1069038.n5.nabble.com/trying-to-write-a-simple-python-beaming-snippet-for-Frescobaldi-tp184624p184633.html
To start a new topic under User, email [hidden email]
To unsubscribe from Lilypond, click here.
NAML


adding-custom-keyboard-shortcut-to-frescobaldi.png (161K) Download Attachment


View this message in context: Re: trying to write a simple python beaming snippet for Frescobaldi
Sent from the User mailing list archive at Nabble.com.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]