Page 1 of 2

Unicode Enter

Posted: 24 May 2017, 14:55
by bichlepa
Es gibt so viele schöne Unicode Zeichen, die man in eigene Texte stilvoll einsetzen kann❗
Leider ist es immer so kompliziert, die Passenden Zeichen auf die Schnelle zu finden ⌕. Daher habe ich ein Unicode Helper geschrieben.

Es reicht, ein Begriff aufzuschreiben, z.B. Herz. Dann drückt man die Pause-Taste und voila ♥! Da es mehrere Herz-Symbole gibt, kann man für das zweite einfach das zweite mal Pause drücken ❤!
Oder man möchte einen Pfeil nach Rechts eingeben. Also: rechts eintippen und Pause drücken. Schon erhält man ca. 30 verschiedene Pfeile zur Auswahl. Durch mehrfaches Drücken der Pause Taste, kann man einen der Pfeile aussuchen. ►⇢⇨˃ usw.
Ganz nützlich ist es für Mathegleichungen:
  • 5/6 → ⅚
  • /= → ≠
  • alpha → α
  • ^3 → ³
  • wurzel → √ oder ∛ oder ∜
Möglich ist auch, Abkürzungen zu verwenden: mfg → Mit freundlichen Grüßen
Und es ist möglich, beliebige Tasten oder Tastenkombinationen zu definieren. Z.B. kann nach dem Drücken einer Pfeiltaste und anschließendem Drücken der Pause Taste ein Pfeil eingegeben werden. ←↓↑→

Die Definitionen der Namen und dazu passender Symbole können übersichtlich in einer Textdatei aufgeschrieben werden. Ich habe mir die Mühe gemacht, vielen Unicode Zeichen passende deutsche Namen zu geben, sodass ihr gleich loslegen könnt.
Hier gehts zum ⇛ GitHub Projekt ⇚

Edit: Statt Raute wird jetzt standardmäßig die Pause-Taste verwendet. Ich habe den Text angepasst.

Re: Unicode Enter

Posted: 24 May 2017, 15:06
by BoBo
Dasamacool :clap: :thumbup: :clap:
Mille grazie 8-)

Re: Unicode Enter

Posted: 24 May 2017, 17:05
by divanebaba
Hi, das Skript ist ganz nett. Für Chatter sicherlich sogar unentbehrlich.

Bei mir werden ein Haufen Zeichen nicht angezeigt. Das ist aber nicht mein Anliegen.
Dein Skript hat mich inspiriert, endlich die von mir ständig benutzten Sonderzeichen, die in Kombination mit der Alt-Taste zu erzielen sind, auf Deine Art festzulegen.
Gemeint sind, z. B. ± (Alt + 0177 auf dem Zehnerblock) oder ø (Alt + 0248) oder Ø (Alt + 0216)
Vor Jahren stellte jemand ein Skript rein, mit dem man türkische Sonderzeichen kreieren konnte.
Der Aufbau war genial einfach. Unten im Code sieht man, daß nach dem Tippen eines s, gefolgt von zwei Rautesymbolen, das türkische ş mit unterem Querstrich ausgegeben wird. (Das Original war sogar mit nur einem einzigen Rautesymbol.)
Supernützlich, ohne wenn und aber.

Code: Select all

:?*c:s##::                                    ; s## types a ş
SendInput, ş
return

:?*c:g##::                                    ; g## types a ğ
SendInput, ğ
return
Mir persönlich ist Dein Skript zu allmächtig, weswegen ich interessierten Personen, die nur eine Handvoll Sonderzeichen nutzen, die von mir vorgeschlagene Methode ans Herz lege.

Auch wenn ich jahrelang ein ähnliches Verfahren nutzte, kam mir tatsächlich nie in den Sinn, dies für die von mir ständig vergessenen Sonderzeichen zu nutzen.
Stattdessen musste ich ständig in der Windows Zeichentabelle nachschauen.

Code: Select all

:?*c:dm##::                                    
SendInput, Ø
return

:?*c:dmk##::                                    
SendInput, ø
return

:?*c:pm##::                                    
SendInput, ±
return
Ich hatte ständig die Abkürzungen eines der Durchmessersymbole vergessen. Das sollte, mit der Ergänzung von gerade zitiertem Code, Vergangenheit sein.
Allein für den Gedankenanstoß bekommt Dein Skript 5 Sterne. :crazy: :crazy:

Re: Unicode Enter

Posted: 25 May 2017, 06:54
by bichlepa
divanebaba wrote:Bei mir werden ein Haufen Zeichen nicht angezeigt. Das ist aber nicht mein Anliegen.
Ist zwar nicht dein Anliegen. Aber es liegt einfacht daran, dass die Schriftart, die du verwendest, die Zeichen nicht unterstützt. Die Standardschriftart in Windows 7 kann viele Sonderzeichen nicht anzeigen.
divanebaba wrote:Mir persönlich ist Dein Skript zu allmächtig, weswegen ich interessierten Personen, die nur eine Handvoll Sonderzeichen nutzen, die von mir vorgeschlagene Methode ans Herz lege.
Da bin ich geneigt zu widersprechen. Niemand muss die von mir geschriebenen Definitionen verwenden. Man kann ganz einfach eine neue Datei erstellen, und eigene Namen und Sonderzeichen eintragen. Für dein Beispiel sähe die Datei so aus:

Code: Select all

dm = Ø
dmk = ø
pm = ±

Re: Unicode Enter

Posted: 25 May 2017, 07:47
by divanebaba
Ich habe Win7 und habe die Datei german.txt mit Notepad++ v7.4.1 64bit geöffnet. Standard-Schriftart unverändert Courier New.
Ich habe mal interessehalber die Anzeige von Notepad++ auf MS Arial Unicode gestellt. Ich sah keinen Unterschied. Es schien, als wenn die vorher fehlenden Zeichen noch immer fehlen. Liegt vermutlich, wie Du sagst, wirklich am Betriebssystem.

Die Umschaltfunktion durch mehrmaliges Drücken gefällt mir außerordentlich gut. Bei Gelegenheit werde ich es bestimmt in mein Standard-Skript einarbeiten.
Aber, wie erwähnt, ich bin nicht der "Heavy-User" von Sonderzeichen. Ab und zu ein Durchmesser- und das PlusMinus-Zeichen sind wirklich die einzigen Sonderzeichen, die ich nutze.
Es ist für mich sinvoller, einige Hotstrings in mein Standard-Skript einzuarbeiten, als ein zusätzliches Skript zu verwalten. Ich habe nachgezählt, ich habe immerhin 18 Hotstrings, aber alleine 10 sind durch Dein Skript inspiriert worden..

Ich denke, für Chatter, Blogger und alle, die viel Text verfassen, ist Dein Skript eine Goldgrube.

Es gibt da noch den Andreas Borutta, der eine sog. Globale Autokorrektur erstellt hat. Vielleicht kann man das mit Deiner Arbeit kombinieren?

Re: Unicode Enter

Posted: 26 May 2017, 02:44
by LuckyJoe
Tolles Tool! - Danke!

Mir ist noch aufgefallen, dass die Codierung der "unicode definitions"-Datei eine Rolle spielt. Ich habe diese (mit Notepad++) in unterschiedlichen Codierungen abgespeichert und schon von der Dateigröße unterschiedliche Ergebnisse erzielt (leere Datei öffnen, Codierung eingestellt, german.txt als RAW-Text angezeigt, alles kopiert und in die leere Datei eingefügt):

Ansi.txt:    34.095
UTF-8.txt:   34.095
UTF-8oB.txt: 38.849
UCS-2LE.txt: 65.832
UCS-2BE.txt: 65.832


Damit sind die Dateien, die generiert werden (unicode enter script.ahk), ebenso unterschiedlich groß:

unicode enter script (Ansi).ahk:    399.545
unicode enter script (UTF-8).ahk:   399.545
unicode enter script (UTF-8OB).ahk: 408.230
unicode enter script (UCS-2LE).ahk: 403.530
unicode enter script (UCS-2BE).ahk:   2.335


Beim Generieren der UCS-2BE-Datei erscheint bei mir die Fehlermeldung: "Warning, the equal sign was not found in this line: ��").
Ich gehe davon aus, dass man mit der Codierung "UTF-8 ohne BOM" die "meisten" Zeichen erstellt.

Viele Grüße
Lucky Joe

Re: Unicode Enter

Posted: 26 May 2017, 02:58
by bichlepa
Oh. Das habe ich vergessen zu erwähnen. Die Definitions müssen in der UTF-8 Codierung gespeichert werden.

Re: Unicode Enter

Posted: 26 May 2017, 03:05
by bichlepa
Ich wundere mich gerade, warum das BOM bei dir einen Unterschied macht. Es hat bei mir keine Auswirkung. Ich habe probiert, die Datei "german.txt" mit und ohne BOM zu speichern. Der Größenunterschied der Dateien war 3 Byte und die generierten Skripte waren identisch.

Re: Unicode Enter

Posted: 26 May 2017, 03:44
by LuckyJoe
... ist bei mir ein riesengroßer Unterschied: nur bei "UTF-8 ohne BOM" bekomme ich z.B. Pfeile angezeigt, bei "UTF-8" nur Fragezeichen.

Re: Unicode Enter

Posted: 24 Oct 2017, 19:31
by Gerdi
tolles Tool,

PS. mit

Code: Select all

jetzt = reverse time: " A_Now " [JJJJMMTThhmmss]
in der Definitionsdatei,
kann man sogar auf Variablen zugreifen.
Da liegt der Wunsch nahe, eigene Variablen auch mit

Code: Select all

EigeneVar := "Eigener Variableninhalt"
definieren zu koennen.

Re: Unicode Enter

Posted: 25 Oct 2017, 18:30
by Gerdi
in unicode enter generator.ahk hinter der Zeile

Code: Select all

addcode("#hotstring EndChars #")
die Zeile

Code: Select all

addcode("#include *i Include unicode enter script.ahk")
eingefuegt.
Erfüllt meinen Wunsch nach eigenen Variablen.

Beispiel Include-Inhalt:

Code: Select all

; Include unicode enter script.ahk gedacht fuer eigene Variablen
MeinName:="Max Musterman"
MeinStr:="Beispielstr. 69"
MeinOrt:="12345 MeineStadt"
MeinTel:="+49 123 456789"
MeinMobil:="+49 169 87654321"
MeineMail:="[email protected]"
MeinAdrh:=MeinName "`t" MeinStr "`t" MeinOrt
MeinInfoh:=MeinName "`t" MeinStr "`t" MeinOrt "`t" MeineMail "`t" MeinTel "`t" MeinMobil
MeinAdrv:=MeinName "`r" MeinStr "`r" MeinOrt
MeinInfov:=MeinName "`r" MeinStr "`r" MeinOrt "`r" MeineMail "`r" MeinTel "`r" MeinMobil
zugehöriger Unicode Definitionstext (ab Zeile 7):

Code: Select all

sg = Sehr geehrte Damen und Herren
jetzt = reverse time: " A_Now " [JJJJMMTThhmmss]
now = " A_Now "
[T] = [" A_YYYY A_MM A_DD A_Hour A_Min A_Sec "]
Heute = " A_DD "." A_MM "." A_YYYY "
Bden = Berlin den " A_DD "." A_MM "." A_YYYY "
MeinN = " MeinName "
MeinS = " MeinStr "
MeinO = " MeinOrt "
MeinT = " MeinTel "
MeinM = " MeinMobil "
Meine = " MeineMail "
abs, MeinAh = " MeinAdrh "
MeinIh = " MeinInfoh "
MeinAv = " MeinAdrv "
MeinIv = " MeinInfov "

Re: Unicode Enter

Posted: 26 Oct 2017, 13:35
by bichlepa
Es ist ein netter Hack, den du gefunden hast, um Variableninhalte hinzuzufügen.
Auch die Idee mit dem Include ist gut. Ich habe gerade in GitHub eine neue Version eingecheckt. Nun kann in die Definitionsdatei ein #include geschrieben werden, woraufhin der Rest der Datei in den generierten Skript inkludiert wird.

Weitere Neuerung ist, dass ein belibiger Hotkey (Standardmäßig "Pause") verwendet werden kann, statt der Raute Taste bisher. Aber ein Problem konnte ich nicht lösen. Nämlich bleibt jetzt der zuletzt eingegebene Hotstring immer aktiv. Auch wenn in der Zwischenzeit andere Zeichen eingegeben wurden oder geklickt wurde. Hilfe ist willkommen!

Re: Unicode Enter

Posted: 26 Oct 2017, 17:00
by Gerdi
Danke, klasse gemacht :bravo:
Aber ein Problem konnte ich nicht lösen. Nämlich bleibt jetzt der zuletzt eingegebene Hotstring immer aktiv. Auch wenn in der Zwischenzeit andere Zeichen eingegeben wurden oder geklickt wurde. Hilfe ist willkommen!
Dein Script habe ich nur an der Oberfläche durchleuchtet, auch weiß ich nicht, ob ich Dein Problem richtig verstanden habe, aber wenn ich in unicode enter script.ahk

Code: Select all

SoundBeep
if (A_TimeSincePriorHotkey>2000)
 	goto turnOffHotkeyShowNextChar
vor das Return von
turnOffHotkeyShowNextChar2:
einfüge, wird das Piepen deutlich seltener, wie wenn nur SoundBeep eingesetzt wird.

Re: Unicode Enter

Posted: 21 Feb 2018, 11:04
by pramach
Hi
Bin gerade erst auf dein Skript gestossen. Cool. Danke.
Was mir aufgefallen ist ...
- Zeile 14: "filefound := true" brauchst du für was ?
- In deiner Datei "german.txt" starten einige Bezeichner mit einem Grossbuchstaben (z.B. Taschenrechner) und andere nicht (z.B. weihnachtsbaum). Hat das einen speziellen Grund ?
- Deine generierte Datei hat immer den Namen "unicode enter script.ahk". Braucht man machmal aber Deutsch und manchmal Englisch, muss man das ganze Verzeichnis duplizieren. Besser wäre die Sprache im Namen, dann könnte man im gleichen Verzeichnis sowohl das deutsche als auch englische Skript generieren. Wobei mir eigentlich ein Skript mit beiden Bezeichnungen am liebsten wäre ;-)
- Das generierte Skript könnte man in der Länge und Grösse einfach reduzieren: Aus

Code: Select all

if (not instr(a_thishotkey,":?:"))
{
	settimer,prepareNewChar,-1
}
else
{
	settimer,showNewChar,-1
}
wird einfach

Code: Select all

if (not instr(a_thishotkey,":?:"))
	settimer,prepareNewChar,-1
else
	settimer,showNewChar,-1
Spart rund 6'000 Zeilen ... und damit etwa 17 KB.
- Spielt man mit der Datei und dem Generator wäre eine Zeile "#SingleInstance, force" in der generierten Datei sinnvoll ;-)

Re: Unicode Enter

Posted: 31 Mar 2018, 15:37
by burque505
Hallo bichlepa, das Skript is wirklich toll (und dazu auch extrem nützlich :D ).
Für den QuickStart habe ich "german.txt" in "english.txt" umbenannt.
Ein animiertes GIF von meinen Resultaten (AHK_L 1.1.28.00 64-bit, Win7 SP1):
Unicode_1.gif
Unicode_1.gif (37.8 KiB) Viewed 10604 times
Habe also

Code: Select all

lastsentlength:=strlen(substr(a_thishotkey,2))
anstatt

Code: Select all

lastsentlength:=strlen(substr(a_thishotkey,3))
(Zeile 20, glaube ich)
eingefügt, und jetzt geht es ziemlich besser :D
Unicode_2.gif
Unicode_2.gif (38.19 KiB) Viewed 10604 times
Grüße,
burque505

Re: Unicode Enter

Posted: 01 Apr 2018, 07:54
by bichlepa
Hallo burque505,
danke für den Feedback!
Ich kann den Fehler nicht reproduzieren. So ein Problem habe ich schon mal behoben. Hast du die aktuellen Quellen aus GitHub? Wenn ja, kannst du mir bitte deine Skripte schicken?

Re: Unicode Enter

Posted: 01 Apr 2018, 16:54
by burque505
Gerne, habe dir einen PM geschickt, Skripte liegen bei.

Re: Unicode Enter

Posted: 02 Apr 2018, 02:58
by bichlepa
Mir ist aufgefallen, dass du in der Animation zuerst die Raute-Taste drückst, bevor du die Pause Taste drückst. Die Raute muss nicht eingegeben werden. Wenn du vorher die Raute drückst, dann muss natürlich ein Zeichen mehr entfernt werden.
Das hat mich (wieder) auf einen Bug aufmerksam gemacht: Es wird immer die Ersetzung für den zuletzt erkannten Hotstring einfügt, auch wenn man zwischendurch andere Tasten gedrückt hat. Das konnte ich noch nicht lösen.

Re: Unicode Enter

Posted: 02 Apr 2018, 06:46
by just me
Moin bichlepa,

weil das Thema wieder hochgekommen ist, habe ich mich auch noch einmal internsiver mit den Skripten beschäftigt.

Ich habe mich dann daran erinnert, dass ich auch schon mal einen Skriptgenerator geschrieben habe, der erst ähnlich wie Dein AddCode() das Skript zeilenweise aufgebaut hat. Weil das auch noch 'schön' aussehen sollte, habe ich mich immer wieder damit herumgeärgert, wenn sich nachträgliche Änderungen auf mehrere Zeilen auswirkten. Ich habe dann für die überwiegend 'festen' Teile 'Templatedateien' erstellt, die im Stück eingelesen und dann soweit nötig über 'Platzhalter' modifiziert werden. Das hat das Editieren dieser Skriptteile für mich deutlich vereinfacht.

Nachdem ich mir sowohl unicode enter generator.ahk als auch das 'Ergebnis' unicode enter script.ahk angeschaut habe, bin ich der Meinung, dass Du für den 'festen' ein Template nutzen kannst. Als Platzhalter habe ich Zeichenketten im Format ???...??? verwendet.

Template.ahk:

Code: Select all

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#persistent
#hotstring ?*B0

???FileInclude???

showNewChar:
gosub prepareNewChar
return

???TriggerHotkey???::
gosub showNextChar
return

prepareNewChar:
lastsentchar:=""
lastsentindex:=0
if instr(a_thishotkey, "::")
{
	lastsentlength:=strlen(substr(a_thishotkey,3))
}
else
{
	lastsentlength:=0
}
return

showNextChar:
settimer, turnOffTooltip, off
settimer, turnOffHotkeyShowNextChar, off
lastsentindex++
if (lastsentindex > currentChars.maxindex())
	lastsentindex = 1
currentcharsstring = 
currentcharsstring1 = 
currentcharsstring2 = 
for oneindex, onechar in currentChars
{
	if (oneindex < lastsentindex)
	{
		currentcharsstring1.= onechar 
		if (CurrentExplanations[oneindex])
		{
			currentcharsstring1.= "(" CurrentExplanations[oneindex] ")"
		}
		currentcharsstring1.= "`n"
	}
	else
	{
		currentcharsstring2.= onechar 
		if (CurrentExplanations[oneindex])
		{
			currentcharsstring2.= "(" CurrentExplanations[oneindex] ")"
		}
		currentcharsstring2.= "`n"
	}
}
currentcharsstring := currentcharsstring2 currentcharsstring1
if (A_CaretX && A_CaretY)
{
	tooltip,% currentcharsstring, % A_CaretX, % A_CaretY +20
}
else
{
	tooltip,% currentcharsstring
}
send,{bs %lastsentlength%}
sendraw,% currentChars[lastsentindex]
lastsentchar:=currentChars[lastsentindex]
lastsentlength:=new_strlen(currentChars[lastsentindex])
loop
{
	if (GetKeyState("???TriggerHotkey???") == False)
		break
	sleep 10
}
settimer, turnOffTooltip, -1000
settimer, turnOffHotkeyShowNextChar, -5000
settimer, turnOffHotkeyShowNextChar2, 1
return

turnOffHotkeyShowNextChar:
hotkey,???TriggerHotkey???,showNextChar, off
settimer, turnOffHotkeyShowNextChar, off
settimer, turnOffHotkeyShowNextChar2, off
return

turnOffHotkeyShowNextChar2:
Input, SingleKey, L1 T0.2 V, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}
if (SingleKey && SingleKey != "???TriggerHotkey???")
goto turnOffHotkeyShowNextChar
return

turnOffTooltip:
tooltip
return

showSymbols:
hotkey,???TriggerHotkey???,showNextChar, on
settimer,turnOffHotkeyShowNextChar, -5000
if (not instr(a_thishotkey,":?:"))
{
	settimer,prepareNewChar,-1
}
else
{
	settimer,showNewChar,-1
}
return

new_strlen(newstrlen_string)
{
	newstrlen_length:=0
	loop,parse,newstrlen_string
	{
		newstrlen_length++
		Transform,newstrlen_charnumber,asc,%A_LoopField%
		if (newstrlen_charnumber >= 0xDC00 && newstrlen_charnumber <= 0xDFFF)
			newstrlen_length--
	}
	return newstrlen_length
}
Ich habe hier noch ein Label showSymbols: eingefügt, das die (für mich) festen Teile aus den Hotkey/string Routinen enthält. Der Code für die Generierung der Hotkeys/strings sähe dann so aus:

Code: Select all

for oneindex, oneentry in allEntriesInverted
{
	;~ MsgBox % oneentry.keytype " -" oneentry.keyname " - " oneentry.chars[1] "," oneentry.chars[2] "," oneentry.chars[3]
	;Add hotkey or hotstring
	If (oneentry.keytype = "hotkey")
	{
		addcode("~" oneentry.keyname "::")
	}
	else
		addcode("::" oneentry.keyname "::")

	;Write variables which will contain the strings and their comments
	codeline:="CurrentChars:= ["
	codelineexpl:="CurrentExplanations:= ["
	for onecharindex, onechar in oneentry.chars
	{
		if a_index > 1
		{
			codeline.=", "
			codelineexpl.=", "
		}
		codeline.="""" onechar """"
		codelineexpl.="""" oneentry.explanations[onecharindex] """"
	}

	codeline.="]"
	codelineexpl.="]"
	addcode(codeline)
	addcode(codelineexpl)
	addcode("gosub, showsymbols")
	addcode("return")

; 	;Enable hotkey
; 	addcode("hotkey," triggerhotkey ",showNextChar, on")
; 	;~ addcode("fileappend,%a_tickcount% %a_thishotkey%, log.txt") ;only for debugging
; 	addcode("settimer,turnOffHotkeyShowNextChar, -5000") ;disable the hotkey after some seconds
;
; 	addcode("if (not instr(a_thishotkey,"":?:""))")
; 	addcode("{")
; 	 ;If this is a hotkey, only prepare the new char without showing it. It will only be shown when user presses the hotkey
; 	addcode("	settimer,prepareNewChar,-1")
; 	addcode("}")
; 	addcode("else")
; 	addcode("{")
; 	;If this is a hotstring, the user already pressed the hotkey. So show the first char
; 	addcode("	settimer,showNewChar,-1")
; 	addcode("}")
; 	addcode("return")

	progresspercentage:=6+(94/countallEntriesInverted*A_Index)
}
Den Code für die Generierung des festen Teils stelle ich mir so vor:

Code: Select all

FileRead, scriptcode, *t Template.ahk
If (ErrorLevel)
{
   MsgBox, 16, Unicode enter generator, Couldn't find or read the file Template.ahk.`nThe program will exit.
   ExitApp
}
scriptcode := StrReplace(scriptcode, "???FileInclude???", fileinclude)
scriptcode := StrReplace(scriptcode, "???TriggerHotkey???", triggerhotkey)
scriptcode .= "`n"
Vielleicht gefällt Dir die Idee? (Ich habe das allerdings nicht wirklich getestet!)

Ostergrüße!
just me

Edit: Template.ahk gefixt: Break statt ???TriggerHotkey???

Re: Unicode Enter

Posted: 03 Apr 2018, 05:54
by Frosti
Danke Bichlepa,
ich war gerade dabei ähnliches zu machen. Deines ist genau das was ich wollte. Die Sonderzeichen sind nicht nur für Chatuser gut, sondern auch um besonderen Text hervorzuheben. Zum Beispiel in GUI‘s oder Markdown Dateien wie der Github Readme.md.
Mein Hinweis für alle die immer nur eine Anwendungsmöglichkeit sehen.