Some time ago I made severe critics about the Maemo Development.
Well, I remain with the same opinion: it´s a crap.
Too much bla bla bla about "the next upcoming features" and no effective
results, and of course, I was a moron, stupid, puny programmer and other nice
adjectives.
I don´t care... It´s not my company or my job.
But if some of you need a very crude Text Editor with dead keys support for
Bluetooth keyboards, you may try my Python Editor. Obviously I made it for my
portuguese needs, but the code is fairly simple and you can easily adapt for
your needs.
It can save text and open, work's in fullscreen too. And finish, no fancy fonts
and colors.
There's no deb package, I don´t have time for that.
You can install as I say:
-Install Python
-Install Become Root
-Install xTerminal
Save the editor and editor.desktop file in your memory stick
Open the terminal
Do this as root:
Sudo su -
Chmod +x editor
Cp editor /usr/bin/
maemo-select-menu-location editor.desktop tana_fi_utilities
That's it... Finally I can use my Nokia for some word processing... Before that
I enjoyed toillet internet (much better than newspaper) and as a big pendrive.
Now my money worth something.
Thanks for nothing to INDT and Nokia for no help at all. Ah, one last
question... Where are the dozens of new software for nokia 770? I say: with the
development architecture in use forget it... Indeed, with the arrogance of INDT
and the Nokia fear to really release the Maemo for true Open Source
Development, try a new cell fone...
With time I'll put this little Text Editor at www.ihatenokia770.com.
If you don´t have a Nokia 770 do yourself a favor and buy an UMPC with Windows
Tablet.
And don´t mail me to blame about the editor, about the lack of a deb package
and so on...
If you own a Nokia 770 you probably think yourself as a Linux hotshot, so
expect to deal with hard code.
Here's the source code for the editor (beware with the TAB's, you can mail me
for the file fonts)
----------------------------------------
#!/usr/bin/python
import gtk
import hildon
class MyEditor(hildon.Program):
def __init__(self):
hildon.Program.__init__(self)
self.window = hildon.Window()
self.window.connect("destroy", gtk.main_quit)
self.window.connect("key-press-event", self.on_key_press)
self.window.connect("window-state-event",
self.on_window_state_change)
self.add_window(self.window)
file_menu = gtk.Menu()
open_item = gtk.MenuItem("Open")
save_item = gtk.MenuItem("Save")
quit_item = gtk.MenuItem("Quit")
file_menu.append(open_item)
file_menu.append(save_item)
file_menu.append(quit_item)
open_item.connect_object("activate", self.menuitem_response,
"file.open")
save_item.connect_object("activate", self.menuitem_response,
"file.save")
quit_item.connect_object ("activate", self.menuitem_response,
"file.quit")
open_item.show()
save_item.show()
quit_item.show()
self.window.set_menu(file_menu)
self.Tbuffer= gtk.TextBuffer(table=None)
self.texto = gtk.TextView(buffer=self.Tbuffer)
self.texto.set_wrap_mode(gtk.WRAP_WORD)
self.AccentBuffer = ""
self.window.set_title("Editor!")
self.window.add(self.texto)
self.window.show_all()
self.window_on_fullscreen = False
self.file_name = False
def on_key_press(self, widget, event, *args):
self.texto.set_editable(True)
#whether or not accent
if self.AccentBuffer == "":
if event.keyval == gtk.keysyms.asciitilde:
self.AccentBuffer = "~"
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.apostrophe:
self.AccentBuffer = "'"
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.asciicircum:
self.AccentBuffer = "^"
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.grave:
self.AccentBuffer = "`"
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.quotedbl:
self.AccentBuffer = '"'
self.texto.set_editable(False)
#events for tilde
elif self.AccentBuffer == "~":
self.AccentBuffer = ""
if event.keyval == gtk.keysyms.a:
self.Tbuffer.insert_at_cursor(u'\xe3')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.A:
self.Tbuffer.insert_at_cursor(u'\xc3')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.o:
self.Tbuffer.insert_at_cursor(u'\xf5')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.O:
self.Tbuffer.insert_at_cursor(u'\xd5')
self.texto.set_editable(False)
else:
if event.keyval == gtk.keysyms.Shift_L or event.keyval
== gtk.keysyms.Shift_R:
self.texto.set_editable(False)
self.AccentBuffer = "~"
else:
self.Tbuffer.insert_at_cursor('~')
self.texto.set_editable(False)
#events for apostrophe
elif self.AccentBuffer == "'":
self.AccentBuffer = ""
if event.keyval == gtk.keysyms.c:
self.Tbuffer.insert_at_cursor(u'\xe7')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.C:
self.Tbuffer.insert_at_cursor(u'\xc7')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.a:
self.Tbuffer.insert_at_cursor(u'\xe1')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.A:
self.Tbuffer.insert_at_cursor(u'\xc1')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.e:
self.Tbuffer.insert_at_cursor(u'\xe9')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.E:
self.Tbuffer.insert_at_cursor(u'\xc9')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.i:
self.Tbuffer.insert_at_cursor(u'\xed')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.I:
self.Tbuffer.insert_at_cursor(u'\xcd')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.o:
self.Tbuffer.insert_at_cursor(u'\xf3')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.O:
self.Tbuffer.insert_at_cursor(u'\xd3')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.u:
self.Tbuffer.insert_at_cursor(u'\xfa')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.U:
self.Tbuffer.insert_at_cursor(u'\xda')
self.texto.set_editable(False)
else:
if event.keyval == gtk.keysyms.Shift_L or event.keyval
== gtk.keysyms.Shift_R:
self.texto.set_editable(False)
self.AccentBuffer = "'"
else:
self.Tbuffer.insert_at_cursor("'")
self.texto.set_editable(False)
#events for circum
elif self.AccentBuffer == "^":
self.AccentBuffer = ""
if event.keyval == gtk.keysyms.a:
self.Tbuffer.insert_at_cursor(u'\xe2')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.A:
self.Tbuffer.insert_at_cursor(u'\xc2')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.e:
self.Tbuffer.insert_at_cursor(u'\xea')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.E:
self.Tbuffer.insert_at_cursor(u'\xca')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.o:
self.Tbuffer.insert_at_cursor(u'\xf4')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.O:
self.Tbuffer.insert_at_cursor(u'\xd4')
self.texto.set_editable(False)
else:
if event.keyval == gtk.keysyms.Shift_L or event.keyval
== gtk.keysyms.Shift_R:
self.texto.set_editable(False)
self.AccentBuffer = "^"
else:
self.Tbuffer.insert_at_cursor("^")
self.texto.set_editable(False)
#events for grave
elif self.AccentBuffer == "`":
self.AccentBuffer = ""
if event.keyval == gtk.keysyms.a:
self.Tbuffer.insert_at_cursor(u'\xe0')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.A:
self.Tbuffer.insert_at_cursor(u'\xc0')
self.texto.set_editable(False)
else:
if event.keyval == gtk.keysyms.Shift_L or event.keyval
== gtk.keysyms.Shift_R:
self.texto.set_editable(False)
self.AccentBuffer = "`"
else:
self.Tbuffer.insert_at_cursor("`")
self.texto.set_editable(False)
#events for diaeresis
elif self.AccentBuffer == '"':
self.AccentBuffer = ""
if event.keyval == gtk.keysyms.u:
self.Tbuffer.insert_at_cursor(u'\xfc')
self.texto.set_editable(False)
elif event.keyval == gtk.keysyms.U:
self.Tbuffer.insert_at_cursor(u'\xdc')
self.texto.set_editable(False)
else:
if event.keyval == gtk.keysyms.Shift_L or event.keyval
== gtk.keysyms.Shift_R:
self.texto.set_editable(False)
self.AccentBuffer = '"'
else:
self.Tbuffer.insert_at_cursor('"')
self.texto.set_editable(False)
#maximize key
if event.keyval == gtk.keysyms.F6:
if self.window_in_fullscreen:
self.window.unfullscreen()
else:
self.window.fullscreen()
def on_window_state_change(self, widget, event, *args):
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
self.window_in_fullscreen = True
else:
self.window_in_fullscreen = False
def menuitem_response(self, string):
if string == "file.open":
self.filedialog = gtk.FileSelection("File selection")
self.filedialog.ok_button.connect("clicked",
self.file_ok_sel)
self.filedialog.cancel_button.connect("clicked",lambda w:
self.filedialog.destroy())
self.filedialog.show()
elif string == "file.quit":
gtk.main_quit()
elif string == "file.save":
if not self.file_name:
self.filedialog = gtk.FileSelection("Save as")
self.filedialog.ok_button.connect("clicked",
self.file_ok_save)
self.filedialog.cancel_button.connect("clicked",lambda
w: self.filedialog.destroy())
self.filedialog.set_filename("*.*")
self.filedialog.show()
else:
stream = file(self.file_name, 'a')
first = self.Tbuffer.get_start_iter()
last = self.Tbuffer.get_end_iter()
texto = self.Tbuffer.get_text(first, last, True)
stream.writelines(texto)
stream.close()
def file_ok_sel(self, widget):
stream = file(self.filedialog.get_filename(), 'rw')
self.file_name = self.filedialog.get_filename()
texto = stream.readlines()
self.Tbuffer.set_text("")
for x in texto:
self.Tbuffer.insert_at_cursor(x)
self.filedialog.destroy()
stream.close()
def file_ok_save(self, widget):
stream = file(self.filedialog.get_filename(), 'a')
self.file_name = self.filedialog.get_filename()
first = self.Tbuffer.get_start_iter()
last = self.Tbuffer.get_end_iter()
texto = self.Tbuffer.get_text(first, last, True)
stream.writelines(texto)
self.filedialog.destroy()
stream.close()
def run(self):
self.window.show_all()
gtk.main()
if __name__=="__main__":
app = MyEditor()
app.run()
--------------------------------------------
Desktop
[Desktop Entry]
Version=1.0.0
Encoding=UTF-8
Name=Editor
Exec=/usr/bin/editor
Type=Application
X-Osso-Type=application/x-executable
Essa mensagem é destinada exclusivamente ao seu destinatário e pode conter
informações confidenciais, protegidas por sigilo profissional ou cuja
divulgação seja proibida por lei. O uso não autorizado de tais informações é
proibido e está sujeito às penalidades cabíveis.
This message is intended exclusively for its addressee and may contain
information that is confidential and protected by a professional privilege or
whose disclosure is prohibited by law. Unauthorized use of such information is
prohibited and subject to applicable penalties.
_______________________________________________
maemo-users mailing list
[email protected]
https://maemo.org/mailman/listinfo/maemo-users